Where Am I Serving? landing page — dark theme with world map background dotted with mission pins. Headline: "Everyone wants to know where he or she is serving." Small banner reads "The call is coming. Will you guess right?" Two CTAs: "Set up your event — $9" and "Try it live."
Projects / Live

Where Am I Serving?

Launched

Real-time mission call reveal game for Latter-day Saint missionaries and their families. Guests guess where the missionary will serve on a live world map; the reveal fires on every screen at once.

SvelteKit Svelte 5 TypeScript Tailwind 4 shadcn-svelte Supabase Realtime Leaflet Cloudflare Pages

What it doesLink to heading

Where Am I Serving? is a real-time mission call reveal game for Latter-day Saint missionaries and their families. When a young missionary receives their call to serve — but before the call is opened — guests guess where they think the missionary will be sent on an interactive world map. As guesses come in, every screen updates live. When the admin triggers the reveal, every device flies to the actual mission at the same moment and highlights the correct guessers.

$9 per event. No app to install. Works on any device with a browser.

StackLink to heading

  • Framework: SvelteKit 2 + Svelte 5 (runes) + TypeScript
  • UI: Tailwind 4 + shadcn-svelte + bits-ui, Lucide icons
  • Map: Leaflet with CartoDB dark tiles + real mission pins for every mission worldwide
  • Realtime: Supabase Postgres + Realtime channels — every screen updates as guesses come in
  • Backend: Supabase Edge Functions for admin actions and reveal orchestration
  • Analytics: PostHog
  • Hosting: Cloudflare Pages via GitHub Actions

The realtime pieceLink to heading

The whole experience hinges on sync feeling instant. A guest picks a location on their phone and within the second the TV in the living room shows the new pin and name label. Any other guest watching the map sees the same update. That single second of sync is the difference between a game that feels alive and one that feels like a shared spreadsheet.

Why this stackLink to heading

SvelteKit + Supabase + Cloudflare Pages is a shape I’ve run on multiple sites at this point — fast to build, cheap to host, boring enough to defend at 2am. Realtime was the piece I hadn’t leaned on hard before this project. Supabase Realtime handles it cleanly when the channels are scoped correctly, and the client library made the “every screen agrees within a second” experience pretty tractable.