feat(analytics): Sprint N — dashboards CE + admin #88

Merged
tarzzan merged 1 commit from feat/karbe-sprint-n into main 2026-06-03 02:46:29 +00:00
Owner

Sprint N — Analytics dashboards CE + admin

Ferme la piste « dashboard analytics par CE » + ajoute analytics globaux côté admin.

src/lib/analytics.ts (NEW)

3 queries server-only :

  • getMonthlyRevenueSeries({organizationId?, monthsBack=12}) — 12 buckets YYYY-MM avec carbetRevenue + rentalRevenue + total. Scope optionnel par org via memberships (Booking) et provider.organizationId (RentalBooking)
  • getCarbetsOccupancy({organizationId?, monthsBack=3}) — liste triée par occupancyPct avec bookedNights/totalNights pour chaque carbet PUBLISHED (filtré par memberships si org)
  • getAdminGlobalKpis() — users (total + breakdown par rôle), carbetsPublished, bookings/rentals 30j, revenue 30j, top 5 carbets + top 5 providers par CA 30j

<MonthlyRevenueChart /> (NEW)

Bar chart SVG simple (pas de lib externe), stack carbet + rental, grid Y, tooltips via <title>, légende couleurs. Responsive overflow-x-auto.

/espace-ce/analytics/page.tsx (NEW)

  • 3 KPIs (CA 12 mois total / Carbet / Matériel)
  • MonthlyRevenueChart scopé par org
  • Liste taux d'occupation carbets 3 derniers mois (barres horizontales avec %)
  • Lien depuis le dashboard /espace-ce

/admin/analytics/page.tsx (NEW)

  • 4 KPIs (utilisateurs, carbets publiés, bookings 30j, CA 30j)
  • Breakdown users par rôle (barres horizontales + pourcentages)
  • Carte « Activité 30j » bookings + locations
  • MonthlyRevenueChart global
  • Top 5 carbets (CA 30j) + Top 5 prestataires rental (CA 30j)
  • Sidebar admin gagne entrée « Analytics » sous « Vue d'ensemble »

Pas de nouvelle dépendance npm — graphiques en SVG natif.

Test plan

  • npm test 70/70 ✓
  • typecheck / lint / build ✓
  • CE_MANAGER → /espace-ce/analytics → 3 KPIs + chart + liste occupation
  • ADMIN → /admin/analytics → 4 KPIs + breakdown rôles + chart + top 5
  • Sidebar admin montre l'entrée Analytics

🤖 Generated with Claude Code

## Sprint N — Analytics dashboards CE + admin Ferme la piste « dashboard analytics par CE » + ajoute analytics globaux côté admin. ### `src/lib/analytics.ts` (NEW) 3 queries server-only : - `getMonthlyRevenueSeries({organizationId?, monthsBack=12})` — 12 buckets `YYYY-MM` avec carbetRevenue + rentalRevenue + total. Scope optionnel par org via memberships (Booking) et `provider.organizationId` (RentalBooking) - `getCarbetsOccupancy({organizationId?, monthsBack=3})` — liste triée par occupancyPct avec bookedNights/totalNights pour chaque carbet PUBLISHED (filtré par memberships si org) - `getAdminGlobalKpis()` — users (total + breakdown par rôle), carbetsPublished, bookings/rentals 30j, revenue 30j, top 5 carbets + top 5 providers par CA 30j ### `<MonthlyRevenueChart />` (NEW) Bar chart SVG simple (pas de lib externe), stack carbet + rental, grid Y, tooltips via `<title>`, légende couleurs. Responsive overflow-x-auto. ### `/espace-ce/analytics/page.tsx` (NEW) - 3 KPIs (CA 12 mois total / Carbet / Matériel) - MonthlyRevenueChart scopé par org - Liste taux d'occupation carbets 3 derniers mois (barres horizontales avec %) - Lien depuis le dashboard `/espace-ce` ### `/admin/analytics/page.tsx` (NEW) - 4 KPIs (utilisateurs, carbets publiés, bookings 30j, CA 30j) - Breakdown users par rôle (barres horizontales + pourcentages) - Carte « Activité 30j » bookings + locations - MonthlyRevenueChart global - Top 5 carbets (CA 30j) + Top 5 prestataires rental (CA 30j) - Sidebar admin gagne entrée « Analytics » sous « Vue d'ensemble » **Pas de nouvelle dépendance npm** — graphiques en SVG natif. ### Test plan - [x] `npm test` 70/70 ✓ - [x] typecheck / lint / build ✓ - [ ] CE_MANAGER → `/espace-ce/analytics` → 3 KPIs + chart + liste occupation - [ ] ADMIN → `/admin/analytics` → 4 KPIs + breakdown rôles + chart + top 5 - [ ] Sidebar admin montre l'entrée Analytics 🤖 Generated with [Claude Code](https://claude.com/claude-code)
tarzzan added 1 commit 2026-06-03 02:46:28 +00:00
feat(analytics): Sprint N — dashboards CE + admin
All checks were successful
CI / test (pull_request) Successful in 2m34s
0dc560385d
src/lib/analytics.ts (NEW) — 3 queries server-only :
- getMonthlyRevenueSeries({organizationId?, monthsBack=12}) → 12
  buckets « YYYY-MM » avec carbetRevenue + rentalRevenue + total.
  Scope optionnel par org via memberships (Booking) et
  provider.organizationId (RentalBooking).
- getCarbetsOccupancy({organizationId?, monthsBack=3}) → liste triée
  par occupancyPct avec bookedNights/totalNights pour chaque carbet
  PUBLISHED (filtré par memberships si org).
- getAdminGlobalKpis() → users (total + breakdown par rôle),
  carbetsPublished, bookings/rentals 30j, revenue 30j, top 5 carbets
  + top 5 providers par CA 30j.

src/components/analytics/MonthlyRevenueChart.tsx (NEW) — bar chart
SVG simple (pas de lib externe), stack carbet + rental, grid Y, tooltips
via <title>, légende couleurs. Responsive overflow-x-auto.

/espace-ce/analytics/page.tsx (NEW) :
- 3 KPIs (CA 12 mois total / Carbet / Matériel)
- MonthlyRevenueChart scopé par org
- Liste taux d'occupation carbets 3 derniers mois (barres horizontales)
- Lien ajouté depuis le dashboard /espace-ce

/admin/analytics/page.tsx (NEW) :
- 4 KPIs (utilisateurs, carbets publiés, bookings 30j, CA 30j)
- Breakdown users par rôle (barres horizontales + pourcentages)
- Carte « Activité 30j » avec bookings carbet + locations matériel
- MonthlyRevenueChart global
- Top 5 carbets (CA 30j) + Top 5 prestataires rental (CA 30j)
- Sidebar admin gagne entrée « Analytics » sous « Vue d'ensemble »

Pas de nouvelle dépendance npm — graphiques en SVG natif.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
tarzzan merged commit 58fd65a4d0 into main 2026-06-03 02:46:29 +00:00
tarzzan deleted branch feat/karbe-sprint-n 2026-06-03 02:46:29 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: tarzzan/karbe#88
No description provided.