Projects
Things I've built, am building, or shipped into the world.
A lightweight PDF reader for Android, built as an installable PWA. Open a PDF straight from WhatsApp via Share → Lembar, read it offline, and pick up where you left off. Continuous scroll, pinch-to-zoom, full-text search with highlights, bookmarks, the PDF's own table of contents, night mode, and password-protected files. Everything runs on the device — files are never uploaded. Vanilla JS with vendored pdf.js, IndexedDB for history, a service worker as the Web Share Target, deployed on Cloudflare Workers.
An offline Quran memorization app for keeping the ayat I've memorized fresh. Save the passages your teacher gives you (say, An-Naml 89–93), then read them or listen to them like a playlist with your headset whenever they start to fade. Repeat each ayah up to 10×, pause after each ayah to recite it back, and play only the passages you haven't reviewed in a while. A “Test me” mode blurs the ayat until you tap to peek. Uthmani text with translations and transliteration, 12 reciters (Yasser Al-Dossari by default), lock-screen and headset controls, English and Bahasa Indonesia UI. Everything is stored on the device; audio is cached per ayah through a small Cloudflare Worker proxy.
A personal plant care catalog styled like herbarium specimen sheets. A single-page static site renders my balcony plant collection — photo, Latin/common/local name, light & water care, and notes, written in Indonesian — from a data array into quiet, editorial specimen cards with seal-style numbering. Fraunces serif, Work Sans, and IBM Plex Mono, generous whitespace, no build step.
Japanese vocabulary learning platform with JLPT N5-N1 progression, home screen widgets for passive learning, and deep pedagogical content for grammar patterns. Go backend with dual PostgreSQL/SQLite support, Swift iOS app with widget extension. Built to solve my own N3 grammar struggles.
A custom virtual pet device built from scratch. An ESP32-S3 microcontroller drives a 1.9" IPS display showing pixel art I draw myself. Three buttons handle all interaction. The game loop tracks hunger, happiness, and cleanliness — neglect the pet long enough and it doesn't end well. This is my first embedded project and first time soldering.
Real-time global weather platform with interactive maps and 3D terrain. A Go REST API collects weather data from OpenWeatherMap via cron, stored in PostgreSQL. The frontend uses React with D3.js for 2D maps and Three.js for a 3D globe — hover over a region to see temperature, humidity, and wind data update in real time.
Interactive mapping app for Indonesia and Japan built with vanilla JavaScript and D3.js. Click any region to see climate info, local products, mountains, and national parks. Renders GeoJSON with custom projections and smooth hover interactions.
RESTful backend service for weather data with clean Handler-Service-Repository layering. PostgreSQL with Squirrel query builder and golang-migrate for schema versioning. OpenWeatherMap integration with configurable cron-based collection. Built as part of the Gooking monorepo while learning Go.
Personal financial intelligence system for Indonesian stock investing. Automated pipeline scrapes news from Google News, Reuters, and IDX sites every hour, filters by relevance and portfolio positions, then publishes digestible summaries. AI-powered summarization with stock ticker extraction and impact ratings. Deployed on Cloudflare Workers at the edge.