How Evan's List built a real-time Python BI platform for a D2C kitchenware brand — live Stripe order sync, multi-dashboard analytics, inventory management, and printing ops visibility. Zero manual entry.
Running a D2C product business without real-time data means flying blind on inventory, production, and revenue.
Stripe webhooks trigger order ingestion. A single SQLite source of truth feeds all four dashboards.
Each dashboard is a separate Plotly Dash module registered to the main app router.
Revenue trends, order volume, customer breakdown, and product performance — all in interactive Plotly charts. Date-range filter lets you zoom from daily to all-time. Highlights top SKUs and revenue by channel (Stripe, manual, etc.).
Current stock levels, reorder alerts, and consumption rate per SKU. Tracks both raw materials (filament spools) and finished goods. Calculates units-remaining based on production yield data, not guess work.
Production queue management — jobs in progress, completed, and queued. Filament usage per job calculated from known yield data (83.97g/unit for PC). Throughput trends help forecast production capacity and material procurement.
Historical order archive with full-text search and export. Data quality tools — deduplication checks, source attribution reports, and reconciliation between Stripe records and internal database. Supports CSV export for external reporting.
Running the sync script daily — or multiple times per day — never produces duplicate orders.
Every order record stores the source channel ("Stripe", "Manual", "Etsy") and the external order ID. Before inserting, the database checks this composite key — if it exists, the import is skipped silently.
The sync script is designed to be run on a schedule (cron or manual). It looks back N days, pulls all Stripe orders in the window, and inserts only net-new records. Safe to run hourly if needed.
The same duplicate-prevention schema works for any future channel — Etsy, WooCommerce, manual entry. Each channel gets its own source_channel value and native order ID. No data model changes needed to add a channel.
Click any item for details.
Designed the database schema with multi-channel sales tracking, inventory tables, and production records. Built the database.py module with all CRUD operations and the duplicate-prevention logic.
Built the Stripe sync layer — polling Stripe's API for recent orders, extracting product details, and inserting with duplicate prevention. Designed to run safely on a daily cron schedule.
Built each dashboard as a self-contained module with its own layout function and callback registration. The main app.py registers all modules and handles URL routing between views.
Deployed to PythonAnywhere with gunicorn WSGI, synced via a deploy script. The sync-to-pythonanywhere.sh script handles file transfer and app reload in one command.
Evan's List builds Python data platforms that connect your payment processor, inventory, and operations into one live view.