City Hacks · Challenge 2
A student reports a building problem to a tool-using AI agent over Telegram, a phone call, or web chat. The agent classifies it, asks for + confirms a real location, drafts a polished report, and — only after the student confirms — files a real CriticalAsset work order (due in 30 days), appearing live on the operator dashboard.
match_locationpropose_reportadd_change_requestNo jargon here. This is the simple version of what happens when a student reports a building problem — and how staff handle it. The three boxes below cover the big picture, how a student creates a request, and how the staff dashboard works.
A student notices something broken — a heater that won't turn on, a leaking sink. Here is the whole journey, start to finish:
Reporting a problem takes a minute or two. Just five steps:
Facilities staff manage everything from one screen:
The operator's home screen — every request in one list with status counts & filters. Open the app →
Where a student describes a problem to the AI agent and drops intake photos. Try the chat →
The architecture & agentic-workflow map you're reading right now. You are here →
Text + inline buttons — ✅ Yes / ✖️ Cancel / 💬 Keep talking — routed into the agent loop.
Caller speaks the issue; a spoken "yes" files it, "cancel" → an are-you-sure prompt.
Describes the issue and drops intake photos — same agent loop.
Every channel only ever reaches our server via /api/*. The CriticalAsset token never reaches the client.
Work orders · locations · users · file uploads.
Stores what the API can't: student contact, order links, notes.
Challenge-1 app at / — new order lands as To Do
On a dashboard status change, the linked student is messaged on their own channel (Telegram bot / SMS).
/api/* routes;
the CriticalAsset API token lives only on the server and never reaches the client. Tools execute server-side, then results stream back to the agent.
changeRequestsWhen a student adds a photo and/or a context note to an existing order, it is written as a new change-request — existing report content is never deleted or edited. Operators see each addition surfaced on the dashboard as a timestamped entry.