How it works
C0
Internal operations system. Runs Formwork day to day: clients, projects, tasks and invoices in one place, synced with the books. After each meeting, Claude drafts the follow-up tasks.
Live · runs Formwork
Architecture
Hover a box to trace its connections; click it for what it does.
- request
- webhook, queue, schedule
- the heart
- outside service
APortals· 5Executive · Manager · member · Client · Prospect · Claude
ExecutiveportalUI
UI · portal
The whole firm: money, clients, people and objectives.
Talks to
- → Middleware (cookie)
Manager · memberportalsUI
UI · portals
Managers see their team; members see their own tasks and time.
ClientportalUI
UI · portal
Clients see their services, billing, content, outreach and tasks.
Talks to
- → Middleware
ProspectportalUI
UI · portal
A prospect’s own view of what Formwork offers them.
ClaudeMCP clientEXTERNAL
EXTERNAL · MCP client
Claude over MCP, with tools scoped to the person’s role.
Talks to
- → MCP server (MCP)
BApp· 11Middleware · Prospects · Clients · Projects · tasks · Invoices · expenses · MCP server · Meetings · Task drafting · Knowledge base · Bank matching · Chat agent
MiddlewareJWT · role routesSERVICE
SERVICE · JWT · role routes
Checks the session cookie, routes each role to its portal, and catches a role that changed since sign-in.
Talks to
- ← Executive (cookie)
- ← Client
- → Clients (by role)
ProspectsproposalsSERVICE
SERVICE · proposals
Prospects and proposals, until one converts to a client.
Talks to
- → Clients (converts)
Clientsservices · healthSERVICE
SERVICE · services · health
Each client and the services they buy, with one health score from 0 to 100.
Talks to
- ← Middleware (by role)
- ← Prospects (converts)
- → Projects · tasks
- → Invoices · expenses (bills)
- → Sales & content (outreach · content)
Projects · taskstime logsSERVICE
SERVICE · time logs
The work for each service, with dependencies and time logged.
Talks to
- ← Clients
- ← Task drafting (drafts)
- → PostgreSQL (SQL)
- → Airtable (dual write)
Invoices · expensespaymentsSERVICE
SERVICE · payments
Invoices, payments and expenses, allocated to clients and services.
Talks to
- ← Clients (bills)
- ← Plaid (bank feeds)
- ← Bank matching (matches)
MCP server250+ tools by roleAI
AI · 250+ tools by role
Tools composed by role: a client sees about ten, an executive over two hundred.
Talks to
- ← Claude (MCP)
- ← Chat agent (catalogue)
- → Knowledge base (kb tools)
MeetingstranscriptsSERVICE
SERVICE · transcripts
Each meeting and its transcript, with a badge until its drafted tasks are approved.
Talks to
- → Task drafting (transcript)
- → Knowledge base (mined)
Task draftingClaudeAI
AI · Claude
Drafts follow-up tasks from a transcript, with the context around the meeting.
Talks to
- ← Meetings (transcript)
- → Projects · tasks (drafts)
- → Claude · OpenRouter
Knowledge basefacts · reviewAI
AI · facts · review
Claims mined from meetings, embedded and merged into facts. New ones are candidates until a second model verifies them.
Talks to
- ← Meetings (mined)
- ← MCP server (kb tools)
Bank matchingconfidence tiersSERVICE
SERVICE · confidence tiers
Matches each cash line from the books to an invoice, a subscription or a person, with a confidence score. Only the surest can be approved in bulk.
Talks to
- ← QuickBooks (webhooks)
- → Invoices · expenses (matches)
Chat agentsearch · describe · runAI
AI · search · describe · run
Above a threshold it gets a category index and three meta-tools instead of every schema, and loads only the tools it means to call.
Talks to
- → MCP server (catalogue)
CJobs· 2Due-date checks · Scheduled email
Due-date checksscheduledJOB
JOB · scheduled
Flags tasks coming due and invoices gone overdue.
Talks to
- → Slack (alerts)
Scheduled emailscheduledJOB
JOB · scheduled
Sends reports and scheduled emails.
DData· 2PostgreSQL · Airtable
PostgreSQLprimary · PrismaSTORE
STORE · primary · Prisma
Where every read comes from.
Talks to
- ← Projects · tasks (SQL)
Airtabledual writeSTORE
STORE · dual write
Writes for tasks, time and money also land here, so the rollups people already use stay right.
Talks to
- ← Projects · tasks (dual write)
EOutside· 5QuickBooks · Plaid · Sales & content · Slack · Claude · OpenRouter
QuickBooksOAuth · webhooksEXTERNAL
EXTERNAL · OAuth · webhooks
The books. Its webhooks bring each change across.
Talks to
- → Bank matching (webhooks)
Plaidbank feeds · webhooksEXTERNAL
EXTERNAL · bank feeds · webhooks
Live bank balances and transactions.
Talks to
- → Invoices · expenses (bank feeds)
Sales & contentFormwork’s own appsEXTERNAL
EXTERNAL · Formwork’s own apps
OutreachSphere and ContentSphere, read for each client’s outreach and content.
Talks to
- ← Clients (outreach · content)
SlackalertsEXTERNAL
EXTERNAL · alerts
Where the due-date and overdue alerts land.
Talks to
- ← Due-date checks (alerts)
Claude · OpenRoutermodelsEXTERNAL
EXTERNAL · models
The models behind drafting, the knowledge base and the agent.
Talks to
- ← Task drafting
Connections · 20
→ request · ⇢ webhook, queue or schedule
- Executive → Middleware · cookie
- Client → Middleware
- Middleware → Clients · by role
- Prospects → Clients · converts
- Clients → Projects · tasks
- Clients → Invoices · expenses · bills
- Meetings → Task drafting · transcript
- Task drafting → Projects · tasks · drafts
- Meetings → Knowledge base · mined
- Task drafting → Claude · OpenRouter
- QuickBooks ⇢ Bank matching · webhooks
- Plaid ⇢ Invoices · expenses · bank feeds
- Bank matching → Invoices · expenses · matches
- Claude → MCP server · MCP
- Chat agent → MCP server · catalogue
- MCP server → Knowledge base · kb tools
- Projects · tasks → PostgreSQL · SQL
- Projects · tasks ⇢ Airtable · dual write
- Due-date checks ⇢ Slack · alerts
- Clients → Sales & content · outreach · content
Inside: meetings, tasks and what Formwork knows
A meeting does two jobs. It becomes tasks people approve, and it teaches the firm something: claims are pulled out, matched to the people and companies they’re about, deduplicated, checked by a second model, and fed back into the next meeting about that client.
Hover a box to trace its connections; click it for what it does.
AIn· 3Transcript · Meeting context · Account memory
Transcriptper meetingUI
UI · per meeting
The meeting’s transcript, internal or with a client.
Talks to
- → Meeting context
Meeting contextpeople · services · goalsSERVICE
SERVICE · people · services · goals
Who was there, the client and their active services, and the firm’s current objectives and projects, so tasks land in the right place.
Talks to
- ← Transcript
- → Tasks + summary
Account memorywhat we already knowAI
AI · what we already know
What the firm already knows about this client, injected before analysis. A knowledge-base failure never blocks the meeting.
Talks to
- → Tasks + summary (injected)
- → Search (account spine)
BAnalysis· 3Tasks + summary · Approval · Slack
Tasks + summaryClaude · in parallelAI
AI · Claude · in parallel
Writes the meeting summary and the follow-up tasks at the same time, each with an assignee, a service, a project and a due date.
Talks to
- ← Meeting context
- ← Account memory (injected)
- → Approval (drafts)
- → Slack
- → Claim extraction (transcript)
Approvalbadge until approvedUI
UI · badge until approved
Drafted tasks wait for a person. Until they are approved the meeting shows a badge.
Talks to
- ← Tasks + summary (drafts)
Slacksummary · tasksEXTERNAL
EXTERNAL · summary · tasks
The summary and the drafted tasks are posted to Slack.
Talks to
- ← Tasks + summary
CLearn· 5Claim extraction · Entity resolution · Dedup · Auto-review · Latest wins
Claim extractionHaiku · Sonnet if unsureAI
AI · Haiku · Sonnet if unsure
Picks out claims worth keeping about the industry, the client or the business, tagged from a fixed vocabulary of 22 topics. Internal meetings need more confidence to count.
Talks to
- ← Tasks + summary (transcript)
- → Entity resolution (mentions)
- → Dedup (claims)
Entity resolutionnames · aliasesSERVICE
SERVICE · names · aliases
Maps “Logan”, “Logan Smith” and “chief estimator” to the same person, following merges; a new name starts as a candidate for review.
Talks to
- ← Claim extraction (mentions)
- → Entity graph
Deduphash · cosine 0.92SERVICE
SERVICE · hash · cosine 0.92
An exact restatement or a near-duplicate becomes a new citation on the existing fact instead of a new row.
Talks to
- ← Claim extraction (claims)
- → Facts
Auto-reviewsecond modelAI
AI · second model
Verifies or rejects new facts. Nothing is verified on the way in; borderline ones stay for a person to spot-check.
Talks to
- → Facts (verify)
Latest winssupersededSERVICE
SERVICE · superseded
When a newer claim replaces an old one, the old one is marked superseded rather than deleted.
Talks to
- → Facts
DRecall· 4Facts · Entity graph · Search · kb tools
Factspgvector · 1024-dSTORE
STORE · pgvector · 1024-d
Canonical facts with their citations, embedded with one locked model whose name is stored beside each vector for future migrations.
Talks to
- ← Dedup
- ← Auto-review (verify)
- ← Latest wins
- ← Search
Entity graphtyped edgesSTORE
STORE · typed edges
People, companies and projects, linked to the account they belong to.
Talks to
- ← Entity resolution
Searchverified-onlySERVICE
SERVICE · verified-only
Semantic search with metadata filters, verified facts only by default so agents don’t retrieve noise, plus a keyed account spine, newest first.
Talks to
- → Facts
- ← kb tools
- ← Account memory (account spine)
kb toolsMCPAI
AI · MCP
Search, expand an entity, add or verify a fact, and the review queue, for any agent.
Talks to
- → Search
Connections · 15
→ request · ⇢ webhook, queue or schedule
- Transcript → Meeting context
- Meeting context → Tasks + summary
- Account memory → Tasks + summary · injected
- Tasks + summary → Approval · drafts
- Tasks + summary ⇢ Slack
- Tasks + summary → Claim extraction · transcript
- Claim extraction → Entity resolution · mentions
- Claim extraction → Dedup · claims
- Entity resolution → Entity graph
- Dedup → Facts
- Auto-review ⇢ Facts · verify
- Latest wins → Facts
- Search → Facts
- kb tools → Search
- Account memory → Search · account spine
Two flows
A meeting becomes work
Walk through it and each step lights the parts it runs through in the drawings above.
By count
- portals: executive, manager, member, client, prospect
- 5
- actions Claude can take in it
- 250+
Notes
- N.1Client health is one number from 0 to 100, computed in one place, so the members list, the invoice header and the exec dashboard never disagree.
- N.2Clients get their own portal with their services, billing, content, outreach and tasks.
- N.3Bank lines are matched to invoices and people with a confidence score. Only the surest matches can be approved in bulk.
Built by
I design, architect and build software products like this one.
More systems