Proof of concept on synthetic data. This page is a demonstration, not a production system.
← portfolio
Talk-to-data · governed metrics · measured, not claimed

Ask a question in English. See exactly how it was answered — and how often it’s wrong.

A small talk-to-data assistant over a synthetic beverage-company dataset. Every answer shows the SQL it is equivalent to, the parse trace, and the access policy that was applied. A written evaluation harness (124 questions, gold answers computed independently) reports where it fails.

Rule-based · no LLM is calledSynthetic dataRuns fully in your browserNot affiliated with any company
How it actually works — read this first
This is not an LLM. Questions are parsed by a deterministic pipeline of regular expressions and lookups against a governed semantic model (data/semantic_model.json) and a role policy (data/policy.json). Same question → same answer, every time. Nothing leaves your browser; there is no server and no API call.
  • Why build it rule-based? To make the surrounding system — the semantic layer, access control, refusal behaviour, audit log and evaluation harness — the point of the exercise. The harness is engine-agnostic: an LLM-backed engine could be dropped in behind the same ask(question, role) contract and scored by the same script.
  • What it can’t do: free-form language, typos, other languages, conversation memory, arbitrary math (shares, averages, thresholds). It says so and refuses rather than guess; see the failure analysis.

Try it

Pick a role first — the role comes from this selector (standing in for a login session), never from the words of your question.

Loading synthetic dataset…

Audit log (this session)

Every request — answered or refused — is recorded. The log stores metadata, not answer values. It lives in memory in your browser and disappears on reload; a production version would write to an append-only store.

#RoleQuestionOutcomeReasonScope applied

No requests yet.

The data (synthetic)

All figures in this demo are computer-generated (build_data.py, fixed seed). “Fictional Spirits Co.” and its brands do not exist. No employer data, schema or figures are used anywhere in this project.