Skip to content

ShowPony — a guest list you can build in an afternoon

Mira runs rooftop events for a small studio. She needs one link to share, a guest list that fills itself, and a dashboard she never has to redesign. ShowPony is that app — built on Kumiko, end to end, with real screenshots from a Playwright runner (bun run screenshots in the show-pony repo).

This tutorial is the whole build: install, routing, data model, anonymous RSVP, mail, deploy. Every chapter ends with the complete file it produced.

Two surfaces, one codebase:

WhoURLWhat they see
Host (logged in)show-pony.localhost:4180Events, guest list, team admin
Platform operator (sysadmin)same apexPlatform workspace only — tenants, users, audit (not Mira’s Events)
Guest (anonymous)demo.show-pony.localhost:4180/e/<slug>Invite page + RSVP form
Surface Local Cloud
Host login (apex) http://show-pony.localhost:4180/login https://show-pony.kumiko.rocks/login
Demo invite (rooftop) http://demo.show-pony.localhost:4180/e/rooftop-launch https://demo.show-pony.kumiko.rocks/e/rooftop-launch
Acme invite (offsite) http://acme.show-pony.localhost:4180/e/acme-offsite https://acme.show-pony.kumiko.rocks/e/acme-offsite

Demo accounts (local dev — prod uses Pulumi-injected credentials):

RoleEmailPassword
Tenant admin (host)[email protected]changeme
System admin[email protected]changeme

The host is decided by the subdomain the request arrives on — never by anything the guest sends. That’s chapters 4 and 7.

Events, forms, and guest lists are schema-driven — no custom React for CRUD.

Event list with two seeded events
Edit event form filled with Rooftop Launch Party
Guest list with RSVPs and status

Per-tenant hero image, accent colour, and layout — what guests see on /e/<slug>.

Invite branding settings for the demo tenant

Custom React for the public surface — hero, copy, calendar link, RSVP card.

Public invite page with hero and RSVP form
Guest filling the RSVP form
Acme Offsite RSVP — invite on the acme subdomain (separate tenant)

Bun + Docker:

Terminal window
git clone https://github.com/CosmicDriftGameStudio/show-pony
cd show-pony
cp .env.example .env
docker compose up -d
bun install
bun dev
  1. Open http://show-pony.localhost:4180 — log in as [email protected] / changeme.
  2. Create an event (slug rooftop-launch) — or jump to the live demo for pre-seeded Rooftop Launch Party on demo and Acme Offsite RSVP on acme (chapter 11).
  3. Share http://demo.show-pony.localhost:4180/e/rooftop-launch with a guest.
  4. Watch the guest list fill up after an RSVP.

Live: show-pony.kumiko.rocks · demo event (read-only — RSVP locally)

Host (logged in) Guest (anonymous)
apex.show-pony.… ── creates ──▶ event
shares the link
demo.show-pony.…/e/slug
RSVP form ── submits ──▶ rsvp
apex.show-pony.… ◀── guest list ──┘
  1. Install — clone, Docker, bun dev.
  2. Look and feel — lavender brand + i18n.
  3. Mount the foundation — auth, tenant, shell.
  4. Apex and subdomains — hostname → tenant.
  5. The data modelevent and rsvp.
  6. Wire the business logic — handlers, screens, nav.
  7. Anonymous RSVP — guest write without login.
  8. Dashboard from schema — what the host sees.
  9. The public surface — invite page + RSVP UX.
  10. Mail and calendar — confirmation + .ics.
  11. Seed and ship — demo content + production image.
  12. Marketing apex — public landing on /.
  13. Legal pages — Impressum / privacy in marketing chrome.
  14. PII and compliance — guest data, legal text vs GDPR runtime.
  15. Plans & Stripe checkout — tiers, caps, host billing screen.

Read in order, or jump to the chapter that matches what you’re stuck on.