Génération de badges PNG côté serveur (Next.js 15 + `next/og`) et stockage public sur Supabase Storage.
``` /api/badge/og?habit=&count=&target=&user= ```
- Rend une image 1200x630 avec la barre de progression.
- Mis en cache 60s (revalidate).
```json POST /api/badge/generate Content-Type: application/json { "habit": "walk 30 min", "user": "Mo", "count": 7, "target": 7 } ```
- Si `count >= target`, crée un PNG et l'upload dans le bucket `badges`.
- Retourne `{ ok: true, url, path }`.
- `NEXT_PUBLIC_SUPABASE_URL` = https://.supabase.co
- `NEXT_PUBLIC_SUPABASE_ANON_KEY` = clé anon (pour le client navigateur si besoin)
- `SUPABASE_SERVICE_ROLE_KEY` = service_role (serveur uniquement)
- `SUPABASE_BUCKET` = `badges`
- (optionnel) `NEXT_PUBLIC_BASE_URL` = URL du site (prod)
``` /api/badge/og?habit=walk%2030%20min&count=5&target=7&user=Mo ```
```bash
curl -s -X POST https:///api/badge/generate
-H "Content-Type: application/json"
-d '{"habit":"walk 30 min","user":"Mo","count":7,"target":7}'
```
- `app/api/badge/og/route.tsx` : rendu OG + `revalidate=60`
- `app/api/badge/generate/route.tsx` : génération PNG + upload Supabase (+ rate-limit simple)
- `lib/supabaseServer.ts` : client serveur (Service Role)
- `lib/supabaseClient.ts` : client navigateur (anon)
- `lib/slugify.ts` : utilitaire pour construire les chemins de fichiers