Skip to content

Lab

Real Calgary data, with the whole pipeline showing.

Three small data products, built the way I’d want a team to build them: tested, documented and observable. Everything runs in your browser, and you can run each pipeline yourself against the live source.

Every lab has the same four parts

  1. 01

    Ask the data

    Plain-English questions. Claude writes the SQL, the site checks it, your browser runs it.

  2. 02

    Dashboard

    Charts that are SQL queries running in DuckDB in your browser. Every one shows its query.

  3. 03

    Tested pipeline

    Bronze, silver and gold layers with data tests and a contract. Refreshed weekly, and runnable live.

  4. 04

    Telemetry

    Every query’s latency, data downloaded, Core Web Vitals and analytics events, as they happen.

How it fits together

From public APIs to your browser. Most of it is static files, so it costs almost nothing to run.

  1. 01 · Public APIs

    Sources

    • City of Calgary: permits, assessments, use codes
    • NHL: schedules and play-by-play
    Python extract code
  2. 02 · Airflow on GitHub Actions

    Weekly run

    • dbt on DuckDB builds raw, cleaned and business-ready layers
    • dbt tests and contracts gate the run
    • XGBoost retrains the value model after tests pass
    Airflow DAG
  3. 03 · Repo and CDN

    Published

    • Parquet files and the model, committed
    • A manifest of every run
    • dbt docs with lineage
    dbt docs
  4. 04 · DuckDB-WASM

    In your browser

    • Loads only the tables a page needs
    • Runs every chart query locally
    • Live runs of dbt’s compiled SQL
    • Model training in Python, through Pyodide
    Browser runner
  • Ask the data

    Your question and the schemas go to Claude. SQL comes back and runs in your browser.

  • NHL proxy

    Two allowed URL shapes, cached at the edge and rate limited.

  • Analytics

    Typed events go to Vercel Analytics. Telemetry stays in your tab.

The details, from the pipeline runner to the AI guardrails, are in how this site is built.

Telemetry

This tab only. Nothing here leaves your browser.

Core Web Vitals

LCP
…
waiting
INP
…
waiting
CLS
…
waiting
FCP
…
waiting
TTFB
…
waiting

Measured in this browser with the web-vitals library. INP appears after you interact.

Query engine

Engine
Not started
Start-up
–
Data downloaded
–
Tables loaded
–
Queries run
0
Errors
0
p50 latency
–
p95 latency
–