feat: complete agency site build (Phases 1-7)

Full Next.js 16 + Payload CMS 3.x agency site with:
- Homepage: Hero, TrustBar, Services, Configurator wizard, Process,
  Selected Works, Philosophy, CTA Banner
- Sub-pages: /services (3 pillars + AI Layer), /work/[slug] (case
  studies), /about (philosophy + story)
- Configurator: 3-step wizard with AI brief generation API
- i18n: Full EN/FR bilingual with next-intl
- Design system: Cormorant Garamond + Inter, celestial blue palette,
  glassmorphism nav, Framer Motion animations
- Payload CMS collections: Projects, Services, Submissions, Media

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-25 20:37:38 +01:00
commit a1f9eca76c
64 changed files with 15810 additions and 0 deletions

4
src/i18n/config.ts Normal file
View File

@@ -0,0 +1,4 @@
export const locales = ['en', 'fr'] as const
export const defaultLocale = 'en' as const
export type Locale = (typeof locales)[number]

146
src/i18n/messages/en.json Normal file
View File

@@ -0,0 +1,146 @@
{
"nav": {
"services": "Services",
"configure": "Configure",
"process": "Process",
"work": "Work",
"about": "About",
"startProject": "Start a Project",
"bookCall": "Book a Call"
},
"hero": {
"eyebrow": "Bespoke Digital Studio",
"title": "Your website, your infrastructure, your AI — built {exclusively} for you.",
"subtitle": "We design and develop complete digital ecosystems for ambitious businesses on the Côte d'Azur and beyond. No templates, no compromises.",
"cta": "Configure Your Project",
"ctaSecondary": "See Our Work",
"trust": "Trusted by businesses across the Riviera"
},
"trustBar": {
"customBuilt": {
"title": "Custom-Built",
"description": "Tailored architecture from the first line of code."
},
"privateInfra": {
"title": "Private Infrastructure",
"description": "Secure, dedicated cloud environments for your data."
},
"aiPowered": {
"title": "AI-Powered",
"description": "Intelligent automation that scales your productivity."
},
"rivieraBased": {
"title": "Riviera-Based",
"description": "Local expertise for global ambitions."
}
},
"services": {
"eyebrow": "Our Capabilities",
"title": "Three Pillars of Digital Excellence",
"web": {
"title": "Design & Development",
"features": ["Bespoke UI/UX Design", "Modern Web Applications", "E-commerce & Platforms", "Performance Optimization"]
},
"systems": {
"title": "Custom Systems",
"features": ["CRM & Management Platforms", "Bespoke Business Software", "API & Integration Architecture", "Internal Tooling"]
},
"infrastructure": {
"title": "Digital Infrastructure",
"features": ["Dedicated Cloud Hosting", "Data Sovereignty Solutions", "Security Hardening", "DevOps & Maintenance"]
},
"aiNarrative": "We build your digital ecosystem — then make it intelligent."
},
"configurator": {
"eyebrow": "Interactive Studio",
"title": "Let's define your project scope.",
"description": "Configure your requirements and we'll generate a personalized project brief.",
"step1": {
"title": "What are we building together?",
"subtitle": "Select the services that match your vision."
},
"step2": {
"title": "Tell us about your project",
"subtitle": "This helps us prepare the right approach before our first call."
},
"step3": {
"title": "Almost there",
"subtitle": "We'll generate a personalized project brief and send it to your inbox."
},
"complete": {
"title": "Your project brief is ready",
"subtitle": "Check your inbox — we've sent a detailed brief to {email}",
"bookTitle": "Book a Consultation",
"bookSubtitle": "30 minutes to discuss your brief with our team"
},
"aiToggle": "Enhance with AI",
"aiDescription": "We layer intelligent automation into every system we build.",
"generateBrief": "Generate My Brief",
"nextStep": "Next Step",
"back": "Back"
},
"process": {
"eyebrow": "Our Method",
"title": "Architecture of a Project",
"steps": {
"discovery": {
"title": "Discovery",
"description": "Understanding your business, users, and technical landscape."
},
"strategy": {
"title": "Strategy & Architecture",
"description": "Defining the blueprint — from data model to deployment plan."
},
"build": {
"title": "Design & Build",
"description": "Crafting every pixel and every line of code."
},
"launch": {
"title": "Launch & Evolve",
"description": "Deployment, monitoring, and continuous improvement."
}
}
},
"work": {
"eyebrow": "Selected Works",
"title": "Digital Landmarks",
"readCaseStudy": "Read Case Study",
"comingSoon": "Coming Soon"
},
"philosophy": {
"eyebrow": "The LetsBe. Way",
"title": "Digital Sovereignty is not a luxury.",
"subtitle": "We believe that every modern business is, at its core, a software company. We help you own your tools, your data, and your future.",
"ownership": {
"title": "Ownership & Privacy",
"description": "We move you away from standard SaaS dependencies into private cloud environments where you own 100% of your data."
},
"craftsmanship": {
"title": "Craftsmanship",
"description": "We don't use page builders or bloated themes. We write clean, semantic code that is lightning-fast and search-engine optimized."
},
"oneTeam": {
"title": "One Team, Everything",
"description": "From the initial Figma frame to the Kubernetes deployment, we manage the entire lifecycle under one roof."
},
"quote": "Our mission is to bring the precision of architecture to the fluidity of the web."
},
"cta": {
"eyebrow": "Let's Talk",
"title": "Ready to build something exceptional?",
"subtitle": "From the first consultation to launch day, we're with you every step of the way.",
"cta": "Configure Your Project",
"configure": "Configure Your Project",
"email": "hello@letsbe.biz",
"reassurance": "No commitment required — just a conversation about what's possible."
},
"footer": {
"tagline": "Designing and engineering the digital backbone of tomorrow's leaders.",
"location": "Côte d'Azur, France",
"services": "Services",
"studio": "Studio",
"connect": "Connect",
"privacy": "Privacy Policy",
"terms": "Terms of Service"
}
}

