Labour Connect — Admin Panel (React)
Web admin dashboard for the Labour Connect marketplace. Built with React + TypeScript + Vite + Material UI, talking to the FastAPI backend.
Features
- Secure admin login (email/password → JWT, persisted, auto session restore, 401 → re-login)
- Dashboard — customers, workers, bookings, revenue stats + bar/pie charts (Recharts)
- Workers — filter by KYC status, approve / reject KYC, suspend / reinstate
- Customers — block / unblock / delete
- Categories — full CRUD with active toggle + icon picker (matches the app icons)
- Bookings — filter by status, cancel, reassign to a verified worker
- Reviews — hide / restore inappropriate reviews (recomputes worker ratings)
- Polished UX: responsive sidebar layout, confirm dialogs, toasts, loading/empty/error states
Stack
React 18 · TypeScript · Vite 5 · MUI 5 · TanStack Query 5 · React Router 6 · Axios · Recharts
Prerequisites
- Node 18+
- Backend running (see
../backend/README.md) with an admin seeded
Setup & run
cd admin
cp .env.example .env # set VITE_API_BASE_URL if backend isn't on localhost:8000
npm install
npm run dev # http://localhost:5173
.env:
VITE_API_BASE_URL=http://localhost:8000/api/v1
Login
Use the seeded admin (from the backend .env):
admin@labourconnect.in / Admin@123
Scripts
| Command | Description |
|---|---|
npm run dev |
Start dev server (HMR) |
npm run build |
Type-check (tsc) + production build to dist/ |
npm run preview |
Preview the production build |
npm run typecheck |
Type-check only |
Typical workflow
- A worker signs up in the mobile app and submits KYC.
- Here under Workers → Pending KYC, review and Approve them.
- The worker can now go Online in the app and receive bookings.
- Monitor everything from Dashboard / Bookings; moderate Reviews as needed.
Project structure
src/
api/ axios client, typed services, shared types
auth/ AuthContext + ProtectedRoute
components/ Layout (sidebar/topbar), StatCard, StatusChip, dialogs, toasts, feedback
hooks/ TanStack Query hooks for every endpoint
pages/ Login, Dashboard, Workers, Customers, Categories, Bookings, Reviews
theme.ts MUI theme (brand colors + typography)
main.tsx providers (Theme, Query, Router, Auth, Toast)
Notes
- The build emits a single ~1 MB JS chunk (MUI + Recharts). Fine for an internal
panel; add
manualChunks/ dynamic imports if you want to trim it. - CORS: the backend already allows
http://localhost:5173by default (BACKEND_CORS_ORIGINS). Add your deployed admin URL there for production.