factcircuit
FactCircuit: an auditable claim-and-evidence verification loop with immutable provenance, staged checks, bounded retrieval, and reproducible evaluation.
Business intelligence dashboard across sales, customers, marketing, inventory, banking and HR data.
Translation pending
DataTypeScript · CSSGitHub @01HazemazzamOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Business intelligence dashboard over 6 datasets (Sales, Customers, Marketing, Inventory, Banking, HR) — Next.js + DuckDB + Recharts
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
A full-stack BI dashboard over six independent business datasets — Sales & E-commerce, Customers, Marketing, Inventory, Banking & Financial, and HR — built with Next.js, DuckDB, and Recharts. Every metric is computed server-side from the source CSVs; nothing is hardcoded on the frontend.Read the full README ↗A full-stack BI dashboard over six independent business datasets — Sales & E-commerce, Customers, Marketing, Inventory, Banking & Financial, and HR — built with Next.js, DuckDB, and Recharts. Every metric is computed server-side from the source CSVs; nothing is hardcoded on the frontend.
Live demo: https://analytics-dashboard-phi-kohl.vercel.app Case study: docs/CASE_STUDY.md — overview, architecture, key decisions, and screenshots
CSV files → Ingestion/validation → DuckDB (in-memory) → SQL aggregation → API routes → React UI
src/app/, API routes under src/app/api/.@duckdb/node-api) — all analytical queries run in SQL against an in-memory DuckDB instance loaded from the CSVs at startup.Three datasets share a Customer_ID-shaped column and two share a Product_ID-shaped column, which looks like a foreign-key relationship. It isn't: joining on Customer_ID and comparing Age agrees only 1.5–1.7% of the time across every pair (random-chance level), and joining on Product_ID and comparing Category mismatches 89% of the time. These are independently-generated synthetic ID pools that happen to share a numeric range and string format.
Every page in this app is built on exactly one dataset. The Data Explorer documents this naming coincidence as a relationship diagram, explicitly labeled as unverified — see docs/adr/0001-no-cross-dataset-joins.md for the full write-up and match-rate evidence.
| Page | Source dataset |
|---|---|
| Executive Overview | all six, reported per-domain (no blended metrics) |
| Sales & E-commerce | sales_ecommerce_data |
| Customers | customer_demographics_data |
| Marketing | marketing_campaigns_data |
| Inventory | product_inventory_data |
| Banking & Financial | banking_financial_data |
| HR / Employees | employee_hr_data |
| Data Explorer | all six, browsed independently — search, filter, sort, paginate, export CSV |
npm install
npm run dev
Open http://localhost:3000. The six source CSVs in the project root are ingested into DuckDB automatically on first request.
npm run lint # ESLint
npm run build # production build
CONTEXT.md — data model glossary (Domain, Scoped identifier, Relationship candidate, Snapshot field) and dataset grain/row counts.docs/adr/0001-no-cross-dataset-joins.md — the architectural decision record behind the no-joins rule.