Live websiteWebsites & storefronts
Luna Mysteries
Murder-mystery party kits, with a library that casts your guests and prints their names.

Library screens were captured with a throwaway demo account. Customer data is never shown, and the casting animation uses invented guests.
Why it matters
Luna Mysteries sells murder-mystery dinner party kits and gives every buyer a permanent library to read, personalize and download them. The hard part of hosting is casting, so the library does it: guests claim characters from a shared link, and the documents follow the choices the host makes.
- 01
Guests choose their characters
The host shares a private link. Guests tap a character and type their name, with no account. The host can assign, rename or release anyone.
- 02
No role taken twice
Claims are race-safe. In testing, twelve guests grabbed the same character at once and exactly one got it.
- 03
Written for this party
The host picks a female or male version of each character, and their documents are rendered with those names and pronouns.
- 04
A cast list with real names
“Print with names” produces the character list with each guest's name on their character, plus a guest list page.
- 05
Invitations in minutes
Fill in the date, place and RSVP details and download a printable invitation PDF.
The details
Open any part for the full story.
Features9
- A recommendation quiz that suggests a kit for the group and the occasion.
- Checkout with idempotent fulfilment: a payment grants the kit exactly once.
- A library where buyers read in the browser and download their files.
- Guest sign-up links that can be paused, or replaced with a new link that retires the old one.
- Group characters that several guests can share, up to a limit the admin sets.
- Female or male versions of every character, with names and pronouns rendered into the buyer's documents.
- An invitation editor that renders personalized PDFs with about thirty bundled fonts.
- An admin tool that finds the characters on an uploaded cast list and maps each one, with snapping boxes and undo.
- Party-planning guides, email campaigns and cookie-free visitor statistics.
How it works
- Guest links are signed tokens; only a hash is stored. A claim takes a row lock and a unique key, so two guests can never hold the same seat.
- Personalized documents are rendered per buyer with pdf-lib; the master PDFs are never edited, and a download is refused rather than guessed if a choice is missing.
- Self-hosted with Docker behind Cloudflare Tunnel, with backup and restore scripts.
Technology
- Next.js
- React
- TypeScript
- Tailwind CSS
- Prisma
- PostgreSQL
- Stripe
- pdf-lib
- Docker
Development notes
My part
Credit
Status and context
- Status
- Live
- When
- Sep 2026 — now
- Kind
- Websites & storefronts
Who it’s for
The problem it solves
Screens
Luna Mysteries homepage: “Everyone has a secret. One of them is a murderer.” in large serif capitals over a candlelit dinner-table glow











