feat: reporting dashboard (closes #6) (#30)

* feat: reporting dashboard (closes groombook/groombook#6) (GRO-24)

- Add GET /api/reports/summary — KPI cards (revenue, appointments, clients)
- Add GET /api/reports/revenue — revenue by day/week/month and by groomer
- Add GET /api/reports/appointments — appointment trends with status breakdown
- Add GET /api/reports/services — service popularity and revenue by service
- Add GET /api/reports/clients — new clients, active count, churn risk list
- Add GET /api/reports/export.csv — CSV export for revenue, appointments, services
- Add Reports page at /reports with date range picker and group-by control
- Wire Reports into nav and routing in App.tsx

Co-Authored-By: Paperclip <noreply@paperclip.ing>

* fix: remove eslint-disable comment for uninstalled react-hooks plugin (GRO-24)

Co-Authored-By: Paperclip <noreply@paperclip.ing>

---------

Co-authored-by: Groom Book CTO <cto@groombook.app>
Co-authored-by: Paperclip <noreply@paperclip.ing>
This commit was merged in pull request #30.
This commit is contained in:
groombook-paperclip[bot]
2026-03-17 21:33:33 +00:00
committed by GitHub
parent addcefe70b
commit e63ce83400
4 changed files with 824 additions and 0 deletions
+2
View File
@@ -9,6 +9,7 @@ import { appointmentsRouter } from "./routes/appointments.js";
import { staffRouter } from "./routes/staff.js";
import { invoicesRouter } from "./routes/invoices.js";
import { bookRouter } from "./routes/book.js";
import { reportsRouter } from "./routes/reports.js";
import { authMiddleware } from "./middleware/auth.js";
import { startReminderScheduler } from "./services/reminders.js";
@@ -40,6 +41,7 @@ api.route("/services", servicesRouter);
api.route("/appointments", appointmentsRouter);
api.route("/staff", staffRouter);
api.route("/invoices", invoicesRouter);
api.route("/reports", reportsRouter);
const port = Number(process.env.PORT ?? 3000);
console.log(`API server listening on port ${port}`);