Mirabilis Beyond character sheet showing health, resolve, and ability scores

Why it exists

Campaign character state outgrows spreadsheets and paper mid-session. I built an app so the table can edit sheets, browse a shared vault, and keep art and descriptions in one place — with separate environments so local work can't overwrite production.

How it's built

Next.js API routes store characters and vault items in MongoDB Atlas, with a database per environment. Images live in Vercel Blob under prod/dev/demo prefixes. OpenAI handles optional image and description generation; the public demo disables that so visitors can explore without using API budget.

What's interesting

Full product surface: domain model, light access control, cloud data design, blob storage, feature flags for paid AI, and a UI that has to work during a real session.

Highlights

  • Character CRUD with abilities, drives, gear, coins, health, and resolve
  • Stackable inventory with drag-and-drop vault management
  • Environment-separated MongoDB (dev / preview / prod) plus Blob prefixes
  • Demo mode disables paid AI; live table uses a server-side password gate

Stack

  • Next.js
  • TypeScript
  • React
  • MongoDB Atlas
  • Vercel Blob
  • OpenAI image gen
  • MUI