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
|
be2391998d
|
feat(plugins): seasonality + min-stay (Phase 3.2 + 3.4)
Plugin seasonality :
- Migration : Carbet.seasonalConstraints JSONB nullable
- lib/seasonality.ts : enum Season (DRY|LOW_WATER|WET), currentSeason() helper
Guyane (juil-sept sèche, oct-nov étiage, déc-juin pluies), parseSeasonalConstraints,
isCurrentlyOpen, SEASON_META (label/emoji/tone)
- Composant <SeasonBanner /> server, gated par plugin, ajouté dans layout
au-dessus de tout le contenu — bandeau couleur+emoji+message contextuel
Plugin min-stay :
- Migration : Carbet.minStayNights, maxStayNights, minCapacity nullable
- Composant <StayConstraints /> client, gated par plugin — pill text
'2 nuits minimum', '2-7 nuits', 'groupe 4+ recommandé'
- Carbet card et fiche enrichies avec les contraintes
Tous deux désactivables : sans le toggle, comportement legacy inchangé.
|
2026-05-31 08:50:26 +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 |
|