What’s shipped, newest first. Built live, in the open.
Listening harderSeptember 2026
A city tester filed eight deliberately awkward reports and wrote up everything that went wrong. Every one of those failures is now fixed and, more importantly, turned into a permanent test the software runs against itself. The result: a resident can say “I don’t know”, mumble a street name, refresh the page mid-sentence, or simply say something nice about the city — and none of it breaks the report. Signing up now gets you a real reply, the whole resident side moved into daylight, and the team can start inviting beta testers with one click.
For residents
“I don’t know” is now an answer — When you can’t say whose land a fallen tree is on, the assistant records exactly that and moves on — the crew can see for themselves once they arrive. Previously it re-asked the same question until you invented an answer; one tester filed knowingly wrong data just to escape. The one exception is the location itself: a crew can’t drive to “unknown”, so there it patiently helps you find a landmark or cross-street instead.
Tapping an answer always works — Choosing “Parkway” used to be silently ignored, re-showing the identical question forever. Shorthand answers now resolve safely against the full option, and if what you said is genuinely ambiguous it asks again rather than guessing.
It stops asking what you already said — The assistant now reads your whole conversation, not just your latest message, and credits what your words establish: “people are swerving into the grass to avoid it” means it is a hazard; “uprooted” means the tree came down; “on the sidewalk” means public land. It no longer asks you to diagnose which part of a traffic signal failed — that is the department’s job.
Two corners, five miles apart — named the way you would — Peoria has two Knoxville/Frye intersections. Where a place is ambiguous you now see both pins on a small map, labelled by what is actually there — “near Kroger” versus “near McDonald’s” — rather than “N Frye Rd” versus “E Frye Ave”, which nobody standing at the corner can tell apart. Tap the right one.
An honest pin when the corner can’t be found — If a street name gets garbled in transcription and only the whole road can be matched, the map says so plainly instead of pinning a random point with full confidence — and you fix it by simply saying the cross-streets again.
A page refresh no longer erases your report — An accidental reload used to wipe the entire conversation. It now survives — messages, answers, map, even an in-progress review — and clears itself only once you file.
Compliments count — Saying something kind about the city or a department used to be treated as small talk and went nowhere. It is now a real report, kept in your own words and routed to the Clerk to forward to whoever earned it.
One question at a time, and confirmations you can say no to — Paired questions (which people answered only half of) are gone. Whenever the assistant summarises what it heard and asks if that is right, there is always a way to say no and fix it — never two ways to say yes.
Daylight — Every resident page — the front door, the reporter, your reports, the live wall, these notes — now opens in a warm, light look by default, with a toggle for the dark version. The map finally looks like it belongs on the page.
Your exact words are kept — The description on the case is now what you said, not a summary of it, whenever you describe the problem up front. This closes a gap from the August notes.
For the city
Signing up gets a reply — Requesting early access at neuronify.ai now sends the person a welcome email on the spot and notifies the team immediately. Before, requests sat silently in a table.
Inviting beta testers is one click — The admin page shows every request with its status — awaiting, invited, or already signed in — and an Invite button that sends a “you’re in” email pointing the tester at the reporter. Nothing is marked invited until the email has actually been delivered, so a failed send is retried rather than lost.
Machine-readable queue — The same waitlist is available to the team’s automation through a small API — list who is waiting since a given time, invite by email — using the same shared credential as the telemetry feed.
The tester’s tickets are now the test suite — All eight of the city tester’s reports, plus our own voice-session regressions, run against the live assistant on demand and assert what must be captured and what must never be re-asked. Every prompt change is checked against them before it ships. On its first run it caught three real gaps, all fixed.
A better scale for small dumping — “Less than a trash bag” now sits between “a few items” and “a pickup-truck load” — a dozen broken bottles finally has an answer.
Trust and security
Nothing fails open — Every new administrative endpoint denies by default: a missing or wrong credential gets a bare 401 with no hint about which half was wrong, and credentials are compared in constant time so timing cannot leak them. If a configuration value is absent, the gate closes rather than waving requests through.
The photo-link hole, closed before anyone found it — Not previously written up: before the August release, an internal adversarial review found that the private-photo signing gate checked which storage host a link pointed at but not its path — meaning an anonymous caller could have had us sign a link to any object we could reach — and that a percent-encoded path could decode into an outside address, an open redirect. Both were fixed before that release shipped, along with a case where a hedged “I think I smell gas” slipped past the emergency detector. We are noting it now because a fear people rightly have about civic software is exactly this class of quiet exposure, and the honest record is that it was hunted, found, and fixed by review, not by an incident.
The signup form can’t be turned into a weapon — Any address can ever receive exactly one welcome email — a repeat submission mails nobody — so the form cannot be used to bombard someone. Submissions are rate-limited per address and capped in size, and anything a visitor types is escaped before it reaches an inbox.
No resident text in the metrics — Telemetry records shape only — how many turns, which questions were still open, whether a report was finished or abandoned — never what anyone said. Full-text session logging is deliberately not built until retention and scrubbing rules are settled with the city.
Cross-origin stays closed — State-changing endpoints carry no permissive cross-origin headers; they answer their own site only.
Known gaps
Emergency phone numbers are still not filled in — The hard stop points to 911 and names “the gas utility’s emergency line” without a number. Real numbers must be added and dialled before any pilot.
Quick-reply chips can linger after a category change — Unchanged from August: correct the category and the previous suggestions may still be on screen. Type your answer rather than tapping one.
Water reports — Still land with a city desk rather than being referred out to the private utility.
Staff pages are still dark — The department desk and admin pages keep the original dark look until they get their own daylight pass.
No “start over” button — To abandon a conversation and begin fresh in the same tab, open a new tab; the conversation is kept on purpose so a refresh never loses it.
Scope right now
Twenty-three report categories now — the original twenty-two plus Compliments — across Peoria’s departments. The assistant runs one question per turn, treats “unknown” as a first-class answer for anything a crew can settle on site, and is measured against a fixed set of real tester conversations before any change ships. The waitlist has a lifecycle (awaiting → invited → signed in) that both the admin page and the team’s automation can act on.
Coming next
- The department desk and admin pages in daylight
- Real emergency contact numbers, verified by dialling
- A category audit with the city — debris, compliments and whatever else the 311 list holds that we don’t
- Full-text session logging, once retention and scrubbing rules are agreed
- Referring water reports out to the private utility automatically
- A “start over” control in the reporter
Smart intakeAugust 2026
The conversation got a great deal better at listening. Tell it everything in your first sentence and it will stop asking you to repeat yourself, put a real map pin under the address it understood, and hand the department a photo they can actually open. Reports also stop disappearing on you: this browser now remembers what it filed.
For residents
Say it all at once — A first message like “a big pothole at Fry and Knoxville, in the traffic lane, about the size of a dinner plate” is read in full — location, lane and size are captured, and you are only asked for what you genuinely left out.
Find your report again — The finish screen gives you a link, a copy button and a share button instead of a bare reference number. This browser remembers what you filed, so /track lists your reports even if you lose the link. It stays on your device — we still don’t have your name — and “Forget these” clears it.
The pin sits with the address — The resolved location appears directly under the address field, as “this is where the crew will go”. Edit the address and the pin follows it. If a phrase can’t be placed on a map, it says so rather than dropping a pin in the middle of the city.
Typo-tolerant locations — “Fry and Knoxville” resolves to Knoxville Ave & E Frye Ave.
An honest answer about photos — Where a photo is required, it asks for one — and if you can’t provide one, it asks why and sends that to the crew instead. It will never promise you can add a photo later, because you can’t.
Emergencies stop the form — Gas, downed power lines, a water main break or an injury break off intake immediately with a Call 911 link, and tell you to get clear before they tell you to call. Ordinary reports — a leaking hydrant, a downed branch — are never interrupted.
You’re told before you speak — Both doors say up front that the conversation is saved with your report, can be read by city staff, and may form part of the public record.
For the city
Photos you can open — Required photos now render on the case and open full size, served through short-lived signed links from private storage. The resident can see their own photo too.
The address the crew will drive to — Cases show the resident’s own words and, beneath them, the resolved address with coordinates, linked to a map. If the resident corrects the address on the review screen, the record follows the correction.
The conversation is on the case — The full intake transcript is preserved on reports filed through the chat, alongside the change log.
Plain names, not internal keys — Titles read “Pothole”, never “Intake Pothole”, on both the resident and staff sides.
The alert goes out when the report is filed — A department is notified at the moment of filing, rather than when someone happens to open the case.
Known gaps
Emergency phone numbers are not filled in — The hard stop points to 911 and says “the gas utility’s emergency line” without a number. Real numbers must be added and dialled before any pilot.
Quick-reply chips can linger after a category change — If you correct the category, the previous category’s suggested answers may still be on screen. Type your answer rather than tapping one.
Your words are summarised into the record — The description stored on the case is the assistant’s summary of what you said, not your sentence verbatim. The full transcript is kept alongside it.
Water reports — Peoria’s water is a private utility; those reports currently land with a city desk rather than being referred out.
Scope right now
Around 22 report categories are configured across Peoria’s departments — potholes, street lights, graffiti, noise, trees, code enforcement and the rest. A report now goes straight to the department that owns it, with no front-desk step in between, and the department signs off on its own portion. Categories, department ownership and desk rosters are all data, so adding or re-pointing one is configuration rather than new code.
Coming next
- Outbound text/email notifications (today’s messages are delivered in-app)
- Subscribe to updates on a report, without giving up anonymity
- Short human-readable reference codes instead of long identifiers
- Referring water reports out to the private utility automatically
- A city-side console for editing categories, departments and desks
v2 · Private betaJune 2026
The first end-to-end civic workflow: a resident files a report by voice or text, the city routes it through real departmental approvals, and everyone can see exactly where it stands — and how long each stage took.
For residents
Speak or type to file a report — A short conversation fills out the form, asking only for what’s still missing.
Review before it’s official — You confirm the details — that’s the moment the city’s official record begins.
Sign in with Google — One click to join the private beta.
Your reports — Track status, and when a department asks for more, fix just that field and resubmit — without redoing the whole thing.
Live tracking — A status page shows each review stage and the time spent with the city vs. waiting on you.
For the city
Department console — Each department signs in and sees exactly what’s waiting on it — nothing else.
Sequential steps, parallel sign-offs — Reviews run in order; within a step, departments (e.g. Public Works + Fire) act in parallel, and every one must approve before it advances.
Three clear outcomes — Approve, request a re-submit on specific fields, or deny with a required reason.
Captured once — An approved portion locks — only the part a department bounces loops back to the resident.
One message per stage — Residents hear at receipt, at each completed stage, and at the final outcome — not a buzz per department.
Under the hood
Append-only record of truth — Nothing is ever overwritten. Every step — including a resident’s edits — is logged as a new event.
Time, split by who’s holding it — Every stage is measured as “city time” vs. “resident time.”
Operator dashboard — Volumes by status, average city-vs-resident time, where time goes per step, re-submit rate, and who’s holding the queue right now.
Anonymous by design — The public record carries no personal info; tester identity is kept in a separate layer.
Scope right now
Right now the only configured report type is Pothole reports (Intake review → Departmental review by Public Works + Fire). The whole system is form- and workflow-driven, so adding new report types — graffiti, streetlights, sidewalks — is configuration, not new code.
Coming next
- Outbound text/email notifications (today’s messages are delivered in-app)
- More report types beyond potholes
- Per-person department sign-in (today departments use shared passcodes)