// Landing page primitives + sections
// ─────────── Supabase : inscriptions à la bêta ───────────
// La clé "anon" est PUBLIQUE par conception : elle peut figurer dans le code.
// La sécurité vient de la règle (RLS) configurée dans Supabase, qui n'autorise
// QUE l'insertion (aucune lecture des inscriptions par le public).
// → Voir INSTALLATION-supabase.md pour créer la table et récupérer ces 2 valeurs.
const SUPABASE_URL = 'https://lmhhrccmgebztioesmik.supabase.co';
const SUPABASE_ANON_KEY = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImxtaGhyY2NtZ2VienRpb2VzbWlrIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NjUzMjIyOTgsImV4cCI6MjA4MDg5ODI5OH0.epfoBIsZJHLqj96dYE7AvImK_EgjMW9PFtvLk4VwlDc';
// Nom EXACT de la table Supabase (respectez la casse / les majuscules).
const SUPABASE_TABLE = 'inscription_beta';
async function saveBetaSignup(data) {
const res = await fetch(SUPABASE_URL + '/rest/v1/' + SUPABASE_TABLE, {
method: 'POST',
headers: {
'apikey': SUPABASE_ANON_KEY,
'Authorization': 'Bearer ' + SUPABASE_ANON_KEY,
'Content-Type': 'application/json',
'Prefer': 'return=minimal',
},
body: JSON.stringify(data),
});
if (!res.ok) {
const detail = await res.text().catch(() => '');
throw new Error('Supabase ' + res.status + ', ' + detail);
}
}
const ROLES = {
pilote: { emoji: '🏡', tint: '#dcefe7', short: 'Porteurs de lieu', name: "Pilote d'impact", verb: 'Coordonnez un lieu durable', persona: "Porteur·se d'un tiers-lieu, écolieu, ferme, association, incubateur…", pillText: "Coordonner un lieu durable et visible", desc: 'Tiers-lieu, écolieu, ferme, association, incubateur. Vous publiez des quêtes, accueillez des Bâtisseurs, vérifiez les preuves d\'impact.', perks: ['Pilotez et financez vos projets avec des outils numériques intégrés', 'Rendez vos impacts mesurables et traçables, preuves à l\'appui', 'Transformez vos actions en données probantes pour ancrer votre modèle'], cta: 'Développer mon lieu', accent: '#018262', image: window.__resources.pilote },
batisseur: { emoji: '🌿', tint: '#fdf3e7', short: 'Citoyens', name: "Bâtisseur d'impact", verb: "Passez à l'action", persona: "Membre, particulier, étudiant, digital nomad, entrepreneur…", pillText: "Passer à l'action avec des avantages concrets", desc: 'Membre, particulier, étudiant, digital nomad, entrepreneur. Vous rejoignez des quêtes concrètes, contribuez, gagnez des graines à utiliser dans le réseau.', perks: ['Passez de l\'éco-anxiété à l\'éco-action, un pas à la fois', 'Soyez reconnu et récompensé : chaque action est valorisée', 'Avancez à votre rythme, porté par une communauté qui avance avec vous'], cta: 'Trouver ma quête', accent: '#c8732a', image: window.__resources.batisseur },
semeur: { emoji: '🌾', tint: '#e8f4f9', short: 'Financeurs', name: "Semeur d'impact", verb: 'Soutenez des projets durables', persona: "Financeur public/privé, investisseur, fondation, collectivité…", pillText: "Soutenir des projets durables vérifiés", desc: 'Financeur public/privé, fondation, investisseur, collectivité. Vous financez des projets contre des preuves d\'impact vérifiées.', perks: ['Identifiez les initiatives véritablement transformatrices', 'Assurez-vous d\'impacts mesurables, durables et transparents', 'Chaque acte investi est tracé, mesuré, et devient une graine'], cta: 'Soutenir des projets', accent: '#3a6e8c', image: window.__resources.semeur },
};
const Section = ({ id, eyebrow, title, sub, children, dark, narrow, padded = true }) => (
Imaginons un avenir durable et réalisons-le ensemble.
Du pixel à la terre, du rêve au lieu, de l'action à l'impact. Plongez dans un avenir solarpunk et rejoignez le mouvement qui transforme la transition écologique en économie régénérative.
Votre demande d'accès {r.name} est bien enregistrée. Nous vous contacterons dès l'ouverture de la bêta, en octobre 2026, et vous serez convié·e à notre événement de lancement.
Notre prototype ouvre en octobre 2026 à Bordeaux. Inscrivez-vous pour le tester en avant-première, être convié·e à notre événement de lancement et nous aider à le faire grandir avec vos retours.