Showcase
The removable capability catalog and its full deletion recipe.
The Showcase is a removable demo layer: a catalog of the template's
capabilities, a components gallery, and live interactive demos. Every piece is
marked [template-demo] and gated behind two flags, so you can preview your app
without it and then delete it in one clean pass.
What ships
| Surface | Where | What it is |
|---|---|---|
| Capability catalog | app/showcase/capability-catalog.ts | 27 capabilities grouped into five categories — shell, system, data, commerce, ops — each linking to a demo and the source files to read. |
| Components gallery | app/routes/showcase/components/ | A live gallery of the shadcn/ui building blocks (/showcase/components). |
| Live demos | app/routes/showcase/demos/ | 11 interactive demo components, each doubling as a manual test of its subsystem. |
The 11 demos are Window, Tray, Notifications, Shortcuts, Deep Links, Secure
Storage, Backup/Diagnostics, File Editor, Todos, Theme/i18n, and a Placeholder
(shown for catalog entries without a dedicated interactive demo). Each demo is
the fastest way to confirm a subsystem works — e.g. the Notifications demo shows
the exact { ok, reason } result of a notify() call.
The two matched flags
Showcase is controlled by two flags that must stay in sync — one per process — because the demo layer has both renderer surfaces and a native menu:
VITE_SHOWCASE_ENABLED=false # renderer: routes, sidebar, Home, palette
MAIN_VITE_SHOWCASE_ENABLED=false # main: the native Template menuBoth default on and are read centrally — VITE_SHOWCASE_ENABLED via
showcaseConfig in shared/config.ts, MAIN_VITE_SHOWCASE_ENABLED via
lib/main/feature-flags.ts. Keep them matched so the renderer chrome and the
native Template menu agree.
Neither showcase flag is listed in .env.example, but both are read in code
and default on. Add them to your .env when you want to turn the demo layer
off. See Environment Variables.
Removing it
Follow this recipe from docs/CUSTOMIZE.md. The preview step is the important
one — it proves the app still works before you delete anything.
Turn both flags off
VITE_SHOWCASE_ENABLED=false
MAIN_VITE_SHOWCASE_ENABLED=falsePreview
Run the app and confirm the Template sidebar zone, Showcase routes, the palette's showcase group, the native Template menu, and the Home showcase sections are all gone. The rest of the app should work unchanged.
Delete the demo-only folders
rm -rf app/routes/showcase app/showcaseRemove the [template-demo] touchpoints
Strip the small demo hooks from core files:
- The
features.showcaseroute block and showcase lazy imports inapp/app.tsx. - The
templatesidebar group inapp/components/layout/sidebar-items.ts. - The
showcaseSource+ catalog import incommand-sources.ts, and theshowcaseEnabledwiring inCommandPalette.tsx. - The Showcase-derived Home sections and catalog imports in
HomePage.tsx. - The Template menu block in
lib/main/menu.ts. - The showcase flag plumbing in
shared/config.ts,lib/main/feature-flags.ts, andlib/main/main.ts. - The
/showcase*route entries inlib/conveyor/schemas/event-schema.ts. - The showcase locale imports/registration in
app/lib/i18n/resources.ts. - The
VITE_SHOWCASE_ENABLEDenv type inapp/index.d.ts. - Showcase-specific tests, and showcase labels in
app/locales/*/common.jsononce nothing reads them.
Delete the showcase locale files
rm app/locales/en/showcase.json app/locales/zh/showcase.jsonAudit and verify
rg "template-demo" # should return nothing left behind
pnpm lint:check && pnpm typecheck && pnpm testThen add your own pages to the Workspace sidebar group and register their routes
in app/app.tsx — see UI & Pages.
