One conversation, two surfaces
/copilot, or a ⌘J panel over whatever you are looking at. Threads are saved, named, searchable and pinnable — one started in the panel continues on the page.Most CRMs are databases that make you do data entry. Codext CRM is built the other way round: the AI researches the prospect, scores the lead, writes the email and tells you what to do next. You approve and close.
No seat pricing. No vendor lock-in. Your database, your model key, your server.

A rep's day is research, writing and follow-up.So that's what the CRM automates — not the note-taking you were already skipping.
Codext CRM was built byCodext GmbH to sell Shopify migrations, used every day against a real pipeline, and then open-sourced so any sales team can run it on their own infrastructure.
Every setting is wired to the behaviour it describes. An edited picklist changes the dropdowns. A defined custom field appears on the record. A disabled module disappears from the navigation. Anything not yet connected says so in the UI rather than implying otherwise.
A prioritised work queue instead of a spreadsheet. A board that forecasts. Records that edit inline. Every screen below is the actual product, running on the demo dataset that ships with it.
Drag-and-drop kanban with weighted forecasting, per-stage totals and rotting-deal warnings — the amber and red cards are deals that have sat in a stage past its limit.

Ranked by AI score with the reasoning attached, filterable down to the slice you actually work, saveable as a view you come back to every morning.

Value, stage, probability and close date next to an AI read on deal health — what is blocking it and the next best action, grounded in the actual thread.

Emails, calls, notes and stage changes merged into one chronology, with lead analysis and the open deals for that person alongside it.

Everyone you know there, every deal in flight, the tech stack you detected and the pain points the research turned up.

The same pipeline as a dense, sortable table when you want to scan forty deals at once instead of five.

⌘K from anywhere to search contacts, companies and deals, run an action, or jump to any screen. Every nav entry has a two-key shortcut.

Not a chat box bolted onto a database. The model has your knowledge base, your pricing, your objection handling and the real thread history — and it can act on the CRM through the same tools you use.

Outbound campaigns search for companies that match your profile, read their website, screenshot it and extract the pain points worth leading with.
Buying potential, where the relationship actually stands, and specifically what this lead needs before they will buy — with the reasoning shown, not a number.
Grounded in your knowledge base and the thread so far. Finds the decision-maker's address, personalises the opener, queues it for approval.
Nothing leaves the building without a human unless you switch that off. The approvals queue is the whole review step.
A daily briefing that ranks what actually moves revenue today, plus a "do this now" list on the dashboard.
/copilot, or a ⌘J panel over whatever you are looking at. Threads are saved, named, searchable and pinnable — one started in the panel continues on the page.OPENAI_BASE_URL at Ollama, vLLM, OpenRouter or Azure. Each organisation can hold its own key.The CRM hosts its own MCP server and its own OAuth provider, so connecting it takes nothing but the URL. No tokens to copy around.
https://your-crm.example.com/api/mcpClaude registers itself, sends you to the CRM to sign in, and you approve the connection on a consent screen where you choose which workspace it may see and whether it may write as well as read.
claude mcp add --transport http codext-crm \ https://your-crm.example.com/api/mcp
Capture, measure and administer — the work that decides whether a CRM survives contact with a real team.


Custom fields per entity, editable picklists, lead-scoring weights, notification preferences, branding and data export all live in Settings — and each one is wired to the behaviour it describes.
Module switches turn campaigns, forms, knowledge, email or reports off for the whole installation or for one organisation. Instance-off always wins.



Dense, calm, keyboard-first. Near-neutral greys carry the interface and a single accent carries intent, so your eye goes straight to money and risk.

Plugins are TypeScript objects that run in-process. They hook CRM events, add tools the AI copilot can call, register background jobs and add navigation entries.
Settings → Plugins has a box you can type into. Describe what you want and the AI writes the plugin, installs it and switches it on — no rebuild, no restart, no file to register. Ask for a change later and it ships a new version; every version is kept and restoring one is a click.
Generated plugins run in a sandbox with no require, no process, no timers and no network beyond a URL-checked ctx.crm.http, and reach the CRM only through an API already scoped to the workspace. A plugin gets only the permissions its manifest declared. That is containment, not a boundary against code written to break out — the source is on the page so you can read it before leaving it switched on.

