Products I've built.
Not just what I built — how and why. Each case study covers the real decisions, the architecture, and what I'd do differently.
Knot
Group expense splitting for trips and households — no spreadsheets, no drama.
Every friend group manages shared expenses badly. WhatsApp threads of "you owe me", screenshots of receipts, spreadsheets nobody maintains. Existing apps (Splitwise, etc.) are either too heavy, paywalled, or don't handle recurring household chores alongside trip expenses.
I designed Knot around two contexts: trips (one-time group expenses) and households (recurring chores + shared bills). A single account handles both, with swipeable dashboard tabs to switch. Auth uses Supabase — email/password plus Google OAuth, no magic-link rate limits.
The Telegram bot companion (@NawtBot) was added to solve the "I'm already in WhatsApp" problem — users add expenses without ever opening a browser.
Switched from magic links to email+password after hitting Supabase's 2 emails/hour free-tier cap. Less friction, zero rate limits, same security.
Integrated Google Gemini API to parse natural language expense descriptions. Type "pizza £12 split 3 ways" instead of filling a form.
Vercel for zero-config deploys. Custom domain (knot.bharcode.com) via Cloudflare DNS with a single A-record. Total infra cost: free tier.
OAuth redirect flows are non-trivial — a PKCE code exchange needs a dedicated callback route, not just a redirect to the home page. Also: the bot and the web app share the same Supabase database, which means I effectively built two clients on one backend. Next time I'd formalize the shared schema earlier.
Sliqe
A two-sided marketplace to eliminate urban food waste through dynamic pricing.
F&B vendors in Singapore waste thousands of dollars of unsold inventory every closing time. Existing food-rescue apps have poor vendor adoption due to high friction — uploading items takes too long, and the consumer UI doesn't drive urgency.
Sliqe solves vendor friction with a streamlined 30-second inventory portal. On the consumer side, a time-decay algorithm systematically drops prices as closing time approaches, driving impulse conversions via location-based push notifications.
Product strategy defined, UI mockups in Figma. Engineering begins after Knot stabilises. Building the vendor onboarding flow first — if vendors won't use it, the consumer side doesn't matter.
Next project is taking shape.
Follow the newsletter for early access and build-along posts.
Subscribe to the build log →