feat(carbets): public search + carbet detail page (SSR/SEO)

Implémente SYS-5 : la marketplace publique pour découvrir les carbets
fluviaux publiés par les hôtes.

- /carbets : page de recherche server-side avec filtres GET
  (fleuve, dates de séjour, capacité min.), grille de résultats
  avec photo de couverture, fleuve, capacité, durée pirogue
- /carbets/[slug] : fiche carbet SSR
  - generateMetadata (title/description + OpenGraph/Twitter cards)
  - galerie médias (photo couverture + vignettes vidéo/photo)
  - description, équipements (catalogue), accès, coords GPS,
    capacité, prénom de l'hôte
- robots.ts + sitemap.xml (incluant les carbets publiés)
- metadataBase / title.template au niveau du root layout, OG par
  défaut Karbé
- Lien "Découvrir les carbets" sur la home
- Helpers partagés : lib/carbet-search.ts (parse filters + query),
  lib/carbet-public.ts (fetch SSR mémoïsé via React cache),
  lib/format.ts (durée pirogue, troncature, coords)
- Nouvelle variable d'env NEXT_PUBLIC_SITE_URL (canonical/OG/sitemap)

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
Karbé Architect 2026-05-29 22:24:25 +00:00
parent 3567eb975b
commit c2df6722f2
13 changed files with 827 additions and 1 deletions

View file

@ -7,6 +7,10 @@ DATABASE_URL="postgresql://user:password@localhost:5432/karbe?schema=public"
NEXTAUTH_SECRET="changeme"
AUTH_SECRET="changeme"
# URL publique du site, utilisée pour résoudre les URLs canoniques et
# OpenGraph (SEO). En développement, laissez la valeur par défaut.
NEXT_PUBLIC_SITE_URL="http://localhost:3000"
# Stockage objet des médias (S3 ou MinIO). Compatible AWS S3 et MinIO.
# Pour MinIO en local : renseignez S3_ENDPOINT (ex: http://localhost:9000)
# et laissez S3_FORCE_PATH_STYLE à "true".