About This Site

Your City Hall.
In Plain English.

This is not a city website. It's an independent project built by a Two Rivers resident to help you understand what's actually happening at city hall — using nothing but the city's own public documents.

Residents deserve to understand what their city government is doing. That shouldn't require attending every meeting, reading every packet, or already knowing how municipal government works.

The city posts documents because state law requires it. But posting a 100-page PDF is not the same as helping people understand what's in it. The information is technically public, but it's not practically accessible — not for people with jobs, families, and limited time.

This site exists to close that gap. It reads the documents so you don't have to. It explains what happened in plain language. It tracks issues over time so you can see the whole story, not just one meeting's snapshot. And it's built to ask the questions that residents would ask:

  • Who benefits from this decision?
  • Does the city's explanation match what actually happened?
  • Has this been deferred three times without resolution?
  • Why did this quietly disappear from the agenda?

None of that is adversarial. It's what accountability looks like. The city does its job, and residents get to see how it's going.

Agendas & Packets
The city usually posts new meeting dates and documents on Friday afternoons. We'll have them summarized by Saturday morning.
Council Meeting Recaps
City Council meetings and work sessions are recorded and posted to YouTube, usually Monday nights. We pull the transcript and have an early summary ready by Tuesday morning. Council meets roughly every other week — a regular meeting one Monday, then a work session two weeks later.
Official Minutes
Official minutes for council meetings are typically posted the Friday before the next council meeting. Subcommittee minutes vary — anywhere from weeks to months. When they arrive, we update the summaries with the full official record.
  1. The city posts meeting documents. Agendas, meeting packets, and official minutes. Wisconsin's Open Meetings Law (Wis. Stats. §19.84) requires them to be public. That's the only source we use — nothing private, nothing leaked.
  2. We check the city's website every night. New meeting dates, new agendas, new minutes — we download and save copies of the original PDFs. If the city ever moves or removes old documents, the copies are still here.
  3. AI turns 100-page packets into something you can actually read. City meeting packets are long, technical, and confusing — especially if you're not used to how local government works. The AI reads them and writes plain-language summaries that pull out the parts that matter to residents. Every claim links back to the original document so you can check it yourself.
  4. Issues are followed across months of meetings. When the city talks about lead pipe replacement in January, votes on funding in March, and hires a contractor in June — those aren't three separate items buried in three different agendas. They're one story. This site connects them automatically so you can see the whole picture without having to attend every meeting or read every set of minutes.
  5. You get what the city's website doesn't give you. The city posts documents. This site reads them for you, explains what happened and why it matters, tracks how issues evolve over time, and surfaces the things that affect your taxes, your neighborhood, and your daily life — without requiring you to sit through a three-hour meeting or decode a 50-page PDF.
"Who's behind this?"
A Two Rivers resident who believes that residents deserve to know what's happening at city hall — and that right now, there's a real gap between the information leadership has and the information you have.
This isn't backed by a political group, a business, or a grudge. It comes from a straightforward belief: local government works better when residents can see what's actually happening, and someone with the ability to build that should.
No ads, no sponsors, no city funding. One person paying out of pocket because this needed to exist.
"Can I trust what the AI writes?"
A lot of work went into making sure the AI is fair and grounded. It's given detailed written instructions about Two Rivers — what residents care about, what's routine, how local governance actually works here. Those instructions were written by someone who lives here and pays attention.
The AI is told to separate facts (votes, motions, dollar amounts) from how the city frames things (staff summaries, agenda titles). It's also told to never accuse anyone of bad faith, never invent conspiracies, and never speculate about people's motives. It questions decisions and processes — it doesn't attack people.
Every summary links back to the original city document. If something looks off, you can read the source yourself. That's the whole point.
"What doesn't this cover?"
Routine business that doesn't affect your life — license renewals, proclamations, approving last month's minutes, things like that. The site focuses on what hits your taxes, your neighborhood, your streets, your water. If nobody showed up to talk about it and the vote was unanimous on something routine, it probably won't show up here.
"Who decides what shows up on the front page?"
Not a person. The system scores every issue automatically based on how much it matters to residents. The biggest factors:
  • Does it hit your household budget — property taxes, utility rates, new fees?
  • Does it change the physical character of your neighborhood, downtown, or the lakefront?
  • Did residents actually show up to speak about it?
  • Was the vote close or divided?
  • Are there questions about who benefits from a decision?
Routine dollar amounts alone don't push something up — a standard loan renewal stays low even if it's half a million dollars. But a rezoning that changes what gets built next to your house, or an appointment to a board that controls spending, scores high because those are the things that actually affect your life.

