Interactive analytics dashboard built with Next.js App Router, TypeScript, Tailwind CSS, Zustand, Chart.js, dnd-kit, and Framer Motion.
- Responsive dashboard shell with sidebar, sticky header, and adaptive widget grid
- Draggable widgets powered by
@dnd-kit - Widget resize controls with persisted layout state
- Finance analytics from validated local mock JSON data
- Global filtering by date range and category
- Global search and sorting
- CSV export for the active transaction slice
- Saved dashboard layout snapshots
- Empty states and retryable error state
- Keyboard-friendly drag-and-drop sensor support
- Static export workflow for GitHub Pages with configurable base path support
Dashboard/
βββ app/
β βββ globals.css
β βββ layout.tsx
β βββ page.tsx
βββ components/
β βββ app/
β β βββ dashboard-app.tsx
β βββ dashboard/
β β βββ dashboard-grid.tsx
β β βββ error-state.tsx
β β βββ filters-bar.tsx
β β βββ widget-empty-state.tsx
β β βββ widget-frame.tsx
β βββ layout/
β β βββ header.tsx
β β βββ sidebar.tsx
β βββ widgets/
β βββ bar-chart-widget.tsx
β βββ line-chart-widget.tsx
β βββ pie-chart-widget.tsx
β βββ summary-widget.tsx
β βββ transactions-widget.tsx
βββ data/
β βββ finance-data.json
βββ hooks/
β βββ use-dashboard-data.ts
βββ lib/
β βββ chart.ts
β βββ constants.ts
β βββ dashboard-data.ts
β βββ finance-data.ts
β βββ export.ts
β βββ format.ts
β βββ utils.ts
βββ store/
β βββ dashboard-store.ts
βββ types/
β βββ dashboard.ts
βββ eslint.config.mjs
βββ .gitignore
βββ next.config.ts
βββ package.json
βββ postcss.config.mjs
βββ tailwind.config.ts
βββ tsconfig.json
βββ README.md
npm installnpm run devOpen http://localhost:3000.
npm run check
npm run build
npm run start- Filters, widgets layout, and saved layout snapshots are persisted in localStorage.
- The mock dataset is anchored to the latest transaction date so date filters stay meaningful.
- CSV export always uses the currently filtered transaction list.
NEXT_PUBLIC_BASE_PATHorBASE_PATHcan override the repository-derived GitHub Pages path.