+ Pages markdown affichées dans le site public. La catégorie « Général »
+ est gérée par le plugin content-pages, la catégorie « Légales »
+ par legal-pages. Désactiver le plugin dépublie ses pages
+ sans les supprimer.
+
`);
+ continue;
+ }
+
+ if ((m = /^>\s?(.*)$/.exec(line))) {
+ flushParagraph();
+ flushList();
+ inBlockquote = true;
+ blockquote.push(m[1]);
+ continue;
+ }
+
+ flushList();
+ flushBlockquote();
+ paragraph.push(line);
+ }
+
+ flushParagraph();
+ flushList();
+ flushBlockquote();
+
+ return out.join("\n");
+}
diff --git a/src/lib/plugins/hooks.ts b/src/lib/plugins/hooks.ts
index 452c5c8..53c5bc3 100644
--- a/src/lib/plugins/hooks.ts
+++ b/src/lib/plugins/hooks.ts
@@ -15,6 +15,16 @@ export interface PluginHookSet {
}
import { archiveDemoCarbets, seedDemoCarbets } from "./seeds/demo-carbets";
+import {
+ republishContentPages,
+ seedContentPages,
+ unpublishContentPages,
+} from "./seeds/content-pages-default";
+import {
+ republishLegalPages,
+ seedLegalPages,
+ unpublishLegalPages,
+} from "./seeds/legal-pages-default";
export const pluginHooks: Record = {
"demo-carbets-seed": {
@@ -31,4 +41,30 @@ export const pluginHooks: Record = {
);
},
},
+ "content-pages": {
+ onEnable: async () => {
+ const seeded = await seedContentPages();
+ const republished = await republishContentPages();
+ console.log(
+ `[plugin content-pages] seed: ${seeded.created} pages, republished: ${republished}`,
+ );
+ },
+ onDisable: async () => {
+ const unpub = await unpublishContentPages();
+ console.log(`[plugin content-pages] disable: ${unpub} pages dépubliées`);
+ },
+ },
+ "legal-pages": {
+ onEnable: async () => {
+ const seeded = await seedLegalPages();
+ const republished = await republishLegalPages();
+ console.log(
+ `[plugin legal-pages] seed: ${seeded.created} pages, republished: ${republished}`,
+ );
+ },
+ onDisable: async () => {
+ const unpub = await unpublishLegalPages();
+ console.log(`[plugin legal-pages] disable: ${unpub} pages dépubliées`);
+ },
+ },
};
diff --git a/src/lib/plugins/seeds/content-pages-default.ts b/src/lib/plugins/seeds/content-pages-default.ts
new file mode 100644
index 0000000..5ab3cfb
--- /dev/null
+++ b/src/lib/plugins/seeds/content-pages-default.ts
@@ -0,0 +1,185 @@
+/**
+ * Seeds des pages de contenu (plugin content-pages, catégorie "general").
+ */
+
+import { setContentPagePublished, unpublishCategory, upsertContentPage } from "@/lib/content-pages";
+
+type SeedPage = { slug: string; title: string; body: string };
+
+const PAGES: SeedPage[] = [
+ {
+ slug: "a-propos",
+ title: "À propos de Karbé",
+ body: `## Une marketplace solidaire des fleuves de Guyane
+
+Karbé met en relation des propriétaires de carbets fluviaux — particuliers, comités d'entreprise, associations — avec des voyageurs qui cherchent autre chose qu'une chambre d'hôtel : un hamac, un fleuve, du silence.
+
+## Pourquoi Karbé existe
+
+En Guyane, des centaines de carbets dorment six mois par an. Pendant ce temps, des touristes cherchent l'aventure et des CE locaux peinent à proposer des séjours abordables à leurs membres. Karbé fait le pont entre les deux mondes — sans s'enrichir au passage.
+
+## Notre modèle
+
+Le paiement de la réservation transite par Stripe et **est reversé intégralement au propriétaire** : 0 % de commission. Karbé se finance par un abonnement annuel payé par les loueurs qui veulent référencer leur carbet — pas par une prise sur ce que vous payez.
+
+## L'équipe
+
+Karbé est porté par une association numérique guyanaise. Nous sommes basés à Cayenne et nous parlons français, créole, anglais, portugais.
+
+[Devenir loueur](/espace-hote) · [Pour comités d'entreprise](/pour-comites-entreprise) · [Contact](mailto:bonjour@karbe.cosmolan.fr)
+`,
+ },
+ {
+ slug: "comment-ca-marche",
+ title: "Comment ça marche",
+ body: `Karbé permet de réserver un carbet fluvial en trois étapes.
+
+## 1. Trouver le carbet qui vous ressemble
+
+Sur [la page de recherche](/carbets), filtrez par fleuve, dates et nombre de voyageurs. Chaque carbet est classé selon son type d'accès :
+
+- 🛣️ **Route + fleuve** — accessible en voiture, idéal pour un week-end facile
+- 🛶 **Expédition fleuve** — uniquement en pirogue, pour ceux qui veulent vraiment dormir loin
+
+## 2. Réserver et payer
+
+La réservation se fait en ligne, paiement sécurisé via Stripe. Vous recevez une confirmation par e-mail avec les détails d'accès, le point d'embarquement et, si applicable, le contact du passeur.
+
+## 3. Profiter
+
+Le loueur vous remet les clés du karbé (en personne ou via une boîte sécurisée selon le carbet). À votre arrivée, le hamac est là. Le fleuve aussi.
+
+## Et après ?
+
+Une fois rentré, vous pouvez laisser un avis sur votre séjour : il aidera les futurs voyageurs et donnera de la visibilité aux loueurs sérieux.
+
+[Voir tous les carbets disponibles](/carbets)
+`,
+ },
+ {
+ slug: "faq",
+ title: "Questions fréquentes",
+ body: `## Réservation
+
+### Quand mon paiement est-il prélevé ?
+
+Le paiement est autorisé sur votre carte au moment de la réservation et capturé lorsque le loueur confirme la dispo (ou automatiquement dans les 24 h). Si la réservation n'aboutit pas, l'autorisation est libérée sans frais.
+
+### Karbé prend-il une commission ?
+
+**Non.** Le séjour vous est facturé au prix exact fixé par le loueur, qui le reçoit intégralement (moins les frais Stripe). Karbé se finance par un abonnement annuel payé par les loueurs.
+
+### Et si je dois annuler ?
+
+Chaque loueur fixe sa politique d'annulation. Elle est affichée sur la fiche du carbet avant le paiement.
+
+## Sur place
+
+### Comment se passe le transport en pirogue ?
+
+Selon le carbet, le loueur fournit lui-même le passeur, vous oriente vers un prestataire partenaire, ou vous laisse organiser. L'info est précisée sur chaque fiche.
+
+### Les carbets ont-ils l'électricité ? L'eau courante ?
+
+Variable. Beaucoup fonctionnent au solaire et à l'eau de pluie. L'équipement précis figure sur chaque fiche.
+
+### Y a-t-il du réseau ?
+
+Sur les fleuves Maroni, Oyapock et Approuague en amont des bourgs, **non**. Téléchargez vos cartes hors-ligne avant de partir.
+
+## Pour les loueurs
+
+### Combien ça coûte de référencer mon carbet ?
+
+L'abonnement annuel loueur est facturé via Stripe. Le montant exact dépend du nombre de carbets référencés (un seul carbet : tarif standard). Voir [Devenir loueur](/espace-hote) pour les détails.
+
+### Mon CE peut-il référencer son carbet ?
+
+Oui — et c'est encouragé. Les CE peuvent ouvrir leur carbet au public les semaines où aucun membre n'a réservé, tout en gardant la priorité pour leurs adhérents. Voir [Pour comités d'entreprise](/pour-comites-entreprise).
+`,
+ },
+ {
+ slug: "pour-comites-entreprise",
+ title: "Pour comités d'entreprise",
+ body: `## Vos carbets dorment six mois par an. Partageons-les.
+
+De nombreux comités sociaux d'entreprise possèdent déjà un carbet — financé par les cotisations, réservé en priorité aux salariés, mais souvent vide entre deux week-ends. Karbé permet d'ouvrir ces périodes creuses au public, sans commission, sans gestion supplémentaire.
+
+## Comment ça fonctionne
+
+1. Vous référencez votre carbet sur Karbé. C'est gratuit pour les associations et CE conventionnés.
+2. Vous bloquez en priorité les créneaux réservés à vos membres (week-ends, congés scolaires…).
+3. Les créneaux restants sont proposés aux voyageurs publics sur la plateforme.
+4. Le paiement leur est facturé via Stripe et reversé directement au compte du CE.
+
+## Bénéfices
+
+- **Revenus complémentaires** : les locations publiques financent l'entretien.
+- **0 % de commission** : Karbé ne prend rien sur les séjours.
+- **Pas de paperasse** : Stripe encaisse et reverse, sans intermédiaire.
+- **Vos membres gardent la priorité** : un système de double calendrier sépare les créneaux CE des créneaux publics.
+
+## Prochaine étape
+
+Contactez-nous pour discuter de votre cas spécifique (statut du CE, modalités de paiement vers une association, gestion mutualisée de plusieurs carbets) : [bonjour@karbe.cosmolan.fr](mailto:bonjour@karbe.cosmolan.fr).
+`,
+ },
+ {
+ slug: "devenir-loueur",
+ title: "Devenir loueur",
+ body: `Vous avez un carbet ? Vous pouvez le proposer sur Karbé en quelques minutes.
+
+## Ce qu'il faut
+
+- Un titre de propriété ou une autorisation explicite du propriétaire
+- Photos du carbet (intérieur, extérieur, point d'embarquement)
+- Description honnête : commodités, accès, contraintes saisonnières
+- Une **politique d'annulation** claire que les voyageurs verront avant de payer
+
+## Étapes
+
+1. [Créez un compte loueur](/connexion) avec votre email et votre numéro de téléphone.
+2. Ajoutez votre carbet : photos, description, coordonnées GPS, point d'embarquement, durée pirogue (si fleuve), équipements.
+3. Ouvrez votre calendrier : indiquez les semaines disponibles, vos contraintes saisonnières (étiage Oyapock ? saison sèche uniquement ?).
+4. Activez l'abonnement annuel via Stripe (paiement sécurisé, prélèvement automatique).
+5. Vous êtes en ligne. Les réservations arrivent par e-mail.
+
+## Le paiement
+
+Quand un voyageur réserve, Stripe encaisse le séjour et **vous le reverse intégralement** sur votre compte bancaire. Karbé ne prend rien sur les séjours.
+
+## Questions
+
+Pour les cas spécifiques (carbet en indivision, parcelle ZAD, accord avec une commune…), écrivez-nous : [bonjour@karbe.cosmolan.fr](mailto:bonjour@karbe.cosmolan.fr).
+
+[Créer mon compte loueur](/connexion)
+`,
+ },
+];
+
+export async function seedContentPages(): Promise<{ created: number }> {
+ let created = 0;
+ for (const page of PAGES) {
+ await upsertContentPage({
+ slug: page.slug,
+ title: page.title,
+ body: page.body,
+ category: "general",
+ published: true,
+ });
+ created += 1;
+ }
+ return { created };
+}
+
+export async function unpublishContentPages(): Promise {
+ return await unpublishCategory("general");
+}
+
+export async function republishContentPages(): Promise {
+ let count = 0;
+ for (const page of PAGES) {
+ count += await setContentPagePublished(page.slug, "general", true);
+ }
+ return count;
+}
diff --git a/src/lib/plugins/seeds/legal-pages-default.ts b/src/lib/plugins/seeds/legal-pages-default.ts
new file mode 100644
index 0000000..56f8452
--- /dev/null
+++ b/src/lib/plugins/seeds/legal-pages-default.ts
@@ -0,0 +1,186 @@
+/**
+ * Seeds des pages légales (plugin legal-pages, catégorie "legal").
+ *
+ * Contenu de base, non-conseiller juridique. À faire réviser par un avocat
+ * avant la mise en production réelle.
+ */
+
+import { setContentPagePublished, unpublishCategory, upsertContentPage } from "@/lib/content-pages";
+
+const PAGES: { slug: string; title: string; body: string }[] = [
+ {
+ slug: "cgv",
+ title: "Conditions générales de vente",
+ body: `*Dernière mise à jour : 2026-05-31*
+
+Ces conditions générales régissent l'utilisation de la plateforme Karbé (karbe.cosmolan.fr) opérée par l'association porteuse du projet.
+
+## 1. Objet
+
+Karbé est une plateforme de mise en relation entre propriétaires de carbets fluviaux situés en Guyane française et voyageurs souhaitant louer ces carbets pour des séjours touristiques. Karbé n'est ni propriétaire des carbets ni partie au contrat de location.
+
+## 2. Inscription et comptes
+
+L'inscription est gratuite pour les voyageurs. Pour les loueurs, elle est conditionnée à la souscription d'un abonnement annuel facturé via Stripe.
+
+L'utilisateur s'engage à fournir des informations exactes et à maintenir à jour ses coordonnées.
+
+## 3. Paiement des séjours et reversement
+
+Les séjours sont facturés via Stripe au moment de la réservation. Le montant est **reversé intégralement au loueur** (moins les frais Stripe), sans prélèvement par Karbé.
+
+Karbé ne perçoit aucune commission sur les séjours. Le modèle économique repose exclusivement sur l'abonnement annuel des loueurs.
+
+## 4. Abonnement loueur
+
+L'abonnement annuel est facturé en début de période. Il est tacitement reconduit chaque année sauf résiliation par l'utilisateur depuis son espace.
+
+En cas de résiliation, le carbet est dépublié de la plateforme à la fin de la période en cours. Aucun remboursement prorata n'est effectué.
+
+## 5. Annulations
+
+Chaque loueur fixe sa propre politique d'annulation. Celle-ci est affichée sur la fiche du carbet avant tout paiement.
+
+En cas d'annulation par le voyageur, les conditions du loueur s'appliquent. Karbé peut, en cas de force majeure (fermeture administrative d'un fleuve, par exemple), procéder à un remboursement intégral après instruction.
+
+## 6. Responsabilité
+
+Karbé n'est pas responsable :
+
+- de l'état du carbet ou des équipements fournis par le loueur ;
+- du transport pirogue effectué par le loueur ou un prestataire ;
+- des conditions de navigation (étiage, crue, sécurité fleuve) ;
+- de tout incident survenant pendant le séjour.
+
+Le voyageur reste responsable de sa propre sécurité et est invité à souscrire une assurance voyage adaptée.
+
+## 7. Données personnelles
+
+Les données personnelles collectées sont traitées conformément à la [Politique de confidentialité](/politique-de-confidentialite).
+
+## 8. Droit applicable
+
+Les présentes conditions sont régies par le droit français. Tout litige relève de la compétence du tribunal de Cayenne (Guyane française).
+
+## 9. Contact
+
+[bonjour@karbe.cosmolan.fr](mailto:bonjour@karbe.cosmolan.fr)
+`,
+ },
+ {
+ slug: "mentions-legales",
+ title: "Mentions légales",
+ body: `*Dernière mise à jour : 2026-05-31*
+
+## Éditeur du site
+
+**Karbé** est édité par l'association porteuse du projet (en cours de constitution), basée à Cayenne (Guyane française).
+
+- Email : [bonjour@karbe.cosmolan.fr](mailto:bonjour@karbe.cosmolan.fr)
+- Site : [karbe.cosmolan.fr](https://karbe.cosmolan.fr)
+
+## Hébergement
+
+Le site est hébergé sur des serveurs situés en France métropolitaine, opérés par l'infrastructure Cosmolan.
+
+## Crédits et licences
+
+- Images d'illustration : ressources libres ou produites pour le projet.
+- Code source du site : open source, disponible sur [git.cosmolan.fr/tarzzan/karbe](https://git.cosmolan.fr/tarzzan/karbe).
+
+## Propriété intellectuelle
+
+Le contenu rédactionnel des fiches de carbets appartient aux loueurs qui les ont publiées. La marque et les éléments visuels propres à Karbé restent la propriété de l'éditeur.
+
+## Signalement
+
+Pour signaler un contenu inapproprié ou exercer vos droits (RGPD), écrivez à [bonjour@karbe.cosmolan.fr](mailto:bonjour@karbe.cosmolan.fr).
+`,
+ },
+ {
+ slug: "politique-de-confidentialite",
+ title: "Politique de confidentialité",
+ body: `*Dernière mise à jour : 2026-05-31*
+
+Karbé respecte votre vie privée. Cette politique décrit les données que nous collectons, leur usage et vos droits.
+
+## 1. Données collectées
+
+Nous collectons :
+
+- **Données d'identification** : email, nom, prénom, téléphone (renseignés lors de l'inscription).
+- **Données de réservation** : dates, carbet réservé, montant payé.
+- **Données techniques** : adresse IP, type de navigateur, pages consultées (uniquement pour la prévention de fraude et l'analyse d'usage agrégée).
+
+Nous **ne collectons pas** votre carte bancaire : le paiement est délégué à Stripe, qui dispose de sa propre certification PCI-DSS.
+
+## 2. Finalités
+
+- Permettre la mise en relation voyageur ↔ loueur.
+- Facturer et gérer les abonnements loueurs.
+- Prévenir la fraude.
+- Communiquer avec vous concernant votre compte ou vos réservations.
+
+## 3. Base légale
+
+Le traitement repose sur :
+
+- **Le contrat** vous liant à Karbé (compte utilisateur, réservation).
+- **L'obligation légale** pour les données comptables.
+- **L'intérêt légitime** pour la prévention de fraude.
+
+## 4. Durée de conservation
+
+- Compte actif : tant que vous l'utilisez.
+- Données comptables : 10 ans (obligation légale).
+- Journaux techniques : 12 mois maximum.
+
+## 5. Destinataires
+
+Vos données sont accessibles :
+
+- À l'équipe Karbé strictement dans le cadre de ses missions.
+- À Stripe pour le traitement des paiements.
+- Au loueur pour les besoins de votre séjour (nom, contact).
+
+Aucune donnée n'est revendue ni partagée avec des tiers à des fins publicitaires.
+
+## 6. Vos droits
+
+Conformément au RGPD, vous disposez d'un droit d'accès, de rectification, d'effacement, de portabilité et d'opposition. Pour les exercer, écrivez à [bonjour@karbe.cosmolan.fr](mailto:bonjour@karbe.cosmolan.fr).
+
+Vous pouvez également déposer une réclamation auprès de la CNIL ([www.cnil.fr](https://www.cnil.fr)).
+
+## 7. Cookies
+
+Karbé utilise uniquement des cookies techniques (session, préférences de langue). Aucun cookie publicitaire ni cookie tiers de tracking n'est déposé.
+`,
+ },
+];
+
+export async function seedLegalPages(): Promise<{ created: number }> {
+ let created = 0;
+ for (const page of PAGES) {
+ await upsertContentPage({
+ slug: page.slug,
+ title: page.title,
+ body: page.body,
+ category: "legal",
+ published: true,
+ });
+ created += 1;
+ }
+ return { created };
+}
+
+export async function unpublishLegalPages(): Promise {
+ return await unpublishCategory("legal");
+}
+
+export async function republishLegalPages(): Promise {
+ let count = 0;
+ for (const page of PAGES) {
+ count += await setContentPagePublished(page.slug, "legal", true);
+ }
+ return count;
+}