Notes on Flutter, mobile engineering, and building things that ship.
Rushabh's lab instruments speak in fixed-width serial strings, and every new panel meant another hardcoded Android screen. So I built a language instead: a lexer, a typed statement tree, an expression evaluator, and buttons you place on a photograph of the machine.
Aug 2026 · 7 min read
Flutter is how I ship. The interesting part isn’t widgets — it’s the product bets that keep repeating: on-device compute, honest fallbacks, and thin clients for heavy backends.
Aug 2026 · 4 min read
I shipped Bloom — one app for cycle, conceive, pregnancy, and postpartum. The hard part was insights that feel personal without pretending to be a clinician.
Aug 2026 · 3 min read
I shipped Mama Haven — track the daily chaos of early parenthood, keep sleep audio on the phone, and chat with NURA without putting API keys in the app. The hard part was logs that stay readable after you change language.
I shipped Aura Pilates — calm-strength mat training with journeys and a real in-session player. The hard part was product completeness: states, progress that actually resets, and art that can be replaced without rewriting the app.
I shipped KegalFlow — guided pelvic-floor training that stays private. The hard part wasn’t the timer. It was adaptive pacing that can explain every change, and never pretends to be medicine.
I shipped Website Builder as a phone client for Buildly. After App Builder’s APK pipeline, this is the web twin: customize, generate, deploy, and edit real HTML structure on the go.
Aug 2026 · 2 min read
I shipped VocoLiss — turn documents into speech and study aids. The hard part was race-safe TTS highlighting and AI that falls back offline without lying when the server actually errored.
I shipped App Builder — customize a template on your phone and get a signed APK from a remote worker. The hard part was making the client thin, the forms dynamic, and demo mode honest when the server isn’t there.
I shipped FloorMind — describe a home, get a floor plan you can still edit. The hard part wasn’t the LLM. It was making “AI” return rooms and openings, with a full offline path when there’s no API key.
Wallpaper apps look simple. Pixedge’s real work is an image pipeline that prioritizes what you see and never double-fetches the same URL.
I shipped SellSnap for small online sellers. The bet wasn’t cloud AI. It was a complete campaign flow that still works in demo mode on your phone.
I shipped a QR app that goes past the viewfinder — batch tools, exports, and a lock screen for history people underestimate as sensitive.
I shipped ScanCam — scan, OCR, PDF, sign, share on-device. The hard part wasn’t recognition. It was refusing to oversell handwriting, and designing privacy as the default path.
I rebuilt my portfolio as an ingestion system: paste a store URL, normalize it once, override what matters, and keep public pages offline from third-party APIs.
I shipped Cadora — solid modelling on a phone. The hard part wasn’t drawing triangles. It was keeping logical faces alive so Push/Pull still makes sense after a boolean.
I shipped Songora — describe an idea, get a song. The interesting part wasn’t the prompt. It was rendering melody, vocals, and a wavetable mix on-device, and refusing to fake a vocal track when the phone couldn’t sing.
I shipped iRun AI - a running coach that explains itself. The hard part wasn’t tracking runs. It was designing AI that can propose a plan change, but never invent a workout.
Last week I shipped VidWeave - a mobile video studio. The hardest (and most interesting) part wasn’t the editor UI. It was rendering on-device at multiple resolutions without breaking the user’s edits.
Four of my pull requests shipped in Flutter 3.47.0. None of them add a feature — they remove imports from test files. Here's why that work matters, and what the review process taught me about contributing to a framework millions of developers depend on.