Quickstart
What you’ll need
Section titled “What you’ll need”- Node.js 18 or newer
- Docker (for local Mongo) — or any MongoDB connection string
- About 60 seconds
1. Scaffold
Section titled “1. Scaffold”Pick a template that’s closest to what you’re building. crm is the most
fully-featured example; blank if you want to start empty.
npx create-davepi-app my-app --template crmcd my-appTemplates available:
| Template | What you get |
|---|---|
blank | Minimal — one resource, full-text search. |
crm | Accounts / contacts / deals (state machine) / activities. |
ticketing | Tickets with two state machines + comments. |
content | Articles (editorial workflow), categories, file uploads. |
b2b-saas | Orgs / workspaces / invites / billing-event ledger. |
2. Boot Mongo
Section titled “2. Boot Mongo”docker compose up -dThe scaffolder dropped a docker-compose.yml that runs MongoDB on the
default port. If you already have a Mongo connection string, edit the
MONGO_URI value in the generated .env.
3. Install + start
Section titled “3. Install + start”npm installnpm startThe server picks an unused port (default 5050; the scaffolder probes and falls back if it’s busy). The terminal prints the URL it actually bound to.
4. Seed sample data
Section titled “4. Seed sample data”In another terminal:
npm run seedThis registers a demo user (demo@example.com / demo-password!)
and POSTs realistic sample records.
5. Try the surfaces
Section titled “5. Try the surfaces”| Surface | URL |
|---|---|
| REST | http://localhost:5050/api/v1/<resource> |
| GraphQL playground | http://localhost:5050/graphql/ |
| Swagger UI | http://localhost:5050/api-docs |
| Capability manifest | http://localhost:5050/_describe |
| Admin SPA | http://localhost:5050/admin (if built) |
For example:
TOKEN=$(curl -s -X POST http://localhost:5050/login \ -H 'Content-Type: application/json' \ -d '{"email":"demo@example.com","password":"demo-password!"}' \ | jq -r .accessToken)
curl -s http://localhost:5050/api/v1/account \ -H "Authorization: Bearer $TOKEN" | jq '.results'6. Wire Claude Code
Section titled “6. Wire Claude Code”The scaffolder dropped a .mcp.json with the MCP server pre-configured.
Open the project in Claude Code and ask:
Add a
lostReasonfield to deal that’s only populated when stage islost, and an aggregation that groupslostdeals by reason.
Claude reads the schema, drops a new file under schema/versions/v1/,
and hot-reload picks it up — no restart.
What’s next
Section titled “What’s next”- Read Concepts → Schema-driven generation to understand how the surface stays in sync with your schemas.
- The Schema reference lists every option.
- The flagship guide Idea to deployed CRM in 10 minutes walks through extending a template into a production-ready CRM.