polish: complete copy rewrite + i18n fixes + dead link cleanup
All checks were successful
Build & Push / build-and-push (push) Successful in 1m47s
All checks were successful
Build & Push / build-and-push (push) Successful in 1m47s
- Rewrite all site copy based on founder interview: honest, outcome-focused, premium but approachable tone - Hero: "Websites, software, and infrastructure — designed and built entirely around you." - Services: "Design. Build. Run." with clear pillars (Websites, Custom Software, Infrastructure) - Philosophy: "Your tools should belong to you." — removed Kubernetes reference - Trust bar: concrete value props (Built From Scratch, You Own Everything, One Team, AI) - CTA: "Ready to build something?" — direct, no fluff - Projects: honest descriptions of what was actually delivered - Fix all French translation gaps: hero accent word, configurator cards, project descriptions, footer links, philosophy quote - Fix dead links: footer service links → /#services, work/about → anchors - Restore case study links (dynamic route exists) - Fix mobile hero padding (pt-40 → pt-24) - AI narrative positioned honestly as add-on capability Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -15,31 +15,28 @@ import type { StepProps } from './WizardContainer';
|
||||
interface ServiceOption {
|
||||
id: string;
|
||||
icon: React.ElementType;
|
||||
title: string;
|
||||
description: string;
|
||||
titleKey: string;
|
||||
descriptionKey: string;
|
||||
}
|
||||
|
||||
const SERVICES: ServiceOption[] = [
|
||||
{
|
||||
id: 'web',
|
||||
icon: Globe,
|
||||
title: 'Web Design & Development',
|
||||
description:
|
||||
'Bespoke websites and web applications built from scratch — pixel-perfect design, blazing performance, and clean code.',
|
||||
titleKey: 'services.web.title',
|
||||
descriptionKey: 'services.web.description',
|
||||
},
|
||||
{
|
||||
id: 'systems',
|
||||
icon: Cog,
|
||||
title: 'Custom Systems',
|
||||
description:
|
||||
'Purpose-built CRMs, internal tools, and business platforms crafted to match exactly how your team works.',
|
||||
titleKey: 'services.systems.title',
|
||||
descriptionKey: 'services.systems.description',
|
||||
},
|
||||
{
|
||||
id: 'infrastructure',
|
||||
icon: Server,
|
||||
title: 'Digital Infrastructure',
|
||||
description:
|
||||
'Private cloud hosting, data sovereignty, DevOps pipelines, and security hardening — your stack, fully owned.',
|
||||
titleKey: 'services.infrastructure.title',
|
||||
descriptionKey: 'services.infrastructure.description',
|
||||
},
|
||||
];
|
||||
|
||||
@@ -78,9 +75,11 @@ interface ServiceCardProps {
|
||||
option: ServiceOption;
|
||||
selected: boolean;
|
||||
onToggle: () => void;
|
||||
title: string;
|
||||
description: string;
|
||||
}
|
||||
|
||||
function ServiceCard({ option, selected, onToggle }: ServiceCardProps) {
|
||||
function ServiceCard({ option, selected, onToggle, title, description }: ServiceCardProps) {
|
||||
const Icon = option.icon;
|
||||
|
||||
return (
|
||||
@@ -117,9 +116,9 @@ function ServiceCard({ option, selected, onToggle }: ServiceCardProps) {
|
||||
selected ? 'text-primary-dark' : 'text-on-surface',
|
||||
)}
|
||||
>
|
||||
{option.title}
|
||||
{title}
|
||||
</p>
|
||||
<p className="text-xs text-outline leading-relaxed">{option.description}</p>
|
||||
<p className="text-xs text-outline leading-relaxed">{description}</p>
|
||||
</div>
|
||||
|
||||
{/* Checkbox */}
|
||||
@@ -160,9 +159,11 @@ function ServiceCard({ option, selected, onToggle }: ServiceCardProps) {
|
||||
interface AIToggleProps {
|
||||
enabled: boolean;
|
||||
onToggle: () => void;
|
||||
label: string;
|
||||
description: string;
|
||||
}
|
||||
|
||||
function AIToggle({ enabled, onToggle }: AIToggleProps) {
|
||||
function AIToggle({ enabled, onToggle, label, description }: AIToggleProps) {
|
||||
return (
|
||||
<button
|
||||
type="button"
|
||||
@@ -192,10 +193,10 @@ function AIToggle({ enabled, onToggle }: AIToggleProps) {
|
||||
)}
|
||||
aria-hidden="true"
|
||||
/>
|
||||
Enhance with AI
|
||||
{label}
|
||||
</span>
|
||||
<p className="text-xs text-outline mt-0.5">
|
||||
We layer intelligent automation into every system we build.
|
||||
{description}
|
||||
</p>
|
||||
</div>
|
||||
{/* Switch */}
|
||||
@@ -269,6 +270,8 @@ export default function StepServices({ formData, setFormData, onNext }: StepProp
|
||||
option={option}
|
||||
selected={formData.services.includes(option.id)}
|
||||
onToggle={() => toggleService(option.id)}
|
||||
title={t(option.titleKey)}
|
||||
description={t(option.descriptionKey)}
|
||||
/>
|
||||
))}
|
||||
{/* Empty-state hint */}
|
||||
@@ -281,7 +284,7 @@ export default function StepServices({ formData, setFormData, onNext }: StepProp
|
||||
transition={{ duration: 0.2 }}
|
||||
className="text-xs text-outline/60 text-center pt-1 pb-0.5 select-none"
|
||||
>
|
||||
Select at least one service to continue
|
||||
{t('selectService')}
|
||||
</motion.p>
|
||||
)}
|
||||
</AnimatePresence>
|
||||
@@ -289,7 +292,12 @@ export default function StepServices({ formData, setFormData, onNext }: StepProp
|
||||
|
||||
{/* AI Toggle */}
|
||||
<div className="flex flex-col gap-3">
|
||||
<AIToggle enabled={formData.aiEnabled} onToggle={toggleAI} />
|
||||
<AIToggle
|
||||
enabled={formData.aiEnabled}
|
||||
onToggle={toggleAI}
|
||||
label={t('aiToggle')}
|
||||
description={t('aiDescription')}
|
||||
/>
|
||||
|
||||
{/* AI type chips — stagger in */}
|
||||
<AnimatePresence>
|
||||
|
||||
@@ -8,17 +8,17 @@ import CalButton from '@/components/ui/CalButton'
|
||||
// ── Static link data ─────────────────────────────────────────────────────────
|
||||
|
||||
const SERVICE_LINKS = [
|
||||
{ label: 'Design & Development', href: '/services#design-development' },
|
||||
{ label: 'Custom Systems', href: '/services#custom-systems' },
|
||||
{ label: 'Digital Infrastructure', href: '/services#infrastructure' },
|
||||
{ label: 'AI & Automation', href: '/services#ai-automation' },
|
||||
{ labelKey: 'serviceLinks.designDev', href: '/#services' },
|
||||
{ labelKey: 'serviceLinks.customSystems', href: '/#services' },
|
||||
{ labelKey: 'serviceLinks.infrastructure', href: '/#services' },
|
||||
{ labelKey: 'serviceLinks.aiAutomation', href: '/#services' },
|
||||
] as const
|
||||
|
||||
// Studio links use nav translation keys where they exist (process, work, about)
|
||||
// Studio links use nav translation keys where they exist
|
||||
const STUDIO_NAV_LINKS = [
|
||||
{ navKey: 'process' as const, href: '/#process' },
|
||||
{ navKey: 'work' as const, href: '/work' },
|
||||
{ navKey: 'about' as const, href: '/about' },
|
||||
{ navKey: 'work' as const, href: '/#work' },
|
||||
{ navKey: 'about' as const, href: '/#about' },
|
||||
] as const
|
||||
|
||||
function LinkedInIcon({ className }: { className?: string }) {
|
||||
@@ -131,10 +131,10 @@ export default function Footer() {
|
||||
<div>
|
||||
<FooterHeading>{t('services')}</FooterHeading>
|
||||
<ul className="flex flex-col gap-3" role="list">
|
||||
{SERVICE_LINKS.map(({ label, href }) => (
|
||||
<li key={label}>
|
||||
{SERVICE_LINKS.map(({ labelKey, href }) => (
|
||||
<li key={labelKey}>
|
||||
<InternalLink href={href} className={linkClass}>
|
||||
{label}
|
||||
{t(labelKey)}
|
||||
</InternalLink>
|
||||
</li>
|
||||
))}
|
||||
@@ -155,7 +155,7 @@ export default function Footer() {
|
||||
{/* Contact — separate entry pointing to configure section */}
|
||||
<li>
|
||||
<InternalLink href="/#configure" className={linkClass}>
|
||||
Contact
|
||||
{tNav('configure')}
|
||||
</InternalLink>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@@ -80,7 +80,7 @@ export default function Configurator() {
|
||||
className="flex flex-col gap-3 pt-2"
|
||||
>
|
||||
<p className="text-xs font-semibold uppercase tracking-label text-outline/70">
|
||||
How it works
|
||||
{t('howItWorks')}
|
||||
</p>
|
||||
{/* Vertical accent line + steps */}
|
||||
<div className="flex gap-4">
|
||||
@@ -99,7 +99,7 @@ export default function Configurator() {
|
||||
className="pt-1 flex items-center gap-2"
|
||||
>
|
||||
<ShieldCheck size={14} strokeWidth={1.75} className="text-primary flex-shrink-0" aria-hidden="true" />
|
||||
<p className="text-xs text-outline">No commitment required</p>
|
||||
<p className="text-xs text-outline">{t('noCommitment')}</p>
|
||||
</motion.div>
|
||||
</motion.div>
|
||||
</div>
|
||||
|
||||
@@ -79,10 +79,9 @@ const rightColumnVariant = {
|
||||
export default function Hero() {
|
||||
const t = useTranslations('hero');
|
||||
|
||||
// Split the raw title on the {exclusively} placeholder
|
||||
// Expected translation: "Built {exclusively} for ambitious brands."
|
||||
// Split the raw title on the {accentWord} placeholder
|
||||
const rawTitle: string = t.raw('title');
|
||||
const parts = rawTitle.split('{exclusively}');
|
||||
const parts = rawTitle.split('{accentWord}');
|
||||
const before = parts[0] ?? '';
|
||||
const after = parts[1] ?? '';
|
||||
|
||||
@@ -99,7 +98,7 @@ export default function Hero() {
|
||||
: [];
|
||||
const allWords: WordItem[] = [
|
||||
...beforeWords,
|
||||
{ type: 'accent', text: 'exclusively' },
|
||||
{ type: 'accent', text: t('accentWord') },
|
||||
...afterWords,
|
||||
];
|
||||
|
||||
@@ -128,7 +127,7 @@ export default function Hero() {
|
||||
<div className="relative z-10 w-full max-w-screen-xl mx-auto px-6 lg:px-12 xl:px-16 flex flex-col lg:flex-row lg:items-center min-h-screen">
|
||||
|
||||
{/* ── LEFT COLUMN — text content (55% on desktop) ─────────────── */}
|
||||
<div className="flex-1 lg:max-w-[58%] flex flex-col justify-center pt-40 pb-16 lg:pt-28 lg:pb-0">
|
||||
<div className="flex-1 lg:max-w-[58%] flex flex-col justify-center pt-24 pb-16 lg:pt-28 lg:pb-0">
|
||||
|
||||
{/* Headline — word-by-word stagger */}
|
||||
<motion.h1
|
||||
@@ -136,7 +135,7 @@ export default function Hero() {
|
||||
variants={headlineContainer}
|
||||
initial="hidden"
|
||||
animate="visible"
|
||||
aria-label={rawTitle.replace('{exclusively}', 'exclusively')}
|
||||
aria-label={rawTitle.replace('{accentWord}', t('accentWord'))}
|
||||
>
|
||||
{allWords.map((word, i) =>
|
||||
word.type === 'accent' ? (
|
||||
|
||||
@@ -421,7 +421,7 @@ export default function Philosophy() {
|
||||
/>
|
||||
|
||||
{/* Attribution */}
|
||||
<p className="label-md text-outline">Founded on the Côte d’Azur</p>
|
||||
<p className="label-md text-outline">{t('philosophy.foundedLocation')}</p>
|
||||
</motion.div>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -15,46 +15,44 @@ import { Lock, Clock, ArrowRight } from 'lucide-react';
|
||||
// ─── Types ────────────────────────────────────────────────────────────────────
|
||||
|
||||
interface Project {
|
||||
title: string;
|
||||
description: string;
|
||||
tags: string[];
|
||||
/** i18n key under "work.projects" (e.g. "monaco") */
|
||||
i18nKey: string;
|
||||
slug: string;
|
||||
/** number of tags to resolve from the translation array */
|
||||
tagCount: number;
|
||||
featured?: boolean;
|
||||
}
|
||||
|
||||
interface ComingSoonItem {
|
||||
title: string;
|
||||
subtitle: string;
|
||||
/** i18n key under "work.comingSoonProjects" (e.g. "riviera") */
|
||||
i18nKey: string;
|
||||
confidential?: boolean;
|
||||
}
|
||||
|
||||
// ─── Data ──────────────────────────────────────────────────────────────────────
|
||||
|
||||
const PROJECTS: Project[] = [
|
||||
{
|
||||
title: 'Monaco Ocean Protection Challenge',
|
||||
description:
|
||||
"A comprehensive judging and analytics system with advanced AI jury integration for one of the Mediterranean's most prestigious conservation events.",
|
||||
tags: ['AI Integration', 'Platform'],
|
||||
i18nKey: 'monaco',
|
||||
slug: 'monaco-ocean',
|
||||
tagCount: 2,
|
||||
featured: true,
|
||||
},
|
||||
{
|
||||
title: 'Port Nimara',
|
||||
description: 'Scalable digital hub for maritime logistics.',
|
||||
tags: ['Website', 'Infrastructure'],
|
||||
i18nKey: 'portNimara',
|
||||
slug: 'port-nimara',
|
||||
tagCount: 2,
|
||||
},
|
||||
{
|
||||
title: 'Port Amador',
|
||||
description: 'Premium digital experience for elite nautical services.',
|
||||
tags: ['Website', 'Infrastructure'],
|
||||
i18nKey: 'portAmador',
|
||||
slug: 'port-amador',
|
||||
tagCount: 2,
|
||||
},
|
||||
];
|
||||
|
||||
const COMING_SOON: ComingSoonItem[] = [
|
||||
{ title: 'Confidential Riviera Project', subtitle: 'Coming Soon' },
|
||||
{ title: 'Sophia Antipolis AI Startup', subtitle: 'Launching Q4' },
|
||||
{ i18nKey: 'riviera', confidential: true },
|
||||
{ i18nKey: 'sophia' },
|
||||
];
|
||||
|
||||
// ─── Animation Variants ───────────────────────────────────────────────────────
|
||||
@@ -371,7 +369,11 @@ function TagChip({ label, showDot = false }: { label: string; showDot?: boolean
|
||||
|
||||
// ─── Featured Card ────────────────────────────────────────────────────────────
|
||||
|
||||
function FeaturedCard({ project, readLabel }: { project: Project; readLabel: string }) {
|
||||
function FeaturedCard({ project, readLabel, t }: { project: Project; readLabel: string; t: (key: string) => string }) {
|
||||
const tags = Array.from({ length: project.tagCount }, (_, i) =>
|
||||
t(`work.projects.${project.i18nKey}.tags.${i}`),
|
||||
);
|
||||
|
||||
return (
|
||||
<motion.article
|
||||
variants={featuredCardVariants}
|
||||
@@ -392,24 +394,24 @@ function FeaturedCard({ project, readLabel }: { project: Project; readLabel: str
|
||||
<div className="flex flex-col flex-1 p-7 gap-4">
|
||||
{/* Tags */}
|
||||
<div className="flex flex-wrap gap-2">
|
||||
{project.tags.map((tag, i) => (
|
||||
{tags.map((tag, i) => (
|
||||
<TagChip key={tag} label={tag} showDot={i > 0} />
|
||||
))}
|
||||
</div>
|
||||
|
||||
{/* Title */}
|
||||
<h3 className="font-serif text-2xl font-semibold text-on-surface leading-snug">
|
||||
{project.title}
|
||||
{t(`work.projects.${project.i18nKey}.title`)}
|
||||
</h3>
|
||||
|
||||
{/* Description */}
|
||||
<p className="text-sm text-outline leading-relaxed flex-1">
|
||||
{project.description}
|
||||
{t(`work.projects.${project.i18nKey}.description`)}
|
||||
</p>
|
||||
|
||||
{/* CTA */}
|
||||
<Link
|
||||
href={`/work/${project.slug}`}
|
||||
href={`/work/${project.slug}` as any}
|
||||
className={cn(
|
||||
'inline-flex items-center gap-2 text-sm font-medium text-primary-dark',
|
||||
'mt-1 group/link',
|
||||
@@ -435,8 +437,11 @@ const SLUG_TO_VARIANT: Record<string, 'nimara' | 'amador'> = {
|
||||
'port-amador': 'amador',
|
||||
};
|
||||
|
||||
function SmallCard({ project, readLabel }: { project: Project; readLabel: string }) {
|
||||
function SmallCard({ project, readLabel, t }: { project: Project; readLabel: string; t: (key: string) => string }) {
|
||||
const cardVariant = SLUG_TO_VARIANT[project.slug] ?? 'nimara';
|
||||
const tags = Array.from({ length: project.tagCount }, (_, i) =>
|
||||
t(`work.projects.${project.i18nKey}.tags.${i}`),
|
||||
);
|
||||
|
||||
return (
|
||||
<motion.article
|
||||
@@ -469,24 +474,24 @@ function SmallCard({ project, readLabel }: { project: Project; readLabel: string
|
||||
<div className="flex flex-col flex-1 p-5 gap-3">
|
||||
{/* Tags */}
|
||||
<div className="flex flex-wrap gap-1.5">
|
||||
{project.tags.map((tag, i) => (
|
||||
{tags.map((tag, i) => (
|
||||
<TagChip key={tag} label={tag} showDot={i > 0} />
|
||||
))}
|
||||
</div>
|
||||
|
||||
{/* Title */}
|
||||
<h3 className="font-serif text-lg font-semibold text-on-surface leading-snug">
|
||||
{project.title}
|
||||
{t(`work.projects.${project.i18nKey}.title`)}
|
||||
</h3>
|
||||
|
||||
{/* Description */}
|
||||
<p className="text-xs text-outline leading-relaxed flex-1">
|
||||
{project.description}
|
||||
{t(`work.projects.${project.i18nKey}.description`)}
|
||||
</p>
|
||||
|
||||
{/* CTA */}
|
||||
<Link
|
||||
href={`/work/${project.slug}`}
|
||||
href={`/work/${project.slug}` as any}
|
||||
className="inline-flex items-center gap-1.5 text-xs font-medium text-primary-dark group/link"
|
||||
>
|
||||
<span className="relative after:absolute after:bottom-0 after:left-0 after:h-px after:w-full after:bg-primary-dark after:origin-left after:scale-x-100 after:transition-transform after:duration-200">
|
||||
@@ -504,9 +509,8 @@ function SmallCard({ project, readLabel }: { project: Project; readLabel: string
|
||||
|
||||
// ─── Coming Soon Card ─────────────────────────────────────────────────────────
|
||||
|
||||
function ComingSoonCard({ item }: { item: ComingSoonItem }) {
|
||||
const isConfidential = item.subtitle === 'Coming Soon';
|
||||
const Icon = isConfidential ? Lock : Clock;
|
||||
function ComingSoonCard({ item, t }: { item: ComingSoonItem; t: (key: string) => string }) {
|
||||
const Icon = item.confidential ? Lock : Clock;
|
||||
|
||||
return (
|
||||
<motion.div
|
||||
@@ -533,9 +537,11 @@ function ComingSoonCard({ item }: { item: ComingSoonItem }) {
|
||||
/>
|
||||
<div>
|
||||
<p className="font-serif text-base font-medium text-on-surface/60 leading-snug">
|
||||
{item.title}
|
||||
{t(`work.comingSoonProjects.${item.i18nKey}.title`)}
|
||||
</p>
|
||||
<p className="label-md text-outline/70 mt-1">
|
||||
{t(`work.comingSoonProjects.${item.i18nKey}.subtitle`)}
|
||||
</p>
|
||||
<p className="label-md text-outline/70 mt-1">{item.subtitle}</p>
|
||||
</div>
|
||||
</div>
|
||||
</motion.div>
|
||||
@@ -609,6 +615,7 @@ export default function SelectedWorks() {
|
||||
<FeaturedCard
|
||||
project={featuredProject}
|
||||
readLabel={t('work.readCaseStudy')}
|
||||
t={t}
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -619,6 +626,7 @@ export default function SelectedWorks() {
|
||||
key={project.slug}
|
||||
project={project}
|
||||
readLabel={t('work.readCaseStudy')}
|
||||
t={t}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
@@ -633,7 +641,7 @@ export default function SelectedWorks() {
|
||||
className="grid grid-cols-1 sm:grid-cols-2 gap-5"
|
||||
>
|
||||
{COMING_SOON.map((item) => (
|
||||
<ComingSoonCard key={item.title} item={item} />
|
||||
<ComingSoonCard key={item.i18nKey} item={item} t={t} />
|
||||
))}
|
||||
</motion.div>
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"nav": {
|
||||
"services": "Services",
|
||||
"configure": "Configure",
|
||||
"configure": "Get Started",
|
||||
"process": "Process",
|
||||
"work": "Work",
|
||||
"about": "About",
|
||||
@@ -9,63 +9,63 @@
|
||||
"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",
|
||||
"title": "Websites, software, and infrastructure — designed and built {accentWord} around you.",
|
||||
"accentWord": "entirely",
|
||||
"subtitle": "We design custom websites, build purpose-built software, and run private infrastructure that you own and control. One team, from first pixel to final deployment.",
|
||||
"cta": "Start 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."
|
||||
"title": "Built From Scratch",
|
||||
"description": "Every project designed and coded to your exact requirements. No templates, no shortcuts."
|
||||
},
|
||||
"privateInfra": {
|
||||
"title": "Private Infrastructure",
|
||||
"description": "Secure, dedicated cloud environments for your data."
|
||||
"title": "You Own Everything",
|
||||
"description": "Private servers, your data, your tools — fully controlled and owned by you."
|
||||
},
|
||||
"aiPowered": {
|
||||
"title": "AI-Powered",
|
||||
"description": "Intelligent automation that scales your productivity."
|
||||
"title": "One Team, End to End",
|
||||
"description": "Design, development, hosting, and support from a single dedicated team."
|
||||
},
|
||||
"rivieraBased": {
|
||||
"title": "Riviera-Based",
|
||||
"description": "Local expertise for global ambitions."
|
||||
"title": "AI Where It Matters",
|
||||
"description": "Intelligent features and automation built directly into your systems."
|
||||
}
|
||||
},
|
||||
"services": {
|
||||
"eyebrow": "Our Capabilities",
|
||||
"title": "Three Pillars of Digital Excellence",
|
||||
"eyebrow": "What We Do",
|
||||
"title": "Design. Build. Run.",
|
||||
"web": {
|
||||
"title": "Design & Development",
|
||||
"features": ["Bespoke UI/UX Design", "Modern Web Applications", "E-commerce & Platforms", "Performance Optimization"]
|
||||
"title": "Websites & Web Apps",
|
||||
"features": ["Custom Web Design", "Responsive Development", "SEO & Performance", "Content Management"]
|
||||
},
|
||||
"systems": {
|
||||
"title": "Custom Systems",
|
||||
"features": ["CRM & Management Platforms", "Bespoke Business Software", "API & Integration Architecture", "Internal Tooling"]
|
||||
"title": "Custom Software",
|
||||
"features": ["Management Platforms", "CRMs & Business Tools", "Booking & Scheduling", "API Integrations"]
|
||||
},
|
||||
"infrastructure": {
|
||||
"title": "Digital Infrastructure",
|
||||
"features": ["Dedicated Cloud Hosting", "Data Sovereignty Solutions", "Security Hardening", "DevOps & Maintenance"]
|
||||
"title": "Private Infrastructure",
|
||||
"features": ["Dedicated Servers", "Email & Cloud Storage", "Security & Encryption", "Monitoring & Support"]
|
||||
},
|
||||
"aiNarrative": "We build your digital ecosystem — then make it intelligent."
|
||||
"aiNarrative": "And when you're ready, we layer AI into everything — from intelligent features in your software to automation that connects all your tools."
|
||||
},
|
||||
"configurator": {
|
||||
"eyebrow": "Interactive Studio",
|
||||
"title": "Let's define your project scope.",
|
||||
"description": "Configure your requirements and we'll generate a personalized project brief.",
|
||||
"eyebrow": "Get Started",
|
||||
"title": "Tell us what you need.",
|
||||
"description": "Walk through a few questions and we'll put together a project brief tailored to you.",
|
||||
"step1": {
|
||||
"title": "What are we building together?",
|
||||
"subtitle": "Select the services that match your vision."
|
||||
"title": "What do you need?",
|
||||
"subtitle": "Select the services that match your project."
|
||||
},
|
||||
"step2": {
|
||||
"title": "Tell us about your project",
|
||||
"subtitle": "This helps us prepare the right approach before our first call."
|
||||
"subtitle": "A few details help us prepare the right approach."
|
||||
},
|
||||
"step3": {
|
||||
"title": "Almost there",
|
||||
"subtitle": "We'll generate a personalized project brief and send it to your inbox."
|
||||
"title": "Your details",
|
||||
"subtitle": "We'll send you a personalized project brief."
|
||||
},
|
||||
"complete": {
|
||||
"title": "Your project brief is ready",
|
||||
@@ -73,73 +73,124 @@
|
||||
"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.",
|
||||
"howItWorks": "How it works",
|
||||
"noCommitment": "No commitment required",
|
||||
"selectService": "Select at least one service to continue",
|
||||
"services": {
|
||||
"web": {
|
||||
"title": "Web Design & Development",
|
||||
"description": "Custom websites and web applications — designed from scratch, built for performance, and optimized for search engines."
|
||||
},
|
||||
"systems": {
|
||||
"title": "Custom Software",
|
||||
"description": "Management platforms, CRMs, and business tools built to match exactly how your team works."
|
||||
},
|
||||
"infrastructure": {
|
||||
"title": "Private Infrastructure",
|
||||
"description": "Dedicated servers with email, cloud storage, and business tools — fully owned and controlled by you."
|
||||
}
|
||||
},
|
||||
"aiToggle": "Add AI Integration",
|
||||
"aiDescription": "Intelligent features and automation built directly into your systems.",
|
||||
"generateBrief": "Generate My Brief",
|
||||
"nextStep": "Next Step",
|
||||
"back": "Back"
|
||||
},
|
||||
"process": {
|
||||
"eyebrow": "Our Method",
|
||||
"title": "Architecture of a Project",
|
||||
"eyebrow": "How We Work",
|
||||
"title": "From Idea to Launch",
|
||||
"steps": {
|
||||
"discovery": {
|
||||
"title": "Discovery",
|
||||
"description": "Understanding your business, users, and technical landscape."
|
||||
"description": "We learn your business, your users, and what you actually need built."
|
||||
},
|
||||
"strategy": {
|
||||
"title": "Strategy & Architecture",
|
||||
"description": "Defining the blueprint — from data model to deployment plan."
|
||||
"title": "Strategy & Planning",
|
||||
"description": "We define the architecture, choose the right tools, and map out the build."
|
||||
},
|
||||
"build": {
|
||||
"title": "Design & Build",
|
||||
"description": "Crafting every pixel and every line of code."
|
||||
"description": "Your project takes shape — pixel by pixel, feature by feature."
|
||||
},
|
||||
"launch": {
|
||||
"title": "Launch & Evolve",
|
||||
"description": "Deployment, monitoring, and continuous improvement."
|
||||
"title": "Launch & Support",
|
||||
"description": "We deploy, monitor, and keep everything running smoothly."
|
||||
}
|
||||
}
|
||||
},
|
||||
"work": {
|
||||
"eyebrow": "Selected Works",
|
||||
"title": "Digital Landmarks",
|
||||
"readCaseStudy": "Read Case Study",
|
||||
"comingSoon": "Coming Soon"
|
||||
"eyebrow": "Our Work",
|
||||
"title": "Projects We've Built",
|
||||
"readCaseStudy": "View Project",
|
||||
"comingSoon": "Coming Soon",
|
||||
"projects": {
|
||||
"monaco": {
|
||||
"title": "Monaco Ocean Protection Challenge",
|
||||
"description": "A judging and analytics platform with AI-powered filtering, automated judge assignment, and intelligent project review for one of the Mediterranean's leading conservation events.",
|
||||
"tags": ["Custom Software", "AI Integration"]
|
||||
},
|
||||
"portNimara": {
|
||||
"title": "Port Nimara",
|
||||
"description": "Custom website and full CRM for lead management, berth assignment, and marina operations.",
|
||||
"tags": ["Website", "Custom Software"]
|
||||
},
|
||||
"portAmador": {
|
||||
"title": "Port Amador",
|
||||
"description": "Website and private digital infrastructure — cloud storage, email, and file management for a premium marina.",
|
||||
"tags": ["Website", "Infrastructure"]
|
||||
}
|
||||
},
|
||||
"comingSoonProjects": {
|
||||
"riviera": {
|
||||
"title": "Confidential Riviera Project",
|
||||
"subtitle": "Coming Soon"
|
||||
},
|
||||
"sophia": {
|
||||
"title": "Sophia Antipolis AI Startup",
|
||||
"subtitle": "Launching Q4"
|
||||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
"eyebrow": "Why It Matters",
|
||||
"title": "Your tools should belong to you.",
|
||||
"subtitle": "Most businesses rent their digital life from a dozen different platforms. We think there's a better way — one where you own your data, control your infrastructure, and aren't locked into anyone's pricing page.",
|
||||
"ownership": {
|
||||
"title": "Ownership & Privacy",
|
||||
"description": "We move you away from standard SaaS dependencies into private cloud environments where you own 100% of your data."
|
||||
"title": "Own Your Stack",
|
||||
"description": "We move you off scattered SaaS subscriptions and onto private infrastructure — servers, email, cloud storage, and tools that you control."
|
||||
},
|
||||
"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."
|
||||
"title": "No Shortcuts",
|
||||
"description": "We write clean, hand-crafted code optimized for speed and search engines. No page builders, no bloated themes, no technical debt."
|
||||
},
|
||||
"oneTeam": {
|
||||
"title": "One Team, Everything",
|
||||
"description": "From the initial Figma frame to the Kubernetes deployment, we manage the entire lifecycle under one roof."
|
||||
"title": "One Relationship",
|
||||
"description": "From the initial design through development to ongoing support — one team that knows your business inside and out."
|
||||
},
|
||||
"quote": "Our mission is to bring the precision of architecture to the fluidity of the web."
|
||||
"quote": "We build technology that works for your business — not the other way around.",
|
||||
"foundedLocation": "Based on the Côte d'Azur"
|
||||
},
|
||||
"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",
|
||||
"title": "Ready to build something?",
|
||||
"subtitle": "Tell us what you need. No pitch decks, no pressure — just a conversation about what's possible.",
|
||||
"cta": "Start Your Project",
|
||||
"configure": "Start Your Project",
|
||||
"email": "hello@letsbe.biz",
|
||||
"reassurance": "No commitment required — just a conversation about what's possible."
|
||||
"reassurance": "No commitment required."
|
||||
},
|
||||
"footer": {
|
||||
"tagline": "Designing and engineering the digital backbone of tomorrow's leaders.",
|
||||
"tagline": "Custom websites, software, and infrastructure for businesses that want to own their digital future.",
|
||||
"location": "Côte d'Azur, France",
|
||||
"services": "Services",
|
||||
"studio": "Studio",
|
||||
"connect": "Connect",
|
||||
"serviceLinks": {
|
||||
"designDev": "Websites & Web Apps",
|
||||
"customSystems": "Custom Software",
|
||||
"infrastructure": "Private Infrastructure",
|
||||
"aiAutomation": "AI Integration"
|
||||
},
|
||||
"privacy": "Privacy Policy",
|
||||
"terms": "Terms of Service"
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"nav": {
|
||||
"services": "Services",
|
||||
"configure": "Configurer",
|
||||
"configure": "Démarrer",
|
||||
"process": "Méthode",
|
||||
"work": "Réalisations",
|
||||
"about": "À propos",
|
||||
@@ -9,137 +9,188 @@
|
||||
"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",
|
||||
"title": "Sites web, logiciels et infrastructure — conçus et développés {accentWord} autour de vous.",
|
||||
"accentWord": "entièrement",
|
||||
"subtitle": "Nous concevons des sites web sur mesure, développons des logiciels dédiés et gérons une infrastructure privée qui vous appartient. Une seule équipe, du premier pixel au déploiement final.",
|
||||
"cta": "Démarrer 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."
|
||||
"title": "Conçu Sur Mesure",
|
||||
"description": "Chaque projet est designé et codé selon vos besoins exacts. Pas de templates, pas de raccourcis."
|
||||
},
|
||||
"privateInfra": {
|
||||
"title": "Infrastructure Privée",
|
||||
"description": "Environnements cloud dédiés et sécurisés pour vos données."
|
||||
"title": "Tout Vous Appartient",
|
||||
"description": "Serveurs privés, vos données, vos outils — entièrement contrôlés et détenus par vous."
|
||||
},
|
||||
"aiPowered": {
|
||||
"title": "Propulsé par l'IA",
|
||||
"description": "Automatisation intelligente qui démultiplie votre productivité."
|
||||
"title": "Une Seule Équipe",
|
||||
"description": "Design, développement, hébergement et support par une seule équipe dédiée."
|
||||
},
|
||||
"rivieraBased": {
|
||||
"title": "Basé sur la Riviera",
|
||||
"description": "Expertise locale pour des ambitions globales."
|
||||
"title": "L'IA Là Où Ça Compte",
|
||||
"description": "Fonctionnalités intelligentes et automatisation intégrées directement dans vos systèmes."
|
||||
}
|
||||
},
|
||||
"services": {
|
||||
"eyebrow": "Nos Compétences",
|
||||
"title": "Trois Piliers d'Excellence Digitale",
|
||||
"eyebrow": "Ce Que Nous Faisons",
|
||||
"title": "Concevoir. Développer. Héberger.",
|
||||
"web": {
|
||||
"title": "Design & Développement",
|
||||
"features": ["Design UI/UX Sur Mesure", "Applications Web Modernes", "E-commerce & Plateformes", "Optimisation des Performances"]
|
||||
"title": "Sites Web & Applications",
|
||||
"features": ["Design Web Sur Mesure", "Développement Responsive", "SEO & Performance", "Gestion de Contenu"]
|
||||
},
|
||||
"systems": {
|
||||
"title": "Systèmes Personnalisés",
|
||||
"features": ["CRM & Plateformes de Gestion", "Logiciels Métier Sur Mesure", "Architecture API & Intégration", "Outillage Interne"]
|
||||
"title": "Logiciels Sur Mesure",
|
||||
"features": ["Plateformes de Gestion", "CRM & Outils Métier", "Réservation & Planning", "Intégrations API"]
|
||||
},
|
||||
"infrastructure": {
|
||||
"title": "Infrastructure Digitale",
|
||||
"features": ["Hébergement Cloud Dédié", "Solutions de Souveraineté des Données", "Renforcement de la Sécurité", "DevOps & Maintenance"]
|
||||
"title": "Infrastructure Privée",
|
||||
"features": ["Serveurs Dédiés", "Email & Stockage Cloud", "Sécurité & Chiffrement", "Monitoring & Support"]
|
||||
},
|
||||
"aiNarrative": "Nous construisons votre écosystème digital — puis nous le rendons intelligent."
|
||||
"aiNarrative": "Et quand vous êtes prêt, nous intégrons l'IA dans l'ensemble — des fonctionnalités intelligentes dans vos logiciels à l'automatisation qui connecte tous vos outils."
|
||||
},
|
||||
"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é.",
|
||||
"eyebrow": "Démarrer",
|
||||
"title": "Dites-nous ce dont vous avez besoin.",
|
||||
"description": "Répondez à quelques questions et nous préparerons un brief projet sur mesure pour vous.",
|
||||
"step1": {
|
||||
"title": "Que construisons-nous ensemble ?",
|
||||
"subtitle": "Sélectionnez les services qui correspondent à votre vision."
|
||||
"title": "De quoi avez-vous besoin ?",
|
||||
"subtitle": "Sélectionnez les services qui correspondent à votre projet."
|
||||
},
|
||||
"step2": {
|
||||
"title": "Parlez-nous de votre projet",
|
||||
"subtitle": "Cela nous aide à préparer la bonne approche avant notre premier échange."
|
||||
"subtitle": "Quelques détails nous aident à préparer la bonne approche."
|
||||
},
|
||||
"step3": {
|
||||
"title": "Presque terminé",
|
||||
"subtitle": "Nous générerons un brief personnalisé et l'enverrons dans votre boîte mail."
|
||||
"title": "Vos coordonnées",
|
||||
"subtitle": "Nous vous enverrons un brief projet personnalisé."
|
||||
},
|
||||
"complete": {
|
||||
"title": "Votre brief est prêt",
|
||||
"title": "Votre brief projet 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.",
|
||||
"howItWorks": "Comment ça marche",
|
||||
"noCommitment": "Sans engagement",
|
||||
"selectService": "Sélectionnez au moins un service pour continuer",
|
||||
"services": {
|
||||
"web": {
|
||||
"title": "Design & Développement Web",
|
||||
"description": "Sites web et applications sur mesure — conçus de zéro, optimisés pour la performance et le référencement."
|
||||
},
|
||||
"systems": {
|
||||
"title": "Logiciels Sur Mesure",
|
||||
"description": "Plateformes de gestion, CRM et outils métier conçus pour correspondre exactement à votre façon de travailler."
|
||||
},
|
||||
"infrastructure": {
|
||||
"title": "Infrastructure Privée",
|
||||
"description": "Serveurs dédiés avec email, stockage cloud et outils métier — entièrement détenus et contrôlés par vous."
|
||||
}
|
||||
},
|
||||
"aiToggle": "Ajouter l'Intégration IA",
|
||||
"aiDescription": "Fonctionnalités intelligentes et automatisation intégrées directement dans vos systèmes.",
|
||||
"generateBrief": "Générer Mon Brief",
|
||||
"nextStep": "Étape Suivante",
|
||||
"back": "Retour"
|
||||
},
|
||||
"process": {
|
||||
"eyebrow": "Notre Méthode",
|
||||
"title": "Architecture d'un Projet",
|
||||
"title": "De l'Idée au Lancement",
|
||||
"steps": {
|
||||
"discovery": {
|
||||
"title": "Découverte",
|
||||
"description": "Comprendre votre entreprise, vos utilisateurs et votre paysage technique."
|
||||
"description": "Nous apprenons votre activité, vos utilisateurs et ce que vous avez réellement besoin de construire."
|
||||
},
|
||||
"strategy": {
|
||||
"title": "Stratégie & Architecture",
|
||||
"description": "Définir le plan — du modèle de données au plan de déploiement."
|
||||
"title": "Stratégie & Planification",
|
||||
"description": "Nous définissons l'architecture, choisissons les bons outils et planifions la construction."
|
||||
},
|
||||
"build": {
|
||||
"title": "Design & Construction",
|
||||
"description": "Façonner chaque pixel et chaque ligne de code."
|
||||
"description": "Votre projet prend forme — pixel par pixel, fonctionnalité par fonctionnalité."
|
||||
},
|
||||
"launch": {
|
||||
"title": "Lancement & Évolution",
|
||||
"description": "Déploiement, monitoring et amélioration continue."
|
||||
"title": "Lancement & Support",
|
||||
"description": "Nous déployons, surveillons et assurons le bon fonctionnement de tout."
|
||||
}
|
||||
}
|
||||
},
|
||||
"work": {
|
||||
"eyebrow": "Réalisations Sélectionnées",
|
||||
"title": "Réalisations Digitales",
|
||||
"readCaseStudy": "Lire l'Étude de Cas",
|
||||
"comingSoon": "Bientôt Disponible"
|
||||
"eyebrow": "Nos Réalisations",
|
||||
"title": "Projets Que Nous Avons Construits",
|
||||
"readCaseStudy": "Voir le Projet",
|
||||
"comingSoon": "Bientôt Disponible",
|
||||
"projects": {
|
||||
"monaco": {
|
||||
"title": "Monaco Ocean Protection Challenge",
|
||||
"description": "Plateforme de jugement et d'analyse avec filtrage par IA, assignation automatique des juges et évaluation intelligente des projets pour l'un des événements de conservation majeurs de la Méditerranée.",
|
||||
"tags": ["Logiciel Sur Mesure", "Intégration IA"]
|
||||
},
|
||||
"portNimara": {
|
||||
"title": "Port Nimara",
|
||||
"description": "Site web sur mesure et CRM complet pour la gestion des prospects, l'attribution des places et les opérations de la marina.",
|
||||
"tags": ["Site Web", "Logiciel Sur Mesure"]
|
||||
},
|
||||
"portAmador": {
|
||||
"title": "Port Amador",
|
||||
"description": "Site web et infrastructure digitale privée — stockage cloud, email et gestion de fichiers pour une marina premium.",
|
||||
"tags": ["Site Web", "Infrastructure"]
|
||||
}
|
||||
},
|
||||
"comingSoonProjects": {
|
||||
"riviera": {
|
||||
"title": "Projet Confidentiel Riviera",
|
||||
"subtitle": "Bientôt Disponible"
|
||||
},
|
||||
"sophia": {
|
||||
"title": "Startup IA Sophia Antipolis",
|
||||
"subtitle": "Lancement T4"
|
||||
}
|
||||
}
|
||||
},
|
||||
"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.",
|
||||
"eyebrow": "Pourquoi C'est Important",
|
||||
"title": "Vos outils devraient vous appartenir.",
|
||||
"subtitle": "La plupart des entreprises louent leur vie digitale à une dizaine de plateformes différentes. Nous pensons qu'il y a mieux — un monde où vous possédez vos données, contrôlez votre infrastructure et n'êtes enfermé dans la grille tarifaire de personne.",
|
||||
"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."
|
||||
"title": "Maîtrisez Votre Stack",
|
||||
"description": "Nous vous libérons des abonnements SaaS dispersés pour vous installer sur une infrastructure privée — serveurs, email, stockage cloud et outils que vous contrôlez."
|
||||
},
|
||||
"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."
|
||||
"title": "Pas de Raccourcis",
|
||||
"description": "Nous écrivons du code propre, artisanal, optimisé pour la vitesse et le référencement. Pas de constructeurs de pages, pas de thèmes surchargés, pas de dette technique."
|
||||
},
|
||||
"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."
|
||||
"title": "Une Seule Relation",
|
||||
"description": "Du design initial au développement jusqu'au support continu — une seule équipe qui connaît votre activité de A à Z."
|
||||
},
|
||||
"quote": "Notre mission est d'apporter la précision de l'architecture à la fluidité du web."
|
||||
"quote": "Nous construisons la technologie qui travaille pour votre entreprise — pas l'inverse.",
|
||||
"foundedLocation": "Basé sur la Côte d'Azur"
|
||||
},
|
||||
"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",
|
||||
"title": "Prêt à construire quelque chose ?",
|
||||
"subtitle": "Dites-nous ce dont vous avez besoin. Pas de slides, pas de pression — juste une conversation sur ce qui est possible.",
|
||||
"cta": "Démarrer Votre Projet",
|
||||
"configure": "Démarrer Votre Projet",
|
||||
"email": "hello@letsbe.biz",
|
||||
"reassurance": "Sans engagement — juste une conversation sur ce qui est possible."
|
||||
"reassurance": "Sans engagement."
|
||||
},
|
||||
"footer": {
|
||||
"tagline": "Concevoir et construire la colonne vertébrale digitale des leaders de demain.",
|
||||
"tagline": "Sites web, logiciels et infrastructure sur mesure pour les entreprises qui veulent maîtriser leur avenir digital.",
|
||||
"location": "Côte d'Azur, France",
|
||||
"services": "Services",
|
||||
"studio": "Studio",
|
||||
"connect": "Contact",
|
||||
"serviceLinks": {
|
||||
"designDev": "Sites Web & Applications",
|
||||
"customSystems": "Logiciels Sur Mesure",
|
||||
"infrastructure": "Infrastructure Privée",
|
||||
"aiAutomation": "Intégration IA"
|
||||
},
|
||||
"privacy": "Politique de Confidentialité",
|
||||
"terms": "Conditions d'Utilisation"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user