Demo Mode
Demo mode lets public buyers explore LaunchKit Pro safely. The UI stays fully usable; risky writes return friendly 403 messages instead of breaking the experience.
Safe defaults
| Variable | Default | Meaning |
|---|---|---|
DEMO_RESET_ENABLED | false | No destructive demo reset |
DEMO_RESET_DRY_RUN | true | Reset logs only unless explicitly disabled |
DEMO_SEED_ON_STARTUP | false | Seed on demand via admin API |
Environment variables
# Demo safety
DEMO_MODE_ENABLED=true
DEMO_USER_EMAILS=demo@launchkitlabs.com
DEMO_ADMIN_EMAILS=admin-demo@launchkitlabs.com
DEMO_WRITE_RESTRICTIONS_ENABLED=true
DEMO_UPLOADS_DISABLED=true
DEMO_REAL_AI_DISABLED=true
DEMO_REAL_BILLING_DISABLED=true
DEMO_REAL_WEBHOOK_DELIVERY_DISABLED=true
DEMO_API_KEY_CREATION_DISABLED=false
DEMO_LICENSE_ACTIVATION_DISABLED=false
# Demo reset / seeding
DEMO_RESET_ENABLED=false
DEMO_RESET_CRON=0 4 * * *
DEMO_RESET_DRY_RUN=true
DEMO_SEED_ENABLED=true
DEMO_SEED_ON_STARTUP=false
DEMO_SAFE_WORKSPACE_SLUG=demo-workspace
DEMO_RETENTION_HOURS=24Demo passwords (DEMO_USER_PASSWORD, DEMO_ADMIN_PASSWORD) are for seeding only — never commit real production passwords.
What is restricted
| Area | Demo user message (when disabled) |
|---|---|
| Uploads | Uploads are disabled for the public demo account. |
| AI generate | AI generation is disabled… Sample results are available in history. |
| Real checkout | Real checkout is disabled for the public demo account. |
| Webhook delivery | Outbound webhook delivery is disabled for the public demo account. |
Mock billing (BILLING_PROVIDER=MOCK) and sample AI history remain available so the demo looks fully usable.
Read-only demo admin
DEMO_ADMIN_EMAILS accounts can browse admin pages but cannot:
- Update users, workspaces, licenses, or global settings
- Pause/resume/clean queues
- Run demo seed or reset
The frontend shows a read-only banner; the API returns friendly 403 messages.
Demo seed and reset
Seed (POST /admin/demo/seed) — idempotent upsert of:
- Demo user and demo admin
- Demo workspace (
DEMO_SAFE_WORKSPACE_SLUG) - Mock Pro subscription, AI sample history, disabled webhook placeholder, file metadata
Reset (POST /admin/demo/reset) — scoped to the demo workspace only:
dryRun: true(default) — logs what would be deleted/re-seededDEMO_RESET_ENABLED=truerequired for destructive reset- Never touches non-demo users or workspaces
Status (GET /admin/demo/status) — config flags, last seed/reset summaries.
Real platform admins only for seed/reset. Demo admin is read-only.
Public API
curl -s http://localhost:4000/demo/status | jq
curl -s http://localhost:4000/demo/me -H "Authorization: Bearer <token>" | jq
curl -s http://localhost:4000/admin/demo/status -H "Authorization: Bearer <adminToken>" | jqRelated
- AI Module — demo AI sample history
- Developer Tools — webhook demo delivery
- Background Queues — optional maintenance
demo_resetjob