360 Analysis
Business analytics and reporting platform with dashboards, filters, and Prisma data pipeline.
The Challenge
An enterprise client with operations across 3 business units — distribution, retail, and services — was producing monthly management reports by manually pulling data from three different source systems (a legacy ERP, a CRM, and a field operations tracker), consolidating them in Excel, and building pivot tables and charts that were emailed as PowerPoint decks. The process took a dedicated analyst 2–3 full working days each month, and by the time the report reached executives, the data was already 2–3 weeks stale.
Ad-hoc questions from the leadership team — "What's the revenue trend for the Northern region this quarter?" or "Which product category had the most returns last month?" — could not be answered in real time. They required the analyst to re-run the consolidation for a specific data slice, typically taking 4–6 hours. Decision-making was consistently slower than it needed to be because the data pipeline was entirely human-operated.
What We Built
360 Analysis is a React + TypeScript frontend backed by a Node.js/Express API with Prisma as the ORM against a PostgreSQL data warehouse. The data pipeline runs as a set of scheduled Node.js jobs (via node-cron) that pull from each source system's API or database connection nightly, transform the data into a normalised star schema (fact tables for transactions, dimension tables for products, regions, and customers), and load it into the warehouse — a standard ETL pattern implemented without a heavy data engineering platform.
The dashboard engine renders charts using Recharts (React-native, no canvas teardown issues on filter changes) with a filter state manager built in Zustand. All filter combinations (date range, region, product category, business unit) are translated into Prisma query conditions server-side — the API never returns raw data to the client; it always returns aggregated metrics — which kept report query times consistently under 400ms even for 3-year historical ranges. Executives can create personal dashboard layouts by drag-and-dropping chart widgets, with layouts persisted per user in the database.
Export functionality produces both Excel (via ExcelJS, matching the column formats from the team's previous manual reports) and PDF (via Puppeteer rendering a print-optimised React route). This was deliberately built to match existing formats so the executive team could continue distributing reports in the same way while the underlying generation became automated.
The Outcome
Monthly report generation dropped from 2–3 analyst-days to under 25 minutes of automated pipeline run time, a 10× improvement in calendar time and the elimination of approximately 24 analyst-hours per month. Ad-hoc queries that previously took 4–6 hours now return results in under a minute on the dashboard filter system.
The leadership team adopted real-time dashboard monitoring within the first month, accessing the platform 3–4 times per week for operational decisions rather than waiting for monthly decks. One business unit identified a regional performance anomaly during a weekly dashboard review that was acted on within 48 hours — the kind of insight that would previously have appeared only in the following month's report, weeks after the optimal intervention window.