For one founder, a CRM is accounts, contacts, deals, notes and tasks in SQLite with a kanban board and a CSV import, and an agent writes that in one sitting. What Lightfield sells is the self-filling: reading mail and meetings, matching people to records and proposing field changes. That is reachable in a weekend with IMAP, an ICS feed and a model call that lands in a review inbox. The hard parts are quality and breadth: getting the right person and deal without junk, and the Slack sync, call recording, enrichment and sequences, which stay out of a weekend build.
Before you buildThere is no free plan, only a 14-day trial. If you only need contacts and deals without the self-filling, a self-hosted Twenty or Atomic CRM already covers it.
Build me a personal CRM that fills itself in from my email and calendar, to replace Lightfield. Requirements: - Node.js 22 + TypeScript: a Fastify server with server-rendered pages (Eta) and htmx. `npm start` serves http://127.0.0.1:4870 with accounts, contacts, deals (a drag-and-drop kanban), tasks and a Suggestions inbox. - Storage: better-sqlite3 in ./data/crm.db: accounts, contacts (several emails each), deals (stage, value, close date, next step), notes, tasks, interactions (email or meeting, message id, time, text) and custom fields as JSON. An FTS5 index covers notes and interactions. - Email: `imapflow` reads INBOX and Sent every 10 minutes over IMAP with an app password (IMAP_HOST, IMAP_USER, IMAP_PASSWORD in .env), the last 90 days on first run. Match addresses to contacts; unknown people go to a "New people" queue; skip bulk mail (List-Unsubscribe) and my own domain. - Calendar: read an ICS feed (CALENDAR_ICS_URL) and log meetings with an outside attendee against that contact. Meeting notes come from .md or .txt transcripts dropped in ./inbox/ and matched by date and attendee. - Suggestions: for each new thread or transcript send its text and the matched records to an OpenAI-compatible endpoint (LLM_BASE_URL, LLM_MODEL, LLM_API_KEY; Ollama works) and ask for JSON checked with zod: field changes, deal stage, next step, tasks and a two-line note. Each shows its source quote with Accept and Reject; nothing applies until accepted, except fields I mark auto-apply in settings. - Chat: a box that answers "which deals have been quiet for 14 days" through a fixed set of read-only functions (list_deals, search_interactions, get_contact), never raw SQL written by the model. - CSV import and export for every table, and a nightly JSON backup in ./backups/. - Single user, one password in .env. No accounts, no telemetry, local-first. Outbound calls: IMAP, the ICS URL and the endpoint. - Out of scope: sending email or sequences, Slack and LinkedIn sync, enrichment, call recording, several users. - README: creating an IMAP app password, and that email text goes to the model endpoint unless it is a local Ollama.
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 Lightfield.
Extend the CRM in this folder. Requirements: - Every Monday at 08:00 email me deals with no interaction for 14 days or more, ordered by value, with the last message subject and date. - Use nodemailer with SMTP_* from .env, and add a snooze link per deal that hides it for 7 days. - Compute the list in SQL; do not use the model for it. - Update the README.
Add reply drafts to the CRM in this folder. Requirements: - On a contact page, a Draft follow-up button sends the last five interactions and the deal's next step to the configured endpoint and shows a plain-text draft in a box. - The app never sends mail itself: provide a mailto: link and a copy button. - Log that a draft was made on the contact, without storing the draft body. - Update the README.
Add duplicate handling to the CRM in this folder. Requirements: - Flag contacts that share an email domain and a similar name (Jaro-Winkler above 0.9) and list them on a Duplicates page. - A merge keeps both sets of emails, notes, interactions and tasks, and records what was merged in an audit table. - Merges can be undone for 7 days. - Update the README.
Founders tend to skip CRM data entry, and the product's promise is that records stay current without anyone touching a field. The same subscription records your calls and later adds sequences and enrichment as the team grows.
Estimate · Model calls are the running cost: cents per busy thread through an API, nothing with Ollama. A small VPS is optional. The build is token usage on your agent plan.
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Starter | $89 | — | Up to 3 seats per workspace, 50,000 records, automatic record updates, meeting recording and transcription, email, calendar and Slack sync, custom objects, custom pipelines, email support. |
| Pro | — | $999/workspace | 5 capture seats, unlimited viewer seats, 250,000 records, workflows and automations, email sequences, dashboards, 450,000 workspace credits a year, dedicated CSM. |
| Growth | — | $1,999/workspace | 10 capture seats, 750,000 records, multi-channel sequences, LinkedIn sync (beta), advanced enrichment, inbox warming, 900,000 workspace credits. |
| Enterprise | custom | — | Role-based access control, SSO, calculated and conditional fields, sandbox environments, bi-directional CRM sync, custom integrations. |
No free plan. Starter has a 14-day free trial.
Kinda. The core is a weekend build with the prompt on this page, but real gaps remain: Recording and transcription of every meeting on your calendar, Slack sync and LinkedIn sync.
About $89 a month on the Starter plan per seat, $1,068 a year (checked 2026-10-19).
Recording and transcription of every meeting on your calendar; Slack sync and LinkedIn sync; Email sequences, workflows and automations on the higher plans; Advanced enrichment of contacts and companies; Viewer seats, permissions and the shared chat over all records for a team. If any of those matter to you, keep paying.
Yes: Twenty (open source), Atomic CRM (open source), EspoCRM (open source).