← Project Register

Acc.

2026.03

PromptDesk

An AI-assisted CRM for solo freelancers and small service businesses — manages clients, projects, time and invoices, then renders that data into copyable prompts for whatever AI tool the user already pastes into.

Role
Sole developer
Medium
Next.js · TypeScript · Prisma · PostgreSQL · Supabase · Stripe
Acquired
Status
ACTIVE
Condition
Active and moving fast. Core CRM, the prompt engine, invoicing and finance all work. Stripe is wired and tested against the sandbox; nothing has run through a live subscription yet. Onboarding, the visual system and the prompt templates are changing week to week, so any account of them dates quickly.
Links

PromptDesk is a CRM for a solo freelancer or small service business that already leans on an AI assistant for a chunk of daily work — outreach, proposals, chasing stalled leads — and keeps re-explaining the same client context every time. The app never calls a model API. It holds the structured facts and renders them into a prompt the user copies into whichever assistant they already trust: no key to manage, no per-request cost, no vendor to outlive. The tradeoff is that PromptDesk cannot grade or iterate on what comes back.

The prompt engine is a pure module — data in, string out, no database access and no network calls anywhere inside it — running seven stages. Normalize Prisma rows into engine types with dates and currency already formatted. Drop duplicate notes, first by content hash and then by Jaccard word-set similarity at 0.85. Flatten clients, notes, tasks and activities into one scorable list. Score each on six weighted factors, with recency on a 30-day half-life and a quote awaiting an answer rated the most time-sensitive thing in the pipeline. Attach a full and a condensed rendering with a token estimate. Then allocate greedily against a 4,000-token budget, dropping each item to its summary before omitting it outright. The stage-probability table behind weighted pipeline value is imported by the dashboard as well, so the two surfaces cannot quote different numbers.

Underneath sits an ordinary CRM that has outgrown the word: projects carrying budgets, hourly rates, deliverable checklists and a per-project profit-and-loss; a weekly timesheet and running timer whose unbilled entries convert straight into an invoice; invoices that open on a public link and take card payment through Stripe Checkout; income and expenses over a selectable period with recurring charges projected forward and Stripe transactions synced in; an intake form builder with shareable links; CSV import; tags and file attachments on Supabase Storage.

The one field nobody sets by hand is pipeline stage. Clients used to carry a status of their own next to their project status, the two described the same fact, and they drifted the moment either was edited alone. Stage is now computed from the client’s projects — lead, contacted, proposal out, active, past, with archived reading as lost — so there is nothing to set and nothing to contradict. Around thirty Vitest files cover that derivation along with the invoice and finance math, which are the places where silent drift would go unnoticed longest.