From d963fd73dc0ea661cb00396421f726ff1d0398da Mon Sep 17 00:00:00 2001 From: Nathael Bonnal Date: Sat, 29 Aug 2026 02:54:29 +0200 Subject: [PATCH] feat(website): add france nuage partnership section Add a homepage section explaining the France Nuage partnership (sovereign cloud host for the managed Ferriskey offering) with a CTA to deploy a managed instance, placed after the sponsors section. Includes FR/EN copy and extra top padding above the supporters marquee to fix a tight visual transition. --- .../src/components/france-nuage-section.astro | 83 +++++++++++++++++++ .../src/components/supporters-marquee.astro | 2 +- apps/website/src/i18n/ui.ts | 24 ++++++ apps/website/src/pages/index.astro | 2 + 4 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 apps/website/src/components/france-nuage-section.astro diff --git a/apps/website/src/components/france-nuage-section.astro b/apps/website/src/components/france-nuage-section.astro new file mode 100644 index 0000000..c120749 --- /dev/null +++ b/apps/website/src/components/france-nuage-section.astro @@ -0,0 +1,83 @@ +--- +import { Icon } from '@iconify/react' +import { Button } from '@explainer/ui' +import SectionHeader from './section-header.astro' + +const features = [ + { + icon: 'lucide:map-pin', + titleKey: 'franceNuage.feature.sovereignty.title', + titleDefault: 'Hosted in France', + descKey: 'franceNuage.feature.sovereignty.desc', + descDefault: 'Your data stays on French soil, out of reach of the US Cloud Act.', + }, + { + icon: 'lucide:server-cog', + titleKey: 'franceNuage.feature.managed.title', + titleDefault: 'Fully managed', + descKey: 'franceNuage.feature.managed.desc', + descDefault: 'France Nuage handles updates, monitoring, and uptime, so your team can focus on using Ferriskey instead of running it.', + }, + { + icon: 'lucide:shield-check', + titleKey: 'franceNuage.feature.compliance.title', + titleDefault: 'GDPR ready', + descKey: 'franceNuage.feature.compliance.desc', + descDefault: 'Built for organizations that need to meet strict data protection requirements.', + }, +] +--- + +
+
+ + Partnership + Managed Ferriskey, hosted in France + + France Nuage is our cloud partner in France and runs the official managed Ferriskey offering on their infrastructure. + + + +
+ + +
+
+ France Nuage + +
+ +
+ {features.map(f => ( +
+
+
+

{f.titleDefault}

+

{f.descDefault}

+
+ ))} +
+ + + Deploy a managed Ferriskey with France Nuage + +
+
+
+
diff --git a/apps/website/src/components/supporters-marquee.astro b/apps/website/src/components/supporters-marquee.astro index 5581208..c1252a4 100644 --- a/apps/website/src/components/supporters-marquee.astro +++ b/apps/website/src/components/supporters-marquee.astro @@ -6,7 +6,7 @@ const supporters = [...getSponsors(), ...getSupporters()] const loop = [...supporters, ...supporters] --- -
+
Supporters diff --git a/apps/website/src/i18n/ui.ts b/apps/website/src/i18n/ui.ts index 6d63485..4bb92b4 100644 --- a/apps/website/src/i18n/ui.ts +++ b/apps/website/src/i18n/ui.ts @@ -201,6 +201,18 @@ export const ui = { 'sponsors.cloudiamTagline': "Cloud IAM employs our founder full-time to build Ferriskey and runs it in production for their managed Keycloak customers. Together, we're working toward Ferriskey as a Service.", 'sponsors.placeholder': 'Your Logo', + // France Nuage partnership + 'franceNuage.label': 'Partnership', + 'franceNuage.title': 'Managed Ferriskey, hosted in France', + 'franceNuage.description': 'France Nuage is our cloud partner in France and runs the official managed Ferriskey offering on their infrastructure.', + 'franceNuage.feature.sovereignty.title': 'Hosted in France', + 'franceNuage.feature.sovereignty.desc': 'Your data stays on French soil, out of reach of the US Cloud Act.', + 'franceNuage.feature.managed.title': 'Fully managed', + 'franceNuage.feature.managed.desc': 'France Nuage handles updates, monitoring, and uptime, so your team can focus on using Ferriskey instead of running it.', + 'franceNuage.feature.compliance.title': 'GDPR ready', + 'franceNuage.feature.compliance.desc': 'Built for organizations that need to meet strict data protection requirements.', + 'franceNuage.cta': 'Deploy a managed Ferriskey with France Nuage', + // Supporters 'supporters.label': 'Supporters', 'supporters.title': 'Backed by the community', @@ -413,6 +425,18 @@ export const ui = { 'sponsors.cloudiamTagline': "Cloud IAM emploie notre fondateur à temps plein pour construire Ferriskey, et l'utilise en production pour leur offre Keycloak managé. Ensemble, on avance vers Ferriskey as a Service.", 'sponsors.placeholder': 'Votre Logo', + // Partenariat France Nuage + 'franceNuage.label': 'Partenariat', + 'franceNuage.title': 'Un Ferriskey managé, hébergé en France', + 'franceNuage.description': "France Nuage est notre partenaire cloud en France et propose l'offre Ferriskey managée officielle sur son infrastructure.", + 'franceNuage.feature.sovereignty.title': 'Hébergé en France', + 'franceNuage.feature.sovereignty.desc': "Vos données restent sur le territoire français, hors de portée du Cloud Act américain.", + 'franceNuage.feature.managed.title': 'Entièrement managé', + 'franceNuage.feature.managed.desc': "France Nuage s'occupe des mises à jour, de la supervision et de la disponibilité, pour que votre équipe se concentre sur l'usage de Ferriskey plutôt que sur son exploitation.", + 'franceNuage.feature.compliance.title': 'Conforme RGPD', + 'franceNuage.feature.compliance.desc': "Pensé pour les organisations soumises à des exigences fortes en matière de protection des données.", + 'franceNuage.cta': 'Déployer un Ferriskey managé avec France Nuage', + // Soutiens 'supporters.label': 'Soutiens', 'supporters.title': 'Soutenu par la communauté', diff --git a/apps/website/src/pages/index.astro b/apps/website/src/pages/index.astro index 316aefe..ff6975e 100644 --- a/apps/website/src/pages/index.astro +++ b/apps/website/src/pages/index.astro @@ -11,6 +11,7 @@ import ModulesSection from '../components/modules-section.astro' import OssSection from '../components/oss-section.astro' import CoreTeamSection from '../components/core-team-section.astro' import SponsorsSection from '../components/sponsors-section.astro' +import FranceNuageSection from '../components/france-nuage-section.astro' import SupportersMarquee from '../components/supporters-marquee.astro' import TestimonialsSection from '../components/testimonials-section.astro' import CtaSection from '../components/cta-section.astro' @@ -40,6 +41,7 @@ const thumbnails = { en: '/thumbnail.png', fr: '/thumbnails/fr/thumbnail.png' } + {/* */}