alignmink-investor-crm
v0.1.1
Published
Investor CRM for fundraising founders. Local-first. Captures pitch context from your deck, drafts outreach emails with your LLM key, and tracks the pipeline.
Maintainers
Readme
alignmink-investor-crm
Run a fundraise from your laptop. Your data, your AI key, your terminal.
A founder-grade investor CRM that runs on localhost. Captures the core message of your pitch from your deck, drafts warm intros / cold pitches / follow-ups with your own LLM key, and tracks the pipeline through to commitment. Schema mirrors the Alignmink Strategy Spine, so the pitch context you build here ports cleanly into the full product later.
Nothing leaves your machine. No accounts, no analytics, no relay.
60-second quickstart
npx alignmink-investor-crm startThat's it. The CRM builds on first run and opens at http://localhost:3838. You'll be walked through a 3-step setup:
- Connect an LLM — paste your OpenRouter or Anthropic key. Skippable; CRM still works for tracking without a key.
- Capture your pitch — upload a PDF / PPTX / DOCX deck or paste pitch text. The model summarises into a structured spine you can edit.
- Add investors — drop a CSV from the investor-researcher skill or any list with Firm/Name + Country.
Each step is optional. Skip what you don't have ready and complete it from Settings later.
Prefer a one-time install? See Updating.
Three commands
The CLI does three things. If you only learn one, learn doctor.
| Command | What it does |
|---|---|
| alignmink-investor-crm start | Launches the CRM at http://localhost:3838. Use --port N to change, --no-open to skip the browser pop. |
| alignmink-investor-crm doctor | Reports package version, data dir, LLM key status, and passcode status. Run this when anything looks off. |
| alignmink-investor-crm (no args) | Same as doctor. Designed so a CEO who types just the package name gets actionable status, not a wall of help. |
What you get
- 3-step onboarding wizard — connect LLM, capture pitch, import investors. Persistent across reloads, resumable.
- Deck → pitch context — PDF, PPTX, DOCX, ODT, ODP, RTF, TXT, or MD. LLM extracts mission, one-liner, differentiator, traction, ask, priorities, key bets, scope boundaries, and metrics. Editable review before save.
- Email drafter — three tones (warm intro / cold pitch / follow-up). Uses your saved pitch context as the system prompt for every draft.
- Pipeline tracking — 7 stages from Not Contacted to Committed, with signal characters (○ ◐ → ← ◉ ✕ +).
- CSV / XLSX import — flexible column matching, automatic dedup. Compatible with the investor-researcher skill output.
- Per-investor notes + drafts — quick-capture notes, drafts archived per investor.
- Keyboard-first —
j/knavigation,/search,nnote,edraft,Escdeselect. - Dark + light themes — both WCAG 2.1 AA verified.
- Local-first storage — everything in
~/.alignmink-crm/(data, settings, cookie secret). No telemetry.
Where your data lives
~/.alignmink-crm/
├── data.json # investors, notes, drafts, imports
├── settings.json # llm provider, key, model, onboarded flag (mode 0600)
└── cookie-secret # auto-generated session secret (mode 0600)To use a different directory, set CRM_HOME in your environment.
Getting an LLM key
The CRM uses your key. Nothing routes through Alignmink.
| Provider | Why pick this | Get a key | |---|---|---| | OpenRouter | One key gets Claude, GPT-4, Gemini, Llama. Free credit on signup. | https://openrouter.ai/keys | | Anthropic | Direct line to Claude. No middleman. | https://console.anthropic.com/settings/keys |
In the Settings screen, paste the key, pick a model, click Test connection. Saved to ~/.alignmink-crm/settings.json with file mode 0600.
Don't have a key yet? Skip step 1 in the wizard. The CRM still works for tracking — drafts and deck parsing unlock the moment you add a key.
Getting an investor list
Use the investor-researcher skill inside Claude or ChatGPT with your targeting notes. It outputs a CSV in the exact shape this CRM imports — column names match by substring, so formatting is forgiving.
Example prompt:
Run the investor-researcher skill. Find 25 pre-seed/seed VCs in the US focused on AI memory, decision intelligence, or vertical SaaS for CEOs.
Drop the returned CSV into the Investors step of the wizard (or the Sidebar later).
Updating
If you used npx:
npx alignmink-investor-crm@latest startIf you installed globally:
npm install -g alignmink-investor-crm@latestNot sure which you used? Run alignmink-investor-crm doctor — it'll tell you.
Configuration
All in-app via the Settings screen. For headless / CI setups, env vars take effect when no settings.json key is present:
| Variable | Purpose |
|---|---|
| PASSCODE | Single-user passcode. Empty = open access on localhost. |
| OPENROUTER_API_KEY / OPENROUTER_MODEL | LLM fallback (when settings.json has no key). |
| ANTHROPIC_API_KEY / ANTHROPIC_MODEL | LLM fallback (Anthropic provider). |
| PORT | Server port. Default 3838. |
| HOST | Bind interface. Default 127.0.0.1. Use 0.0.0.0 to expose on LAN — set a passcode first. |
| COOKIE_SECRET | Session cookie signing key. Auto-generated if omitted. |
| CRM_HOME | Override the data directory. |
See .env.example for the full template.
Why port 3838?
Common dev defaults (3000, 3001, 4000, 5000, 5173, 8000, 8080) collide with everything. 3838 is short, memorable, and unused by mainstream tooling. Override with --port N when you need to.
Develop locally
git clone https://github.com/rajconnects/alignmink-investor-crm.git
cd alignmink-investor-crm
npm install
npm run devVite on 5839, Express API on 3838 (proxied). HMR for the client; tsx --watch for the server.
Stack
| Layer | Tech |
|---|---|
| Frontend | Vite + React 18 + TypeScript |
| Backend | Express + TypeScript |
| Storage | JSON file (~/.alignmink-crm/data.json) |
| Deck parsing | officeparser (PDF/PPTX/DOCX/ODT/RTF) |
| LLM providers | OpenRouter, Anthropic direct |
| Styling | direction-a-v3 design tokens, IBM Plex Sans + Mono |
License
Apache-2.0. See LICENSE and NOTICE.
Links
- Alignmink — https://alignmink.ai
- Issues — https://github.com/rajconnects/alignmink-investor-crm/issues
