Projects

Things I've built, from production apps to backend experiments.

Orin

Live

An AI coding workspace that generates, runs, and previews a whole app inside the browser tab.

Validated four-action AI protocol — write, mkdir, delete, shell — with path checks that reject traversal before anything touches the filesystem.

One adapter across three model providers: Gemini, OpenRouter, and local OpenAI-compatible servers.

WebRTC peer sessions with chat, audio/video, and 256 KB chunked file transfer behind a windowed ACK.

TypeScriptNext.jsExpressWebContainerWebRTCPrismaPostgreSQLBun

Zenith

In development

A distraction-free productivity tool for people who want to stay in flow.

Focus-first interface that keeps the current task front and center.

REST API built with Node.js and TypeScript, with Redis-backed caching.

Deployed in production on DigitalOcean with Bun in the toolchain.

TypeScriptNext.jsNode.jsMongoDBRedisBunDigitalOcean

Welth

Live

A personal finance app for tracking expenses, setting budgets, and hitting savings goals.

Budget and goal tracking built around real spending behaviour.

Type-safe data layer with Prisma and a React/Next.js interface.

Shipped end to end: schema, API, UI, and deployment.

JavaScriptNext.jsReactPrismaTailwindCSSVercel

Vexio

Live

A real-time collaborative whiteboard — draw together, see each other's cursors, and pick up after a dropped connection.

Ten drawing element types with live cursors, selections, undo/redo, and admin/editor/viewer roles enforced on the server.

Drag updates throttled to ~30/sec and snapshots debounced to 1.5s, collapsing hundreds of writes per drag into one.

Survives dropped connections with exponential backoff and a 500-operation offline queue that replays on reconnect.

TypeScriptNext.jsReactWebSocketPrismaPostgreSQLBun

Paywall

Ready

A wallet and merchant checkout platform, built to get the money-handling parts right.

Every balance change runs inside a PostgreSQL transaction with SELECT ... FOR UPDATE row locks, so concurrent debits cannot race.

Amounts stored as integer paise rather than floats, so rounding drift never accumulates.

Nine-model schema covering wallets, transfers, payment links, merchant customers, payments, and settlements.

TypeScriptNext.jsNextAuthPrismaPostgreSQLExpressDocker

Meetup

Live

A real-time video calling app with meeting recording, built for small teams.

Real-time video rooms with a low-friction joining flow.

Meeting recording captured server-side and replayable later.

React + TypeScript front end deployed on Vercel.

TypeScriptReactNext.jsMongoDBTailwindCSSVercel

Brainly

Ready

A second-brain app for capturing links, notes, and ideas and finding them again later.

Quick-capture flow designed for zero-friction saving.

Client and API share one TypeScript codebase.

MongoDB-backed storage with Vercel deployments.

TypeScriptReactNode.jsMongoDBTailwindCSS

A backend-first video sharing platform with the core YouTube mechanics.

Complete domain model: channels, videos, playlists, comments, likes.

MongoDB aggregation pipelines for feeds and watch history.

JWT-based authentication and authorization throughout.

JavaScriptNode.jsExpressMongoDBJWT

A microservices-based subscription and billing system, built service by service.

Service-oriented architecture with independently deployable units.

Recurring billing, plans, and renewal scheduling modeled explicitly.

Documented in the microservices article series on this site.

JavaScriptNode.jsMicroservicesMongoDB