Back to News & Insights
Artificial Intelligence October 5, 2026 · 7 min read

I Built an AI That Reads Eviction Notices and Refuses to Lie to You

A weekend AWS build for the Zero to Shipped hackathon. Textract reads the notice, code finds the facts, and Bedrock only narrates, so it can't lie about your deadline.

I Built an AI That Reads Eviction Notices and Refuses to Lie to You

This project was built for the AWS Zero to Shipped hackathon. Category: Social Good. Lane: Community. I built the whole thing over a weekend with an AI coding agent connected to AWS.

I spent the weekend building one small app for the AWS Zero to Shipped hackathon. It reads an eviction notice and tells you the one date you cannot miss. Here is how the idea started, what I used, who it is for, and the one rule that shaped every line of code.

My first idea was an "AWS account report card", a tool that grades your account on security and cost. I researched it for a few hours and killed it. Prowler, 6WAF, and AWS Trusted Advisor already do that, and the judges are AWS Solutions Architects who know those tools cold. Low originality, bad odds.

So I scraped the field. Over 240 projects were already submitted. The crowd was DevOps tools and student study assistants. The gap was something else: a trust-first app for people who get hit by a scary document and have no one to help them read it.

Then I found the number that would not leave me alone. Roughly 1 in 4 eviction cases end in a default judgment (MLRI, The Default Project). The tenant does not lose on the merits. They lose because they never responded in time. The same research says those tenants are more likely to have a disability, to speak a language other than English, and to have little access to technology.

The Furman Center summed it up in one line: "half the battle is just showing up."

So the job was simpler than a lawyer-bot. Make one fact impossible to miss: the deadline on the letter.

You paste the eviction notice you received. DueDate gives you back, in your language: The one deadline you cannot miss. A dated checklist of what to do before it. Your rights, but only the ones your notice actually supports. An honesty panel: "what your notice does NOT say", so nothing is assumed. Links to real free legal aid near you.

An eviction notice is read by someone who often cannot check whether the answer is right. If my app says "you have until January 12" and the real date is January 9, I have not helped. I have hurt them.

So the whole system has one rule: the AI model is never allowed to decide a fact.

Here is the opinion that drove it, and I think most document-reading AI apps get this backwards. The usual pattern hands the whole document to the model and asks it to "extract the deadline and explain it." That makes the model the source of truth for a fact a frightened person cannot check. Wrong job for the model. The model should own language, not facts. Code should own facts.

Dates, dollar amounts, the notice type, the computed deadline. All of that comes from plain code, not from a language model. The model only translates and simplifies the facts after the code has already found them. If the code cannot find a fact, the model is not allowed to fill the gap. It has to say the notice does not state it, and point to free help instead.

One honest limit, because the claim is strong: Textract can still misread a photo of a crumpled notice. So DueDate shows the exact line it read and its confidence, and lets you click any answer to see the line behind it. It cannot invent a fact, and when it is unsure of what it read, it shows you so you can check against the paper in your hand.

Textract reads the notice and gives each line an id (L1, L2, L3) with a confidence score. Those ids are the citation anchors. No id, no citation, nothing on screen.

The engine is code. It classifies the notice by matching rules, pulls out the amount and the parties, and computes the deadline. The tricky case is a notice that says "within THREE (3) days" and "dated January 6, 2026". There is no deadline date on that paper. A lazy build asks the model to guess it. Mine reads the day count from one line, the notice date from another, adds the days by a documented rule, and labels the result as computed with the rule shown on screen. If either input is missing, it produces no date at all.

Bedrock only narrates. I used Nova 2 Lite, cheap and multilingual. It rewrites the facts in plain language at about a sixth-grade reading level, in English or Spanish. After it responds, I throw away any sentence whose fact id is not real. A prompt is a request. A filter is a guarantee.

The last step is not AI. It is a small directory of real free legal aid, picked by the state read off the notice.

Eight of these pass with no AWS calls, so anyone can clone the repo and prove the guarantee in seconds:

Want to discuss this further?

Book a free strategy call with our team to see how these insights apply to your specific business goals.

Book a consultation