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

SurfaceWhereWhat it is
Capability catalogapp/showcase/capability-catalog.ts27 capabilities grouped into five categories — shell, system, data, commerce, ops — each linking to a demo and the source files to read.
Components galleryapp/routes/showcase/components/A live gallery of the shadcn/ui building blocks (/showcase/components).
Live demosapp/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 menu

Both 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=false

Preview

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/showcase

Remove the [template-demo] touchpoints

Strip the small demo hooks from core files:

  • The features.showcase route block and showcase lazy imports in app/app.tsx.
  • The template sidebar group in app/components/layout/sidebar-items.ts.
  • The showcaseSource + catalog import in command-sources.ts, and the showcaseEnabled wiring in CommandPalette.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, and lib/main/main.ts.
  • The /showcase* route entries in lib/conveyor/schemas/event-schema.ts.
  • The showcase locale imports/registration in app/lib/i18n/resources.ts.
  • The VITE_SHOWCASE_ENABLED env type in app/index.d.ts.
  • Showcase-specific tests, and showcase labels in app/locales/*/common.json once nothing reads them.

Delete the showcase locale files

rm app/locales/en/showcase.json app/locales/zh/showcase.json

Audit and verify

rg "template-demo"        # should return nothing left behind
pnpm lint:check && pnpm typecheck && pnpm test

Then add your own pages to the Workspace sidebar group and register their routes in app/app.tsx — see UI & Pages.

On this page