Back home

Changelog

What we shipped, in reverse-chronological order. The canonical text version lives at CHANGELOG.md in the repository.

2026-10-06

Unified response envelope

Breaking: one response shape — Every endpoint now returns { data, meta } with rows under data.<source name>; endpoints with aggregate nodes add an aggregates block. Source names are snake_case.
2026-04-26

Public day-one launch

Launch connectors — Google Sheets and REST API are the supported source types for v1. Other connectors stay behind a feature flag while we matrix-test them.
In-product Try-It panel — Run the deployed endpoint from inside the canvas, see the JSON response, and copy the curl command — all without leaving the app.
Onboarding walkthrough — First-time users get a 4-step guided flow: welcome → add source → wire output → try it.
Sentry on by default — Backend + Next.js client/server/edge. When SENTRY_DSN is set, errors are reported automatically.
Funnel telemetry — Structured events for signup, source_create, source_sync_success/failure, canvas_deploy, and endpoint_first_request land in the JSON log stream so we can answer 'where did users get stuck.'
Per-connector docs — Google Sheets and REST API each have a setup guide with an error-message → fix mapping.
Status page — /status pings the deep health endpoint — Postgres, Redis, Celery worker, beat schedule.
2026-04-21

Security hardening

Hard page_size cap — page_size=100 ceiling on every consumer-API endpoint.
X-API-Key header only — API keys are accepted via the header — the legacy query-parameter fallback is gone.
One-time-use reset tokens — Password-reset tokens are backed by Redis GETDEL.
Refresh-token revocation — Tokens carry a tv (token version) claim; bumping it on password change, password reset, or /auth/logout-all revokes every session.
Stripe end-to-end — Checkout, billing portal, and webhook reconciliation are wired — sandbox bootstrap in docs/billing-setup.md.
2026-04-18

Canvas-first workspace

Canvas is the workspace — Sources, transforms, and endpoints are all nodes you wire together.
Tool-node config schemas — Filter, transform, and aggregate have explicit Pydantic schemas — typos in field names raise a save-time error instead of silently producing wrong rows.
Canvas error boundary — React Flow crashes surface a recoverable fallback.
Save-failure toasts — Replaced the silent .catch(() => {}) pattern across the canvas editor.
See system status →