Skip to content

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

VariableDefaultMeaning
DEMO_RESET_ENABLEDfalseNo destructive demo reset
DEMO_RESET_DRY_RUNtrueReset logs only unless explicitly disabled
DEMO_SEED_ON_STARTUPfalseSeed on demand via admin API

Environment variables

env
# 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=24

Demo passwords (DEMO_USER_PASSWORD, DEMO_ADMIN_PASSWORD) are for seeding only — never commit real production passwords.

What is restricted

AreaDemo user message (when disabled)
UploadsUploads are disabled for the public demo account.
AI generateAI generation is disabled… Sample results are available in history.
Real checkoutReal checkout is disabled for the public demo account.
Webhook deliveryOutbound 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-seeded
  • DEMO_RESET_ENABLED=true required 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

bash
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>" | jq

LaunchKit Pro by LaunchKit Labs — buyer documentation. No secrets in this site.