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.
What you’re building
Section titled “What you’re building”Two surfaces, one codebase:
| Who | URL | What they see |
|---|---|---|
| Host (logged in) | show-pony.localhost:4180 | Events, guest list, team admin |
| Platform operator (sysadmin) | same apex | Platform 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):
| Role | Password | |
|---|---|---|
| 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.
The product tour
Section titled “The product tour”Host dashboard
Section titled “Host dashboard”Events, forms, and guest lists are schema-driven — no custom React for CRUD.
Invite branding (host)
Section titled “Invite branding (host)”Per-tenant hero image, accent colour, and layout — what guests see on /e/<slug>.
Guest invite page
Section titled “Guest invite page”Custom React for the public surface — hero, copy, calendar link, RSVP card.
Run it locally
Section titled “Run it locally”Bun + Docker:
git clone https://github.com/CosmicDriftGameStudio/show-ponycd show-ponycp .env.example .envdocker compose up -dbun installbun dev- Open
http://show-pony.localhost:4180— log in as[email protected]/changeme. - Create an event (slug
rooftop-launch) — or jump to the live demo for pre-seeded Rooftop Launch Party ondemoand Acme Offsite RSVP onacme(chapter 11). - Share
http://demo.show-pony.localhost:4180/e/rooftop-launchwith a guest. - Watch the guest list fill up after an RSVP.
Live: show-pony.kumiko.rocks · demo event (read-only — RSVP locally)
How it fits together
Section titled “How it fits together”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 ──┘The chapters
Section titled “The chapters”- Install — clone, Docker,
bun dev. - Look and feel — lavender brand + i18n.
- Mount the foundation — auth, tenant, shell.
- Apex and subdomains — hostname → tenant.
- The data model —
eventandrsvp. - Wire the business logic — handlers, screens, nav.
- Anonymous RSVP — guest write without login.
- Dashboard from schema — what the host sees.
- The public surface — invite page + RSVP UX.
- Mail and calendar — confirmation +
.ics. - Seed and ship — demo content + production image.
- Marketing apex — public landing on
/. - Legal pages — Impressum / privacy in marketing chrome.
- PII and compliance — guest data, legal text vs GDPR runtime.
- Plans & Stripe checkout — tiers, caps, host billing screen.
Read in order, or jump to the chapter that matches what you’re stuck on.