vccs
Vue 3용 차트 컴포넌트 모음, Recharts에서 포팅
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Business intelligence dashboard over 6 datasets (Sales, Customers, Marketing, Inventory, Banking, HR) — Next.js + DuckDB + Recharts
저장소 README에서 가져옴
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.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.