The arcade (and its signup funnel)
What is this Play tab, and can it actually get me customers?
Turn the play-to-signup funnel on, brand it, or remove it in one config line. Saved scores become real member signups in your organization.
Typical effort: 5 minutes
The recipe — paste this to your AI
# Recipe — the arcade games ("Play" in your nav): what they are, how to brand, keep, or remove them
Your site ships a small arcade: **Stuffy Run** and **Stuffy Flight** at `/game`, linked from
the default public nav as **Play** (`site.config.ts → marketing.nav`). There is also a richer
game-engine preview at `/play` (the "playkit" — scenes, tiers, story mode), public but unlinked
by default.
**Why a business site ships games:** they are a conversion device. Finishing a run offers
"save your score" — which is a member signup — and the leaderboard gives visitors a reason to
come back. The whole play → signup → leaderboard funnel is built; it just needs your
organization id.
## Turn the funnel ON (most sites should)
The save-score panel (`app/game/_shared/save-score-panel.tsx`) needs an organization to save
INTO. It reads, in order: `siteConfig.contact.organizationId`, then
`NEXT_PUBLIC_CONTACT_CATCHALL_ORG_ID`. Set one (usually the same value as
`NEXT_PUBLIC_CONTACT_ORG_ID` — see `.env.example`) and redeploy. Without it the games still
play, but the save-score offer never appears and no leaderboard forms — a silent half-feature.
Scores ride the member API (`memberApi.game.submitScore` / `memberApi.game.leaderboard`);
each save is a real member signup in your organization — the players become contacts you can
actually reach.
## Remove the games instead
All in `site.config.ts` (your lane):
1. Delete the `{ label: 'Play', href: '/game' }` entry from `marketing.nav`.
2. Don't add `/game` or `/play` to `marketing.sitemapPaths` (they are not indexed by default).
The routes still resolve if someone types the URL — that's harmless (they're self-contained) —
but nothing on your site advertises them. Do NOT delete the `app/game/` / `app/play/`
directories: they are framework files, and removing them takes you off the upgrade path for
zero gain.
## Brand the games
- The games inherit your brand palette automatically (semantic tokens).
- The playkit's visual scenes are the same engine as live tiles — to author your OWN scene
(colors, shapes, motion) see `docs/prompts/make-a-live-tile.md`; the `/play/tile` galleries
are the preview surface for what you build.
## Put the leaderboard on your homepage (showcase move)
A small "top players this week" strip is a strong social-proof block. Build it in a lane
component that calls `memberApi.game.leaderboard('<game-slug>', '<variant>', 10)` for a
signed-in member context, or simply link to `/game` where the framework renders it. Keep the
tolerant-reader rule: `Array.isArray`-guard the rows before `.map`.
## FAQ your client will ask
- **"Can I add my own game?"** The playkit (`app/play/_playkit/`) is the engine surface for
that — it's framework code, so treat a fully custom game as a feature request upstream, or
build your own page in a lane that embeds your own game code.
- **"Do scores cost anything?"** No — they're measurement rows in your organization.
- **"Is it kid-safe / data-safe?"** Playing needs no account and stores nothing. Saving a score
is an explicit signup with the platform's standard consent + abuse protections.
Source of truth
This recipe ships inside the template as docs/prompts/customize-the-games.md — this page renders that exact file. The repository is always the newest version: https://github.com/srisenmay/bringthefront-template. Clone the template and you get every recipe locally, versioned with the release you are on.