Demo apps

Demo library

Pick a demo, choose your variant, reshape the fields — the CLI generates schema, backend, seed data and a nine-view frontend from one spec.

Demos are specs, not templates.

Every demo below is a real deployment — sign up with any email + password, then click “Load sample data” to explore. Prefer a guided start? Run pnpm new with no flags and the wizard offers the demo picker interactively.

Mini CRM

--demo crm · table: contacts + activities

A sales pipeline: contacts with stages, deal values and close dates — plus an activity log of calls, emails and meetings.

design: saas accent: blue layout: sidebar
Try it live →

Fields

LabelKeyType
Namenametext
Companycompanytext
Emailemailtext
Stagestage select Lead Qualified Proposal Won Lost
Deal valuedealValuenumber
Close datecloseDatedate
Tagstagstags
Notesnoteslongtext

Highlight views

  • board your pipeline — drag contacts between stages
  • stats revenue — deal values summed per stage
  • calendar follow-ups — close dates on a month grid
  • Two entities: contacts (8 fields) + activities (5 fields) — the activity log rides alongside the pipeline.
  • Sample data built in: “Load sample data” seeds 6 contacts + 3 activities.
  • With --features mcp, each entity gets MCP tools — e.g. list_contacts / create_contact / set_contact_stage.
scaffold a CRM
$ pnpm new my-crm --demo crm
# Convex backend, saas design, blue accent — the defaults
$ pnpm new my-crm --demo crm --db supabase
# same app as idiomatic SQL: RLS, triggers, RPCs
$ pnpm new my-crm --demo crm --fields "+source:select:Lead source,-notes"
# reshape the spec: add a Lead source select, drop notes

Task Board

--demo tasks · table: tasks

A project tracker: kanban workflow, priorities, due dates and estimates.

design: dashboard accent: violet layout: header
Try it live →

Fields

LabelKeyType
Titletitletext
Statusstatus select Backlog Doing Review Done
Prioritypriority select Low Medium High
Assigneeassigneetext
DuedueDatedate
Estimate (h)estimatenumber
Tagstagstags
Notesnoteslongtext

Highlight views

  • board your workflow — backlog → doing → review → done
  • calendar deadlines — every due date at a glance
  • Sample data built in: “Load sample data” seeds 6 tasks across the workflow.
  • With --features mcp, the entity gets MCP tools — e.g. list_tasks / create_task / set_task_status.
scaffold a task board
$ pnpm new my-board --demo tasks
# Convex backend, dashboard design, violet accent — the defaults
$ pnpm new my-board --demo tasks --db supabase
# same app as idiomatic SQL: RLS, triggers, RPCs
$ pnpm new my-board --demo tasks --fields "+blocked:boolean:Blocked,-estimate"
# reshape the spec: add a Blocked flag, drop estimates

Product Catalog

--demo catalog · table: products

An inventory: products with images, categories, prices and stock.

design: minimal accent: teal layout: sidebar
Try it live →

Fields

LabelKeyType
Namenametext
SKUskutext
Categorycategory select General Featured Sale Archived
Pricepricenumber
Stockstocknumber
RestockrestockDatedate
ImageimageUrlimage
Tagstagstags
Notesnoteslongtext

Highlight views

  • gallery your showroom — product images front and center
  • stats stock value — prices rolled up per category
  • Sample data built in: “Load sample data” seeds 6 products with prices and stock.
  • With --features mcp, the entity gets MCP tools — e.g. list_products / create_product / set_product_category.
scaffold a catalog
$ pnpm new my-shop --demo catalog
# Convex backend, minimal design, teal accent — the defaults
$ pnpm new my-shop --demo catalog --db supabase
# same app as idiomatic SQL: RLS, triggers, RPCs
$ pnpm new my-shop --demo catalog --fields "+supplier:text:Supplier,-notes"
# reshape the spec: add a Supplier field, drop notes

Under the hood

How it works

Demos are declarative specs, not templates. The generator reads a spec — one entity or several — and emits everything the app needs, seed data included, for either backend, in any look. Each scaffold also writes a .demo.json smoke manifest so the browser gate knows exactly what to verify.

🧬

One spec, all the code

The generator emits the schema block, the CRUD backend — or SQL + RLS for Supabase — the select-option constants, seed rows behind a “Load sample data” button, and an EntityConfig-driven page per entity (the CRM ships contacts and its activity log).

🪄

Views follow the fields

Removing a role field (like the date) simply hides the views that need it. No dead screens, no broken imports — the config adapts.

🧩

Features toggle independently

Add --features — mcp, api-keys, billing, ai and more — on top of any demo. With mcp, every entity also gets generated MCP tools (list / create / set-status), so chat apps can drive your data.

🎨

Every look applies

All four layouts, 100+ designs and 18 accents work with every demo — the defaults above are just a starting point.

Field syntax

Make it yours

Reshape any demo at scaffold time with --fields — and both the frontend and the backend follow the spec.

-key

Removes a field — e.g. -notes. The title field can't be removed.

key:type:Label

Adds a new field, or replaces one with the same key — e.g. +source:select:Lead source. The label is optional.

9 field types

text · longtext · number · boolean · select · tags · date · image · position

--table · --labels

The “demo eject”: rename the primary entity — --table clients --labels "Client,Clients" turns the CRM's contacts into your clients, everywhere from schema to nav.

--fields, no demo

--fields also works without a demo — it reshapes the generic records baseline into your own domain: pnpm new my-app --fields "+foo:number".

Bring your own spec

A demo is just JSON. Write your own spec file — title plus an entities array — and point --demo at it.

my-spec.json
{
  "title": "Bug Tracker",
  "entities": [{
    "table": "bugs",
    "labels": ["Bug", "Bugs"],
    "titleKey": "title",
    "fields": [
      { "key": "title", "type": "text", "label": "Title", "required": true },
      { "key": "severity", "type": "select", "label": "Severity", "options": [
        { "value": "low", "label": "Low" },
        { "value": "high", "label": "High", "tone": "danger" }
      ] }
    ]
  }]
}
$ pnpm new my-app --demo ./my-spec.json

Ready to build on one?