The problem

Tenants who go to Ontario's Landlord and Tenant Board are usually self-represented. The LTB's Rules of Procedure (Rule 19) require parties to give the Board and the other side the evidence they intend to rely on at least 7 days before a case management conference or hearing — but a tenant's evidence is scattered across camera rolls, text threads, letters, and public building records. Miss the deadline or arrive disorganized, and evidence a tenant is legally entitled to raise (e.g. under s.82 of the Residential Tenancies Act in an arrears hearing) may never be heard.

The solution

Hearing-Ready is a guided organizer that compiles that sprawl into one paginated, hyperlinked evidence bundle — a conventional disclosure-bundle structure — without sending a single byte to a server:

  1. Case details — tenant, unit, landlord, issue type (T6 maintenance application / s.82 issues).
  2. Evidence & exhibits — drag in photos, PDFs, and message exports or type notes; every item becomes a numbered exhibit with a source description and a SHA-256 checksum of the exact bytes.
  3. Optional public data — attach the building's published RentSafeTO evaluation via Toronto Open Data. An address-match guard warns and requires an explicit "for reference only" acknowledgment before a record for a different building can be attached.
  4. Timeline — dated events (exact day or month precision) in plain language, each tagged with the exhibits that support it.
  5. Review & export — validation flags missing dates, unlinked exhibits, and empty descriptions before export, then generates a PDF: cover, how-to-use notices, clickable table of contents, timeline with clickable exhibit chips, numbered exhibit pages, a "before you file" checklist, and cited official sources.

One click ("Load sample case") fills a fully synthetic case so judges and tenants can go from landing page to a complete, linked PDF bundle in about a minute, with nothing uploaded.

Why local-first matters (privacy)

Housing-dispute evidence is deeply personal — photos of your home, private texts, your landlord's name. Every file stays in the browser's IndexedDB. Nothing is sent to a server or an LLM. Once loaded, the app makes no network calls at all. The only exception is the optional RentSafeTO lookup, which sends only the street name you type to Toronto's public CKAN endpoint (via CKAN JSONP, because the endpoint sends no CORS headers — documented in src/rentsafe.ts).

Built with

  • React 19 + TypeScript + Vite
  • pdf-lib — two-pass layout (TOC links resolved after pagination), embedded images and PDF pages, internal Link/Dest annotations
  • Dexie (IndexedDB) — local file storage
  • vitest + oxlint — 41 tests covering date precision, positional exhibit numbering, validation, and PDF structure/links
  • City of Toronto Open Data (CKAN datastore_search, dataset apartment-building-evaluation) — optional RentSafeTO lookup, no API key
  • No backend, no accounts, no LLM calls
  • AI tools disclosure: Built with AI assistance (Devin, Cognition AI) for implementation, within the hackathon build window (Sep 11–27, 2026). MIT licensed.

Challenges we ran into

  • TOC links need the final page numbers — solved with a two-pass layout: reserve front matter, render content while recording target pages, then draw the TOC and emit Link/Dest annotations.
  • Toronto's CKAN endpoint sends no CORS headers — plain fetch() is blocked in browsers; the lookup uses CKAN's ?callback= JSONP support and degrades cleanly to fully-offline use.
  • A checksum can be misunderstood — every exhibit page states that SHA-256 only identifies the exact bytes, not authenticity or provenance.
  • Wrong-building public records — the RentSafeTO panel checks the case address against SITE ADDRESS and requires an explicit acknowledgment before attaching a mismatched record "for reference only."

What we're proud of

  • A judge (or a tenant) can go from landing page to a complete, hyperlinked PDF bundle in about a minute, with nothing uploaded.
  • Honest-by-design: synthetic demo data is loudly labeled, checksums are scoped correctly, the sample public record is marked invented, and every page says the bundle is a draft organizer — not filed, not legal advice.
  • Real legal grounding: the "before you file" checklist and notices cite LTB Rule 19's 7-day / 5-day disclosure windows and link directly to the official Rules of Procedure, forms, and the RTA.

What we learned

Disclosure rules live in procedure documents, not marketing pages — verifying the LTB Rules (Rule 19) and the RentSafeTO dataset directly changed what the app says. Designing for self-represented tenants means hedging correctly and being concrete enough to be useful.

What's next

  • More Ontario form types and issue tags (e.g. T2, T5), smarter date-precision handling
  • Exhibit dedup by checksum, per-event PDF page references
  • Optional print-optimized "service copy" with service-method checklist (Rule 3 / RTA methods)
  • Partnership with a community legal clinic for content review before any real-world use

Honest limitations

Hearing-Ready is a prototype organizer. It produces a draft bundle for review — it does not file anything, does not assess case merits, and is not legal advice. Disclosure rules change; the app always points to official Ontario sources. Synthetic sample data is labeled as invented; a live RentSafeTO exhibit reproduces City data as fetched and is not verified against the underlying inspection file.

Built With

  • access-to-justice
  • civic-tech
  • ckan
  • dexie
  • indexeddb
  • legal-tech
  • local-first
  • pdf-lib
  • privacy
  • react
  • toronto-open-data
  • typescript
  • vite
  • vitest
Share this project:

Updates

Submission history