Skip to content
The PREPARE resource review screen: AI-recommended resources by category, with checkboxes for a person to confirm.

2025 · Engineering

PREPARE

Cut parole support letters from 3+ hours to under 30 minutes for Maryland's reentry case managers. Design-engineer, 0→1.

Design-engineer · B'More Designful

Agentic RAGHuman-in-the-loopClient intakeResource database

Results

3 hrs → 30 min per letter200+ resources centralized<$100/mo to run

Context

Maryland releases about 3,400 people a year from state custody, and roughly one in five returns to prison within a year. Getting released people housing, treatment, and work is the job of case managers across 7 state facilities and 24 local departments of correction.

PREPARE, a reentry nonprofit, asked me to digitize that workflow with its director. I owned product, design, and engineering. The users were case managers and reentry support specialists; the client was the nonprofit and, through it, the state's reentry effort.

Constraints

  • 31 locations with different equipment and no IT support, so anything that needed per-site setup was out.
  • A nonprofit budget: running costs had to be close to nothing.
  • Parole packets contain legally mandated language that can't be paraphrased.

Problem

The most expensive symptom was the parole support letter. Each one took a case manager three or more hours to draft, working from paper intake forms, Salesforce data entry, and printed resource flyers. More than 200 programs and 500 supporting documents lived in places nobody could search.

A letter is only as good as the information behind it, so speeding up the writing alone wouldn't have fixed much.

North starTime for a case manager to get from intake to a reviewed, send-ready support letter.

Decisions

Decision 01

Build the whole chain, not just the letter writer

Options
A standalone tool that turns case notes into a letter, or an end-to-end system: intake, resource database, letter generation, review.
Evidence
Letter quality depended on structured intake upstream and a searchable resource base downstream.
Chose
End to end: a digital needs assessment, one central resource database that also serves as the retrieval corpus, RAG letter generation, and expert review.
Didn't build
A paste-in-your-notes letter generator.
Cost
A much larger 0→1 surface before the first useful letter.
Decision 02

Host it centrally instead of at each site

Options
Local Ollama models at each location, or a hosted stack.
Evidence
Setup across 31 locations was impractical.
Chose
One deployment on AWS EC2 and Bedrock, under $100 a month.
Didn't build
Per-site local model installs.
Cost
Every site now depends on one cloud deployment and a network connection.
Decision 03

Keep a person in the loop

Options
A larger model working alone, or a smaller, cheaper model with expert review.
Evidence
In testing the model invented resources, missed tone, and stated inaccurate facts.
Chose
A smaller model plus a subject-matter-expert review step between generation and delivery. The specialist stays the author.
Didn't build
Automatic sending of generated letters.
Cost
A person still spends about 30 minutes per letter instead of zero.
Decision 04

Take the AI out of the parts that can't be wrong

Options
Letting the model write the whole letter, or restricting it to a narrow extraction task.
Evidence
The model paraphrased legally mandated paragraphs and could invent phone numbers or addresses in the housing commitment that opens each letter.
Chose
Fixed structure lives in Python HTML templates. The model only extracts resources in a rigid format that a deterministic parser turns into HTML. The housing sentence is built in plain Python from existing data, with fallback wording when data is missing.
Didn't build
Free-form full-letter generation.
Cost
Less flexible letters, and every new letter type needs a new template.

Solution

Three pieces carry the decisions. A resource management interface migrated 200+ resources and 500+ documents into one database, scoped by state, county, and facility, and doubling as the retrieval corpus. The letter pipeline combines templates, constrained extraction, and a deterministic parser. And the embedding model is pinned to an exact snapshot, with a canary sentence checked at startup so a silent model upgrade can't quietly degrade resource matching.

The PREPARE needs assessment: a five-step form with the housing plans step open.
Decision 1: the needs assessment that feeds the whole chain, five short steps with autosave.
The PREPARE resources library: search, category filters, and a grid of indexed re-entry resources.
Decision 2: the central resources library, which also serves as the retrieval corpus.
The PREPARE resource review screen: AI-recommended resources by category, with checkboxes for a person to confirm.
Decision 3: a person reviews the AI-recommended resources before the letter is generated.
The PREPARE letter editor, with the letter text redacted and the cited resources listed beside it.
Decision 4: the generated letter in an editor, with every cited resource linked to its source. Letter text is redacted.

Outcome

Drafting a support letter dropped from 3+ hours to about 30 minutes. The system runs on under $100 a month of infrastructure, and 200+ resources with 500+ documents now live in one searchable place.

Statewide, the project estimates about 8,500 case-manager hours a year freed (roughly 4 full-time roles) and $20M+ in annual savings, assuming fewer people return to prison. Those are projections, not measured results.

Do differently

  1. Put the review step in the first design. I added it after testing showed hallucinations; it's the reason the system went from a demo to something usable in production.
  2. Decide up front which parts of the pipeline shouldn't be AI. Templates and the housing sentence should have been code from day one.
  3. Track letters written per site from launch, so the statewide savings rest on measured usage rather than a projection.
Next project Infilla