+
bharcode — terminal
$

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.

2 case studies
Case Study #01 Live

Knot

Group expense splitting for trips and households — no spreadsheets, no drama.

Next.js 15TypeScriptSupabaseVercelTailwind

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.

Auth

Switched from magic links to email+password after hitting Supabase's 2 emails/hour free-tier cap. Less friction, zero rate limits, same security.

NLP expenses

Integrated Google Gemini API to parse natural language expense descriptions. Type "pizza £12 split 3 ways" instead of filling a form.

Deployment

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.

Knot. Live
Your position
+$42.50
across 2 groups
🧹 Vacuum Your turn
🛒 Groceries Done ✓
🍕 Split dinner $24.00
Upcoming trip
🏖 Bali · 4 people
Budget: $800 · Raised: $320
🤖 @NawtBot
Add expense for last night?
pizza 48 split 4
✓ Added $12 each
2
Core modules
3
Auth methods
AI
Expense parsing
$0
Infra cost
Case Study #02 — In Progress Building

Sliqe

A two-sided marketplace to eliminate urban food waste through dynamic pricing.

Product StrategyUI/UXTwo-Sided MarketplaceDynamic PricingFigma

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.

Case study coming soon
Sliqe concept
Chicken Rice
Closing in 45 min
$5.50
$2.20
Prawn Noodles
Closing in 20 min
$7.00
$1.40
↓ Price drops every 10 min
🔧

Next project is taking shape.

Follow the newsletter for early access and build-along posts.

Subscribe to the build log →

Admin Access

Enter your GitHub Personal Access Token to verify repository permissions.

⚠️ Security reminder: Scope your PAT to this repo only with contents: read/write.

⚙️ Site Admin

Changes save directly to your GitHub repository via the API.
Site Name
Footer Tagline
Footer Copyright Year

Home — Featured Card 1 Title
Home — Featured Card 1 Description
Home — Featured Card 1 Link Text
Home — Featured Card 1 Emoji

Home — Featured Card 2 Title
Home — Featured Card 2 Description
Home — Featured Card 2 Link Text

Stats — Stat 1
Stats — Stat 2
Stats — Stat 3
Featured App for Homepage
Eyebrow text
Headline
Headline — Italic part
Sub-headline
Primary CTA Button
Secondary CTA Button
Blog posts with no body content are hidden from public view.
Featured Bot — Title
Featured Bot — Description
Featured Bot — Link
Featured Bot — Tags (comma-separated)
Featured Bot — Status

Project Cards
Headline (use \n for line break)
Paragraph 1
Paragraph 2
Paragraph 3
Paragraph 4
Stack Tags (comma-separated)
CTA 1 Text
CTA 2 Text

Cost Items

Roadmap