PROJECT 01 · CASE STUDY
Automated reporting platform
At Maxcess International I built, with Python, SQL, React and Supabase, the platform that extracts, validates and delivers 110+ executive reports a month for large retail chains nationwide, because every account needed its own format, on time and with its data intact.
In 30 seconds
Why
At Maxcess International I automated executive reports for large retail chains nationwide, parameterized around inVue, CrossPoint and Indyme, leaders in security technology.
What I built
- Source
CSV, JSON, HTML and TXT exports from the inVue, CrossPoint and Indyme platforms, different for each store and chain. They used to take hours by hand; now Python pulls them.
- Model
Every metric starts in a glossary before it becomes code. A canonical contract and SQL flows in Supabase and DuckDB cover 10+ client and calculation variants and flag incomplete data.
- Output
A monthly executive PPTX, a detailed analytical report (RAD) in PDF and Word, and HTML dashboards with QR access, on a platform with per-account roles and 4,000+ tests.
Tools
- Python
- SQL
- DuckDB
- Supabase
- React
- Azure SQL
- Power Automate
- Microsoft 365
- Cloudflare
- AI agents
Repository
GitHub repositoryComing soon
The full case
Where it started
Maxcess International brings to Mexico the leading technologies and ecosystems in the security sector for retail: inVue, CrossPoint and Indyme. Their systems protect display cases, control stockroom access and measure store operations in large retail chains nationwide.
Every device leaves a trail: openings, accesses, alerts and response times. That trail is worth something when it arrives on time and in each client's format, and every Strategic Account Manager runs their accounts on their own calendar: weekly, every-10-day, semimonthly and monthly reports. They are read by strategic staff with executive visibility and by operational roles in each chain.
The challenge
The data lived in each brand's platform and came out in different exports per store and per chain: CSV, JSON, HTML and TXT. Downloading, cleaning and assembling each report by hand took hours, and a single wrong figure cost the whole document its credibility.
The challenge wasn't one report but 110+ a month, with 10+ client variants and 10+ calculation variants, without losing data integrity or each account's identity.
How I approached it
Before any code, every metric starts in a glossary: what it measures, where it comes from and how it's validated. The survey with each Strategic Account Manager, the design and the interactivity of each format are written up as specifications before they become SQL flows or screens.
I built it in layers, locally and with tests from day one. I direct AI agents with defined roles—architecture, frontend, optimization, design and quality control—and review every delivery against its specification before merging it.
End to end
Extraction. Python scripts pull the platforms' exports on their own—work that used to be manual and took hours. Inside the platform, the Data Funnel receives each file, detects which account and period it belongs to, removes duplicates and emits a canonical dataset with its quality report.
Model. A canonical contract fixes the columns every batch must carry. The SQL engine runs in the browser with DuckDB and persists in Supabase, on PostgreSQL. Each batch keeps its fingerprint and the engine version that computed it, so any figure can be traced back to its source file.
Output. Report Studio walks each delivery through six steps—setup, data load, metrics, content, preview and export—and produces three formats: the monthly executive PPTX, the detailed analytical report (RAD) in Word and PDF, and an interactive HTML dashboard published every month with QR access and a secure link.
What I built
A multi-user platform with four roles—admin, Strategic Account Manager, support and visitor—where each account is an isolated environment: every Strategic Account Manager sees only their own clients, and the admin audits users and activity.
- Command Center: the state of the cycle on one screen, with an assistant that answers about what your profile can see.
- Data Funnel: loading, detection, merging and validation of each batch, with its quality report and sign-off.
- Report Studio: the six-step wizard that assembles, reviews and exports each report.
- Interactive analytics dashboard: summary, impact events, padlocks, display cases, zones, activity by day and hour, and annexes, with filters and CSV, PPTX and RAD downloads.
- Status by branch: days with data, availability and event signals for each batch.
- Surveys: a scaled editor to place display cases and devices on each store's floor plan, with heat maps by device.
- Log, Task Manager and Cycle Calendar: findings, decisions, to-dos and each month's closes, connected to Microsoft 365.
- Data Repository and Explorer, Dashboard Studio, Formats and Glossaries, Reference Center, My Progress, Automations and Admin.
How I know a figure is right
Before it ships, every report goes through automatic checks: every figure in the text must exist in the data package, every name must be in the catalogs, and no alert can be left unresolved. AI-assisted writing only suggests; if it fails those checks, the report falls back to the deterministic template and says so.
Behind it are 4,000+ automated tests that run on every change, with Vitest, Testing Library and Playwright.
What changed
110+ validated, on-time reports a month. The extraction that took hours now runs on its own, and every account gets its format with its brand, typography and charts.
Clients liked the formats, and they opened new uses: operations, marketing and other teams in the chains now read them too. The HTML dashboard is the first step toward the quarterly and annual comparison.
What I learned
That integrity is designed: a glossary and a contract before the code save weeks of fixes. And that automating well doesn't mean hiding the process—it means showing where every figure comes from.
What's next
Bring the quarterly and annual comparison to the dashboard, integrate the Power BI architecture that runs in parallel and publish the repository when it's ready.
End-to-end stack
Extraction and sources
Pull and read each platform's exports
- Python
- CSV
- JSON
- HTML
- TXT
- Excel
- SheetJS (xlsx)
- PapaParse
Model and SQL
Canonical contract, calculation and storage
- SQL
- DuckDB-WASM
- Apache Arrow
- Supabase
- PostgreSQL
- Azure SQL
Backend and automation
Services, flows and connections
- Supabase Auth and Storage
- Serverless functions in Node.js
- Power Automate
- Microsoft 365
- API keys
Frontend
The platform and its modules
- React
- JavaScript
- Vite
- React Router
- Tailwind CSS
- PostCSS
- Lucide
Visualization
Charts, maps and dashboards
- D3
- Recharts
- react-simple-maps
- Matplotlib
- squarify
Documents and outputs
PPTX, RAD, HTML dashboard and downloads
- PptxGenJS
- docx
- jsPDF
- html2canvas
- PowerShell
- JSZip
- qrcode
AI
Assistant, writing and directed development
- Language models via API: Llama, GPT, Claude, DeepSeek and Gemini
- AI agents
- Spec Driven Development
Quality
Tests on every change
- Vitest
- Testing Library
- jsdom
- Playwright
- jsQR
- ESLint
- Husky
- GitHub Actions
Delivery
Publish and serve
- Vercel
- Cloudflare Pages
- Wrangler
- GitHub
Screenshots · 21
Test or blurred data: no real client figures.