← All work
StudyLive

DivvyUp

Real-time shared-expense splitting, typed end to end.

Sector
Personal finance
Role
Full-stack developer — sole build & maintenance
Year
2025
DivvyUp group balances and expense list

DivvyUp is the study where the infrastructure got as much attention as the product. The domain is small and unforgiving — split a bill four ways and the cents have to land exactly — so all monetary math runs through decimal.js, and the serialized shape the API returns is a shared, typed package that both the React client and the Express server compile against.

Live, typed, self-deploying

Every expense mutation replays the group’s whole ledger server-side, so balances and the debts derived from them are never stale, and Socket.io pushes a notification to every member the moment one lands — into a room taken from the session validated at the handshake, never from anything the client claims. Sessions are cookie-based through Better Auth, and the whole thing is a Turborepo monorepo of three workspaces (frontend, backend, and the shared contract). It deploys itself: a push to main builds the backend Docker image, pushes it to GitHub’s container registry, kicks a Coolify redeploy on a VPS and polls the deployment to a terminal state, so CI goes red the moment an image would have shipped broken.

Origins

It began as a collaboration — an early contributor built the first auth layer — but it’s since been rebuilt and is maintained solo, auth included.