Inspiration
Public information is scattered across job boards, service directories, and consultation pages. A resident still has to decide which source to trust and where a concern will go. We built envoy to make the next step clear.
What it does
At envoy.surf, residents can search current job postings with closing dates and direct publisher links, explore support and funding, find nearby public and community services on a map, and discover official consultations. The guest assistant streams answers and can prepare an editable concern. The feedback form checks for similar reports, shows their status, and sends a new report only after the resident confirms the destination. A private receipt supports follow-up.
Job applications and consultation responses go to the official publisher site; opening that site is never counted as a completed application or response.
How we built it
One Cloudflare Worker serves the site and its /api/ routes. D1 stores sourced records, reports, receipts, membership, and reviewable agent actions; R2 stores private files. Workers AI powers typed, streaming resident and staff assistants, with authorization and human confirmation enforced by the Worker. Auth0 provides hosted organization sign-in; the Worker verifies token claims and intersects roles with D1 membership before staff actions. ElevenLabs signs short-lived voice sessions. A D1 outbox forwards privacy-safe event metadata to Tiger Data for time-series trends while report bodies stay in D1. The native SwiftUI companion includes an optional, consent-based Presage SmartSpectra accessibility flow.
Challenges and learning
We had to keep source provenance, freshness, and user control visible across very different civic tasks. We learned that an assistant's answer is only useful when the person can see the source, the action's destination, and what actually happened.
Walkthrough
Built With
- auth0
- cloudflare
- d1
- elevenlabs
- maplibre
- presage
- remotion
- swiftui
- tigerdata
- typescript
- vite
- workers
Log in or sign up for Devpost to join the conversation.