Claude Integration
a6df96db7e
feat: reset password + page mon-compte (RGPD) + facettes recherche (prix max, équipements)
CI / test (pull_request) Successful in 2m19s
2026-06-01 10:16:37 +00:00
Claude Integration
e79b6dd141
feat(p0): prix/nuit + booking form public + /inscription + /reservations/[id]
2026-06-01 01:34:00 +00:00
Claude Integration
a9fcd18022
feat(admin): /admin/home — éditeur des textes de la page d'accueil (FR+EN, override DB)
2026-06-01 01:10:49 +00:00
Claude Integration
79ddcd23f5
feat(admin): Sprint 5 — Audit log + Settings (gouvernance)
2026-06-01 00:13:49 +00:00
Claude Integration
87c3e7a581
feat: ContentPage bilingue (PK composite slug+lang) + seed pages EN
...
Migration : ContentPage.id devient PK composite (slug, lang) au lieu de slug
seul, pour stocker une version FR et une version EN du même slug. Index sur
slug seul pour les lookups.
Schema Prisma : @@id([slug, lang]).
Helpers :
- getContentPage(slug, lang) avec fallback FR si la version dans la langue
demandée n'existe pas
- listContentPages(category?, lang?) accepte un filtre lang
- upsertContentPage : utilise le composite key
Pages publiques (a-propos, faq, comment-ca-marche, pour-comites-entreprise,
devenir-loueur, cgv, mentions-legales, politique-de-confidentialite) :
ajoutent un appel à getLocale() et le passent à getContentPage.
Seeds :
- src/lib/plugins/seeds/content-pages-en.ts : 8 pages traduites en anglais
- hook onEnable du plugin i18n-fr-en : seed EN pages au toggle on. Désactiver
i18n n'efface pas les EN pages (elles dorment, fallback FR reprend).
Résultat : quand l'utilisateur switche vers EN, /a-propos, /faq, /cgv, etc.
basculent en anglais. Le contenu hors-DB (composants UI) bascule déjà via les
dictionnaires de la PR i18n-fr-en initiale.
2026-05-31 11:45:47 +00:00
Claude Integration
a174f99eba
feat(plugin): pirogue-providers (Phase 3.3)
...
Modèle PirogueProvider (id, name, contacts, fleuves, tarif, description)
+ enum TransportMode (OWNER_PROVIDES, SELF_ARRANGE, PARTNER_PROVIDER) sur Carbet
+ relation Carbet → PirogueProvider (nullable, ondelete:SetNull)
Composants :
- PirogueTransportBlock (server, gated par plugin) sur fiche carbet :
affiche le mode + provider partenaire avec contacts/tarif/description
- Page publique /partenaires-pirogue : liste des partenaires actifs
Seed onEnable :
- 3 partenaires démo (Pirogues du Maroni, Approuague Aventures, Oyapock Frontière)
avec tarifs estimatifs et fleuves desservis réels
- Attribution aux 6 carbets démo :
· Awara (Maroni), Maripa (Approuague), Paripou (Oyapock) → PARTNER_PROVIDER
· Wapa (Comté), Mahury CE → OWNER_PROVIDES
· Kourou Couleuvre → SELF_ARRANGE
onDisable désactive les partenaires démo et détache les carbets démo.
2026-05-31 11:29:29 +00:00
Claude Integration
68f37f554f
feat(plugins): content-pages + legal-pages (Phase 4.1 + 4.3)
...
Plugin content-pages :
- Modèle Prisma ContentPage (slug PK, title, body markdown, category, published)
- lib/content-pages.ts : helpers upsert/get/list/unpublish
- lib/markdown.ts : mini-renderer markdown server-side sans deps externe
(h1-h3, paragraphes, gras/italique, liens, listes ul/ol, hr, blockquote,
échappement HTML)
- ContentPageRenderer server component, applique le theme Guyane (font-serif)
- 5 pages seedées : /a-propos, /faq, /comment-ca-marche,
/pour-comites-entreprise, /devenir-loueur
- Routes publiques + force-dynamic + guard requirePluginOr404
Plugin legal-pages :
- Réutilise le même modèle ContentPage, catégorie 'legal'
- 3 pages seedées : /cgv, /mentions-legales, /politique-de-confidentialite
(contenu de base, à valider par avocat avant prod réelle)
Admin :
- /admin/content-pages : table par catégorie, statut publié/dépublié
- /admin/content-pages/[slug] : éditeur markdown + toggle publié
- PATCH /api/admin/content-pages/[slug]
Hooks plugin :
- onEnable seed + republish toutes les pages
- onDisable dépublie toute la catégorie sans la supprimer (preserve les edits)
2026-05-31 10:12:13 +00:00
Claude Integration
3405f00476
chore(prisma): ajoute minStayNights/maxStayNights/minCapacity/seasonalConstraints au modèle Carbet (oubli PR#30)
2026-05-31 08:52:46 +00:00
Claude Integration
bc571b38d1
chore(prisma): déclare enum AccessType (oublié dans PR#27)
2026-05-31 03:00:52 +00:00
Claude Integration
5e59202505
feat(plugins): access-type + demo-carbets-seed (Phase 3.1 + 2.5)
...
Plugin access-type :
- Migration : enum AccessType (ROAD_AND_RIVER, RIVER_ONLY), champ accessType
sur Carbet avec default ROAD_AND_RIVER, roadAccessNote optionnel,
pirogueDurationMin rendu nullable + index sur accessType
- Schema Prisma mis à jour
- Composant <AccessTypeBadge> client, gated par le plugin
- Carbet card et fiche enrichies : badge + texte adapté (Pirogue vs Route+pirogue
vs Route directe), section Accès enrichie avec roadAccessNote
- formatPirogueDuration accepte null
Plugin demo-carbets-seed :
- Hook onEnable : 3 propriétaires demo (Yann/Émilie/CE Hôpital) + 6 carbets
variés (Maroni, Approuague, Comté, Oyapock, Mahury, Kourou) avec mix
3 RIVER_ONLY + 3 ROAD_AND_RIVER, GPS plausibles, descriptions naturelles
- Hook onDisable : archive (status=ARCHIVED) les carbets demo via slug prefix
- Toutes les fixtures idempotentes (upsert via slug + email)
2026-05-31 02:56:25 +00:00
Claude Integration
62cc464738
feat(plugins): foundation système Plugin Karbé
...
- Modèle Prisma Plugin (key, name, description, category, version, enabled,
config JSONB, migrationsApplied, timestamps) + migration SQL
- PluginRegistry (src/lib/plugins/registry.ts) avec 12 plugins déclarés :
visuels (theme-guyane, landing-hero, landing-sections, image-gallery-seed,
demo-carbets-seed), métier (access-type, seasonality, pirogue-providers,
min-stay), contenus (content-pages, legal-pages), i18n (i18n-fr-en)
- Server helpers (server.ts) : sync, isEnabled, getEnabledKeys, toggle avec
hooks onEnable/onDisable, updateConfig, cache 5s
- Client bridge (client.tsx) : PluginProvider + useIsPluginEnabled
- Composant <IfPluginEnabled plugin=... fallback=...>
- Guard requirePluginOr404 pour pages et routes
- Page admin /admin/plugins avec table toggle par catégorie + édition config
- Route PATCH /api/admin/plugins/[key] + GET
- Layout async qui sync registry + passe enabledKeys au PluginProvider
Tous plugins en enabled=false par défaut, activation pilotée depuis l'admin.
2026-05-30 22:17:10 +00:00
fcc2749d1d
feat(carbet): add lastBookedAt and endpoint
2026-05-30 17:52:41 +00:00
54f406053b
feat(prisma): add full Karbé schema and initial migration
...
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-29 16:59:35 +00:00
e464b86cb2
chore: scaffold Next.js + Prisma + Tailwind
...
Initialise le projet Karbé :
- Next.js 16 (App Router, TypeScript) + Tailwind CSS v4 + ESLint
- Prisma avec datasource PostgreSQL, schema minimal et client généré
dans src/generated/prisma (postinstall: prisma generate)
- Page d'accueil placeholder (titre + mission)
- .env.example (DATABASE_URL, NEXTAUTH_SECRET)
- README avec instructions de setup
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-29 16:59:11 +00:00