A CRM for one person is plain tables: people, companies, deals, notes and tasks, a kanban for the pipeline, search and CSV import. An agent builds that quickly, and adding your own fields through a JSON column is realistic. Twenty's own pitch is the part that takes longer: a data model you reshape from the UI, email and calendar sync, workflows and a permission model for a team. Twenty is also free to self-host, so building only pays off for a smaller, fixed-shape CRM you understand completely.
Before you buildTwenty is free to self-host with every Pro feature, and the cloud has a 30-day trial. Try the self-hosted edition before building: a rebuild wins only if you want a smaller CRM you can read in an afternoon.
Build me a one-person CRM to replace Twenty. Requirements: - Node.js 22 + TypeScript: a Fastify API and a React UI built with Vite and TanStack Table. `npm start` serves everything on http://localhost:4840. - Storage: better-sqlite3 in ./data/crm.db with `drizzle-orm`: people, companies, deals (stage, amount, close date), notes and tasks (due date, done). Every table has a `custom` JSON column for extra fields. - Custom fields: a settings page where I add a field to people, companies or deals (text, number, date, select with options, checkbox). Values live in `custom` and show up as table columns, filters and form inputs without a restart. - Views: a table per object with sort, filters, hidden columns and saved views; a deals kanban by stage with drag and drop (`@dnd-kit`); a record page with notes, tasks and a timeline of changes. - Relations: a person has one company and many deals. Record pages link both ways, and global search (SQLite FTS5) covers names, notes and custom text fields. - Import and export: CSV import with a column mapper and a duplicate check on email or company domain; CSV export of any view with its current filters and columns; a JSON backup of the whole database. - API: REST under /api with a bearer token from .env, so my scripts can create people and deals. - Single user, password in .env. No accounts, no telemetry, local-first. Outbound calls: none. - Out of scope: email and calendar sync, workflows, AI agents, permissions and teams, a mobile app. - README: how to back up the .db file and how custom fields are stored.
Opens your agent with the prompt filled in, you press enter. Or copy it and paste it into an empty folder.
The first prompt builds the core. Run these one at a time in the same folder to grow it into your own Twenty.
Extend the CRM in this folder with a read-only email timeline. Requirements: - Poll one IMAP mailbox with `imapflow` every 5 minutes; IMAP_HOST, IMAP_USER and IMAP_PASSWORD come from .env (an app password). - Attach a message to a person when the sender or any recipient matches that person's email; store only headers, a 300-character snippet and the Message-ID, never full bodies or attachments. - Show the messages on the person's record and on their company's record, newest first, with a link that opens the thread in the mail client. - Look back 90 days on first run, then sync only new messages; skip duplicates by Message-ID. - Update the README with what is stored.
Add simple automations to the CRM in this folder. Requirements: - Rules of the form "when a deal enters stage X, create a task N days out" and "when a deal is won, call a webhook", configured on a settings page. - Webhook calls POST the deal as JSON with an HMAC signature header, retry 3 times with backoff, and record each attempt in a log page. - Rules run inside the same transaction as the stage change, and a failed rule never blocks the move. - Tests for a rule that fires twice and for a webhook that times out. - Update the README.
Add a meetings timeline to the CRM in this folder. Requirements: - Read one CalDAV calendar with `tsdav` (CALDAV_URL, CALDAV_USER and CALDAV_PASSWORD in .env) every 15 minutes, 30 days back and 90 days ahead. - Match an event to people by attendee email, and show it on their records with date, title and attendees; events with no matches go in an "unlinked" list that I can link by hand. - Cancelled events disappear; changed events update in place, keyed on the event UID. - Update the README.
Add duplicate handling to the CRM in this folder. Requirements: - A page that lists likely duplicate people (same email, or same name plus company) and companies (same domain, or names equal after removing Inc, Ltd and punctuation). - A merge screen that shows both records side by side, lets me pick each field, then moves all notes, tasks and deals to the surviving record and keeps the other as a redirect. - Record every merge in the timeline, with an undo that works for 7 days. - Tests on merging records that both have deals. - Update the README.
Teams pay $12 a seat so that someone else runs and upgrades the database, and for email sync, workflows and permissions they would otherwise stitch together. The pitch is flexibility without a consultant: custom objects and views are built in. The self-hosted edition has the same Pro features, so what is bought is mostly the hosting and the support.
Estimate · Runs on your laptop or a $5 VPS. No paid services are needed. The build is token usage on your agent plan.
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Self-hosted | $0 | $0 | All Pro features, community support on Discord, your own infrastructure. |
| Pro | $12 | $9 | Unlimited seats, objects, fields, views and records; table, kanban and calendar views; workflows, AI agents, REST and GraphQL API, webhooks, MCP server; 5 workflow credits a month (50 a year on yearly billing); 50 API calls a minute. |
| Organization | $25 | $19 | Everything in Pro plus row-level permissions, SAML and OIDC SSO, audit logs, encryption key rotation, a custom domain, priority support and 100 API calls a minute. |
| Enterprise | — | $4,167 | Everything in Organization plus single-tenant isolation, IP allow-listing, SCIM, a security review and DPA, dedicated support with an SLA and custom API limits. |
No permanent free cloud plan; the cloud offers a 30-day trial with no credit card. Self-hosting the open-source core is free.
Kinda. The core is a weekend build with the prompt on this page, but real gaps remain: Email and calendar sync that attaches messages and meetings to records, Workflows and AI agents that act on records.
About $12 a month on the Pro plan per seat, $144 a year (checked 2026-10-19).
Email and calendar sync that attaches messages and meetings to records; Workflows and AI agents that act on records; Row-level permissions, SSO and audit logs for a team; A data model you can reshape from the UI, including custom objects and relations; The REST and GraphQL API, webhooks and the MCP server. If any of those matter to you, keep paying.
Yes: Twenty (self-hosted) (open source), EspoCRM (open source), Krayin CRM (open source).