No description
Enhance supplier map UX by introducing zoom-aware clustering and refined marker visuals. Adds clusterIcon, clusterDistanceForZoom, ZoomWatcher, ClusterMarker and SupplierPopup components; switches to dynamic cluster sizes and distances based on zoom, and flies into clusters on click. Shows individual supplier markers and optional permanent labels above configurable zoom breakpoints, and reduces marker sizes/shadows for a cleaner look. Also adds .supplier-map-label CSS for tooltip-style permanent labels. |
||
|---|---|---|
| .vscode | ||
| docs | ||
| public | ||
| scripts | ||
| src | ||
| .gitignore | ||
| AGENTS.md | ||
| CLAUDE.md | ||
| components.json | ||
| Dockerfile | ||
| eslint.config.mjs | ||
| next.config.ts | ||
| package-lock.json | ||
| package.json | ||
| postcss.config.mjs | ||
| README.md | ||
| tsconfig.json | ||
WFDASH - Business CRM
A modern business CRM built with Next.js 16, shadcn/ui, Tailwind CSS 4, and PocketBase.
Tech Stack
- Frontend: Next.js 16 (App Router), React 19, TypeScript
- UI: shadcn/ui, Tailwind CSS 4, Lucide Icons
- Backend: PocketBase (database, auth, file storage, realtime)
- Notifications: Sonner
Getting Started
Prerequisites
- Node.js 18+
- PocketBase server running at
http://127.0.0.1:8090
Installation
npm install
PocketBase Setup
- Start PocketBase:
./pocketbase serve
-
Create an admin account in the PocketBase admin UI
-
Set environment variables:
export PB_ADMIN_EMAIL=admin@example.com
export PB_ADMIN_PASSWORD=your_password
- Run the setup script to create collections:
npm run setup
Environment Variables
Create .env.local:
NEXT_PUBLIC_POCKETBASE_URL=http://127.0.0.1:8090
Development
npm run dev
Features
- Customers: Full CRUD with search, pagination, CSV export
- Companies: Full CRUD with detail pages
- Suppliers: Full CRUD with tag support
- Quotes: Line items with auto-calculations, status workflow
- Orders: PO generation, supplier grouping
- Dashboard: Real-time stats, recent activity
- Auth: Login, register, password reset
- Dark/Light Mode: Theme switching
- Mobile Responsive: Collapsible sidebar, card views on mobile
Collections
customers- Customer databasecompanies- Company databasesuppliers- Supplier networkquotes- Quotes with line itemsorders- Orders with PO generation
Project Structure
src/
├── app/
│ ├── (auth)/ # Auth pages (login, register)
│ └── (app)/ # Protected app pages
│ ├── dashboard/ # Dashboard
│ ├── customers/ # Customer management
│ ├── companies/ # Company management
│ ├── suppliers/ # Supplier management
│ ├── quotes/ # Quote management
│ └── orders/ # Order management
├── components/
│ ├── ui/ # shadcn/ui components
│ ├── sidebar.tsx # Navigation sidebar
│ ├── auth-provider.tsx # Auth context
│ ├── theme-provider.tsx # Theme context
│ └── ... # Form and table components
└── lib/
├── pocketbase.ts # PocketBase client
├── pb-helpers.ts # Helper functions
├── types.ts # TypeScript types
└── utils.ts # Utility functions