Case study

Salsa te Gusta analytics chat

A private, team-only chat app we built for Salsa te Gusta — staff get grounded answers about the business in seconds instead of manual spreadsheet lookups

Project overview

Salsa te Gusta, an Amsterdam dance school, ran its reporting out of spreadsheets — every business question meant someone digging through rows by hand. We built the team an internal analytics assistant instead. Staff ask questions like "is this season filling faster than last year?" in plain language, and the app answers using a RAG-style pipeline over the school's Google Sheets. A key design rule: answers must always trace back to real data, so the model is only ever allowed to call typed analytics tools rather than invent numbers.

We designed the whole build privacy-first — student names and contact details are pseudonymised before anything reaches the model and only restored in the authorised browser — with role-based access, charting, and personal dashboards on top. The result: staff get grounded, source-cited answers in seconds instead of manual spreadsheet lookups, with no data analyst required.

The challenge

Problem: The school's reporting lived entirely in spreadsheets: every business question meant a manual lookup, answers were slow, and the raw sheets held student names and contact details that couldn't simply be handed to an AI model.

Technical implementation

Grounded, multi-step tool calling

Built on the Vercel AI SDK with streamText and multi-step tool calling: the model calls a typed analytics tool, reads the result, and may call another before answering — so every number traces back to a real spreadsheet row.

Aggregation in code, not the model

All counting, grouping, and rate math live in pure, unit-tested functions. The model orchestrates and explains; it never crunches raw rows. Tool descriptions double as documentation that drives accurate tool selection.

PII never reaches the model

The Google Sheets layer is the choke point: names become stable HMAC tokens and emails/phones are dropped before anything reaches the LLM. The team still sees real names — tokens are swapped back in the browser, after inference.

Role-based access + personal dashboards

A flat RBAC module gates which data sources and tools each user can reach, fails closed on auth, and lets users pin analytics panels to a personal dashboard backed by Vercel KV.

Key features

  • Plain-language questions answered from live Google Sheets data
  • Season-over-season enrolment pacing and try-out → course conversion metrics
  • Charts and pinnable dashboard panels per user
  • Team-only Google sign-in (NextAuth), fails closed if unconfigured
  • Privacy-first: pseudonymised data to the model, real names only client-side
  • Nightly Postgres mirror for deeper Metabase dashboards

Need a system like this?

Tell us where work gets stuck — in one call you'll hear what it takes to remove it.

30 minutes · free · no obligation

Impact

0
Guessed numbers
100%
Answers sheet-grounded
Team-only
Access

Technologies used

Next.jsVercel AI SDKGeminiGoogle SheetsNextAuthVercel KVPostgresTypeScript

Business value

  • Staff self-serve business questions without a data analyst
  • Trustworthy answers — every figure cites its source and time range
  • Privacy-by-design keeps student data away from the model