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

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.
