PROJECT · active

Enacted

Every change to Canadian law, in plain English: daily diffs of nearly 9,000 Ontario and federal regulations and statutes, with AI summaries that are never allowed to invent a fact.

Next.js · Anthropic API · Vercel Blob + Cron · Resend · Justice Canada XML · BC CiviX API

Enacted.Every change to Canadian law

This week · 9 sectors

FEDERAL · SOR/2026-12+96 / −24
Immigration and Refugee Protection Regulations amended
ONTARIO · O. Reg. 176/26+34 / −0
Work with local police services
BC · B.C. Reg. 43/2026+18 / −5
Business Corporations Regulation
Read the exact diffcitations never AI-authored
Why it has to be right

Legal change is a domain where being wrong is expensive, so the parts that must be right are never left to a model.

What it is

Enacted watches Canadian law change. Ontario alone files roughly 500 regulations a year and continuously amends its statutes; the federal government consolidates its corpus every week or two. All of it publishes as legal text that almost nobody operational reads, so businesses usually find out about a rule change from their lawyer, an association memo months later, or a fine. Enacted checks every consolidated Ontario regulation and statute daily and git-diffs the entire federal corpus on every Justice Canada update, computes the exact textual difference when anything changes, and publishes a plain-English explanation of what changed and who it affects, every item linked to the official source.

The architecture position

This is the pattern I build professionally, applied as a public good: deterministic where it matters, AI at the edges. A change event starts as a fact from the official index, the diff between two consolidated versions is computed code, and only then does a model get involved, summarizing the computed diff and nothing else. A citation gate checks every summary before publish: if the model introduces a regulation citation or a date that is not present in its input, the summary is rejected and the page renders the raw diff instead. On launch day the gate caught exactly one fabricated-citation attempt out of 120 summaries. That one rejection is the whole argument for the architecture.

What I built

A pipeline that polls e-Laws daily through its JSON API at a respectful crawl rate, reconciles version histories, normalizes Word-exported legal HTML into diffable text, and computes unified diffs with section detection. A static site with permanent change pages, weekly digests grouped into thirteen industry sectors, and a methodology page that states plainly what the system can and cannot catch. A weekly email digest with double opt-in and sector-level summaries. The whole product runs on pocket change: under ten dollars a month of model spend at steady state.

What broke and what I learned

The official bulk dataset for Ontario regulations turned out not to exist, the data portal entry is marked cabinet-confidential. The path in was reading the e-Laws web app's own network traffic and finding the undocumented JSON API underneath, then verifying every endpoint by hand before writing the spec. The other lesson was about big documents: the Building Code is hundreds of pages, and a naive diff-and-summarize pipeline chokes on it. The system now degrades honestly, publishing diff statistics and section headlines instead of pretending to a summary it cannot ground.

A detail I like

For federal law, change detection is literally version control. Justice Canada publishes its consolidated corpus as an XML repository, so Enacted compares file trees between official updates. A change cannot be silently missed or invented; the source of truth is a commit hash.

Status

Live at enacted.ca, updating daily, digest on Fridays. Ontario and federal today; BC publishes under an equally clean licence and API and is the natural next expansion.