Quantile
A chat-first analytics workbench. Ask a question, get an editable extract → load → transform → visualize pipeline.
- Role
- Solo build · design to deploy
- Year
- 2026
- Practice
- Data
- Link
- contra.com
At a glance
- Starting point
- Answering a business question from SaaS data usually needs a chain of people and tools: someone to export, someone to model, someone to chart. Classic BI tools assume the data is already modeled.
- What we built
- A chat-first analytics workbench. Ask a question, get an editable extract → load → transform → visualize pipeline.
- Stack
- Next.js, React, TypeScript, Python, Pipedream Connect, DuckDB + DuckDB-Wasm, Mosaic vgplot, Vercel AI Gateway, Vercel Sandbox, Vercel Blob
A chat-first analytics workbench: connect a SaaS account, ask a question, and get a four-stage pipeline you can read, edit, and re-run.
Overview
Quantile turns a plain-English question about your app data into a working analytics pipeline. Connect a SaaS account (Airtable first), ask something like "extract monthly revenue and build a dashboard", and the system writes and runs four stages: extract, load, transform, visualize.
Every stage is a real file in the workspace. Nothing is hidden behind a chat bubble.
The problem
- Answering a business question from SaaS data usually needs a chain of people and tools: someone to export, someone to model, someone to chart.
- Classic BI tools assume the data is already modeled.
- Chat-with-your-data tools hide their queries, so answers can't be checked or reused.
How it works
- Extract: a generated Python script pulls records through the connected account and writes Parquet.
- Load: data lands in DuckDB, in the browser via DuckDB-Wasm where possible.
- Transform: SQL files shape the data for the question at hand.
- Visualize: a dashboard spec renders with Mosaic vgplot.
- Follow-ups are routed to the narrowest layer that can answer them. "Break revenue down by category" edits the transform, not the extractor.
Design choices
- Every stage is an editable file, so the user can always see and change what ran.
- Row data stays out of the model prompt and mostly off the server. The LLM sees schemas, not customer records.
- Untrusted generated code executes in Vercel Sandbox, never on the app server.
Stack
- FRAMEWORK: Next.js, React, TypeScript
- EXTRACTION: Python (uv), Pipedream Connect
- ANALYSIS: DuckDB + DuckDB-Wasm
- DASHBOARDS: Mosaic vgplot
- AI: Vercel AI Gateway
- RUNTIME: Vercel Sandbox, Vercel Blob
- DATA: Postgres + Drizzle, Neon previews, NextAuth

