DataAiAnalyticsNext

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
Ask anything about your data…Which products drive repeat orders?ExtractLoadƒTransformVisualiseSELECT product, COUNT(*)GROUP BY productBundles ↑

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