The thing worth getting right
The brief says this is more than an AI dispute-letter generator, and the architecture has to reflect that or the distinction collapses in the first sprint. A letter generator needs a prompt and a PDF. A progress platform needs a versioned model of the member’s credit file so you can answer three questions letter generators can’t: what changed since last month, which of these items is actually worth challenging, and did the thing we did work.
Everything below follows from that. The report model is the centre of the system; extraction feeds it, analysis reads it, disputes act on it, and the score trend is what proves the whole thing is working. Build that model first and the rest is ordinary product work. Skip it and you have a letter generator with extra screens.
The stack, layer by layer
Each choice with the reason it beat the alternative.
Client — mobile-first web app
Next.js (App Router) + TypeScript, installable PWA
A PWA ships day one to both platforms with no store review, and everything here is content and forms rather than device hardware. Native wrappers via Expo become worth it in MVP 2, when push notifications about a bureau response start driving retention.
Upload & storage
Direct-to-object-storage with short-lived signed URLs; private bucket, KMS-managed keys
The file never passes through an application server, which removes the single most common way credit reports leak. Source documents auto-expire after 90 days, and deletion is verified rather than queued.
Document extraction
Text-layer parse first, OCR fallback (AWS Textract or Google Document AI), then an LLM structuring pass over the extracted text
About 80% of uploads are bureau PDFs with a real text layer — parsing those directly is faster, cheaper and more accurate than OCR. OCR is the fallback, not the default. The LLM never sees a raw image and never invents a field: it maps extracted text to a strict schema, and anything under 90% confidence is confirmed by a human.
Report model
Postgres with a normalized tri-merge schema — report → bureau file → tradeline → derogatory → inquiry, versioned per pull
This is the heart of the product and the reason it can’t live in a spreadsheet-backed tool. Month-over-month comparison, cross-bureau conflict detection, and "what changed since last pull" all depend on a real relational model with history.
Analysis & guidance
Deterministic rules engine for what is disputable; LLM for explanation and letter drafting, grounded in the member’s own extracted data
The decision about whether an item is worth disputing is rule-based and auditable — you must be able to explain it to a regulator. The LLM writes the prose and answers questions; it never decides eligibility on its own.
Dispute & mailing
Letter versioning with member approval capture; print-and-mail API (Lob) behind an interface; daily USPS tracking poll
CROA makes the approval record legally meaningful, so the approved letter, its hash and the timestamp are stored together. The mail vendor sits behind an interface so it can be swapped without touching the dispute domain.
Subscriptions
Stripe Billing with metered mailing credits
Postage is a real per-unit cost. Modeling credits from day one keeps the unit economics visible instead of discovering them at scale.
Auth & identity
Managed auth (Clerk or Auth0) with mandatory MFA on any account holding a report
Rolling your own auth on a product holding consumer credit files is an unforced error. Managed auth also gives you SOC 2-relevant audit logging without building it.
Admin & analytics
Same Next.js app, role-gated routes; product analytics on internal IDs only
A separate admin app doubles the surface area for no benefit at this stage. What matters is that report access from the admin side is ticket-referenced and writes an immutable audit row.
Hosting
Vercel (app) + managed Postgres (Neon or RDS) + object storage in one region
Serverless is right for this traffic shape — bursty uploads, long-tail reads. The one caveat: use a pooled Postgres endpoint, or serverless connection storms will hang requests.
On not forcing everything into Glide
The right answer isn’t “no-code bad”. It’s knowing precisely where the line is.
Where Glide genuinely fits
Internal admin views, the mail-run checklist, an ops dashboard over data that already exists. Glide is excellent at putting a usable interface on a table someone else maintains — build those there and save real weeks.
Where it gets uncomfortable
The community feed and educational content could ship in a no-code tool, but they need to live behind the same auth and profile as the app. Splitting them across two platforms creates a second identity system, which costs more than it saves.
Where it will fail
Credit report ingestion, OCR pipelines, a versioned tri-merge data model, letter generation with approval capture and mail tracking, and PII handling that survives a security review. These aren’t hard for Glide because Glide is bad — they are outside what any spreadsheet-backed platform is built to do, and this is exactly where the product’s value lives.
14 weeks, six phases
Sequenced so something demonstrable exists from week 5, not week 14.
Foundation & security baseline
Weeks 1–2
- Repo, CI, environments, error tracking
- Managed auth with MFA; role model (member / specialist / admin)
- Encrypted upload path with signed URLs and lifecycle expiry
- Data-handling decisions written down before any PII is stored
Ingestion & extraction
Weeks 3–5
- Text-layer parser for the three bureau PDF formats
- OCR fallback path and page classification
- LLM structuring pass into a strict schema, with confidence scoring
- Human-review queue for anything under the confidence floor
Report model & analysis
Weeks 6–7
- Versioned tri-merge schema and cross-bureau reconciliation
- Rules engine for disputability, with the reasoning surfaced to the member
- Score factor breakdown and the member-facing report screens
Disputes end to end
Weeks 8–10
- Letter generation grounded in the member’s own data, with statute citations
- Review, edit and approval flow with an auditable approval record
- Mail vendor integration, certified mailing, tracking poll
- Response logging and the 30-day escalation trigger
Guidance, education, community
Weeks 11–12
- Coach grounded in the member’s report and an FCRA knowledge base
- Action plan and progress tracking
- Lesson library and moderated community with a pre-publication queue
Subscriptions, admin, launch
Weeks 13–14
- Stripe billing with metered mailing credits
- Admin console: members, mail queue, extraction queue, moderation, analytics
- Security review, penetration test, load test on the upload path
- Beta with 25–50 real members before public launch
What it costs
Ranges, because the honest answer depends on how much of the compliance and design work you already have.
Build
Build — MVP 1 as scoped above
14 weeks, senior full-stack product engineer
$78,000 – $96,000
Optional: design partner
If you want bespoke visual design rather than a strong system-based UI
+$12,000 – $18,000
Optional: native wrappers
Expo builds + store submission, once push matters
+$9,000 – $14,000
Running costs
Hosting (Vercel Pro + Postgres + storage)
$120 – $400 / mo
OCR (Textract / Document AI)
~$0.04 – $0.12 per report
LLM (structuring + coach + letters)
~$0.15 – $0.45 per member / mo
Certified mail (pass-through)
~$8.24 per letter
Auth, email, error tracking, analytics
$150 – $350 / mo
At 1,000 active members the variable cost lands near $2.50 per member per month before postage, which is why metered mailing credits matter more to the model than the subscription tier does.
Four things that will bite
Better to say them now than in week nine.
CROA compliance is a product constraint, not a legal review at the end
The Credit Repair Organizations Act governs what you may charge for, when, and what you must disclose. It shapes the billing model and the approval flow directly — advance fees for dispute work are prohibited, and the three-day cancellation right has to be real in the UI. Design for it in week one.
Never promise a deletion
Every claim in the product has to be about process, not outcome. That constrains copy, the coach’s responses, and the marketing site. It is also the single clearest signal to a consumer that this product is different from the ones that got them here.
The bureaus are not an API
Report ingestion is document-driven because there is no consumer-permissioned API that gives you a full tri-merge file cheaply. Plan around documents. A data-provider integration is an MVP 2 conversation, and it changes the cost structure significantly.
Security review will happen whether you plan for it or not
Any payment processor, insurer or enterprise partner will ask. Budget the penetration test in week 13 rather than discovering it during a partnership conversation six months later.
What you just used
Every screen in the demo — upload with a live extraction pipeline, the decoded tri-merge report, the dispute center with approval and tracking, the coach, the action plan, education, moderated community, subscriptions, and the full admin console — was built to show what MVP 1 looks like when it’s finished, not what a wireframe of it looks like. It runs on fixture data, and the architecture above is what makes those screens real.
Back to the demo