AI Underwriting Platform
Messy financial documents in, verified, decision-ready data out - built solo, first commit to production in four months.
- Client
- Excedr, Inc.
- Industry
- Fintech · leasingFintech · equipment leasing
- Role
- Architect & sole engineerSolutions Architect & sole engineer
- Timeline
- 4 months · 2026
4months
to production, soloto production, team of one
70fixtures
golden, in CIhuman-verified, in CI on every change
16checks
deterministicdeterministic, before analyst sign-off
30ADRs
documentedarchitecture decisions documented
Context & challenge
Context
Underwriting analysts at an equipment-leasing fintech spent their time re-keying bank statements, balance sheets, P&Ls and cash-flow statements before they could assess risk.Underwriting analysts at an equipment-leasing fintech spent their time re-keying bank statements, balance sheets, P&Ls and cash-flow statements from PDFs and spreadsheets before they could assess risk.
Challenge
Use LLMs to extract financial data reliably enough that analysts could trust it - while keeping inference costs under control and every number traceable to its source.
Architecture · fig. 02
fig. 02 - extraction pipeline & trust layer
Documents (PDF or Excel statements) go to a pre-flight probe that checks for a text layer and page count. A cost-aware router then sends digital files to a light Gemini model, scans to a vision model, and falls back to Claude. LangGraph extracts the data, with model access through OpenRouter and traces in LangSmith. In the trust layer, 16 deterministic checks validate the result before an analyst approves it with the source highlighted. Supporting it: an eval harness of 70 golden fixtures in 3 suites on GitHub Actions that observes extraction; a deterministic math engine, with no LLM, for cash runway under base, stress and default scenarios; and AWS infrastructure in Terraform across dev, test and prod - ECS Fargate, RDS, SQS, S3, CloudFront and Cognito.
- 01 InputDocumentsPDF or Excel statements
- 02 ProbePre-flighttext layer? page count?
- 03 Cost-aware router
- Gemini · lightdigital
- Vision modelscans
- Claudefallback
- 04 ExtractLangGraphOpenRouter · LangSmith traces
- Trust layer
- 05 Validate16 checks
- 06 ReviewAnalystsource-highlighted approval
- Eval harness · observes 0470 golden fixtures · 3 suites · GitHub Actions
- Math engine · deterministic, no LLMCash runway - base · stress · default
- AWS · Terraform · dev / test / prodECS Fargate · RDS · SQS · S3 · CloudFront · Cognito
- 01 InputDocumentsPDF or Excel statements
- 02 ProbePre-flighttext layer? page count?
- 03 Cost-aware routerGemini · vision · Claudelight → scans → fallback
- 04 ExtractLangGraphOpenRouter · LangSmith traces
- 05 Validate · trust layer16 deterministic checks
- 06 ReviewAnalyst approvessource-highlighted
What I built
- Eval harness: 70 golden fixtures in three suites, in CI.Eval harness: 70 human-verified golden fixtures in three suites - bank statements, financial statements, classification - running in CI.
- Natural-language formula builder for Excel-like formulas.Natural-language formula builder that drafts Excel-like formulas from a prompt.
- PDF and spreadsheet viewers highlighting each number’s source.React 19 + Tailwind UI with PDF and spreadsheet viewers that highlight the exact source of each extracted number.
- 30 ADRs, a domain glossary and agent rules - 170+ test files.30 ADRs, a domain glossary and codified agent rules that let Cursor and Claude Code deliver a team-sized scope safely - 170+ automated test files.
In the product




Outcomes & role
- Production launch in 4 months with a team of one.
- AI extraction errors caught by 16 automated checks before analyst sign-off.
- Regression-proofed by 70 golden fixtures on every change.
- Weekly demos with leadership and analysts; roadmap re-sequenced to ship the math engine first.
Solutions Architect and sole engineer - architecture, infrastructure, AI pipeline, evals and UI, designed in v0 and Claude Design.
- Python
- TypeScript
- LangGraph
- LangSmith
- OpenRouter
- Gemini
- Claude API
- React 19
- NestJS
- PostgreSQL
- Prisma
- AWS
- Terraform
- GitHub Actions
Stack
- Python
- TypeScript
- LangGraph
- OpenRouter
- Claude API
- React 19
- NestJS
- PostgreSQL
- AWS
- Terraform