Live websiteWebsites & storefronts

Luna Mysteries

Murder-mystery party kits, with a library that casts your guests and prints their names.

Luna Mysteries: the candlelit homepage and a mystery kit's product page on a phone

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.

  1. 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.

  2. 02

    No role taken twice

    Claims are race-safe. In testing, twelve guests grabbed the same character at once and exactly one got it.

  3. 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.

  4. 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.

  5. 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

Engineering and infrastructure.

Credit

Co-created with Lauren, who leads product, design and the mysteries themselves.
Status and context
Status
Live
When
Sep 2026 — now
Kind
Websites & storefronts

Who it’s for

Hosts throwing a murder-mystery dinner party, and the friends they invite to play.

The problem it solves

Mystery kits are usually sold as a pile of files. Hosts are left to hand out characters by text message, track who is playing whom, and edit names into documents by hand.

Screens

lunamysteries.com
Luna Mysteries homepage: “Everyone has a secret. One of them is a murderer.” in large serif capitals over a candlelit dinner-table glow

Luna Mysteries homepage: “Everyone has a secret. One of them is a murderer.” in large serif capitals over a candlelit dinner-table glow

1 / 9