01The problem
Jamones Artesan is a family-owned food distribution business. Sales, customers and stock live in its ERP; the useful question is how to turn those records into a consistent view of business performance without building a large data team.
02The solution
Python loads data from the SQL Server ERP and Google Sheets into PostgreSQL. dbt structures it through RAW, STG, INT and MART layers, with tests and documentation alongside the SQL. The reporting layer includes a Streamlit application and prepared views for Looker Studio.
The system runs on an existing VM. After a successful production refresh, a downstream step can refresh a separate development database.
The data pipeline
Cron schedules the refresh on weekdays. Development and production use separate databases on the VM.
Key decisions
- 01
Model the business before the dashboard.
Shared definitions of sales, customers and margins belong in reusable warehouse models rather than separate reports.
- 02
Keep the infrastructure proportionate.
PostgreSQL, dbt and Python fit the workload and existing hardware. Cron coordinates the refresh without a separate orchestrator.
- 03
Separate development from production.
A dedicated development database lets changes be checked without editing the live reporting data.
03Where AI fits
No AI in the data path: business definitions live in deterministic, tested SQL models.
The project itself is built with AI assistance: Claude Code helps write, test and document the pipeline and the dbt models.
04Results
- Reporting for sales, customers, margins and year-over-year comparisons, backed by the same modelled data.
- A repeatable path from source records to business reporting, with definitions that can be inspected and maintained.