Glance

Type: Software Status: In Progress — M0 → M3 shipped Deadline: TBD (open-ended / exploratory) Created: 2026-06-30

What is this?

An iPhone-first app (product name working title: Glanceable) that normalizes public operational data — border waits, road conditions, weather alerts, AQHI, beach quality, transit real-time, parking, power outages — into compact “glance signals” that answer do I need to change what I’m about to do right now?

Users save real-world things (Highway 401 near Scarborough, Queenston-Lewiston crossing, Bluffer’s Park Beach), not feeds. The system maps those to underlying public data sources and produces one-sentence recommendations with explicit freshness and attribution. Apple Watch, Home/Lock Screen widgets, Live Activities, Dynamic Island, and CarPlay are companion surfaces once the iPhone model is validated.

Under the hood: a Supabase-backed pipeline (Postgres + Edge Functions + pg_cron

  • Realtime) that ingests feeds, normalizes them into a shared current-state model, and generates decision-ready glance_signals rows. Explicitly not a historical analytics warehouse — the product requirement is “surface current state accurately,” not “store everything forever.” A reusable Glance Feed SDK layer is the deeper opportunity behind the consumer app.

Ontario is the v0 jurisdiction. Recommended first adapters: Ontario 511 + border waits (CBSA / CBP).

Motivation

Public operational data is abundant, ugly, and usually one dashboard per provider. Nothing compresses it into one-second decisions on the surfaces where those decisions actually happen (wrist, glance widget, car). The insight worth testing: the smallest useful unit of public data is not a feed — it’s a normalized signal. If that primitive works, it powers Watch complications, widgets, CarPlay, voice, and AI agents on top of a single data plane.

Commercial-use posture is a first-class research field. Toronto’s OGL and Ontario 511’s terms look explicitly commercial-friendly; ECCC needs review.

What does success look like?

Users stop thinking about “public data sources” and start relying on Glance to answer questions like:

  • Which border crossing should I use?
  • Is my route clear?
  • Can we swim today?
  • Should I exercise outside?
  • Is anything I care about worth my attention right now?

Concrete v0 UX acceptance bar: install → set home area → add 3 relevant favourites in under 2 minutes → understand current state in under 5 seconds on the dashboard.

Technical

  • Stack: SwiftUI iOS 17+ client · Supabase (Postgres + Edge Functions + pg_cron + pg_net + Realtime) backend · Deno/TypeScript adapters
  • Repo: ~/projects/glance/ (planned) — TBD private GitHub, likely djt53/glance
  • Bundle ID: com.davidtingle.glance (proposed)
  • Deploy target: iOS App Store (TestFlight first), Supabase-hosted backend
  • Intended users: Toronto-area residents to start (Ontario v0 jurisdiction); designed to generalize by jurisdiction
  • No paid data sources in v0 — all feeds are public/semi-public

Milestones

Sliced as thin vertical slabs — the goal of each milestone is something observable, not just infra. See decisions/001-milestone-spine.md for the reasoning behind this ordering (border-first, not 511-first).

M0 — Repo & environments

Unblock everything. iOS project scaffolded, Supabase project provisioned, migrations/edge-functions directory laid out.

M1 — Thin vertical: border waits end-to-end

Prove the full pipeline with one signal. Core schema, scheduler, CBSA + CBP adapters, border comparison generator (“Queenston saves 24 min. Take Queenston now.”), read API, iOS shows a single hardcoded favourite card with freshness.

M2 — Second adapter: Ontario 511

Prove the adapter interface generalizes. 511 adapter, route viability signal, feed health tracking, ingestion-run retention.

M3 — iOS beyond hardcoded

Users can actually pick what they care about. Onboarding, favourites tab, add-favourite flow, real dashboard driven by user’s picks, detail page with trust block, freshness/stale/unknown states.

M4 — Source library + alerts

Discovery and notification. Source library tab, basic alert preferences, empty/error states.

M5 — Polish & ship v0

App Store metadata, TestFlight, first external testers.

Later

Map, widgets, Watch, Live Activities, CarPlay, ECCC AQHI, weather alerts, beach quality, transit real-time, parking, power outages, family sharing.

Source of truth

Living design docs live in Notion (djtingle@gmail.com workspace):

This project folder is the working substrate; Notion is the shareable spec layer. Follow the pattern captured in ~/topaz/projects/notion/ (local = source of truth for tasks/log/decisions, Notion = projection for design docs).

Open questions to resolve early

  1. First production adapter: Ontario 511 or border waits? (Tech spec leans toward starting with both.)
  2. Do clients subscribe to Supabase Realtime directly, or only through a read API?
  3. iOS project location / repo name (~/projects/glance/? Bundle ID?).
  4. Should the dashboard group by priority or by domain?
  5. ECCC commercial-use posture — need explicit review before productization.