No description
Add dark-theme styles and Leaflet z-index tweaks; switch tile layer URL/attribution based on Next.js theme. Introduce theme hook, PocketBase helper import and tile constants; lower label zoom breakpoint. Replace ZoomWatcher with MapWatcher that invalidates map size when toggling fullscreen. Add fullscreen UI, edit mode toggle, draggable markers when editing, and saveSupplierLocation to persist coordinate updates to PocketBase with optimistic UI and toast feedback. Misc: simplify cluster marker popup handling, ensure popups close before cluster flyTo, and tweak cluster distance label to reflect current zoom. |
||
|---|---|---|
| .vscode | ||
| docs | ||
| public | ||
| scripts | ||
| src | ||
| .gitignore | ||
| AGENTS.md | ||
| CLAUDE.md | ||
| components.json | ||
| Dockerfile | ||
| eslint.config.mjs | ||
| next.config.ts | ||
| nixpacks.toml | ||
| 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