Back home

Changelog

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

2026-04-26

Public day-one launch

Launch connectorsGoogle 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 panelRun the deployed endpoint from inside the canvas, see the JSON response, and copy the curl command — all without leaving the app.
Onboarding walkthroughFirst-time users get a 4-step guided flow: welcome → add source → wire output → try it.
Sentry on by defaultBackend + Next.js client/server/edge. When SENTRY_DSN is set, errors are reported automatically.
Funnel telemetryStructured 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 docsGoogle 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 cappage_size=100 ceiling on every consumer-API endpoint.
X-API-Key header onlyAPI keys are accepted via the header — the legacy query-parameter fallback is gone.
One-time-use reset tokensPassword-reset tokens are backed by Redis GETDEL.
Refresh-token revocationTokens carry a tv (token version) claim; bumping it on password change, password reset, or /auth/logout-all revokes every session.
Stripe end-to-endCheckout, billing portal, and webhook reconciliation are wired — sandbox bootstrap in docs/billing-setup.md.
2026-04-18

Canvas-first workspace

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