Personal Finance Manager
A private, invite-only app for tracking spending. It parses HDFC and ICICI bank statements in the browser, so the file is never uploaded, sorts each transaction into a category automatically, and tracks budgets, informal loans and EMIs.
Google OAuth with PKCE, per-user isolation enforced by composite foreign keys, and an append-only audit log guarded by database triggers. Money is stored as whole paise. The security tests run against the real Worker and D1, and a new API route fails the build until it is added to the suite. It runs on Cloudflare’s free tier.
Live site↗ for Personal Finance Manager (opens in a new tab)Code↗ for Personal Finance Manager (opens in a new tab)
CoWork
An installable, mobile-first planner for couples. Each partner manages their own todos, projects and habits and can see the other’s day. Shared projects, joint habits that count only when both partners do them, nudges and comment threads sit on top.
One Cloudflare Worker serves the site, the Hono API and the scheduled reminder jobs, and migrations run before each deploy so a failed one leaves the last version live. Web Push (VAPID signing and payload encryption) is written directly on Web Crypto, with no push library. Natural-language quick add turns “gym mon wed fri 7am #health” into a scheduled todo. 182 Vitest tests.
Live site↗ for CoWork (opens in a new tab)Code↗ for CoWork (opens in a new tab)
Resellable
An invite-only marketplace for selling your things to people you know. Sellers list items from their phone in seconds, buyers fill a cart, and both sides negotiate one price for the whole cart with offers and counter-offers.
The server enforces the deal state machine, and only the person who didn’t make the latest offer can accept it. Agreeing reserves stock in one atomic D1 batch backed by a CHECK constraint, so two buyers racing for the last units can’t oversell it. Photos are converted to WebP in the browser and served from a private R2 bucket. 87 unit tests, including the stock race against a real SQLite database.
Live site↗ for Resellable (opens in a new tab)Code↗ for Resellable (opens in a new tab)
Spotter
An invite-only, mobile-first gym app for two partners who coach each other. Each writes the other’s workout and diet plan, and both log their days, share progress photos, chat and keep a shared streak. It installs to the home screen and runs on Cloudflare’s free tier.
Hand-written Google OAuth with PKCE, no auth library. One-to-one pairing is enforced by UNIQUE constraints and a SQL trigger, and invites are claimed atomically. Photos are stripped of location data before upload and served from a private bucket. 142 tests run in the real Workers runtime, including one that scans every table to confirm a deleted account leaves nothing behind.
Live site↗ for Spotter (opens in a new tab)Code↗ for Spotter (opens in a new tab)
EMICalc
An offline EMI calculator for Indian loans and credit-card EMIs that shows the real cost: 18% GST on interest, processing fees and first-statement interest, combined into one effective annual rate (IRR).
The calculation code is a pure TypeScript module with Vitest tests, and the IRR is found by bisection so it always returns an answer. It includes a prepayment planner, a hand-written SVG chart, share links and CSV, PNG and PDF exports. No backend and no UI framework.
Live site↗ for EMICalc (opens in a new tab)Code↗ for EMICalc (opens in a new tab)
GiftLink
Send someone a virtual bouquet and ice cream as a link. The whole gift is encoded in the URL fragment, so there is no server, no database and no accounts, and gift contents never reach server logs.
Default fields are left out, so a basic gift fits in 44 characters. Custom theme colours keep their hue but are adjusted to meet contrast minimums. Older link formats still decode after format changes, and links fall back through three keyless shorteners.
Live site↗ for GiftLink (opens in a new tab)Code↗ for GiftLink (opens in a new tab)
Home Lab
A self-hosted Proxmox server running LXC containers and VMs: NAS, media server, Home Assistant, Docker services and a CUPS print server.
Set up GPU passthrough to a VM and recovered the data from a failing disk.