Inspiration

The UT Dallas First-Year Apply page packs every deadline and requirement into dense paragraphs. Dates sit mid-sentence, and required, recommended, and optional all look identical. For a first-time applicant — especially a first-generation student, or a reader with dyslexia, ADHD, or low vision — that layout is exclusionary: miss the buried date and you miss admission. I built ReadEasy so any student can point a bureaucratic school page at one tool and get back something actionable, with person-first language and the original always visible.

What it does

ReadEasy restructures any school page into formats a student can act on. Paste a URL — or raw page text for blocked sites — and get a split view: the cleaned original on the left, the accessible version on the right. Modes include Action checklist (tasks with urgency and deadlines as Step 2 of 4), Focus, ADHD micro-cards, Dyslexia/Bionic, Listen karaoke, Ask this page, Reading level and readability score, plus cosmetic toggles, history, and export. Live demo: https://readeasy-csc.vercel.app — code: https://github.com/GhostInHex/readeasy/tree/hackathon/csc. Lead demo: UT Dallas Apply; the IRS and USCIS pages show the same pipeline generalizes to aid and immigration text.

How I built it

One server route owns a four-stage pipeline: Fetch → Clean → Restructure → Render. Fetch grabs the HTML; Clean strips ads, nav, and scripts with Mozilla Readability plus jsdom (no AI). Restructure sends the cleaned text to OpenRouter with a strict JSON contract (title, summary, reading time, actionItems, sections) from lib/llm/prompt.ts, with grade-5, person-first, no-invented-facts rules. Render is client-side through a mode registry. The stack is Next.js 15, React, TypeScript, OpenRouter with fallbacks, browser speechSynthesis, and Vercel (no database, no auth).

Challenges I ran into

First, ssa.gov and some enrollment hosts return HTTP 403 to server fetches, so a raw-text paste path runs the identical restructure offline. Second, the no-hallucination constraint: urgency comes only from the page's own language and deadlines copy verbatim, with the original pinned on screen for verification. Third, demo reliability: cached fixtures (cleaned text plus screenshots) for the trio, schema-checked with verify:trio, so the demo works even if the network fails.

What I learned

School accessibility failures are structural, not motivational — the page never listed the steps. I learned to split deterministic work (cleaning, Bionic, readability scoring) from model work (restructuring), and to prompt the model as a rewriter with a validated schema and one retry. I also learned Simpler must mean easier words, never less of the page — keeping every deadline and amount is what makes a counselor trust it.

What's next

Next is a district pilot: pre-cache the top ten pages per school and add printable one-page checklists for counseling offices. AI disclosure: AI (OpenRouter LLM via lib/llm/prompt.ts with strict JSON schema, one retry, fallback models) only restructures already-cleaned page text; cleaning, Bionic, toggles, and karaoke are non-AI code, and every output is human-verified beside the original.

Built With: Next.js 15, React, TypeScript, OpenRouter, Mozilla Readability, jsdom, Vercel, browser speechSynthesis.

Provenance

Built on the ReadEasy Buildverse base (Sep 1–6) and extended for the CSC Back-to-School Hackathon (Sep 4–Oct 4 window) with the UT Dallas Apply school framing, fixtures, and AI disclosure.

Built With

Share this project:

Updates

Submission history