-
-
Select any figure and FinePrint highlights the exact words it came from, with the award's renewal conditions and every line it quotes.
-
The school says $45,400 in "financial aid." Only $16,900 is aid you don't repay, and one question the letter never answers decides $20,000.
-
A missing cost is never $0. Your $1,500 estimate stays labelled yours, and $5,500 of loans leaves $10,400 — the cost itself is unchanged.
-
What if the scholarship isn't renewed? $60,000 more to cover across four years, recalculated in the browser with no new model call.
-
Upload your aid offer, or open a sample. FinePrint separates gift aid, loans, work-study and costs, and shows where each number came from.
Inspiration
Financial aid offers are supposed to help students and families understand whether they can afford college. But the number at the top of the page rarely tells the whole story.
An offer can combine scholarships and grants with loans, work-study, estimated costs, and other terms, all presented differently depending on the school. That leaves students with a deceptively difficult question:
What will college actually cost me?
This isn't a rare problem. Sallie Mae reported in 2026 that only 36% of families said their financial aid offer included the full cost of attendance, while 20% didn't realize loans could be included in an aid package. Inside Higher Ed's 2025 Student Voice survey similarly found that only 27% of students clearly understood their full cost of attendance. Among first-generation students, 46% said an unexpected expense of $1,000 or less could threaten their ability to stay enrolled.
I built FinePrint to turn a financial aid offer into the full financial picture behind it, while letting students verify where every number came from.
What it does
Upload a financial aid offer PDF and FinePrint transforms it into an interactive financial analysis.
On my primary sample letter, the school presents $45,400 in financial aid. FinePrint shows that only $16,900 of it is confirmed aid that doesn't need to be repaid. $5,500 is offered as loans, $3,000 is work-study that must be earned, and a $20,000 scholarship has no stated period at all. The letter never says whether it's $20,000 a year or $20,000 across four years, a $60,000 difference.
FinePrint refuses to guess. It asks.
Answer "per year" and confirmed gift aid becomes $36,900, leaving an estimated $14,400 to cover in year one.
From there, FinePrint helps students:
- Separate grants and scholarships from loans and work-study
- Calculate the estimated amount left to cover
- Identify missing or genuinely ambiguous information instead of silently guessing
- Add their own estimates for costs their offer leaves out
- Explore how loans and work-study could finance the remaining amount without pretending they make college cheaper
- Project the offer across four years and test assumptions like cost growth and scholarship renewal
The Financial X-Ray is the trust layer behind the analysis. Students can select a financial fact and trace it directly to the exact evidence in the original PDF, then select the source evidence to return to the corresponding analysis.
Two synthetic offer letters with different layouts are built into the live demo, so FinePrint can be explored without uploading a document.
How I built it
FinePrint uses AI for one narrow part of the system: interpreting the inconsistent language and structure of financial aid documents. The architecture around that model, including document extraction, evidence verification, financial modeling, calculations, and source linking, is handled by software I built specifically for FinePrint.
The core pipeline is:
PDF → Text & Geometry → AI Interpretation → Evidence Verification → Canonical Financial Model → Deterministic Analysis
When a PDF is uploaded, PyMuPDF extracts its text and document geometry into source lines. GPT-5.6 Terra then interprets those lines and proposes structured financial claims, with GPT-5.6 Sol reserved as a fallback for specific validation failures. Each claim includes information such as its category, amount, period, exact supporting quote, source-line IDs, and relevant conditions.
But the model doesn't get the final say.
I built a deterministic evidence gate between AI extraction and the financial engine. Every proposed financial fact must resolve back to the extracted document and pass quote and amount verification before it can enter FinePrint's canonical financial model. Claims that fail verification are excluded from the calculations entirely.
AI can propose a fact. It cannot make that fact true.
The same architecture powers the Financial X-Ray. The model never generates PDF coordinates. Instead, it identifies supporting source lines, and FinePrint deterministically resolves those verified lines back to the geometry extracted from the PDF. That's what makes it possible to move bidirectionally between a normalized financial fact and the exact place it came from in the original document.
After verification, FinePrint normalizes the document into a canonical financial schema that keeps costs, grants and scholarships, loans, work-study, ambiguous items, user estimates, derived results, and scenario assumptions separate. This prevents shortcuts such as treating a missing cost as $0, counting work-study as guaranteed upfront aid, or making a loan appear to reduce the actual price of college.
Once the document reaches that verified state, AI leaves the loop.
I built the financial engine as deterministic TypeScript running in the browser. Resolving an ambiguity, accepting or declining a loan, counting work-study, adding a missing cost, changing cost growth, or toggling scholarship renewal requires 0 additional model calls and 0 additional network requests.
FinePrint also deliberately separates cost from financing:
Amount to cover = Cost of attendance - Gift aid
Still to cover = Amount to cover - Loans accepted - Work-study counted
Accepting a loan changes the second number, not the first.
Borrowing money doesn't make college cheaper.
I built FinePrint with Next.js, React, TypeScript, Tailwind CSS, Zustand, Zod, FastAPI, PyMuPDF, Pydantic, and the OpenAI Responses API. The frontend and protected extraction API are deployed separately on Vercel, with persistent rate limiting and quotas protecting public uploads.
So while AI is an important component of FinePrint, the system is intentionally not:
PDF → LLM → Summary
It's:
PDF → Structured Extraction → AI Interpretation → Evidence Verification → Financial Model → Deterministic Computation → Source-Linked Interface
AI interprets. FinePrint verifies. Deterministic code does the math.
Challenges I ran into
The hardest problem wasn't getting an AI model to read a PDF. It was deciding when not to trust it.
Financial aid offers contain totals, subtotals, semester amounts, annual amounts, payment schedules, loans, work-study, mutually exclusive rates, and sometimes genuinely incomplete information. A plausible extraction can still produce completely wrong financial math.
For example, one letter with separate Fall and Spring amounts exposed a double-counting problem. A real university sample contained a Fall payment figure that could be mistaken for another cost on top of its annual expenses. Another layout contained both in-state and out-of-state tuition rates, even though those amounts are mutually exclusive.
I could have tried to solve each problem by making the model prompt longer. Instead, I treated them as software problems.
Each failure became a deterministic invariant, verification rule, or regression test. I built a replayable corpus spanning five different financial-aid letter layouts, including cases involving semester amounts, payment schedules, missing costs, ambiguous periods, rollups, and mutually exclusive rates.
That led to rules FinePrint enforces regardless of what the model suggests:
- Missing cost ≠ $0
- Loan ≠ gift aid
- Work-study ≠ guaranteed upfront money
- Payment schedule ≠ additional cost
- Mutually exclusive rates cannot both be counted
- Rollup totals cannot be counted alongside their components
- Unknown period ≠ inferred period
- User estimate ≠ source fact
This means FinePrint's reliability doesn't come only from asking a model to "be careful." It comes from software that limits what model output is allowed to do.
Accessibility was another important challenge. Financial categories use labels and icons in addition to color, evidence controls are keyboard-accessible, and I tested the analysis across desktop and mobile layouts. The goal was to simplify a complicated financial document without breaking the chain between the answer and its evidence.
Accomplishments that I'm proud of
I'm most proud that FinePrint became more than a PDF summarizer. I built a financial-analysis system where AI can interpret an inconsistent document without being blindly trusted with the result.
A few accomplishments I'm especially proud of:
- A trust boundary around the model: AI proposes claims, but deterministic software decides whether those claims are supported strongly enough to enter the financial model.
- Evidence-linked analysis: every trusted financial fact can trace back to source text in the original offer through the Financial X-Ray.
- Uncertainty without guessing: if information genuinely isn't in the document, FinePrint can ask the student instead of silently choosing an interpretation.
- A deterministic financial engine: after extraction, students can explore loans, work-study, missing costs, ambiguities, and four-year assumptions with 0 additional model or network requests.
- Built beyond one perfect demo: I created a replayable regression corpus spanning five different financial-aid letter layouts and turned extraction failures into deterministic rules and tests.
- A complete solo-built product: during the hackathon, I built the Next.js frontend, FastAPI extraction service, PDF geometry pipeline, structured AI extraction, evidence-verification layer, canonical financial model, TypeScript financial engine, Financial X-Ray, responsive and keyboard-accessible interface, protected live uploads, regression tests, and deployment.
What I learned
The biggest lesson was that using AI in a high-trust product is less about giving the model more responsibility and more about designing boundaries around what the model is allowed to decide.
AI is useful for understanding the inconsistent language and structure of financial aid offers. Deterministic software is better for verification and financial calculations. Combining the two gave me a system that can handle varied documents while still showing users exactly why a number appears in their analysis.
I also learned how important uncertainty is as part of the user experience. Sometimes the correct answer isn't another prediction. It's telling the user that the document doesn't provide enough information and asking them to clarify it.
Building the regression corpus reinforced another lesson: improving an AI-powered product doesn't always mean improving the AI. Some of FinePrint's most important improvements came from moving responsibility away from the model and into deterministic software.
What's next for FinePrint
FinePrint currently supports text-based financial aid offer PDFs. Scanned or image-only documents aren't supported yet, and I intentionally chose not to hide that limitation behind unreliable OCR during the hackathon.
Next, I'd like to expand document support and let students compare multiple financial aid offers side-by-side while preserving the same evidence-first architecture. A comparison experience could normalize multiple schools into the same financial model while still allowing every value to be traced back to the offer it came from.
Ultimately, FinePrint isn't trying to make financial decisions for students.
It's trying to give them a financial picture they can actually understand, explore, and verify.
Built With
- fastapi
- next.js
- openai
- pdf.js
- pydantic
- pymupdf
- python
- react
- redis
- tailwind-css
- typescript
- upstash
- vercel
- vitest
- zod
- zustand

Log in or sign up for Devpost to join the conversation.