A mobile-first web app for logging, tracking, and analyzing dice rolls across tabletop RPG sessions.
Tabula Rollsa is a mobile-first web app for logging, tracking, and analyzing dice rolls across tabletop RPG sessions.
Since 2025, I have been playing D&D fairly regularly. I got curious whether my dice were actually cursed or if it just felt that way. I wanted something I could pull out at the table, and quickly log a roll. Nothing existing quite fit the mobile-first, low-friction bar I wanted, so I built it. The recent rolls card on this portfolio’s hero also pulls from Tabula Rollsa’s public API.
Built with SvelteKit and Svelte 5 runes, which replaced the options API reactivity model with a signals-based approach. Runes make derived state and reactive declarations feel more explicit and co-located with the components that use them.
The data layer uses Drizzle ORM against Neon serverless Postgres. The schema is organized around a roll → session hierarchy: each roll belongs to a session, and carries a die type, result, optional modifier, and a free-text note field. Queries for the statistics dashboard — total rolls, averages, natural 20s and 1s, per-die breakdowns — all run at the database layer rather than computing in the client.
Two UX features worth calling out: the handedness toggle switches the entire layout for left- or right-handed play, making the primary roll action reachable with a thumb regardless of which hand is holding the phone. Single vs Multi Roll enables single dice at a time or to have multiple queued up for entry. I found these are best used in role playing vs battle mode.
The project follows Domain-Driven Design and Feature-Sliced Design for the same reasons this portfolio does — keeping data logic out of components and keeping components small.
Deployed to Vercel with automatic builds on push. The database is Neon serverless Postgres — connection pooling is handled by Neon’s built-in proxy, so there’s no PgBouncer config to maintain. Scales to zero between sessions, which fits a hobby app with irregular traffic.