146
src/i18n/messages/fr.json Normal file
View File

@@ -0,0 +1,146 @@
{
"nav": {
"services": "Services",
"configure": "Configurer",
"process": "Méthode",
"work": "Réalisations",
"about": "À propos",
"startProject": "Démarrer un Projet",
"bookCall": "Réserver un Appel"
},
"hero": {
"eyebrow": "Studio Digital Sur Mesure",
"title": "Votre site, votre infrastructure, votre IA — conçus {exclusively} pour vous.",
"subtitle": "Nous concevons et développons des écosystèmes digitaux complets pour les entreprises ambitieuses sur la Côte d'Azur et au-delà. Pas de templates, pas de compromis.",
"cta": "Configurez Votre Projet",
"ctaSecondary": "Voir Nos Réalisations",
"trust": "La confiance des entreprises de la Riviera"
},
"trustBar": {
"customBuilt": {
"title": "Sur Mesure",
"description": "Architecture personnalisée dès la première ligne de code."
},
"privateInfra": {
"title": "Infrastructure Privée",
"description": "Environnements cloud dédiés et sécurisés pour vos données."
},
"aiPowered": {
"title": "Propulsé par l'IA",
"description": "Automatisation intelligente qui démultiplie votre productivité."
},
"rivieraBased": {
"title": "Basé sur la Riviera",
"description": "Expertise locale pour des ambitions globales."
}
},
"services": {
"eyebrow": "Nos Compétences",
"title": "Trois Piliers d'Excellence Digitale",
"web": {
"title": "Design & Développement",
"features": ["Design UI/UX Sur Mesure", "Applications Web Modernes", "E-commerce & Plateformes", "Optimisation des Performances"]
},
"systems": {
"title": "Systèmes Personnalisés",
"features": ["CRM & Plateformes de Gestion", "Logiciels Métier Sur Mesure", "Architecture API & Intégration", "Outillage Interne"]
},
"infrastructure": {
"title": "Infrastructure Digitale",
"features": ["Hébergement Cloud Dédié", "Solutions de Souveraineté des Données", "Renforcement de la Sécurité", "DevOps & Maintenance"]
},
"aiNarrative": "Nous construisons votre écosystème digital — puis nous le rendons intelligent."
},
"configurator": {
"eyebrow": "Studio Interactif",
"title": "Définissons le périmètre de votre projet.",
"description": "Configurez vos besoins et nous générerons un brief personnalisé.",
"step1": {
"title": "Que construisons-nous ensemble ?",
"subtitle": "Sélectionnez les services qui correspondent à votre vision."
},
"step2": {
"title": "Parlez-nous de votre projet",
"subtitle": "Cela nous aide à préparer la bonne approche avant notre premier échange."
},
"step3": {
"title": "Presque terminé",
"subtitle": "Nous générerons un brief personnalisé et l'enverrons dans votre boîte mail."
},
"complete": {
"title": "Votre brief est prêt",
"subtitle": "Vérifiez votre boîte mail — nous avons envoyé un brief détaillé à {email}",
"bookTitle": "Réservez une Consultation",
"bookSubtitle": "30 minutes pour discuter de votre brief avec notre équipe"
},
"aiToggle": "Enrichir avec l'IA",
"aiDescription": "Nous intégrons l'automatisation intelligente dans chaque système que nous construisons.",
"generateBrief": "Générer Mon Brief",
"nextStep": "Étape Suivante",
"back": "Retour"
},
"process": {
"eyebrow": "Notre Méthode",
"title": "Architecture d'un Projet",
"steps": {
"discovery": {
"title": "Découverte",
"description": "Comprendre votre entreprise, vos utilisateurs et votre paysage technique."
},
"strategy": {
"title": "Stratégie & Architecture",
"description": "Définir le plan — du modèle de données au plan de déploiement."
},
"build": {
"title": "Design & Construction",
"description": "Façonner chaque pixel et chaque ligne de code."
},
"launch": {
"title": "Lancement & Évolution",
"description": "Déploiement, monitoring et amélioration continue."
}
}
},
"work": {
"eyebrow": "Réalisations Sélectionnées",
"title": "Réalisations Digitales",
"readCaseStudy": "Lire l'Étude de Cas",
"comingSoon": "Bientôt Disponible"
},
"philosophy": {
"eyebrow": "La Philosophie LetsBe.",
"title": "La souveraineté digitale n'est pas un luxe.",
"subtitle": "Nous croyons que chaque entreprise moderne est, en son cœur, une entreprise logicielle. Nous vous aidons à posséder vos outils, vos données et votre avenir.",
"ownership": {
"title": "Propriété & Confidentialité",
"description": "Nous vous éloignons des dépendances SaaS standard vers des environnements cloud privés où vous possédez 100% de vos données."
},
"craftsmanship": {
"title": "Artisanat",
"description": "Nous n'utilisons pas de constructeurs de pages ou de thèmes surchargés. Nous écrivons du code propre et sémantique, ultra-rapide et optimisé pour le référencement."
},
"oneTeam": {
"title": "Une Équipe, Tout",
"description": "Du premier frame Figma au déploiement Kubernetes, nous gérons l'intégralité du cycle de vie sous un même toit."
},
"quote": "Notre mission est d'apporter la précision de l'architecture à la fluidité du web."
},
"cta": {
"eyebrow": "Parlons-en",
"title": "Prêt à construire quelque chose d'exceptionnel ?",
"subtitle": "De la première consultation au jour du lancement, nous vous accompagnons à chaque étape.",
"cta": "Configurez Votre Projet",
"configure": "Configurez Votre Projet",
"email": "hello@letsbe.biz",
"reassurance": "Sans engagement — juste une conversation sur ce qui est possible."
},
"footer": {
"tagline": "Concevoir et construire la colonne vertébrale digitale des leaders de demain.",
"location": "Côte d'Azur, France",
"services": "Services",
"studio": "Studio",
"connect": "Contact",
"privacy": "Politique de Confidentialité",
"terms": "Conditions d'Utilisation"
}
}

5
src/i18n/navigation.ts Normal file
View File

@@ -0,0 +1,5 @@
import { createNavigation } from 'next-intl/navigation'
import { routing } from './routing'
export const { Link, redirect, usePathname, useRouter, getPathname } =
createNavigation(routing)

15
src/i18n/request.ts Normal file
View File

@@ -0,0 +1,15 @@
import { getRequestConfig } from 'next-intl/server'
import { routing } from './routing'
export default getRequestConfig(async ({ requestLocale }) => {
let locale = await requestLocale
if (!locale || !routing.locales.includes(locale as any)) {
locale = routing.defaultLocale
}
return {
locale,
messages: (await import(`./messages/${locale}.json`)).default,
}
})

8
src/i18n/routing.ts Normal file
View File

@@ -0,0 +1,8 @@
import { defineRouting } from 'next-intl/routing'
import { locales, defaultLocale } from './config'
export const routing = defineRouting({
locales,
defaultLocale,
localePrefix: 'as-needed',
})