import { definePlugin } from '@/lib/plugins/types';export default definePlugin({ id: 'my-plugin', name: 'My Plugin', description: 'Does something useful when a deal is won.', version: '1.0.0', configFields: [ { key: 'webhookUrl', label: 'Webhook URL', type: 'password', required: true, }, ], on: {'deal.won': async (event, ctx) => { ctx.logger.info(`Deal ${event.payload.dealId} won`); }, }, aiTools: [/* tools the copilot can call */], jobs: {/* background handlers */}, });Prefer no code? Settings → Webhooks fires the same events at any URL, HMAC-signed. And a Chrome extension puts the full CRM context of whoever you are emailing right inside Gmail, with a Save lead to CRM button that turns the open thread into a contact, a company, a deal and a timeline entry.
Bundled plugins run unsandboxed with full database access. AI-built ones run sandboxed and org-scoped, but the sandbox shares a process with the CRM. Either way: only enable code you have read.
Postgres and Node. No Redis, no external queue, no vector database, no object store. Jobs live in Postgres with FOR UPDATE SKIP LOCKED and embeddings are compared in-process, so a pg_dump is a complete backup.
Stack: Next.js 15 · React 19 · TypeScript · Tailwind v4 · shadcn/ui · Drizzle ORM · Postgres · Vercel AI SDK v5.
curl -fsSL https://raw.githubusercontent.com/codextde/\ codext-crm/main/deploy/install.sh | bashInstalls Docker if it is missing, generates your secrets, and starts Postgres, the app, the worker and a Caddy proxy that gets a Let's Encrypt certificate on its own. No domain yet? Leave it blank and it serves HTTP on the server's IP. Re-running upgrades in place and keeps your secrets.
There is a Coolify compose file too, and a Cloudflare Tunnel path for a home server with no public IP.
git clone https://github.com/codextde/codext-crm.gitcd codext-crmcp .env.example .env# Required: AUTH_SECRET. Recommended: OPENAI_API_KEY.echo "AUTH_SECRET=$(openssl rand -base64 32)" >> .envdocker compose up -dOpen http://localhost:3000 and create your account. Migrations run automatically.
git clone https://github.com/codextde/codext-crm.gitcd codext-crmnpm installnpm run up # app on http://localhost:3000npm run up -- --seed # …with the demo data in these screenshotsnpm run up writes an .env.local with a generated AUTH_SECRET, starts Postgres, applies migrations, builds this page, then runs the web app and the worker together. Ctrl-C stops all of it.
It is MIT licensed software you run yourself. The only bills are your server and, if you want the AI features, your model provider.
Unlimited users, unlimited organisations, every feature on this page. No edition gating, no "contact sales" tier, no telemetry.
Use it, sell with it, fork it. Commercial use is explicitly fine.
It was built by Codext GmbH to run their own Shopify-migration sales, and then open sourced. It is a real tool with real users rather than a reference implementation — but it is young, so read the code before you bet a quarter on it. Everything that is not yet wired up says so in the UI instead of pretending.
No. The CRM is fully usable with no AI key at all — pipeline, contacts, email, reports and forms all work. Every AI surface degrades to a clear "connect a key" state rather than breaking. Add a key later and those surfaces light up.
Only where you connect something. There is no telemetry. If you configure an AI provider, the prompts for that feature go to that provider — point OPENAI_BASE_URL at a local Ollama or vLLM instance and nothing leaves the box at all.
You approve it on a consent screen that picks the workspace and whether writes are allowed. A token is bound to one workspace for its whole life, every tool call is scope-checked, and every write is recorded in the audit log against the user whose connection was used. Access tokens last 8 hours, refresh tokens rotate, and replaying a rotated one revokes the whole connection. Revoke from Settings → MCP server at any time.
Yes. Multi-organisation is built in, and every query is org-scoped in the data layer rather than filtered in the UI. A super-admin console at /admin manages the whole installation — organisations, users, module switches, the job queue and the audit log — separately from per-organisation settings.
No. Gmail over OAuth is one option; any IMAP/SMTP mailbox works, with presets for Outlook, IONOS, Strato, mailbox.org and Zoho. The background worker handles sync — the web app runs without it, but background automation does not.
They are unretouched captures of this application running against the demo dataset that ships in the repository. Run `npm run up -- --seed` and you get the same workspace, names and numbers.
Sign in and pick up where your pipeline left off.
No account on this instance?Create one — or run your own.
Clone it, run one command, and see your own pipeline in it this afternoon.