Inspiration

Residents are often invited to participate in public consultations, but finding out what happened afterward is surprisingly difficult. The consultation, feedback report, staff recommendation, council decision, and implementation update may all appear on different websites—sometimes months or years apart.

Information can be technically public without being practically accessible.

That gap inspired CivicLoop, a package tracker for public decisions. It follows a consultation from public input through results, formal decisions, commitments, and later progress updates.

What it does

CivicLoop helps Ottawa residents answer three questions:

  1. What did residents ask for?
  2. What did the municipality decide?
  3. What has happened since?

Each consultation becomes a source-backed case file containing:

  • A plain-language summary and lifecycle status
  • A timeline connecting consultations, reports, committee meetings, and council decisions
  • Major resident concerns and the documented government response
  • Implementation commitments and subsequent updates
  • An explanation of why related records were linked
  • Direct links to the original municipal sources

Residents can follow consultations, receive in-app updates, and submit an official Engage Ottawa URL when a project is not already listed. CivicLoop imports the consultation and its directly linked documents so the case can be tracked and reused by the community.

We deliberately distinguish “no public update found” from “nothing happened.” CivicLoop reports what its checked sources support without presenting missing evidence as proof of government inaction.

How we built it

CivicLoop is a full-stack application built with Next.js, React, TypeScript, and SQLite.

We created adapters for two important Ottawa information systems:

  • Engage Ottawa, where public consultations and feedback documents are published
  • Ottawa’s eScribe portal, where staff reports, committee recommendations, council decisions, and voting results appear

A deterministic matching system connects records using strong evidence such as project identifiers, report numbers, official attachment relationships, dates, and explicit links. Title similarity alone is never enough to create a relationship.

For semantic analysis, CivicLoop uses Gemini first and automatically falls back to a local model when the hosted provider is unavailable. The AI classifies documents, creates plain-language summaries, identifies project aliases, connects feedback themes to documented responses, and extracts future commitments.

Every AI-generated finding must include a supporting passage from the source. The output is validated against a strict Zod schema and checked again to confirm that the cited evidence appears in the supplied document. AI output cannot override official identifiers or deterministic relationships.

We also built:

  • Guarded retrieval restricted to approved official Ottawa domains
  • Content hashing that avoids repeatedly analyzing unchanged documents
  • Scheduled monitoring with retry backoff
  • Persistent tracking and notification preferences
  • Durable update events and an in-app notification inbox
  • Saved snapshots of official records for a reliable, credential-free demo
  • Automated tests for parsing, matching, caching, updates, and evidence validation

Challenges we ran into

One of the hardest problems was connecting records whose titles changed over time. The community garden initiative, for example, appeared under different names during its consultation and council stages.

Matching by title would have produced missed connections and false positives. We instead combined official attachment relationships, report identifiers, metadata, subject matter, and chronology. CivicLoop also displays these signals so users can understand why two records were connected.

Another challenge was keeping AI-generated content grounded in evidence. A fluent but unsupported summary could misrepresent residents or the municipality. We addressed this by requiring claim-level evidence, rejecting invented excerpts, and preserving direct links to the original records.

Municipal websites and hosted AI services also introduced reliability problems. Websites can change structure, block automated requests, or become temporarily unavailable, while AI providers can fail or exhaust their quotas. CivicLoop records retrieval failures instead of misreporting them as “no update,” uses verified snapshots for the curated demo, and falls back from Gemini to a local Qwen model when necessary.

Finally, we had to resist oversimplifying civic accountability. A single “government listened” score would hide context and imply more certainty than the evidence supports. CivicLoop presents the feedback, response, decision, commitment, and source separately so residents can reach informed conclusions.

Accomplishments that we're proud of

We are especially proud that CivicLoop does more than summarize isolated documents. It reconstructs a complete decision trail across separate municipal systems and explains the evidence behind every connection.

Our community garden case demonstrates this clearly: CivicLoop connects an earlier consultation, its feedback report, a renamed initiative, a committee recommendation, and the final council decision—even though the records do not all share the same title.

We are also proud of the project’s evidence-first AI design. Extracted claims retain their supporting passages, structured output is validated twice, and deterministic rules prevent important interpretation errors. For example, an eScribe result of “Carried” means a motion passed; it does not prove that the project was implemented.

Other accomplishments include:

  • A working community-submission flow for official consultation URLs
  • Personal consultation tracking backed by SQLite
  • Functional in-app notifications and delivery records
  • Live checking and scheduled monitoring of official sources
  • Automatic hosted-to-local AI fallback
  • An offline-reliable judge experience that requires no credentials

What we learned

Our biggest lesson was that transparency is not only about publishing information. It is also about making the relationships between pieces of information understandable.

We learned that official identifiers and document relationships are much more reliable than similar titles. We also learned that missing public information must be described carefully: “we did not find an update” is evidence-based, while “no work occurred” usually is not.

Most importantly, we learned that AI works best in civic technology as a constrained research assistant—not as the final authority. Combining deterministic matching, structured AI output, evidence validation, and visible source links produced a system that is useful without asking users to trust a black box.

What's next for CivicLoop

Our next step is to expand beyond the curated cases and track more consultations across Ottawa.

We also plan to:

  • Add user authentication and personalized topic, ward, and neighbourhood tracking
  • Connect real email and SMS notification providers
  • Create a moderation workflow for uncertain record relationships
  • Support paired English and French municipal documents
  • Add more municipal data sources, including budgets and procurement updates
  • Track whether published commitments are completed by their promised dates
  • Expand CivicLoop to municipalities beyond Ottawa

Our long-term goal is to make following a public decision as straightforward as tracking a package—from the moment residents provide input to the moment a promised outcome is delivered.

Built With

Share this project:

Updates

Submission history