diff --git a/README.md b/README.md index dfe09f8..3328ea6 100644 --- a/README.md +++ b/README.md @@ -1,40 +1,289 @@ +
| Layer | Technology | Why |
|---|---|---|
| Agent runtime | Cursor SDK · Composer 2 | Sandboxed cloud VMs, parallel subagents, MCP tooling, file-editing for amendment PRs |
| OpenAI GPT-5.5 | Structured prompt parsing, SPA/wire extraction, memo editorial summary (Zod-validated) | |
| MCP (Model Context Protocol) | Specter, Companies House, OpenSanctions, WHOIS exposed as tools | |
| Backend | Next.js 16 Route Handlers | Single runtime for HTTP + SSE; zero ops surface area |
| React 19 · TypeScript 5 | End-to-end type safety from RunEvent at the seam | |
| Server-Sent Events (SSE) | Live streaming of desk.start / desk.citation / desk.resolved / verdict | |
| Data sources | Specter (companies, people, transactions, interest signals) | The unique data — who's actually leading the round in the last 60 days |
| Companies House · OpenSanctions · WHOIS | Registry truth, sanctions/PEP screening, domain provenance | |
PDF / EML parsing (pdf-parse, mailauth) | SPA extraction; SPF / DKIM / DMARC verification on inbound wire emails | |
| Frontend | Next.js 16 App Router · React 19 | Mandate / Run / Memo screens; SSE consumer renders tiles in real time |
| CSS variables + dark/light theme | Fixed-width memo template that looks like a real fund document | |
| Validation | Zod | Every LLM output is schema-checked before it touches the verdict layer |
| Mandate | gray-matter (YAML frontmatter) + Markdown | The policy file is the source of truth — readable by LPs, executable by the agent |
| Resilience | In-memory cache + fixture fallback per source | DEMO_FORCE_FIXTURES=true = on-stage panic button |
| Mock rails | In-process wire ledger | No real money moves; every run is a queued / held entry |