entinAI — AI Retail Performance Dashboard
A retail performance dashboard that turns an open retail dataset into a KPI snapshot, AI-written weekly reports, and automated delivery to Google Sheets and Discord.

Problem
Raw retail transaction and stock data does not answer the questions an operator actually asks: what sold, what is at stock-out risk, and what to do about it this week.
Context
entinAI runs on the open Mendeley Retail Transactions and Stocks dataset (about 40 stores, 2326 SKUs, Aug 2025 to Feb 2026, CC BY 4.0). Every figure in the product derives from that dataset; there is no client data involved.
Product idea
Compute a small set of honest KPIs from the dataset, serve them from an API, let an LLM turn them into a readable weekly report, and schedule the whole loop so reporting happens without anyone opening the dashboard.
User flow
- Load and clean the retail dataset
- Compute the KPI snapshot into kpis.json
- GET /api/kpis feeds the dashboard
- POST /api/report?period=week generates the AI report
- n8n runs Monday 07:00, archives the report to Google Sheets, and posts it to Discord
Build process
- Started from an open dataset instead of mock data
- Kept the KPI surface small and verifiable
- Chained LLM output with fallbacks so the report always generates
- Automated the weekly delivery end-to-end
Stack and architecture
No database. The pipeline computes a KPI snapshot (kpis.json) from the dataset. FastAPI exposes GET /api/kpis and POST /api/report?period=week. Report generation is an LLM chain: Gemini first, an OpenAI-compatible endpoint as fallback, then a static template. An n8n instance self-hosted on a Docker VPS schedules the Monday 07:00 fetch, archives to Google Sheets, and posts to Discord via webhook.
Outcome or current status
Shipped. Dashboard on Cloudflare Pages, API on FastAPI Cloud, weekly reports generated and delivered automatically. Stock-out risk is a velocity proxy (days of cover), not an ML forecast, and is labeled as such in the product.
Lessons learned
- An open dataset is enough to build a real analytics product when the claims stay honest.
- An LLM chain needs a deterministic fallback so scheduled reports never fail silently.
- Labeling a proxy metric honestly (days of cover, not ML) builds more trust than fake precision.