The Pipeline

Every night, we check the City of Two Rivers website for new meeting documents. When we find them, here's what happens:

  1. Discovery — New meetings, agendas, packets, and minutes are detected and downloaded. The original PDFs are saved as permanent copies.
  2. Text extraction — PDFs are run through text extraction (and OCR for scanned documents) to get machine-readable text, page by page.
  3. Topic detection — AI reads each agenda item and identifies which civic issues it relates to. New issues get proposed as topics; existing issues get linked to their ongoing record. This runs twice: once when the agenda is first posted (sparse context), and again when official minutes arrive weeks later (full context).
  4. Summarization — AI generates a structured summary of each meeting, separating key votes, highlights, public input, and per-item analysis. A separate pass generates rolling briefings for each topic that track the issue's full history.
  5. Impact scoring — Each topic is scored on a 1-5 scale based on how much it affects residents. This score determines what appears on the front page.
  6. Pruning — Standing agenda items that had no real activity (no vote, no discussion, no public input) are automatically detached from topics so they don't clutter the record.

New documents are typically processed and on the site within a day of the city posting them.

How the AI Is Instructed

The AI follows a set of written rules that govern how it handles city documents. The core principle is epistemic discipline — keeping three categories of information separate:

  • Factual record — Votes, motions, dollar amounts, dates. Must be traceable to a specific document. If it can't be tied to a source, it can't be stated as fact.
  • Institutional framing — Staff summaries, agenda titles, packet narratives, "recommended action" language. The AI treats this as the city's perspective, not as objective truth. When framing doesn't match outcomes or observable impact, the AI notes the discrepancy.
  • Civic sentiment — What residents appear to care about, based on public comment, repeated agenda appearances, and divided votes. Always presented as observation ("appears to," "recurs," "has been raised repeatedly"), never as established fact.

The AI is also given a detailed community context document that describes what Two Rivers residents care about, what's routine, and what local governance patterns matter — like how height-and-area exceptions can be used to bypass updating actual ordinances, or why the CDA's agenda isn't always substantive. This context shapes how summaries are written and what gets surfaced.

Impact Scoring

Each topic is automatically scored on a 1-5 scale that determines front-page placement. The scoring criteria are specific to Two Rivers:

  • Score 1-2: Routine procedural or institutional business — scheduled borrowing, vendor contracts at standard terms, routine capital
  • Score 3: Affects a specific neighborhood, street, or group — or household-proximate services like sidewalks, garbage, snow removal
  • Score 4: Household-budget impacts residents will feel (tax/rate/fee changes); physical neighborhood change (rezonings, CUPs, lakefront); governance changes on land-use or spending bodies; divided votes on score-3 items
  • Score 5: Major community-wide impact — rate changes, large rezonings, character-defining development, governance or conflict-of-interest questions

Modifiers: 3+ residents speaking on an item adds +1. A non-unanimous vote on a score-3+ item adds +1. Dollar amount alone does not raise the score — a $500K routine loan stays at 2.

Topic Lifecycle

Topics aren't tags — they're living records. Each topic has a lifecycle status that's automatically derived from its agenda appearances:

  • Active — appeared on an agenda recently, still being discussed
  • Recurring — comes back periodically (budget items, seasonal issues)
  • Dormant — hasn't appeared in a while, no resolution
  • Resolved — received a final vote or other concluding action

This is how the site can tell you that an issue has been deferred three times, or that something keeps coming back without resolution. The system also detects when topics disappear from agendas without explanation — silence is not automatically treated as resolution.

What Gets Filtered Out

Summaries skip procedural business: adjournment motions, minutes approval, roll call for remote participation, routine consent agenda items. One exception: closed session motions are always included. Wisconsin law (§19.85) requires transparency about what gets discussed behind closed doors, and residents should see that.

Standing agenda items that had no substantive activity at a meeting (no vote, no discussion, no public input) are automatically pruned from topic records so they don't inflate the history of an issue.

The Source Documents

Every meeting page on this site has a "Documents" section with the original PDFs from the city. We save copies because government websites sometimes reorganize, move pages, or remove old documents. The originals are always available here.

Relevant Wisconsin statutes:

Technology

This site is built with Ruby on Rails, PostgreSQL, and OpenAI's API for text analysis and summarization. Meeting documents are processed with poppler (PDF text extraction) and Tesseract (OCR for scanned documents). The source code, prompt templates, and editorial guidelines are all part of the same codebase — nothing is hidden behind a black box. YouTube auto-captions from recorded council meetings are used as supplementary context when available.