Skip to content
codexa

Web apps · React

Sales leads CRM

A lean CRM for a small sales team: leads, deal values, next follow-ups and a pipeline board.

Sales leads CRM starter, as built from its own files
Starter screenshot captured from this template's own build at 1440×900. It shows the template as it ships, not output generated from a prompt.

What you get

Track every lead from first contact to won or lost, with deal values, owners and follow-up dates. Switch between a table and a pipeline board and watch the pipeline and won totals update. The fields, stages and sample leads live in src/app.ts.

Files

Exactly what is copied into a new project: 12 files, nothing generated.

Raw data: GET /api/v1/templates/app-leads-crm

src/app.ts
src/app.ts
import type { AppSpec } from "./types"; /** Everything this app shows. Edit freely. */export const app: AppSpec = {  "brand": "Fieldline",  "icon": "users",  "storageKey": "fieldline-leads-v1",  "entity": {    "singular": "Lead",    "plural": "Leads"  },  "title": "Pipeline",  "subtitle": "Open deals and next steps for the Q4 push",  "currency": "$",  "titleKey": "company",  "statusKey": "stage",  "tones": {    "New": "neutral",    "Contacted": "accent",    "Qualified": "warn",    "Won": "good",    "Lost": "bad"  },  "views": [    "table",    "board"  ],  "fields": [    {      "key": "company",      "label": "Company",      "type": "text",      "required": true    },    {      "key": "contact",      "label": "Contact",      "type": "text"    },    {      "key": "email",      "label": "Email",      "type": "email",      "hideInTable": true    },    {      "key": "value",      "label": "Deal value",      "type": "money"    },    {      "key": "owner",      "label": "Owner",      "type": "select",      "options": [        "Dana",        "Marcus",        "Priya"      ]    },    {      "key": "followUp",      "label": "Follow up",      "type": "date"    },    {      "key": "stage",      "label": "Stage",      "type": "select",      "options": [        "New",        "Contacted",        "Qualified",        "Won",        "Lost"      ]    },    {      "key": "notes",      "label": "Notes",      "type": "longtext",      "hideInTable": true    }  ],  "summary": [    {      "label": "Leads",      "kind": "count"    },    {      "label": "Qualified pipeline",      "kind": "sum",      "field": "value",      "status": "Qualified"    },    {      "label": "Won this quarter",      "kind": "sum",      "field": "value",      "status": "Won"    },    {      "label": "Lost",      "kind": "count",      "status": "Lost"    }  ],  "seed": [    {      "company": "Harbor Freight Lines",      "contact": "Elena Ruiz",      "email": "elena@harborfreightlines.com",      "value": 18400,      "owner": "Dana",      "followUp": "2026-11-03",      "stage": "Qualified",      "notes": "Wants a pilot for two depots before signing the annual plan."    },    {      "company": "Brightwater Clinics",      "contact": "Tom Okafor",      "email": "t.okafor@brightwaterclinics.com",      "value": 9600,      "owner": "Priya",      "followUp": "2026-10-30",      "stage": "Contacted",      "notes": "Intro call done. Sending pricing for 6 locations."    },    {      "company": "Copperleaf Hotels",      "contact": "Sarah Lindqvist",      "email": "sarah@copperleafhotels.com",      "value": 32000,      "owner": "Marcus",      "followUp": "2026-11-10",      "stage": "Qualified",      "notes": "Procurement review starts mid-November."    },    {      "company": "Northgate Builders",      "contact": "Ray Castillo",      "email": "ray@northgatebuilders.com",      "value": 7200,      "owner": "Dana",      "followUp": "2026-10-21",      "stage": "Won",      "notes": "Signed 12-month contract."    },    {      "company": "Pinecrest Schools",      "contact": "Amy Chen",      "email": "achen@pinecrestschools.org",      "value": 12500,      "owner": "Priya",      "followUp": "2026-11-05",      "stage": "New",      "notes": "Inbound from the webinar."    },    {      "company": "Maple & Main Bakery",      "contact": "Luis Ortega",      "email": "luis@mapleandmain.com",      "value": 2400,      "owner": "Marcus",      "followUp": "2026-10-14",      "stage": "Lost",      "notes": "Went with a cheaper option for now. Check back in spring."    },    {      "company": "Summit Physio",      "contact": "Hannah Brooks",      "email": "hannah@summitphysio.com",      "value": 4800,      "owner": "Dana",      "followUp": "2026-10-18",      "stage": "Won",      "notes": ""    },    {      "company": "Redline Couriers",      "contact": "Omar Haddad",      "email": "omar@redlinecouriers.com",      "value": 15800,      "owner": "Marcus",      "followUp": "2026-11-02",      "stage": "Contacted",      "notes": "Needs SSO before they can move forward."    }  ]};

Remix

Remix this template

Describe what to change and the agent starts from Sales leads CRM's files. The box is already started for you: finish “Start from Sales leads CRM and …”

Agent ready

Creates a free account first; your idea is carried over.

Dependencies

Documented from the template's package.json. The runtime has a prebuilt dependency set for Vite + React + TypeScript, so installs are fast.

  • react^19.1.0
  • react-dom^19.1.0
  • vite^6.3.0
  • @vitejs/plugin-react^4.4.0
  • tailwindcss^4.1.0
  • @tailwindcss/vite^4.1.0
  • typescript^5.8.0

How it runs

Framework
Vite + React + TypeScript
Dev command
npm run dev
Build command
npm run build
Output directory
dist
Port
5173
Entry route
/

Projects run in an isolated sandbox with a live preview. Read the projects documentation for settings, snapshots and deployment.

All templates

Build on Sales leads CRM

Create a free account, start from this template, and ask the AI agent to turn it into your app.