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
+3
View File
@@ -5,6 +5,7 @@ import { ServicesPage } from "./pages/Services.js";
import { StaffPage } from "./pages/Staff.js";
import { InvoicesPage } from "./pages/Invoices.js";
import { BookPage } from "./pages/Book.js";
import { ReportsPage } from "./pages/Reports.js";
const NAV_LINKS = [
{ to: "/", label: "Appointments" },
@@ -12,6 +13,7 @@ const NAV_LINKS = [
{ to: "/services", label: "Services" },
{ to: "/staff", label: "Staff" },
{ to: "/invoices", label: "Invoices" },
{ to: "/reports", label: "Reports" },
];
export function App() {
@@ -74,6 +76,7 @@ export function App() {
<Route path="/staff" element={<StaffPage />} />
<Route path="/invoices" element={<InvoicesPage />} />
<Route path="/book" element={<BookPage />} />
<Route path="/reports" element={<ReportsPage />} />
</Routes>
</main>
</div>