IEP Translator

Upload an IEP, 504, FBA, BIP, evaluation, or progress report. Beacon breaks it down in plain language.

When to use this

Use IEP Translator when you have a sped document and want to understand it without spending an hour cross-referencing acronyms. Works on any of 9 document types: IEP, 504 plan, progress report, FBA, BIP, evaluation, PWN, transition plan, or a generic fallback if Beacon can't classify cleanly. Original goes nowhere, stays on your device for the upload; only the extracted text reaches the model. Beacon classifies, extracts the structure (goals, services, accommodations), and explains each section in parent-language.

How it works

  1. Upload the document

    PDF, JPG, PNG, or HEIC up to 4 MB per file. Multi-page PDFs are read page-by-page so a 30-page IEP works the same as a 3-page progress report.

  2. Beacon classifies what it is

    First pass detects the document type (IEP, 504, FBA, etc.) with a confidence score. If confidence is low, Beacon asks you to confirm instead of guessing.

  3. Plain-language breakdown

    Beacon translates the dense legal/clinical sections into parent-language paragraphs you can actually use: what this goal means, why this accommodation is here, what's missing if anything.

  4. Auto-link past versions

    Upload last year's IEP after this year's, and Beacon offers to link them as parent โ†’ child in a version chain. You can see what changed.

What Beacon stores when you use it

iep_documents: Each upload is one row. V2 adds a discriminator column so the table holds all 9 doc types, plus parent/supersedes chains so you can keep a version history per child without confusing Beacon.

ColumnTypeExample
idUUID
ae7c...
Primary key.
user_idUUID
your-user-id
RLS-locked. Nobody else can read it.
document_typeTEXT
'iep'
One of: iep / progress_report / plan_504 / evaluation / fba / bip / pwn / transition_plan / generic.
derived_nameTEXT
'2025-26 IEP'
Beacon generates this from the meeting date and doc type.
extractedJSONB
{ goals: [...], accommodations: [...], ... }
Structured per-type Zod-validated payload.
classification_confidenceNUMERIC(3,2)
0.92
0.00-1.00. Below ~0.75 Beacon asks you to confirm the type.
parent_document_idUUID, nullable
โ†’ last year's IEP
Links a progress report to the IEP it reports against, etc.
supersedes_idUUID, nullable
โ†’ prior 2024-25 IEP
Links this year's IEP to last year's. Same doc type chain.
created_atTIMESTAMPTZ
2026-05-15 14:02:11 EDT
When you uploaded.

A real example

Marcus uploads his daughter's new IEP from the May meeting. He'd uploaded last year's IEP a few months ago. Beacon stitches the chain automatically:

whennametypechain
2026-01-102024-25 IEPiep(root)
2026-03-15Spring '25 Progress Reportprogress_reportparent: 2024-25 IEP
2026-05-152025-26 IEPiepsupersedes: 2024-25 IEP

What Beacon auto-knows

  • The document type (one of 9) with a confidence score.
  • Goals, services, accommodations, present-levels, and key dates (structured per type).
  • Which uploads belong to the same child (version chain via parent / supersedes links).
  • Your subscription tier and remaining IEP Translator quota.

What Discuss with Beacon adds

  • Beacon attaches the breakdown to your chat so you can ask follow-up questions without re-pasting.
  • Compare this year's IEP to last year's: 'What changed in the goals?'
  • Draft parent-voiced responses: 'help me write a PWN response refusing the placement change'.
  • Spot what's missing: 'should there be a behavior plan referenced here?'

Try these with Beacon

Open IEP Translator in Beacon โ†’

Related guides