Compare commits

...

15 Commits

Author SHA1 Message Date
00f78f53d7 feat(i18n): wire services page and sub-components to translations
Some checks failed
Build & Push / build-and-push (push) Failing after 2m38s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 15:01:33 -04:00
1705b618c3 feat(i18n): add Italian and Spanish translations for about, services, and case study pages
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 15:01:25 -04:00
0189c56bec feat(i18n): wire work case study page to translations
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 15:00:40 -04:00
901f76349a feat(i18n): add French translations for about, services, and case study pages
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 15:00:31 -04:00
ce6f029093 feat(i18n): wire about page visible content to translations
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 15:00:12 -04:00
9ffd0885a2 feat(i18n): add English translation keys for about, services, and case study pages
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 14:57:56 -04:00
a8af84e864 fix(seo): canonical URL, og:locale:alternate, JSON-LD languages, sitemap x-default
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 14:55:10 -04:00
d68dd6ffc3 feat(i18n): add Italian and Spanish support to configure API fallback briefs
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 14:13:00 -04:00
db5bbc9e25 fix(i18n): replace hardcoded VoiceAgent locale ternary with translation key
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 14:12:43 -04:00
3f203e4c46 feat(i18n): add Italian and Spanish Gemini voice agent system prompts
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 14:11:39 -04:00
890f2184e1 feat(i18n): redesign nav locale switcher from binary toggle to multi-locale dropdown
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 14:11:17 -04:00
23a84cd31b feat(i18n): add full Spanish translation file
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 14:11:05 -04:00
f2efa442bf feat(i18n): add full Italian translation file
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 14:10:55 -04:00
cb6ee4783c feat(i18n): add IT/ES to metadata alternates, sitemap, and Payload CMS config
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 14:08:30 -04:00
8a7267e769 feat(i18n): add Italian and Spanish to locale config and middleware
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 14:07:16 -04:00
21 changed files with 1811 additions and 394 deletions

View File

@@ -29,6 +29,8 @@ export async function generateMetadata({ params }: PageProps): Promise<Metadata>
languages: {
'en': `${BASE_URL}/about`,
'fr': `${BASE_URL}/fr/about`,
'it': `${BASE_URL}/it/about`,
'es': `${BASE_URL}/es/about`,
'x-default': `${BASE_URL}/about`,
},
},
@@ -41,32 +43,6 @@ export function generateStaticParams() {
return routing.locales.map((locale) => ({ locale }));
}
// ─── Data ─────────────────────────────────────────────────────────────────────
const PILLARS = [
{
id: 'craftsmanship',
Icon: PenTool,
title: 'Craftsmanship First',
description:
'The gap between a website that works and one that lasts is craft. We sweat the typography, the transitions, the performance, the edge cases. Every interface we ship is something we\'d be proud to sign.',
},
{
id: 'one-team',
Icon: Users,
title: 'One Team, Everything',
description:
'Design, development, hosting, infrastructure — one team, one point of contact, one standard of quality. No handoffs between agencies. No juggling freelancers. Just people who care about the whole thing.',
},
{
id: 'ownership',
Icon: Shield,
title: 'Built to Be Yours',
description:
'Everything we build, you own — the code, the data, the infrastructure. No vendor lock-in, no platform dependencies. We hand over work that outlasts the engagement.',
},
];
// ─── Sub-components ───────────────────────────────────────────────────────────
function PillarCard({
@@ -116,6 +92,14 @@ export default async function AboutPage({ params }: Props) {
const { locale } = await params;
setRequestLocale(locale);
const t = await getTranslations({ locale, namespace: 'aboutPage' });
const PILLARS = [
{ id: 'craftsmanship', Icon: PenTool, title: t('pillars.craftsmanship.title'), description: t('pillars.craftsmanship.description') },
{ id: 'one-team', Icon: Users, title: t('pillars.oneTeam.title'), description: t('pillars.oneTeam.description') },
{ id: 'ownership', Icon: Shield, title: t('pillars.ownership.title'), description: t('pillars.ownership.description') },
];
return (
<main>
@@ -125,21 +109,18 @@ export default async function AboutPage({ params }: Props) {
<div className="max-w-4xl mx-auto flex flex-col items-center text-center gap-8">
<ScrollReveal variant="fadeIn">
<span className="label-md text-primary">About LetsBe.</span>
<span className="label-md text-primary">{t('hero.eyebrow')}</span>
</ScrollReveal>
<ScrollReveal variant="fadeUp" delay={0.1}>
<h1 className="font-serif font-semibold text-on-surface text-5xl md:text-6xl lg:text-[4rem] leading-[1.05] tracking-[-0.03em]">
Great businesses deserve
<br />
great digital partners.
{t('hero.title')}
</h1>
</ScrollReveal>
<ScrollReveal variant="fadeUp" delay={0.2}>
<p className="text-outline text-xl leading-relaxed max-w-2xl">
We design and build custom websites, software, and digital platforms for businesses
that care about quality and want a team that does too.
{t('hero.subtitle')}
</p>
</ScrollReveal>
@@ -156,29 +137,16 @@ export default async function AboutPage({ params }: Props) {
<div className="lg:col-span-5 flex flex-col gap-10">
<ScrollReveal variant="slideLeft" className="flex flex-col gap-4">
<span className="label-md text-primary">Our Story</span>
<span className="label-md text-primary">{t('story.eyebrow')}</span>
<h2 className="font-serif text-4xl md:text-[2.75rem] font-semibold text-on-surface leading-[1.1] tracking-[-0.02em]">
Built for businesses<br />
like yours.
{t('story.title')}
</h2>
</ScrollReveal>
<ScrollReveal variant="fadeUp" delay={0.1} className="flex flex-col gap-5 text-outline leading-relaxed text-[0.9375rem]">
<p>
LetsBe. started with a simple belief: that ambitious businesses deserve digital
tools as carefully considered as the work they do. Not templates. Not off-the-shelf
platforms. Real design and engineering, built from scratch.
</p>
<p>
Our early clients were founders and operators who needed more than a website
they needed a technical partner who could design, build, host, and maintain
everything under one roof. Those projects shaped how we work today.
</p>
<p>
We build platforms meant to be owned, not rented. We document everything, we hand
over codebases that outlast the engagement, and we never lock clients into systems
they can&rsquo;t leave. That&rsquo;s not a feature it&rsquo;s how we think business should work.
</p>
<p>{t('story.p1')}</p>
<p>{t('story.p2')}</p>
<p>{t('story.p3')}</p>
</ScrollReveal>
</div>
@@ -224,13 +192,13 @@ export default async function AboutPage({ params }: Props) {
/>
</div>
<blockquote className="font-serif italic text-lg text-on-surface leading-relaxed pr-8">
&ldquo;Build fewer things. Build them better. Build them to last.&rdquo;
"{t('story.quote')}"
</blockquote>
<div
className="w-8 h-px bg-primary/40 my-4"
aria-hidden="true"
/>
<p className="label-md text-outline">LetsBe. founding principle</p>
<p className="label-md text-outline">{t('story.quoteAttrib')}</p>
</div>
</ScrollReveal>
@@ -244,12 +212,12 @@ export default async function AboutPage({ params }: Props) {
<div className="container mx-auto px-6">
<ScrollReveal variant="fadeUp" className="flex flex-col items-center text-center gap-4 mb-16">
<span className="label-md text-primary">Our Beliefs</span>
<span className="label-md text-primary">{t('pillars.eyebrow')}</span>
<h2 className="font-serif font-semibold text-on-surface text-4xl md:text-5xl leading-[1.1] tracking-[-0.02em] max-w-2xl">
What We Believe
{t('pillars.title')}
</h2>
<p className="text-outline text-lg leading-relaxed max-w-xl mt-1">
Three principles behind every project we take on.
{t('pillars.subtitle')}
</p>
</ScrollReveal>
@@ -279,12 +247,11 @@ export default async function AboutPage({ params }: Props) {
/>
<blockquote className="font-serif italic text-white text-3xl md:text-[2.25rem] leading-[1.3] tracking-[-0.02em]">
&ldquo;We don&rsquo;t just build websites we build the foundation your business
runs on.&rdquo;
"{t('quote.text')}"
</blockquote>
<p className="label-md text-white/40">
&mdash; LetsBe. founding philosophy
&mdash; {t('quote.attrib')}
</p>
</div>
@@ -299,26 +266,25 @@ export default async function AboutPage({ params }: Props) {
<div className="max-w-3xl mx-auto flex flex-col items-center text-center gap-8">
<div className="flex flex-col gap-3 items-center">
<span className="label-md text-primary">Work With Us</span>
<span className="label-md text-primary">{t('cta.eyebrow')}</span>
<h2 className="font-serif font-semibold text-on-surface text-3xl md:text-4xl leading-[1.1] tracking-[-0.02em]">
Let&rsquo;s build something together.
{t('cta.title')}
</h2>
<p className="text-outline text-lg leading-relaxed max-w-lg">
Whether you have a clear brief or just an early idea, we&rsquo;d love to talk
through what&rsquo;s possible.
{t('cta.subtitle')}
</p>
</div>
<div className="flex flex-col sm:flex-row items-center gap-4">
<Button variant="primary" size="lg" arrow href="/#configure">
Start your project
{t('cta.primary')}
</Button>
<Button
variant="secondary"
size="lg"
href="mailto:hello@letsbe.biz"
>
Book a call
{t('cta.secondary')}
</Button>
</div>

View File

@@ -21,6 +21,10 @@ export async function generateMetadata({ params }: Props): Promise<Metadata> {
const { locale } = await params
const t = await getTranslations({ locale, namespace: 'meta' })
const ogLocaleMap: Record<string, string> = { en: 'en_US', fr: 'fr_FR', it: 'it_IT', es: 'es_ES' }
const currentOgLocale = ogLocaleMap[locale] ?? 'en_US'
const otherOgLocales = Object.values(ogLocaleMap).filter((l) => l !== currentOgLocale)
return {
metadataBase: new URL(BASE_URL),
title: {
@@ -31,9 +35,12 @@ export async function generateMetadata({ params }: Props): Promise<Metadata> {
openGraph: {
type: 'website',
siteName: t('siteName'),
locale: locale === 'fr' ? 'fr_FR' : 'en_US',
locale: currentOgLocale,
images: [{ url: '/images/og-default.png', width: 1200, height: 630 }],
},
other: {
'og:locale:alternate': otherOgLocales,
},
twitter: {
card: 'summary_large_image',
},
@@ -41,14 +48,6 @@ export async function generateMetadata({ params }: Props): Promise<Metadata> {
index: true,
follow: true,
},
alternates: {
canonical: BASE_URL,
languages: {
'en': BASE_URL,
'fr': `${BASE_URL}/fr`,
'x-default': BASE_URL,
},
},
}
}
@@ -73,6 +72,12 @@ const organizationJsonLd = {
email: 'hello@letsbe.biz',
contactType: 'customer service',
},
availableLanguage: [
{ '@type': 'Language', name: 'English', alternateName: 'en' },
{ '@type': 'Language', name: 'French', alternateName: 'fr' },
{ '@type': 'Language', name: 'Italian', alternateName: 'it' },
{ '@type': 'Language', name: 'Spanish', alternateName: 'es' },
],
}
export default async function LocaleLayout({ children, params }: Props) {

View File

@@ -30,23 +30,26 @@ export async function generateMetadata({ params }: Props): Promise<Metadata> {
languages: {
'en': BASE_URL,
'fr': `${BASE_URL}/fr`,
'it': `${BASE_URL}/it`,
'es': `${BASE_URL}/es`,
'x-default': BASE_URL,
},
},
}
}
export default async function HomePage({ params }: Props) {
const { locale } = await params
setRequestLocale(locale)
const websiteJsonLd = {
'@context': 'https://schema.org',
'@type': 'WebSite',
name: 'LetsBe.',
url: BASE_URL,
inLanguage: locale,
}
export default async function HomePage({ params }: Props) {
const { locale } = await params
setRequestLocale(locale)
return (
<main>
<script

View File

@@ -28,142 +28,14 @@ export async function generateMetadata({ params }: PageProps): Promise<Metadata>
languages: {
'en': `${BASE_URL}/services`,
'fr': `${BASE_URL}/fr/services`,
'it': `${BASE_URL}/it/services`,
'es': `${BASE_URL}/es/services`,
'x-default': `${BASE_URL}/services`,
},
},
};
}
// ─── Service data ──────────────────────────────────────────────────────────────
export const SERVICE_PILLARS = [
{
id: 'design-development',
numeral: '01',
title: 'Web Design & Development',
description:
'Your website shouldn\'t look like everyone else\'s — and it shouldn\'t be built like everyone else\'s either. We design and build custom websites and web applications from a blank canvas, crafting every layout, every interaction, and every page with intention. The result is fast, search-engine-friendly, and built to grow with your business. Whether you need a marketing site that converts, a web application your team relies on, or an e-commerce platform that scales — we build it from scratch, and we build it to last.',
background: 'bg-surface' as const,
features: [
{
icon: 'Palette',
title: 'Custom Design',
description:
'Every layout, component, and interaction is designed for your brand. No themes, no templates, no shortcuts.',
},
{
icon: 'Globe',
title: 'Web Applications',
description:
'Modern, responsive applications built with the latest technologies — fast, reliable, and ready to scale.',
},
{
icon: 'ShoppingCart',
title: 'E-Commerce',
description:
'Custom storefronts, checkout flows, and multi-currency platforms built for serious online retail.',
},
{
icon: 'Zap',
title: 'Performance & SEO',
description:
'Fast load times, clean code, and search engine optimization built into the foundation — not bolted on after.',
},
],
},
{
id: 'custom-systems',
numeral: '02',
title: 'Software & Platforms',
description:
'Off-the-shelf software makes assumptions about how your business works. We don\'t. When spreadsheets and generic tools stop cutting it, we build the exact system your team needs — designed around your workflow, not someone else\'s. From CRMs tailored to your sales process, to management platforms that replace three different subscriptions, to integrations that connect your existing tools — everything we build is yours, fully documented, and built to last.',
background: 'bg-surface-low' as const,
features: [
{
icon: 'Database',
title: 'CRM & Management Tools',
description:
'Relationship and pipeline management built around how your team actually works — not how a generic platform thinks you should.',
},
{
icon: 'Code2',
title: 'Custom Software',
description:
'From booking platforms to internal tools to full SaaS products — purpose-built for your business.',
},
{
icon: 'GitBranch',
title: 'Integrations & APIs',
description:
'We connect your existing tools and build the bridges between systems so everything works together.',
},
{
icon: 'Wrench',
title: 'Dashboards & Automation',
description:
'Admin panels, reporting tools, and workflow automation that give your team an unfair advantage.',
},
],
},
{
id: 'infrastructure',
numeral: '03',
title: 'Hosting & Infrastructure',
description:
'Your website and software need a home — and we think you should own it. We set up and manage dedicated servers, email, cloud storage, and all the infrastructure your business runs on. No shared hosting, no mysterious third-party dependencies. You know where your data lives, who has access, and that someone is watching the dashboard around the clock.',
background: 'bg-surface' as const,
features: [
{
icon: 'Server',
title: 'Dedicated Hosting',
description:
'Private servers managed for your business — no shared hosting, no noisy neighbors, no surprises.',
},
{
icon: 'Shield',
title: 'Your Data, Your Control',
description:
'You own your data and know exactly where it lives. Full access, full transparency, no lock-in.',
},
{
icon: 'Lock',
title: 'Security & Protection',
description:
'Serious security, proactive monitoring, and protection built into your infrastructure from day one.',
},
{
icon: 'Settings',
title: 'Monitoring & Support',
description:
'Proactive monitoring, regular updates, and ongoing support so you never have to worry about uptime.',
},
],
},
] as const;
// ─── AI Layer data ─────────────────────────────────────────────────────────────
export const AI_CAPABILITIES = [
{
id: 'ai-teammate',
title: 'AI Teammate',
description:
'An AI assistant built into your workflow — automates repetitive tasks, surfaces the info your team needs, and connects your tools.',
},
{
id: 'customer-facing-ai',
title: 'Customer-Facing AI',
description:
'Smart features for your customers — intelligent search, personalized recommendations, and conversational interfaces that work around the clock.',
},
{
id: 'data-intelligence',
title: 'Data Intelligence',
description:
'AI that helps you understand your data — automated reports, trend spotting, and insights you can actually act on.',
},
] as const;
// ─── Page ──────────────────────────────────────────────────────────────────────
type Props = {
@@ -174,19 +46,37 @@ export default async function ServicesPage({ params }: Props) {
const { locale } = await params;
setRequestLocale(locale);
const t = await getTranslations({ locale, namespace: 'servicesPage' })
const backgrounds = ['bg-surface', 'bg-surface-low', 'bg-surface'] as const
const pillars = [0, 1, 2].map((i) => ({
id: t(`pillars.${i}.id`),
numeral: t(`pillars.${i}.numeral`),
title: t(`pillars.${i}.title`),
description: t(`pillars.${i}.description`),
background: backgrounds[i],
features: [0, 1, 2, 3].map((j) => ({
icon: t(`pillars.${i}.features.${j}.icon`),
title: t(`pillars.${i}.features.${j}.title`),
description: t(`pillars.${i}.features.${j}.description`),
})),
}))
const aiCapabilities = [0, 1, 2].map((i) => ({
id: t(`ai.capabilities.${i}.id`),
title: t(`ai.capabilities.${i}.title`),
description: t(`ai.capabilities.${i}.description`),
}))
return (
<main>
<ServicesHero />
{SERVICE_PILLARS.map((pillar, index) => (
<ServicePillar
key={pillar.id}
pillar={pillar}
index={index}
/>
{pillars.map((pillar, index) => (
<ServicePillar key={pillar.id} pillar={pillar} index={index} />
))}
<AILayer capabilities={AI_CAPABILITIES} />
<AILayer capabilities={aiCapabilities} />
<ServicesCTA />
</main>

View File

@@ -6,69 +6,38 @@ import { routing } from '@/i18n/routing';
import ScrollReveal from '@/components/ui/ScrollReveal';
import Button from '@/components/ui/Button';
import CornerBracket from '@/components/icons/CornerBracket';
import Chip from '@/components/ui/Chip';
const BASE_URL = 'https://letsbe.biz';
// ─── Types ────────────────────────────────────────────────────────────────────
interface Project {
title: string;
subtitle: string;
description: string;
challenge: string;
approach: string;
outcome: string;
techStack: string[];
tags: string[];
image: string;
techStack: string[];
}
// ─── Slug-to-work-key mapping ─────────────────────────────────────────────────
const SLUG_TO_KEY: Record<string, string> = {
'monaco-ocean': 'monaco',
'port-nimara': 'portNimara',
'port-amador': 'portAmador',
}
// ─── Data (will come from Payload CMS) ────────────────────────────────────────
const PROJECTS: Record<string, Project> = {
'monaco-ocean': {
title: 'Monaco Ocean Protection Challenge',
subtitle: 'AI-Powered Judging & Analytics Platform',
description:
"A comprehensive judging and analytics system with advanced AI jury integration for one of the Mediterranean's most prestigious conservation events.",
challenge:
'The Monaco Ocean Protection Challenge needed a modern platform to manage submissions, coordinate judges across time zones, and provide AI-assisted evaluation of conservation proposals — all while maintaining the prestige and security expected of a Monaco institution.',
approach:
'We built a custom platform from the ground up using Next.js and a private PostgreSQL infrastructure. The AI jury module uses natural language processing to pre-screen submissions and generate summary reports, while human judges retain full control over final decisions.',
outcome:
"The platform processed over 200 submissions in its first season, reducing judge workload by 40% through AI-assisted pre-screening. The client praised the system's reliability and the elegance of its interface.",
techStack: ['Next.js', 'PostgreSQL', 'OpenAI API', 'Docker', 'Private Cloud'],
tags: ['AI Integration', 'Platform'],
image: '/images/monaco_high_res.jpg',
techStack: ['Next.js', 'PostgreSQL', 'OpenAI API', 'Docker', 'Private Cloud'],
},
'port-nimara': {
title: 'Port Nimara',
subtitle: 'Maritime Digital Hub',
description: 'Scalable digital hub for maritime logistics.',
challenge:
'Port Nimara needed a modern digital presence that could serve as both a marketing website and an operational hub for berth inquiries, event management, and partner communications.',
approach:
'We designed and developed a performant Nuxt.js application with a headless CMS for content management, integrated with their existing maritime scheduling systems via custom API middleware.',
outcome:
'The new platform increased online berth inquiries by 3x and provided the port authority with real-time content management capabilities they previously lacked.',
techStack: ['Nuxt.js', 'Directus CMS', 'Node.js', 'Docker'],
tags: ['Website', 'Infrastructure'],
image: '/images/anguilla.png',
techStack: ['Nuxt.js', 'Directus CMS', 'Node.js', 'Docker'],
},
'port-amador': {
title: 'Port Amador',
subtitle: 'Premium Nautical Experience',
description: 'Premium digital experience for elite nautical services.',
challenge:
'Port Amador required a luxury-grade digital experience that matched the exclusivity of their nautical services, with multi-language support and seamless booking integration.',
approach:
'We crafted a bespoke website with cinematic imagery, smooth animations, and an integrated booking flow. The site was built on modern web technologies with a focus on performance and SEO for the competitive luxury maritime market.',
outcome:
"The redesigned platform elevated Port Amador's digital presence to match their premium positioning, with a 60% improvement in page load times and significantly increased organic traffic.",
techStack: ['Next.js', 'Tailwind CSS', 'Framer Motion', 'Vercel'],
tags: ['Website', 'Infrastructure'],
image: '/images/panama.png',
techStack: ['Next.js', 'Tailwind CSS', 'Framer Motion', 'Vercel'],
},
};
@@ -83,6 +52,9 @@ export async function generateMetadata({ params }: PageProps): Promise<Metadata>
const project = PROJECTS[slug];
if (!project) return {};
const workKey = SLUG_TO_KEY[slug];
if (!workKey) return {};
const t = await getTranslations({ locale, namespace: 'meta.work' });
const path = locale === 'en' ? `/work/${slug}` : `/${locale}/work/${slug}`;
@@ -98,6 +70,8 @@ export async function generateMetadata({ params }: PageProps): Promise<Metadata>
languages: {
'en': `${BASE_URL}/work/${slug}`,
'fr': `${BASE_URL}/fr/work/${slug}`,
'it': `${BASE_URL}/it/work/${slug}`,
'es': `${BASE_URL}/es/work/${slug}`,
'x-default': `${BASE_URL}/work/${slug}`,
},
},
@@ -159,12 +133,28 @@ export default async function CaseStudyPage({ params }: Props) {
const project = PROJECTS[slug];
if (!project) notFound();
const workKey = SLUG_TO_KEY[slug];
if (!workKey) notFound();
const t = await getTranslations({ locale, namespace: 'caseStudy' });
const tw = await getTranslations({ locale, namespace: 'work' });
// Get translated content
const title = tw(`projects.${workKey}.title`)
const tags = tw.raw(`projects.${workKey}.tags`) as string[]
const subtitle = t(`projects.${slug}.subtitle`)
const description = t(`projects.${slug}.description`)
const challenge = t(`projects.${slug}.challenge`)
const approach = t(`projects.${slug}.approach`)
const outcome = t(`projects.${slug}.outcome`)
const caseStudyJsonLd = {
'@context': 'https://schema.org',
'@type': 'CreativeWork',
name: project.title,
description: project.description,
name: title,
description: description,
image: `${BASE_URL}${project.image}`,
inLanguage: locale,
creator: {
'@type': 'Organization',
name: 'LetsBe.',
@@ -199,7 +189,7 @@ export default async function CaseStudyPage({ params }: Props) {
{/* Tags */}
<ScrollReveal variant="fadeIn">
<div className="flex flex-wrap items-center justify-center gap-2">
{project.tags.map((tag) => (
{tags.map((tag) => (
<span
key={tag}
className="inline-flex items-center bg-white/15 backdrop-blur-sm text-white/90 text-[0.75rem] font-semibold px-3 py-1 rounded-full leading-none tracking-wide"
@@ -213,21 +203,21 @@ export default async function CaseStudyPage({ params }: Props) {
{/* Title */}
<ScrollReveal variant="fadeUp" delay={0.08}>
<h1 className="font-serif font-semibold text-white text-4xl md:text-5xl lg:text-[3.25rem] leading-[1.1] tracking-[-0.02em]">
{project.title}
{title}
</h1>
</ScrollReveal>
{/* Subtitle */}
<ScrollReveal variant="fadeUp" delay={0.16}>
<p className="label-md text-white/70 tracking-widest">
{project.subtitle}
{subtitle}
</p>
</ScrollReveal>
{/* Description */}
<ScrollReveal variant="fadeUp" delay={0.22}>
<p className="text-white/80 text-lg leading-relaxed max-w-2xl">
{project.description}
{description}
</p>
</ScrollReveal>
@@ -254,10 +244,10 @@ export default async function CaseStudyPage({ params }: Props) {
<div className="flex flex-col gap-16 md:gap-20">
<ContentSection
label="The Challenge"
label={t('labels.challenge')}
index="01"
heading="The problem we set out to solve"
body={project.challenge}
heading={t('labels.challengeHeading')}
body={challenge}
/>
{/* Divider */}
@@ -273,10 +263,10 @@ export default async function CaseStudyPage({ params }: Props) {
</ScrollReveal>
<ContentSection
label="Our Approach"
label={t('labels.approach')}
index="02"
heading="How we thought about it"
body={project.approach}
heading={t('labels.approachHeading')}
body={approach}
/>
{/* Divider */}
@@ -292,10 +282,10 @@ export default async function CaseStudyPage({ params }: Props) {
</ScrollReveal>
<ContentSection
label="The Outcome"
label={t('labels.outcome')}
index="03"
heading="What we delivered"
body={project.outcome}
heading={t('labels.outcomeHeading')}
body={outcome}
/>
</div>
@@ -309,7 +299,7 @@ export default async function CaseStudyPage({ params }: Props) {
<div className="container mx-auto px-6">
<div className="max-w-3xl mx-auto">
<ScrollReveal variant="fadeUp" className="flex flex-col gap-5">
<p className="label-md text-outline">Built with</p>
<p className="label-md text-outline">{t('labels.builtWith')}</p>
<div className="flex flex-wrap gap-2">
{project.techStack.map((tech) => (
<span
@@ -339,20 +329,19 @@ export default async function CaseStudyPage({ params }: Props) {
<div className="absolute -top-3 -right-3" aria-hidden="true">
<CornerBracket size={24} position="top-right" color="var(--color-teal)" />
</div>
<p className="label-md text-primary px-4">Your Turn</p>
<p className="label-md text-primary px-4">{t('labels.yourTurn')}</p>
</div>
<h2 className="font-serif font-semibold text-on-surface text-3xl md:text-4xl leading-[1.1] tracking-[-0.02em]">
Ready to build something like this?
{t('labels.ctaTitle')}
</h2>
<p className="text-outline text-lg leading-relaxed max-w-xl">
Every project starts with a conversation. Tell us what you&rsquo;re working on and
we&rsquo;ll figure out the best way to bring it to life.
{t('labels.ctaSubtitle')}
</p>
<Button variant="primary" size="lg" arrow href="/#configure">
Start your project
{t('labels.ctaButton')}
</Button>
</div>

View File

@@ -156,9 +156,12 @@ When site analysis data is provided in the context, you MUST include a dedicated
- Explain how the proposed solution addresses each issue found
This section demonstrates that LetsBe has already begun analyzing the client's situation before the first call. Never invent data not present in the context — only reference what the analysis actually returned.`;
const langInstruction = body.locale === 'fr'
? '\n\nIMPORTANT: Write the entire brief in French. All headings, body text, and next steps must be in French.'
: '';
const langInstructions: Record<string, string> = {
fr: '\n\nIMPORTANT: Write the entire brief in French. All headings, body text, and next steps must be in French.',
it: '\n\nIMPORTANT: Write the entire brief in Italian. All headings, body text, and next steps must be in Italian.',
es: '\n\nIMPORTANT: Write the entire brief in Spanish. All headings, body text, and next steps must be in Spanish.',
};
const langInstruction = langInstructions[body.locale ?? ''] ?? '';
const userPrompt = `Generate a personalized project brief for the following prospect. The brief should:
1. Address the client by first name (${displayName})
@@ -221,7 +224,7 @@ ${context}`;
function generateFallbackBrief(body: ConfigureRequestBody): string {
const { services, aiEnabled, aiTypes, industry, scope, timeline, name, company } = body;
const isFr = body.locale === 'fr';
const locale = body.locale ?? 'en';
const SERVICE_NAMES_FR: Record<string, string> = {
web: 'Design & Développement Web',
@@ -246,70 +249,170 @@ function generateFallbackBrief(body: ConfigureRequestBody): string {
exploring: 'en phase d\'exploration',
};
const svcNames = isFr ? SERVICE_NAMES_FR : SERVICE_NAMES;
const indNames = isFr ? INDUSTRY_NAMES_FR : INDUSTRY_NAMES;
const tlNames = isFr ? TIMELINE_NAMES_FR : TIMELINE_NAMES;
const SERVICE_NAMES_IT: Record<string, string> = {
web: 'Web Design & Sviluppo',
systems: 'Software Su Misura',
infrastructure: 'Infrastruttura Privata',
};
const INDUSTRY_NAMES_IT: Record<string, string> = {
maritime: 'Marittimo & Nautica', hospitality: 'Ospitalità', technology: 'Tecnologia',
realestate: 'Immobiliare', finance: 'Finanza', ngo: 'ONG & No-Profit', other: 'Altro',
};
const TIMELINE_NAMES_IT: Record<string, string> = {
asap: 'il prima possibile', '1-3months': '13 mesi', '3-6months': '36 mesi', exploring: 'in fase di esplorazione',
};
const SERVICE_NAMES_ES: Record<string, string> = {
web: 'Diseño & Desarrollo Web',
systems: 'Software a Medida',
infrastructure: 'Infraestructura Privada',
};
const INDUSTRY_NAMES_ES: Record<string, string> = {
maritime: 'Marítimo & Náutico', hospitality: 'Hostelería', technology: 'Tecnología',
realestate: 'Inmobiliario', finance: 'Finanzas', ngo: 'ONG & Sin Ánimo de Lucro', other: 'Otro',
};
const TIMELINE_NAMES_ES: Record<string, string> = {
asap: 'lo antes posible', '1-3months': '13 meses', '3-6months': '36 meses', exploring: 'en fase de exploración',
};
const svcMap: Record<string, Record<string, string>> = { fr: SERVICE_NAMES_FR, it: SERVICE_NAMES_IT, es: SERVICE_NAMES_ES };
const indMap: Record<string, Record<string, string>> = { fr: INDUSTRY_NAMES_FR, it: INDUSTRY_NAMES_IT, es: INDUSTRY_NAMES_ES };
const tlMap: Record<string, Record<string, string>> = { fr: TIMELINE_NAMES_FR, it: TIMELINE_NAMES_IT, es: TIMELINE_NAMES_ES };
const svcNames = svcMap[locale] ?? SERVICE_NAMES;
const indNames = indMap[locale] ?? INDUSTRY_NAMES;
const tlNames = tlMap[locale] ?? TIMELINE_NAMES;
const serviceNames = services.map((s) => svcNames[s] ?? s);
const joiner = isFr ? ' et ' : ' and ';
const servicesList = serviceNames.length <= 2
? serviceNames.join(joiner)
: `${serviceNames.slice(0, -1).join(', ')}${isFr ? ' et ' : ', and '}${serviceNames[serviceNames.length - 1]}`;
const industryLabel = industry ? indNames[industry] ?? industry : (isFr ? 'votre secteur' : 'your industry');
const displayCompany = company.trim() || (isFr ? 'votre organisation' : 'your organization');
const displayName = name.split(' ')[0] || (isFr ? 'bonjour' : 'there');
const joiners: Record<string, { and: string; commaAnd: string }> = {
fr: { and: ' et ', commaAnd: ' et ' },
it: { and: ' e ', commaAnd: ' e ' },
es: { and: ' y ', commaAnd: ' y ' },
};
const j = joiners[locale] ?? { and: ' and ', commaAnd: ', and ' };
const servicesList = serviceNames.length <= 2
? serviceNames.join(j.and)
: `${serviceNames.slice(0, -1).join(', ')}${j.commaAnd}${serviceNames[serviceNames.length - 1]}`;
const industryFallbacks: Record<string, string> = { fr: 'votre secteur', it: 'il tuo settore', es: 'tu sector' };
const companyFallbacks: Record<string, string> = { fr: 'votre organisation', it: 'la tua organizzazione', es: 'tu organización' };
const nameFallbacks: Record<string, string> = { fr: 'bonjour', it: 'ciao', es: 'hola' };
const industryLabel = industry ? indNames[industry] ?? industry : (industryFallbacks[locale] ?? 'your industry');
const displayCompany = company.trim() || (companyFallbacks[locale] ?? 'your organization');
const displayName = name.split(' ')[0] || (nameFallbacks[locale] ?? 'there');
const timelineFallbacks: Record<string, string> = {
fr: 'un calendrier à convenir', it: 'un calendario da definire', es: 'un calendario a convenir',
};
const timelineStr = timeline
? tlNames[timeline]?.toLowerCase() ?? (isFr ? 'un calendrier à convenir' : 'a timeline to be agreed upon')
: (isFr ? 'un calendrier à convenir' : 'a timeline to be agreed upon');
? tlNames[timeline]?.toLowerCase() ?? (timelineFallbacks[locale] ?? 'a timeline to be agreed upon')
: (timelineFallbacks[locale] ?? 'a timeline to be agreed upon');
const hasWeb = services.includes('web');
const hasSystems = services.includes('systems');
const hasInfra = services.includes('infrastructure');
let sections = '';
if (isFr) {
// Build sections per locale
const sectionTemplates: Record<string, () => string> = {
fr: () => {
let s = '';
if (hasWeb) {
sections += `\n**Design & Développement Web**\nNous concevrons et développerons un site web sur mesure pour ${displayCompany} — sans templates, sans constructeurs de pages. Moderne, responsive, rapide et optimisé pour le référencement dès le premier jour.\n`;
s += `\n**Design & Développement Web**\nNous concevrons et développerons un site web sur mesure pour ${displayCompany} — sans templates, sans constructeurs de pages. Moderne, responsive, rapide et optimisé pour le référencement dès le premier jour.\n`;
}
if (hasSystems) {
sections += `\n**Logiciels Sur Mesure**\nNous développerons un système conçu pour correspondre exactement au fonctionnement de ${displayCompany} — modèle de données personnalisé, accès par rôles et intégrations avec vos outils existants.\n`;
s += `\n**Logiciels Sur Mesure**\nNous développerons un système conçu pour correspondre exactement au fonctionnement de ${displayCompany} — modèle de données personnalisé, accès par rôles et intégrations avec vos outils existants.\n`;
}
if (hasInfra) {
sections += `\n**Infrastructure Privée**\nNous mettrons en place un environnement serveur dédié pour ${displayCompany} avec email, stockage cloud et outils métier que vous possédez et contrôlez entièrement.\n`;
s += `\n**Infrastructure Privée**\nNous mettrons en place un environnement serveur dédié pour ${displayCompany} avec email, stockage cloud et outils métier que vous possédez et contrôlez entièrement.\n`;
}
if (aiEnabled && aiTypes.length > 0) {
const aiLabels = aiTypes.map((t) => AI_TYPE_NAMES[t] ?? t).join(', ');
sections += `\n**Intégration IA**\nNous intégrerons ${aiLabels.toLowerCase()} dans vos systèmes — en profondeur, pas en surface. L'approche exacte sera définie lors de la phase de découverte.\n`;
s += `\n**Intégration IA**\nNous intégrerons ${aiLabels.toLowerCase()} dans vos systèmes — en profondeur, pas en surface. L'approche exacte sera définie lors de la phase de découverte.\n`;
} else if (aiEnabled) {
sections += `\n**Intégration IA**\nNous intégrerons l'IA dans vos systèmes — en profondeur, pas en surface. L'approche exacte sera définie lors de la phase de découverte.\n`;
s += `\n**Intégration IA**\nNous intégrerons l'IA dans vos systèmes — en profondeur, pas en surface. L'approche exacte sera définie lors de la phase de découverte.\n`;
}
if (scope?.trim()) {
sections += `\n**Vos Objectifs**\nVous avez partagé : "${scope.trim()}" — nous orienterons nos sessions de découverte autour de ces priorités.\n`;
s += `\n**Vos Objectifs**\nVous avez partagé : "${scope.trim()}" — nous orienterons nos sessions de découverte autour de ces priorités.\n`;
}
} else {
return s;
},
it: () => {
let s = '';
if (hasWeb) {
sections += `\n**Web Design & Development**\nWe'll design and build a custom website for ${displayCompany} from scratch — no templates, no page builders. Modern, responsive, fast, and optimized for search engines from day one.\n`;
s += `\n**Web Design & Sviluppo**\nProgetteremo e svilupperemo un sito web su misura per ${displayCompany} da zero — nessun template, nessun page builder. Moderno, responsive, veloce e ottimizzato per i motori di ricerca fin dal primo giorno.\n`;
}
if (hasSystems) {
sections += `\n**Custom Software**\nWe'll build a purpose-made system tailored to how ${displayCompany} actually operates — custom data model, role-based access, and integrations with your existing tools.\n`;
s += `\n**Software Su Misura**\nRealizzaremo un sistema progettato su misura per come opera ${displayCompany} — modello dati personalizzato, accesso basato sui ruoli e integrazioni con i tuoi strumenti esistenti.\n`;
}
if (hasInfra) {
sections += `\n**Private Infrastructure**\nWe'll set up a dedicated server environment for ${displayCompany} with email, cloud storage, and business tools that you fully own and control.\n`;
s += `\n**Infrastruttura Privata**\nConfigureremo un ambiente server dedicato per ${displayCompany} con email, cloud storage e strumenti aziendali che possiedi e controlli interamente.\n`;
}
if (aiEnabled && aiTypes.length > 0) {
const aiLabels = aiTypes.map((t) => AI_TYPE_NAMES[t] ?? t).join(', ');
sections += `\n**AI Integration**\nWe'll layer ${aiLabels.toLowerCase()} into your systemsdeeply integrated, not bolted on. The exact approach will be scoped during discovery.\n`;
s += `\n**Integrazione IA**\nIntegreremo ${aiLabels.toLowerCase()} nei tuoi sistemiin profondità, non in superficie. L'approccio esatto sarà definito durante la fase di scoperta.\n`;
} else if (aiEnabled) {
sections += `\n**AI Integration**\nWe'll layer AI integration into your systemsdeeply integrated, not bolted on. The exact approach will be scoped during discovery.\n`;
s += `\n**Integrazione IA**\nIntegreremo l'IA nei tuoi sistemiin profondità, non in superficie. L'approccio esatto sarà definito durante la fase di scoperta.\n`;
}
if (scope?.trim()) {
sections += `\n**Your Goals**\nYou shared: "${scope.trim()}" — we'll frame our discovery sessions around these priorities.\n`;
s += `\n**I Tuoi Obiettivi**\nHai condiviso: "${scope.trim()}" — struttureremo le nostre sessioni di scoperta attorno a queste priorità.\n`;
}
return s;
},
es: () => {
let s = '';
if (hasWeb) {
s += `\n**Diseño & Desarrollo Web**\nDiseñaremos y desarrollaremos un sitio web a medida para ${displayCompany} desde cero — sin plantillas, sin constructores de páginas. Moderno, responsive, rápido y optimizado para motores de búsqueda desde el primer día.\n`;
}
if (hasSystems) {
s += `\n**Software a Medida**\nDesarrollaremos un sistema diseñado específicamente para cómo opera ${displayCompany} — modelo de datos personalizado, acceso basado en roles e integraciones con tus herramientas existentes.\n`;
}
if (hasInfra) {
s += `\n**Infraestructura Privada**\nConfiguraremos un entorno de servidor dedicado para ${displayCompany} con correo electrónico, almacenamiento en la nube y herramientas empresariales que posees y controlas completamente.\n`;
}
if (aiEnabled && aiTypes.length > 0) {
const aiLabels = aiTypes.map((t) => AI_TYPE_NAMES[t] ?? t).join(', ');
s += `\n**Integración IA**\nIntegraremos ${aiLabels.toLowerCase()} en tus sistemas — de forma profunda, no superficial. El enfoque exacto se definirá durante la fase de descubrimiento.\n`;
} else if (aiEnabled) {
s += `\n**Integración IA**\nIntegraremos la IA en tus sistemas — de forma profunda, no superficial. El enfoque exacto se definirá durante la fase de descubrimiento.\n`;
}
if (scope?.trim()) {
s += `\n**Tus Objetivos**\nCompartiste: "${scope.trim()}" — orientaremos nuestras sesiones de descubrimiento en torno a estas prioridades.\n`;
}
return s;
},
en: () => {
let s = '';
if (hasWeb) {
s += `\n**Web Design & Development**\nWe'll design and build a custom website for ${displayCompany} from scratch — no templates, no page builders. Modern, responsive, fast, and optimized for search engines from day one.\n`;
}
if (hasSystems) {
s += `\n**Custom Software**\nWe'll build a purpose-made system tailored to how ${displayCompany} actually operates — custom data model, role-based access, and integrations with your existing tools.\n`;
}
if (hasInfra) {
s += `\n**Private Infrastructure**\nWe'll set up a dedicated server environment for ${displayCompany} with email, cloud storage, and business tools that you fully own and control.\n`;
}
if (aiEnabled && aiTypes.length > 0) {
const aiLabels = aiTypes.map((t) => AI_TYPE_NAMES[t] ?? t).join(', ');
s += `\n**AI Integration**\nWe'll layer ${aiLabels.toLowerCase()} into your systems — deeply integrated, not bolted on. The exact approach will be scoped during discovery.\n`;
} else if (aiEnabled) {
s += `\n**AI Integration**\nWe'll layer AI integration into your systems — deeply integrated, not bolted on. The exact approach will be scoped during discovery.\n`;
}
if (scope?.trim()) {
s += `\n**Your Goals**\nYou shared: "${scope.trim()}" — we'll frame our discovery sessions around these priorities.\n`;
}
return s;
},
};
if (isFr) {
const sections = (sectionTemplates[locale] ?? sectionTemplates['en'])();
if (locale === 'fr') {
return `**Brief Projet pour ${displayCompany}**
Préparé pour : ${name}
Date : ${new Date().toLocaleDateString('fr-FR', { year: 'numeric', month: 'long', day: 'numeric' })}
@@ -341,6 +444,70 @@ Au plaisir de construire quelque chose de formidable ensemble.
— L'équipe LetsBe`;
}
if (locale === 'it') {
return `**Brief Progetto per ${displayCompany}**
Preparato per: ${name}
Data: ${new Date().toLocaleDateString('it-IT', { year: 'numeric', month: 'long', day: 'numeric' })}
---
**Panoramica**
Ciao ${displayName}, in base al tuo interesse per ${servicesList} nel settore ${industryLabel}, ecco un brief preliminare per guidare la nostra prima conversazione.
Affronteremo questo come un progetto unificato — ogni componente che lavora insieme, interamente di tua proprietà e sotto il tuo controllo.
${sections}
**Il Nostro Approccio**
Iniziamo con una fase di Scoperta (23 sessioni) per comprendere le tue esigenze prima di scrivere una sola riga di codice.
**Tempistiche**
Consegna prevista: ${timelineStr}. Una roadmap dettagliata seguirà la fase di Scoperta.
**Prossimi Passi**
1. Prenota una chiamata introduttiva gratuita di 30 minuti
2. Ti invieremo un documento di scoping dettagliato entro 48 ore
3. La Scoperta inizia — senza impegno
Non vediamo l'ora di costruire qualcosa di straordinario insieme.
— Il Team LetsBe`;
}
if (locale === 'es') {
return `**Brief de Proyecto para ${displayCompany}**
Preparado para: ${name}
Fecha: ${new Date().toLocaleDateString('es-ES', { year: 'numeric', month: 'long', day: 'numeric' })}
---
**Resumen**
Hola ${displayName}, basándonos en tu interés en ${servicesList} para el sector ${industryLabel}, aquí tienes un brief preliminar para guiar nuestra primera conversación.
Abordaremos esto como un proyecto unificado — cada componente trabajando en conjunto, totalmente de tu propiedad y bajo tu control.
${sections}
**Nuestro Enfoque**
Comenzamos con una fase de Descubrimiento (23 sesiones) para comprender tus requisitos antes de escribir cualquier línea de código.
**Plazo**
Entrega objetivo: ${timelineStr}. Una hoja de ruta detallada seguirá a la fase de Descubrimiento.
**Próximos Pasos**
1. Reserva una llamada introductoria gratuita de 30 minutos
2. Te enviaremos un documento de alcance detallado en 48 horas
3. El Descubrimiento comienza — sin compromiso
Con ganas de construir algo extraordinario juntos.
— El Equipo LetsBe`;
}
return `**Project Brief for ${displayCompany}**
Prepared for: ${name}
Date: ${new Date().toLocaleDateString('en-GB', { year: 'numeric', month: 'long', day: 'numeric' })}

View File

@@ -35,7 +35,8 @@ export async function POST(request: NextRequest) {
rateLimitMap.set(ip, Date.now());
const { locale } = (await request.json()) as { locale?: string };
const result = generateEphemeralToken(locale === 'fr' ? 'fr' : 'en');
const supportedLocales = ['en', 'fr', 'it', 'es'];
const result = generateEphemeralToken(supportedLocales.includes(locale ?? '') ? locale! : 'en');
return NextResponse.json({
success: true,

View File

@@ -17,6 +17,9 @@ export default function sitemap(): MetadataRoute.Sitemap {
languages: {
en: `${BASE_URL}${route}`,
fr: `${BASE_URL}/fr${route}`,
it: `${BASE_URL}/it${route}`,
es: `${BASE_URL}/es${route}`,
'x-default': `${BASE_URL}${route}`,
},
},
}))
@@ -30,6 +33,9 @@ export default function sitemap(): MetadataRoute.Sitemap {
languages: {
en: `${BASE_URL}/work/${slug}`,
fr: `${BASE_URL}/fr/work/${slug}`,
it: `${BASE_URL}/it/work/${slug}`,
es: `${BASE_URL}/es/work/${slug}`,
'x-default': `${BASE_URL}/work/${slug}`,
},
},
}))

View File

@@ -259,7 +259,7 @@ export default function VoiceAgent({ locale, onComplete }: VoiceAgentProps) {
style={{ background: 'linear-gradient(135deg, #006494, #5BA4D9)' }}
>
<Mic size={16} />
{locale === 'fr' ? 'Démarrer la conversation' : 'Start Conversation'}
{t('voice.startConversation')}
</button>
)}

View File

@@ -115,11 +115,20 @@ export default function Nav() {
}
}, [pathname])
const otherLocale = locales.find((l) => l !== currentLocale) ?? 'fr'
const [localeMenuOpen, setLocaleMenuOpen] = useState(false)
const LOCALE_DISPLAY: Record<string, { flag: string; label: string; short: string }> = {
en: { flag: '🇬🇧', label: 'English', short: 'EN' },
fr: { flag: '🇫🇷', label: 'Français', short: 'FR' },
it: { flag: '🇮🇹', label: 'Italiano', short: 'IT' },
es: { flag: '🇪🇸', label: 'Español', short: 'ES' },
}
const isHomePage = pathname === '/'
function handleLocaleSwitch() {
router.replace(pathname as any, { locale: otherLocale as any })
function handleLocaleSwitch(targetLocale: string) {
router.replace(pathname as any, { locale: targetLocale as any })
setLocaleMenuOpen(false)
}
// Prevent body scroll when mobile menu is open
@@ -183,15 +192,59 @@ export default function Nav() {
{/* ── Desktop right controls ── */}
<div className="hidden lg:flex items-center gap-4 shrink-0">
{/* Language toggle */}
{/* Language dropdown */}
<div className="relative">
<button
onClick={handleLocaleSwitch}
onClick={() => setLocaleMenuOpen((prev) => !prev)}
className="label-md text-on-surface/60 hover:text-on-surface transition-colors duration-200 px-2 py-1 rounded focus-visible:outline-2 focus-visible:outline-primary focus-visible:outline-offset-2"
aria-label={`Switch to ${otherLocale === 'fr' ? 'French' : 'English'}`}
aria-label="Switch language"
aria-expanded={localeMenuOpen}
aria-haspopup="listbox"
>
{otherLocale.toUpperCase()}
{LOCALE_DISPLAY[currentLocale]?.short ?? currentLocale.toUpperCase()}
</button>
{/* Transparent overlay to close on outside click */}
{localeMenuOpen && (
<div
className="fixed inset-0 z-[40]"
aria-hidden="true"
onClick={() => setLocaleMenuOpen(false)}
/>
)}
<AnimatePresence>
{localeMenuOpen && (
<motion.ul
role="listbox"
aria-label="Select language"
className="absolute right-0 top-full mt-2 z-[41] bg-surface-high rounded-xl shadow-lg border border-outline-variant/20 overflow-hidden min-w-[140px]"
initial={{ opacity: 0, y: -6, scale: 0.97 }}
animate={{ opacity: 1, y: 0, scale: 1 }}
exit={{ opacity: 0, y: -6, scale: 0.97 }}
transition={{ duration: 0.18, ease: [0.25, 0.46, 0.45, 0.94] }}
>
{locales
.filter((l) => l !== currentLocale)
.map((l) => {
const display = LOCALE_DISPLAY[l]
return (
<li key={l} role="option" aria-selected={false}>
<button
onClick={() => handleLocaleSwitch(l)}
className="w-full flex items-center gap-2.5 px-4 py-2.5 label-md text-on-surface/70 hover:text-on-surface hover:bg-surface-low transition-colors duration-150 text-left"
>
<span aria-hidden="true">{display?.flag}</span>
<span>{display?.label}</span>
</button>
</li>
)
})}
</motion.ul>
)}
</AnimatePresence>
</div>
{/* Start a Project CTA */}
<a
href="#configure"
@@ -207,7 +260,7 @@ export default function Nav() {
{/* ── Mobile hamburger ── */}
<button
className="lg:hidden p-2 -mr-2 text-on-surface focus-visible:outline-2 focus-visible:outline-primary focus-visible:outline-offset-2 rounded"
onClick={() => setMobileOpen(true)}
onClick={() => { setMobileOpen(true); setLocaleMenuOpen(false) }}
aria-label="Open navigation menu"
aria-expanded={mobileOpen}
aria-controls="mobile-menu"
@@ -300,16 +353,27 @@ export default function Nav() {
{/* Bottom controls */}
<div className="px-6 pb-8 pt-4 flex flex-col gap-3">
{/* Language toggle */}
{/* Language options */}
<div className="flex flex-col gap-1">
{locales
.filter((l) => l !== currentLocale)
.map((l) => {
const display = LOCALE_DISPLAY[l]
return (
<button
key={l}
onClick={() => {
handleLocaleSwitch()
handleLocaleSwitch(l)
setMobileOpen(false)
}}
className="w-full py-3 label-md text-on-surface/60 hover:text-on-surface transition-colors duration-200 text-left focus-visible:outline-2 focus-visible:outline-primary focus-visible:outline-offset-2 rounded"
className="w-full py-2.5 label-md text-on-surface/60 hover:text-on-surface transition-colors duration-200 text-left focus-visible:outline-2 focus-visible:outline-primary focus-visible:outline-offset-2 rounded flex items-center gap-2.5"
>
{otherLocale === 'fr' ? '🇫🇷 Français' : '🇬🇧 English'}
<span aria-hidden="true">{display?.flag}</span>
<span>{display?.label}</span>
</button>
)
})}
</div>
{/* CTA */}
<a

View File

@@ -1,6 +1,7 @@
'use client';
import { motion } from 'framer-motion';
import { useTranslations } from 'next-intl';
import { Users, MessageCircle, BarChart3 } from 'lucide-react';
import { cn } from '@/lib/utils';
import {
@@ -115,6 +116,7 @@ function AICapabilityCard({ capability }: { capability: AiCapability }) {
// ─── Component ─────────────────────────────────────────────────────────────────
export default function AILayer({ capabilities }: AILayerProps) {
const t = useTranslations('servicesPage.ai')
return (
<section
id="ai-automation"
@@ -137,7 +139,7 @@ export default function AILayer({ capabilities }: AILayerProps) {
variants={revealVariants}
className="label-md text-primary mb-4"
>
Intelligent Layer
{t('eyebrow')}
</motion.span>
{/* Heading */}
@@ -146,7 +148,7 @@ export default function AILayer({ capabilities }: AILayerProps) {
variants={revealVariants}
className="font-serif font-semibold tracking-headline text-white text-4xl md:text-5xl max-w-2xl leading-[1.1]"
>
AI Built Into Everything
{t('title')}
</motion.h2>
{/* Vertical line */}
@@ -163,7 +165,7 @@ export default function AILayer({ capabilities }: AILayerProps) {
className="font-serif italic text-xl leading-relaxed max-w-xl"
style={{ color: 'rgba(255,255,255,0.75)' }}
>
Your platform, made smarter.
{t('subtitle')}
</motion.p>
{/* Context paragraph */}
@@ -172,10 +174,7 @@ export default function AILayer({ capabilities }: AILayerProps) {
className="mt-5 text-[0.9375rem] leading-relaxed max-w-2xl"
style={{ color: 'rgba(255,255,255,0.5)' }}
>
We integrate AI directly into the websites and software we build
for you. Not as a buzzword or an add-on as practical features
that save your team time and give your customers a better
experience.
{t('description')}
</motion.p>
</motion.div>
@@ -201,7 +200,7 @@ export default function AILayer({ capabilities }: AILayerProps) {
className="mt-10 text-center text-xs uppercase tracking-widest"
style={{ color: 'rgba(255,255,255,0.25)' }}
>
Every AI feature is tailored to your business your data stays on your servers
{t('bottomNote')}
</motion.p>
</div>

View File

@@ -1,6 +1,7 @@
'use client';
import { motion } from 'framer-motion';
import { useTranslations } from 'next-intl';
import { ArrowRight } from 'lucide-react';
import { cn } from '@/lib/utils';
import {
@@ -27,6 +28,7 @@ const decorLineVariants = {
// ─── Component ─────────────────────────────────────────────────────────────────
export default function ServicesCTA() {
const t = useTranslations('servicesPage.cta')
return (
<section
className="bg-surface-low py-24"
@@ -90,22 +92,21 @@ export default function ServicesCTA() {
{/* Eyebrow */}
<ScrollReveal variant="fadeUp">
<span className="label-md text-primary">
Let&apos;s Talk
{t('eyebrow')}
</span>
</ScrollReveal>
{/* Heading */}
<ScrollReveal variant="fadeUp" delay={0.08}>
<h2 className="font-serif font-semibold tracking-headline text-on-surface text-4xl md:text-5xl max-w-2xl leading-[1.1]">
Ready to get started?
{t('title')}
</h2>
</ScrollReveal>
{/* Subtitle */}
<ScrollReveal variant="fadeUp" delay={0.16}>
<p className="text-lg text-outline leading-relaxed max-w-xl">
Walk through a few questions and we&apos;ll put together a project
brief tailored to you no commitment required, just clarity.
{t('subtitle')}
</p>
</ScrollReveal>
@@ -118,14 +119,14 @@ export default function ServicesCTA() {
size="lg"
arrow
>
Start Your Project
{t('primary')}
</Button>
<Button
href="mailto:hello@letsbe.biz"
variant="secondary"
size="lg"
>
hello@letsbe.biz
{t('email')}
</Button>
</div>
</ScrollReveal>
@@ -133,7 +134,7 @@ export default function ServicesCTA() {
{/* Reassurance */}
<ScrollReveal variant="fadeIn" delay={0.3}>
<p className="text-sm text-outline/60 mt-1">
No commitment required just a conversation about what&apos;s possible.
{t('reassurance')}
</p>
</ScrollReveal>

View File

@@ -1,6 +1,7 @@
'use client';
import { motion } from 'framer-motion';
import { useTranslations } from 'next-intl';
import { staggerContainer, revealVariants, viewportOnce } from '@/lib/animations';
// ─── Animation variants ────────────────────────────────────────────────────────
@@ -45,6 +46,7 @@ const ruleVariants = {
// ─── Component ─────────────────────────────────────────────────────────────────
export default function ServicesHero() {
const t = useTranslations('servicesPage.hero')
return (
<section
className="bg-surface pt-32 pb-20"
@@ -62,7 +64,7 @@ export default function ServicesHero() {
variants={eyebrowVariants}
className="label-md text-primary mb-5"
>
Our Services
{t('eyebrow')}
</motion.span>
{/* Headline */}
@@ -70,8 +72,8 @@ export default function ServicesHero() {
variants={headlineVariants}
className="font-serif font-semibold tracking-headline text-on-surface text-5xl md:text-6xl lg:text-7xl max-w-4xl leading-[1.05]"
>
Everything your business{' '}
<span className="text-gradient">needs online.</span>
{t('title')}{' '}
<span className="text-gradient">{t('titleAccent')}</span>
</motion.h1>
{/* Subtitle */}
@@ -79,9 +81,7 @@ export default function ServicesHero() {
variants={subtitleVariants}
className="mt-6 text-lg text-outline leading-relaxed max-w-2xl"
>
We design custom websites, build purpose-built software, and manage
the infrastructure behind it all one team, one standard of
quality, nothing outsourced.
{t('subtitle')}
</motion.p>
{/* Decorative rule */}

View File

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

View File

@@ -202,7 +202,8 @@
"contactConfirmButton": "That's correct",
"reconnect": "Reconnect",
"connectionLost": "Connection lost. Your conversation is saved.",
"briefComplete": "Brief complete"
"briefComplete": "Brief complete",
"startConversation": "Start Conversation"
},
"privacy": "Your information is private and will never be shared.",
"generateBrief": "Generate My Brief",
@@ -267,11 +268,11 @@
},
"comingSoonProjects": {
"riviera": {
"title": "Confidential Riviera Project",
"title": "Real Estate Management Platform",
"subtitle": "Coming Soon"
},
"sophia": {
"title": "Sophia Antipolis AI Startup",
"title": "Enterprise SaaS — Austin, TX",
"subtitle": "Launching Q4"
}
}
@@ -318,5 +319,153 @@
},
"privacy": "Privacy Policy",
"terms": "Terms of Service"
},
"aboutPage": {
"hero": {
"eyebrow": "About LetsBe.",
"title": "Great businesses deserve great digital partners.",
"subtitle": "We design and build custom websites, software, and digital platforms for businesses that care about quality — and want a team that does too."
},
"story": {
"eyebrow": "Our Story",
"title": "Built for businesses like yours.",
"p1": "LetsBe. started with a simple belief: that ambitious businesses deserve digital tools as carefully considered as the work they do. Not templates. Not off-the-shelf platforms. Real design and engineering, built from scratch.",
"p2": "Our early clients were founders and operators who needed more than a website — they needed a technical partner who could design, build, host, and maintain everything under one roof. Those projects shaped how we work today.",
"p3": "We build platforms meant to be owned, not rented. We document everything, we hand over codebases that outlast the engagement, and we never lock clients into systems they can't leave. That's not a feature — it's how we think business should work.",
"quote": "Build fewer things. Build them better. Build them to last.",
"quoteAttrib": "LetsBe. founding principle"
},
"pillars": {
"eyebrow": "Our Beliefs",
"title": "What We Believe",
"subtitle": "Three principles behind every project we take on.",
"craftsmanship": {
"title": "Craftsmanship First",
"description": "The gap between a website that works and one that lasts is craft. We sweat the typography, the transitions, the performance, the edge cases. Every interface we ship is something we'd be proud to sign."
},
"oneTeam": {
"title": "One Team, Everything",
"description": "Design, development, hosting, infrastructure — one team, one point of contact, one standard of quality. No handoffs between agencies. No juggling freelancers. Just people who care about the whole thing."
},
"ownership": {
"title": "Built to Be Yours",
"description": "Everything we build, you own — the code, the data, the infrastructure. No vendor lock-in, no platform dependencies. We hand over work that outlasts the engagement."
}
},
"quote": {
"text": "We don't just build websites — we build the foundation your business runs on.",
"attrib": "LetsBe. founding philosophy"
},
"cta": {
"eyebrow": "Work With Us",
"title": "Let's build something together.",
"subtitle": "Whether you have a clear brief or just an early idea, we'd love to talk through what's possible.",
"primary": "Start your project",
"secondary": "Book a call"
}
},
"servicesPage": {
"hero": {
"eyebrow": "Our Services",
"title": "Everything your business",
"titleAccent": "needs online.",
"subtitle": "We design custom websites, build purpose-built software, and manage the infrastructure behind it all — one team, one standard of quality, nothing outsourced."
},
"pillars": [
{
"id": "design-development",
"numeral": "01",
"title": "Web Design & Development",
"description": "Your website shouldn't look like everyone else's — and it shouldn't be built like everyone else's either. We design and build custom websites and web applications from a blank canvas, crafting every layout, every interaction, and every page with intention. The result is fast, search-engine-friendly, and built to grow with your business. Whether you need a marketing site that converts, a web application your team relies on, or an e-commerce platform that scales — we build it from scratch, and we build it to last.",
"features": [
{ "icon": "Palette", "title": "Custom Design", "description": "Every layout, component, and interaction is designed for your brand. No themes, no templates, no shortcuts." },
{ "icon": "Globe", "title": "Web Applications", "description": "Modern, responsive applications built with the latest technologies — fast, reliable, and ready to scale." },
{ "icon": "ShoppingCart", "title": "E-Commerce", "description": "Custom storefronts, checkout flows, and multi-currency platforms built for serious online retail." },
{ "icon": "Zap", "title": "Performance & SEO", "description": "Fast load times, clean code, and search engine optimization built into the foundation — not bolted on after." }
]
},
{
"id": "custom-systems",
"numeral": "02",
"title": "Software & Platforms",
"description": "Off-the-shelf software makes assumptions about how your business works. We don't. When spreadsheets and generic tools stop cutting it, we build the exact system your team needs — designed around your workflow, not someone else's. From CRMs tailored to your sales process, to management platforms that replace three different subscriptions, to integrations that connect your existing tools — everything we build is yours, fully documented, and built to last.",
"features": [
{ "icon": "Database", "title": "CRM & Management Tools", "description": "Relationship and pipeline management built around how your team actually works — not how a generic platform thinks you should." },
{ "icon": "Code2", "title": "Custom Software", "description": "From booking platforms to internal tools to full SaaS products — purpose-built for your business." },
{ "icon": "GitBranch", "title": "Integrations & APIs", "description": "We connect your existing tools and build the bridges between systems so everything works together." },
{ "icon": "Wrench", "title": "Dashboards & Automation", "description": "Admin panels, reporting tools, and workflow automation that give your team an unfair advantage." }
]
},
{
"id": "infrastructure",
"numeral": "03",
"title": "Hosting & Infrastructure",
"description": "Your website and software need a home — and we think you should own it. We set up and manage dedicated servers, email, cloud storage, and all the infrastructure your business runs on. No shared hosting, no mysterious third-party dependencies. You know where your data lives, who has access, and that someone is watching the dashboard around the clock.",
"features": [
{ "icon": "Server", "title": "Dedicated Hosting", "description": "Private servers managed for your business — no shared hosting, no noisy neighbors, no surprises." },
{ "icon": "Shield", "title": "Your Data, Your Control", "description": "You own your data and know exactly where it lives. Full access, full transparency, no lock-in." },
{ "icon": "Lock", "title": "Security & Protection", "description": "Serious security, proactive monitoring, and protection built into your infrastructure from day one." },
{ "icon": "Settings", "title": "Monitoring & Support", "description": "Proactive monitoring, regular updates, and ongoing support so you never have to worry about uptime." }
]
}
],
"ai": {
"eyebrow": "Intelligent Layer",
"title": "AI Built Into Everything",
"subtitle": "Your platform, made smarter.",
"description": "We integrate AI directly into the websites and software we build for you. Not as a buzzword or an add-on — as practical features that save your team time and give your customers a better experience.",
"bottomNote": "Every AI feature is tailored to your business — your data stays on your servers",
"capabilities": [
{ "id": "ai-teammate", "title": "AI Teammate", "description": "An AI assistant built into your workflow — automates repetitive tasks, surfaces the info your team needs, and connects your tools." },
{ "id": "customer-facing-ai", "title": "Customer-Facing AI", "description": "Smart features for your customers — intelligent search, personalized recommendations, and conversational interfaces that work around the clock." },
{ "id": "data-intelligence", "title": "Data Intelligence", "description": "AI that helps you understand your data — automated reports, trend spotting, and insights you can actually act on." }
]
},
"cta": {
"eyebrow": "Let's Talk",
"title": "Ready to get started?",
"subtitle": "Walk through a few questions and we'll put together a project brief tailored to you — no commitment required, just clarity.",
"primary": "Start Your Project",
"email": "hello@letsbe.biz",
"reassurance": "No commitment required — just a conversation about what's possible."
}
},
"caseStudy": {
"labels": {
"challenge": "The Challenge",
"challengeHeading": "The problem we set out to solve",
"approach": "Our Approach",
"approachHeading": "How we thought about it",
"outcome": "The Outcome",
"outcomeHeading": "What we delivered",
"builtWith": "Built with",
"yourTurn": "Your Turn",
"ctaTitle": "Ready to build something like this?",
"ctaSubtitle": "Every project starts with a conversation. Tell us what you're working on and we'll figure out the best way to bring it to life.",
"ctaButton": "Start your project"
},
"projects": {
"monaco-ocean": {
"subtitle": "AI-Powered Judging & Analytics Platform",
"description": "A comprehensive judging and analytics system with advanced AI jury integration for one of the Mediterranean's most prestigious conservation events.",
"challenge": "The Monaco Ocean Protection Challenge needed a modern platform to manage submissions, coordinate judges across time zones, and provide AI-assisted evaluation of conservation proposals — all while maintaining the prestige and security expected of a Monaco institution.",
"approach": "We built a custom platform from the ground up using Next.js and a private PostgreSQL infrastructure. The AI jury module uses natural language processing to pre-screen submissions and generate summary reports, while human judges retain full control over final decisions.",
"outcome": "The platform processed over 200 submissions in its first season, reducing judge workload by 40% through AI-assisted pre-screening. The client praised the system's reliability and the elegance of its interface."
},
"port-nimara": {
"subtitle": "Maritime Digital Hub",
"description": "Scalable digital hub for maritime logistics.",
"challenge": "Port Nimara needed a modern digital presence that could serve as both a marketing website and an operational hub for berth inquiries, event management, and partner communications.",
"approach": "We designed and developed a performant Nuxt.js application with a headless CMS for content management, integrated with their existing maritime scheduling systems via custom API middleware.",
"outcome": "The new platform increased online berth inquiries by 3x and provided the port authority with real-time content management capabilities they previously lacked."
},
"port-amador": {
"subtitle": "Premium Nautical Experience",
"description": "Premium digital experience for elite nautical services.",
"challenge": "Port Amador required a luxury-grade digital experience that matched the exclusivity of their nautical services, with multi-language support and seamless booking integration.",
"approach": "We crafted a bespoke website with cinematic imagery, smooth animations, and an integrated booking flow. The site was built on modern web technologies with a focus on performance and SEO for the competitive luxury maritime market.",
"outcome": "The redesigned platform elevated Port Amador's digital presence to match their premium positioning, with a 60% improvement in page load times and significantly increased organic traffic."
}
}
}
}

471
src/i18n/messages/es.json Normal file
View File

@@ -0,0 +1,471 @@
{
"meta": {
"siteName": "LetsBe.",
"home": {
"title": "LetsBe. | Diseño Web a Medida, Software e Infraestructura Digital",
"description": "Sitios web a medida, software diseñado para ti, integración de IA e infraestructura privada — diseñados, desarrollados y gestionados por un único equipo dedicado."
},
"about": {
"title": "Sobre LetsBe. | Nuestra Historia y Enfoque",
"description": "Un estudio digital fundado en Estados Unidos que crea sitios web, software y plataformas a medida para empresas que apuestan por la calidad."
},
"services": {
"title": "Servicios | LetsBe. — Diseño Web, Software e Infraestructura",
"description": "Diseño web a medida, software dedicado, automatización con IA e infraestructura privada — tres pilares de excelencia digital bajo un mismo techo."
},
"work": {
"monaco-ocean": {
"title": "Monaco Ocean Protection Challenge | LetsBe.",
"description": "Plataforma de evaluación y análisis impulsada por IA para uno de los principales eventos de conservación del Mediterráneo."
},
"port-nimara": {
"title": "Port Nimara — Hub Digital Marítimo | LetsBe.",
"description": "Sitio web a medida y CRM completo para la gestión de clientes potenciales, asignación de amarres y operaciones de la marina."
},
"port-amador": {
"title": "Port Amador — Experiencia Náutica Premium | LetsBe.",
"description": "Sitio web e infraestructura digital privada para una marina premium — almacenamiento en la nube, correo electrónico y gestión de archivos."
}
}
},
"nav": {
"services": "Servicios",
"configure": "Empezar",
"process": "Proceso",
"work": "Proyectos",
"about": "Nosotros",
"startProject": "Iniciar un Proyecto",
"bookCall": "Reservar una Llamada"
},
"hero": {
"title": "Tu sitio web. Tu software. Tu mundo digital {accentWord}.",
"accentWord": "completo",
"subtitle": "Sitios web a medida, software diseñado para ti y la infraestructura para gestionarlo todo - diseñados, desarrollados y mantenidos por un único equipo dedicado.",
"cta": "Inicia tu Proyecto",
"ctaSecondary": "Ver Nuestros Proyectos",
"trust": "La confianza de empresas en todo el mundo"
},
"trustBar": {
"customBuilt": {
"title": "Diseñado Desde Cero",
"description": "Sin plantillas, sin constructores de páginas. Cada sitio se diseña a medida y se desarrolla a mano para tu marca."
},
"privateInfra": {
"title": "Todo es Tuyo",
"description": "Tu código, tus datos, tus servidores. Nosotros lo construimos, tú lo posees - sin ataduras, sin sorpresas."
},
"aiPowered": {
"title": "Un Equipo, De Principio a Fin",
"description": "Sin malabares con freelancers. Un solo equipo gestiona diseño, código, alojamiento y soporte."
},
"rivieraBased": {
"title": "IA Integrada",
"description": "Funcionalidades inteligentes y automatización integradas directamente en tu sitio web y software."
}
},
"services": {
"eyebrow": "Lo Que Hacemos",
"title": "Diseñar. Desarrollar. Crecer.",
"web": {
"title": "Diseño y Desarrollo Web",
"features": ["Diseño Web a Medida", "Desarrollo Responsive", "SEO y Rendimiento", "Gestión de Contenidos"]
},
"systems": {
"title": "Software y Plataformas",
"features": ["Herramientas de Gestión Empresarial", "CRM y Paneles de Control", "Sistemas de Reservas", "Integraciones API"]
},
"infrastructure": {
"title": "Alojamiento e Infraestructura",
"features": ["Servidores Dedicados", "Email y Almacenamiento en la Nube", "Seguridad y Monitorización", "Soporte Continuo"]
},
"aiNarrative": "Y aplicamos IA en todo lo que hacemos - desde funcionalidades inteligentes en tu sitio web hasta la automatización que conecta todas tus herramientas."
},
"configurator": {
"eyebrow": "Empezar",
"title": "Cuéntanos qué necesitas.",
"description": "Responde a unas pocas preguntas y prepararemos un briefing de proyecto personalizado para ti.",
"step1": {
"title": "¿Qué necesitas?",
"subtitle": "Selecciona los servicios que se adaptan a tu proyecto."
},
"step2": {
"title": "Cuéntanos sobre tu proyecto",
"subtitle": "Algunos detalles nos ayudan a preparar el enfoque adecuado."
},
"step3": {
"title": "Casi listo",
"subtitle": "Revisa tus selecciones e indícanos cómo contactarte."
},
"complete": {
"title": "Tu briefing de proyecto está listo",
"subtitle": "Revisa tu bandeja de entrada - hemos enviado un briefing detallado a {email}",
"nextStep": "Siguiente paso: hablemos de tu briefing",
"bookSubtitle": "Reserva una llamada gratuita de 30 minutos para hablar de tu proyecto y los próximos pasos.",
"bookCall": "Reservar una Llamada",
"briefPreview": "Tu briefing de proyecto",
"reachDirectly": "O contáctanos directamente en"
},
"howItWorks": "Cómo funciona",
"noCommitment": "Sin compromiso",
"selectService": "Selecciona al menos un servicio para continuar",
"services": {
"web": {
"title": "Diseño y Desarrollo Web",
"description": "Sitios web y aplicaciones a medida - diseñados desde cero, construidos para rendir y optimizados para que te encuentren."
},
"systems": {
"title": "Software a Medida",
"description": "CRM, plataformas de gestión y herramientas empresariales creadas en torno a cómo trabaja realmente tu equipo."
},
"infrastructure": {
"title": "Infraestructura Privada",
"description": "Alojamiento dedicado, email, almacenamiento en la nube y la infraestructura sobre la que funciona tu negocio - totalmente tuya."
}
},
"aiToggle": "Añadir Integración de IA",
"aiDescription": "Funcionalidades de IA prácticas y automatización integradas directamente en tu sitio web y software.",
"aiTypes": {
"teammate": {
"title": "IA como Compañero de Equipo",
"description": "Un asistente de IA interno que ayuda a tu equipo a trabajar más rápido - automatiza tareas, responde preguntas, conecta tus herramientas."
},
"customer-facing": {
"title": "IA de Cara al Cliente",
"description": "Funcionalidades de IA con las que interactúan tus clientes - búsqueda inteligente, recomendaciones personalizadas, interfaces conversacionales."
},
"data-intelligence": {
"title": "Inteligencia de Datos",
"description": "IA que analiza los datos de tu negocio para extraer insights, tendencias y recomendaciones accionables."
},
"notsure": {
"title": "Aún No Estoy Seguro",
"description": "Sin problema - exploraremos juntos el mejor enfoque de IA durante la fase de descubrimiento."
}
},
"industries": {
"maritime": "Náutica / Yachting",
"hospitality": "Hostelería",
"technology": "Tecnología",
"realestate": "Inmobiliaria",
"finance": "Finanzas",
"ngo": "ONG / Sin Ánimo de Lucro",
"other": "Otro"
},
"timelines": {
"asap": "Lo antes posible",
"1-3months": "13 meses",
"3-6months": "36 meses",
"exploring": "Solo explorando"
},
"fields": {
"industry": "Tu sector",
"scope": "¿Qué quieres conseguir?",
"scopeOptional": "(opcional)",
"scopePlaceholder": "p. ej. Necesitamos reemplazar nuestro sistema de reservas actual y mejorar la experiencia del cliente…",
"timeline": "Plazo",
"name": "Tu nombre",
"company": "Empresa",
"email": "Correo electrónico",
"phone": "Teléfono",
"phoneOptional": "(opcional)",
"contactPreference": "Método de contacto preferido",
"contactEmail": "Email",
"contactPhone": "Teléfono",
"contactWhatsapp": "WhatsApp",
"currentSiteUrl": "Sitio web actual",
"currentSiteUrlOptional": "(opcional)",
"currentSiteUrlPlaceholder": "https://tusitio.com",
"currentSiteThoughts": "Opinión sobre tu sitio actual",
"currentSiteThoughtsPlaceholder": "Qué funciona, qué no, qué te gustaría cambiar..."
},
"summary": {
"heading": "Tus selecciones",
"aiEnhancement": "Mejora con IA"
},
"generating": "Generando",
"generatingSteps": {
"preparingBrief": "Preparando tu briefing",
"analyzingSite": "Analizando tu sitio web actual",
"runningAudit": "Ejecutando auditoría de rendimiento",
"generatingBrief": "Generando tu briefing personalizado"
},
"voice": {
"agentName": "Asistente de proyectos de LetsBe",
"endConversation": "Finalizar Conversación",
"analyzingSite": "Analizando tu sitio...",
"connecting": "Conectando...",
"mute": "Silenciar",
"unmute": "Activar micrófono",
"generatingBrief": "Generando tu briefing...",
"contactConfirm": "¿Es esto correcto?",
"contactEdit": "Editar",
"contactConfirmButton": "Sí, es correcto",
"reconnect": "Reconectar",
"connectionLost": "Conexión perdida. Tu conversación está guardada.",
"briefComplete": "Briefing completado",
"startConversation": "Iniciar conversación"
},
"privacy": "Tu información es privada y nunca será compartida.",
"generateBrief": "Generar Mi Briefing",
"nextStep": "Siguiente Paso",
"back": "Volver",
"startOver": "Empezar de Nuevo",
"errors": {
"general": "Algo salió mal. Por favor, inténtalo de nuevo.",
"network": "Error de red. Comprueba tu conexión e inténtalo de nuevo."
}
},
"discovery": {
"eyebrow": "Vamos a Descubrirlo",
"title": "¿No sabes por dónde empezar?",
"description": "Cuéntanos en qué estás pensando y lo resolveremos juntos. Recibirás un briefing personalizado al final.",
"cta": "Hablemos",
"privacy": "Las conversaciones de voz no se graban ni se almacenan."
},
"process": {
"eyebrow": "Cómo Trabajamos",
"title": "De la Idea al Lanzamiento",
"steps": {
"discovery": {
"title": "Descubrimiento",
"description": "Conocemos tu negocio, tus usuarios y lo que realmente necesitas construir."
},
"strategy": {
"title": "Estrategia y Planificación",
"description": "Definimos la arquitectura, elegimos las herramientas adecuadas y trazamos el plan de desarrollo."
},
"build": {
"title": "Diseño y Desarrollo",
"description": "Tu proyecto toma forma - píxel a píxel, función a función."
},
"launch": {
"title": "Lanzamiento y Soporte",
"description": "Desplegamos, monitorizamos y mantenemos todo funcionando sin problemas."
}
}
},
"work": {
"eyebrow": "Nuestros Proyectos",
"title": "Proyectos Que Hemos Construido",
"readCaseStudy": "Ver Proyecto",
"comingSoon": "Próximamente",
"projects": {
"monaco": {
"title": "Monaco Ocean Protection Challenge",
"description": "Plataforma de evaluación y análisis con filtrado por IA, asignación automática de jueces y revisión inteligente de proyectos para uno de los principales eventos de conservación del Mediterráneo.",
"tags": ["Software a Medida", "Integración de IA"]
},
"portNimara": {
"title": "Port Nimara",
"description": "Sitio web a medida y CRM completo para la gestión de clientes potenciales, asignación de amarres y operaciones de la marina.",
"tags": ["Sitio Web", "Software a Medida"]
},
"portAmador": {
"title": "Port Amador",
"description": "Sitio web e infraestructura digital privada - almacenamiento en la nube, email y gestión de archivos para una marina premium.",
"tags": ["Sitio Web", "Infraestructura"]
}
},
"comingSoonProjects": {
"riviera": {
"title": "Plataforma de Gestión Inmobiliaria",
"subtitle": "Próximamente"
},
"sophia": {
"title": "SaaS Empresarial — Austin, TX",
"subtitle": "Lanzamiento en Q4"
}
}
},
"philosophy": {
"eyebrow": "Por Qué Nosotros",
"title": "Hacemos las cosas de otra manera.",
"subtitle": "La mayoría de las agencias te dan una plantilla y lo llaman personalizado. Creemos que tu negocio merece algo mejor - diseño real, ingeniería real y un equipo que sigue ahí después del lanzamiento.",
"ownership": {
"title": "Construido para que sea Tuyo",
"description": "Todo lo que construimos es tuyo. Tu código, tus datos, tu infraestructura - sin ataduras, sin dependencias de plataformas, sin sorpresas."
},
"craftsmanship": {
"title": "Artesanía por Encima de la Comodidad",
"description": "Escribimos código limpio, hecho a mano y optimizado para velocidad y motores de búsqueda. Sin constructores de páginas, sin temas sobrecargados, sin atajos."
},
"oneTeam": {
"title": "Una Sola Relación",
"description": "Desde el primer diseño hasta el soporte continuo - un equipo que conoce tu negocio de arriba abajo. Sin traspasos, sin briefs perdidos por el camino."
},
"quote": "Construimos tecnología que trabaja para tu negocio - no al revés.",
"foundedLocation": "Matt Ciaccio, Fundador"
},
"cta": {
"eyebrow": "Hablemos",
"title": "¿Listo para construir algo grande?",
"subtitle": "Cuéntanos en qué estás trabajando. Sin presentaciones, sin presión - solo una conversación honesta sobre lo que es posible.",
"cta": "Inicia tu Proyecto",
"configure": "Inicia tu Proyecto",
"email": "hello@letsbe.biz",
"reassurance": "Sin compromiso."
},
"footer": {
"tagline": "Sitios web, software y plataformas digitales a medida - diseñados y desarrollados para empresas que se niegan a conformarse con menos.",
"location": "Fundado en Estados Unidos. Al servicio de clientes en todo el mundo.",
"services": "Servicios",
"studio": "Studio",
"connect": "Contacto",
"serviceLinks": {
"designDev": "Diseño y Desarrollo Web",
"customSystems": "Software a Medida",
"infrastructure": "Infraestructura Privada",
"aiAutomation": "Integración de IA"
},
"privacy": "Política de Privacidad",
"terms": "Términos de Servicio"
},
"aboutPage": {
"hero": {
"eyebrow": "Sobre LetsBe.",
"title": "Las grandes empresas merecen grandes socios digitales.",
"subtitle": "Diseñamos y desarrollamos sitios web, software y plataformas digitales a medida para empresas que apuestan por la calidad — y que buscan un equipo que haga lo mismo."
},
"story": {
"eyebrow": "Nuestra Historia",
"title": "Construido para empresas como la tuya.",
"p1": "LetsBe. nació de una convicción sencilla: las empresas ambiciosas merecen herramientas digitales tan cuidadas como el trabajo que realizan. No plantillas. No plataformas genéricas. Diseño e ingeniería reales, construidos desde cero.",
"p2": "Nuestros primeros clientes eran fundadores y operadores que necesitaban algo más que un sitio web — un socio técnico capaz de diseñar, desarrollar, alojar y mantener todo bajo un mismo techo. Esos proyectos dieron forma a cómo trabajamos hoy.",
"p3": "Construimos plataformas pensadas para ser poseídas, no alquiladas. Documentamos todo, entregamos bases de código que perduran más allá del proyecto y nunca atamos a los clientes a sistemas que no pueden abandonar. Eso no es una característica — es cómo creemos que debería funcionar el negocio.",
"quote": "Construir menos cosas. Construirlas mejor. Construirlas para que duren.",
"quoteAttrib": "Principio fundacional de LetsBe."
},
"pillars": {
"eyebrow": "Nuestras Convicciones",
"title": "En Qué Creemos",
"subtitle": "Tres principios detrás de cada proyecto que emprendemos.",
"craftsmanship": {
"title": "La Artesanía Primero",
"description": "La diferencia entre un sitio web que funciona y uno que perdura es la artesanía. Nos preocupamos por la tipografía, las transiciones, el rendimiento, los casos límite. Cada interfaz que entregamos es algo de lo que nos enorgullecemos firmar."
},
"oneTeam": {
"title": "Un Equipo, Todo",
"description": "Diseño, desarrollo, alojamiento, infraestructura — un solo equipo, un solo punto de contacto, un solo estándar de calidad. Sin traspasos entre agencias. Sin malabarismos con freelancers. Solo personas que se preocupan por el conjunto."
},
"ownership": {
"title": "Construido para que sea Tuyo",
"description": "Todo lo que construimos es tuyo — el código, los datos, la infraestructura. Sin vendor lock-in, sin dependencias de plataformas. Entregamos trabajo que perdura más allá del proyecto."
}
},
"quote": {
"text": "No solo construimos sitios web — construimos los cimientos sobre los que funciona tu negocio.",
"attrib": "Filosofía fundacional de LetsBe."
},
"cta": {
"eyebrow": "Trabaja Con Nosotros",
"title": "Construyamos algo juntos.",
"subtitle": "Tanto si tienes un briefing claro como si solo tienes una idea inicial, nos encantaría hablar sobre lo que es posible.",
"primary": "Inicia tu proyecto",
"secondary": "Reservar una llamada"
}
},
"servicesPage": {
"hero": {
"eyebrow": "Nuestros Servicios",
"title": "Todo lo que tu negocio",
"titleAccent": "necesita en línea.",
"subtitle": "Diseñamos sitios web a medida, desarrollamos software dedicado y gestionamos la infraestructura que lo sustenta todo — un solo equipo, un solo estándar de calidad, nada externalizado."
},
"pillars": [
{
"id": "design-development",
"numeral": "01",
"title": "Diseño y Desarrollo Web",
"description": "Tu sitio web no debería parecerse al de todos los demás — ni estar construido como el de todos los demás. Diseñamos y desarrollamos sitios web y aplicaciones web desde un lienzo en blanco, creando cada layout, cada interacción y cada página con intención. El resultado es rápido, amigable para los motores de búsqueda y construido para crecer con tu negocio. Tanto si necesitas un sitio de marketing que convierte, una aplicación web en la que tu equipo confía, o una plataforma de e-commerce que escala — lo construimos desde cero, y lo construimos para que dure.",
"features": [
{ "icon": "Palette", "title": "Diseño a Medida", "description": "Cada layout, componente e interacción se diseña para tu marca. Sin temas, sin plantillas, sin atajos." },
{ "icon": "Globe", "title": "Aplicaciones Web", "description": "Aplicaciones modernas y responsive desarrolladas con las últimas tecnologías — rápidas, fiables y listas para escalar." },
{ "icon": "ShoppingCart", "title": "E-Commerce", "description": "Tiendas personalizadas, flujos de pago y plataformas multi-divisa construidas para el comercio online serio." },
{ "icon": "Zap", "title": "Rendimiento y SEO", "description": "Tiempos de carga rápidos, código limpio y optimización para motores de búsqueda integrados en los cimientos — no añadidos después." }
]
},
{
"id": "custom-systems",
"numeral": "02",
"title": "Software y Plataformas",
"description": "El software genérico hace suposiciones sobre cómo funciona tu negocio. Nosotros no. Cuando las hojas de cálculo y las herramientas genéricas dejan de ser suficientes, construimos exactamente el sistema que tu equipo necesita — diseñado en torno a tu flujo de trabajo, no al de otra persona. Desde CRM adaptados a tu proceso de ventas, hasta plataformas de gestión que reemplazan tres suscripciones distintas, pasando por integraciones que conectan tus herramientas existentes — todo lo que construimos es tuyo, completamente documentado y construido para durar.",
"features": [
{ "icon": "Database", "title": "CRM y Herramientas de Gestión", "description": "Gestión de relaciones y pipeline construida en torno a cómo trabaja realmente tu equipo — no a cómo cree una plataforma genérica que deberías trabajar." },
{ "icon": "Code2", "title": "Software a Medida", "description": "Desde plataformas de reservas hasta herramientas internas o productos SaaS completos — diseñados específicamente para tu negocio." },
{ "icon": "GitBranch", "title": "Integraciones y APIs", "description": "Conectamos tus herramientas existentes y construimos los puentes entre sistemas para que todo funcione conjuntamente." },
{ "icon": "Wrench", "title": "Paneles y Automatización", "description": "Paneles de administración, herramientas de informes y automatización de flujos de trabajo que le dan a tu equipo una ventaja competitiva." }
]
},
{
"id": "infrastructure",
"numeral": "03",
"title": "Alojamiento e Infraestructura",
"description": "Tu sitio web y tu software necesitan un hogar — y creemos que deberías ser tú quien lo posea. Configuramos y gestionamos servidores dedicados, correo electrónico, almacenamiento en la nube y toda la infraestructura sobre la que funciona tu negocio. Sin alojamiento compartido, sin misteriosas dependencias de terceros. Sabes dónde viven tus datos, quién tiene acceso y que alguien está vigilando el panel de control las 24 horas del día.",
"features": [
{ "icon": "Server", "title": "Alojamiento Dedicado", "description": "Servidores privados gestionados para tu negocio — sin alojamiento compartido, sin vecinos molestos, sin sorpresas." },
{ "icon": "Shield", "title": "Tus Datos, Tu Control", "description": "Posees tus datos y sabes exactamente dónde están. Acceso completo, total transparencia, sin lock-in." },
{ "icon": "Lock", "title": "Seguridad y Protección", "description": "Seguridad seria, monitorización proactiva y protección integrada en tu infraestructura desde el primer día." },
{ "icon": "Settings", "title": "Monitorización y Soporte", "description": "Monitorización proactiva, actualizaciones regulares y soporte continuo para que nunca tengas que preocuparte por el tiempo de actividad." }
]
}
],
"ai": {
"eyebrow": "Capa Inteligente",
"title": "IA Integrada en Todo",
"subtitle": "Tu plataforma, más inteligente.",
"description": "Integramos IA directamente en los sitios web y el software que construimos para ti. No como palabra de moda ni como complemento — como funcionalidades prácticas que ahorran tiempo a tu equipo y ofrecen a tus clientes una mejor experiencia.",
"bottomNote": "Cada funcionalidad de IA se adapta a tu negocio — tus datos permanecen en tus servidores",
"capabilities": [
{ "id": "ai-teammate", "title": "IA como Compañero de Equipo", "description": "Un asistente de IA integrado en tu flujo de trabajo — automatiza tareas repetitivas, saca a la superficie la información que tu equipo necesita y conecta tus herramientas." },
{ "id": "customer-facing-ai", "title": "IA de Cara al Cliente", "description": "Funcionalidades inteligentes para tus clientes — búsqueda inteligente, recomendaciones personalizadas e interfaces conversacionales disponibles las 24 horas." },
{ "id": "data-intelligence", "title": "Inteligencia de Datos", "description": "IA que te ayuda a entender tus datos — informes automatizados, detección de tendencias e insights sobre los que puedes actuar de verdad." }
]
},
"cta": {
"eyebrow": "Hablemos",
"title": "¿Listo para empezar?",
"subtitle": "Responde a unas pocas preguntas y prepararemos un briefing de proyecto personalizado para ti — sin compromiso, solo claridad.",
"primary": "Inicia tu Proyecto",
"email": "hello@letsbe.biz",
"reassurance": "Sin compromiso — solo una conversación sobre lo que es posible."
}
},
"caseStudy": {
"labels": {
"challenge": "El Reto",
"challengeHeading": "El problema que nos propusimos resolver",
"approach": "Nuestro Enfoque",
"approachHeading": "Cómo lo pensamos",
"outcome": "El Resultado",
"outcomeHeading": "Lo que entregamos",
"builtWith": "Desarrollado con",
"yourTurn": "Tu Turno",
"ctaTitle": "¿Listo para construir algo así?",
"ctaSubtitle": "Cada proyecto empieza con una conversación. Cuéntanos en qué estás trabajando y encontraremos la mejor manera de hacerlo realidad.",
"ctaButton": "Inicia tu proyecto"
},
"projects": {
"monaco-ocean": {
"subtitle": "Plataforma de Evaluación y Análisis con IA",
"description": "Un sistema completo de evaluación y análisis con integración avanzada de jurado de IA para uno de los eventos de conservación más prestigiosos del Mediterráneo.",
"challenge": "El Monaco Ocean Protection Challenge necesitaba una plataforma moderna para gestionar las candidaturas, coordinar jueces en distintas zonas horarias y proporcionar una evaluación asistida por IA de las propuestas de conservación — todo ello manteniendo el prestigio y la seguridad que se esperan de una institución monegasca.",
"approach": "Construimos una plataforma personalizada desde cero usando Next.js y una infraestructura PostgreSQL privada. El módulo de jurado de IA utiliza procesamiento del lenguaje natural para pre-seleccionar candidaturas y generar informes de resumen, mientras que los jueces humanos conservan el control total sobre las decisiones finales.",
"outcome": "La plataforma procesó más de 200 candidaturas en su primera temporada, reduciendo la carga de trabajo de los jueces en un 40% gracias a la pre-selección asistida por IA. El cliente elogió la fiabilidad del sistema y la elegancia de su interfaz."
},
"port-nimara": {
"subtitle": "Hub Digital Marítimo",
"description": "Hub digital escalable para logística marítima.",
"challenge": "Port Nimara necesitaba una presencia digital moderna que pudiera funcionar tanto como sitio de marketing como hub operativo para consultas de amarres, gestión de eventos y comunicaciones con socios.",
"approach": "Diseñamos y desarrollamos una aplicación Nuxt.js de alto rendimiento con un CMS headless para la gestión de contenidos, integrada con sus sistemas de planificación marítima existentes a través de middleware API personalizado.",
"outcome": "La nueva plataforma triplicó las consultas de amarres en línea y proporcionó a la autoridad portuaria capacidades de gestión de contenidos en tiempo real de las que antes carecía."
},
"port-amador": {
"subtitle": "Experiencia Náutica Premium",
"description": "Experiencia digital premium para servicios náuticos de élite.",
"challenge": "Port Amador requería una experiencia digital de categoría lujo que estuviera a la altura de la exclusividad de sus servicios náuticos, con soporte multiidioma e integración de reservas sin fricciones.",
"approach": "Creamos un sitio web a medida con imágenes cinematográficas, animaciones fluidas y un flujo de reservas integrado. El sitio se construyó sobre tecnologías web modernas con un enfoque en el rendimiento y el SEO para el competitivo mercado marítimo de lujo.",
"outcome": "La plataforma rediseñada elevó la presencia digital de Port Amador a su posicionamiento premium, con una mejora del 60% en los tiempos de carga de las páginas y un aumento significativo del tráfico orgánico."
}
}
}
}

View File

@@ -202,7 +202,8 @@
"contactConfirmButton": "C'est correct",
"reconnect": "Reconnecter",
"connectionLost": "Connexion perdue. Votre conversation est sauvegardée.",
"briefComplete": "Brief terminé"
"briefComplete": "Brief terminé",
"startConversation": "Démarrer la conversation"
},
"privacy": "Vos informations sont privées et ne seront jamais partagées.",
"generateBrief": "Générer Mon Brief",
@@ -267,11 +268,11 @@
},
"comingSoonProjects": {
"riviera": {
"title": "Projet Confidentiel Riviera",
"title": "Plateforme de Gestion Immobilière",
"subtitle": "Bientôt Disponible"
},
"sophia": {
"title": "Startup IA Sophia Antipolis",
"title": "SaaS Entreprise — Austin, TX",
"subtitle": "Lancement T4"
}
}
@@ -318,5 +319,153 @@
},
"privacy": "Politique de Confidentialité",
"terms": "Conditions d'Utilisation"
},
"aboutPage": {
"hero": {
"eyebrow": "À propos de LetsBe.",
"title": "Les grandes entreprises méritent de grands partenaires digitaux.",
"subtitle": "Nous concevons et développons des sites web, des logiciels et des plateformes digitales sur mesure pour les entreprises qui exigent la qualité — et qui veulent une équipe qui la partage."
},
"story": {
"eyebrow": "Notre Histoire",
"title": "Conçu pour des entreprises comme la vôtre.",
"p1": "LetsBe. est née d'une conviction simple : les entreprises ambitieuses méritent des outils digitaux aussi soigneusement pensés que le travail qu'elles accomplissent. Pas de templates. Pas de plateformes standardisées. Un vrai design et une vraie ingénierie, construits de zéro.",
"p2": "Nos premiers clients étaient des fondateurs et des dirigeants qui avaient besoin de plus qu'un site web — ils avaient besoin d'un partenaire technique capable de concevoir, développer, héberger et maintenir l'ensemble sous un même toit. Ces projets ont façonné notre façon de travailler aujourd'hui.",
"p3": "Nous construisons des plateformes faites pour être possédées, pas louées. Nous documentons tout, nous remettons des bases de code qui perdurent au-delà de la mission, et nous ne verrouillons jamais nos clients dans des systèmes qu'ils ne peuvent pas quitter. Ce n'est pas une fonctionnalité — c'est notre vision des affaires.",
"quote": "Construire moins de choses. Les construire mieux. Les construire pour durer.",
"quoteAttrib": "Principe fondateur de LetsBe."
},
"pillars": {
"eyebrow": "Nos Convictions",
"title": "Ce en quoi nous croyons",
"subtitle": "Trois principes qui guident chaque projet que nous prenons en charge.",
"craftsmanship": {
"title": "L'Artisanat Avant Tout",
"description": "La différence entre un site qui fonctionne et un site qui dure, c'est le soin apporté à sa réalisation. Nous soignons la typographie, les transitions, la performance, les cas limites. Chaque interface que nous livrons est quelque chose dont nous sommes fiers de signer."
},
"oneTeam": {
"title": "Une Équipe, Tout Inclus",
"description": "Design, développement, hébergement, infrastructure — une seule équipe, un seul interlocuteur, un seul niveau d'exigence. Pas de sous-traitance entre agences. Pas de jonglage avec des freelances. Juste des gens qui se soucient de l'ensemble."
},
"ownership": {
"title": "Construit Pour Vous Appartenir",
"description": "Tout ce que nous construisons vous appartient — le code, les données, l'infrastructure. Pas de dépendance fournisseur, pas de contraintes de plateforme. Nous remettons un travail qui perdurera au-delà de notre collaboration."
}
},
"quote": {
"text": "Nous ne construisons pas seulement des sites web — nous construisons les fondations sur lesquelles votre entreprise s'appuie.",
"attrib": "Philosophie fondatrice de LetsBe."
},
"cta": {
"eyebrow": "Travaillez Avec Nous",
"title": "Construisons quelque chose ensemble.",
"subtitle": "Que vous ayez un brief précis ou simplement une idée naissante, nous serions ravis d'explorer ce qui est possible.",
"primary": "Démarrer votre projet",
"secondary": "Réserver un appel"
}
},
"servicesPage": {
"hero": {
"eyebrow": "Nos Services",
"title": "Tout ce dont votre entreprise",
"titleAccent": "a besoin en ligne.",
"subtitle": "Nous concevons des sites web sur mesure, développons des logiciels dédiés et gérons l'infrastructure derrière tout cela — une seule équipe, un seul niveau d'exigence, rien d'externalisé."
},
"pillars": [
{
"id": "design-development",
"numeral": "01",
"title": "Design & Développement Web",
"description": "Votre site web ne devrait pas ressembler à celui de tout le monde — et ne devrait pas être construit comme celui de tout le monde non plus. Nous concevons et développons des sites web et des applications web sur mesure à partir d'une page blanche, en façonnant chaque mise en page, chaque interaction et chaque page avec intention. Le résultat est rapide, optimisé pour les moteurs de recherche, et conçu pour évoluer avec votre entreprise. Que vous ayez besoin d'un site marketing qui convertit, d'une application web sur laquelle votre équipe s'appuie, ou d'une plateforme e-commerce qui passe à l'échelle — nous la construisons de zéro, et nous la construisons pour durer.",
"features": [
{ "icon": "Palette", "title": "Design Sur Mesure", "description": "Chaque mise en page, composant et interaction est conçu pour votre marque. Pas de thèmes, pas de templates, pas de raccourcis." },
{ "icon": "Globe", "title": "Applications Web", "description": "Des applications modernes et responsives développées avec les dernières technologies — rapides, fiables et prêtes à évoluer." },
{ "icon": "ShoppingCart", "title": "E-Commerce", "description": "Boutiques sur mesure, tunnels de commande et plateformes multi-devises conçus pour le commerce en ligne sérieux." },
{ "icon": "Zap", "title": "Performance & SEO", "description": "Des temps de chargement rapides, un code propre et une optimisation pour les moteurs de recherche intégrés dès la conception — pas ajoutés après coup." }
]
},
{
"id": "custom-systems",
"numeral": "02",
"title": "Logiciels & Plateformes",
"description": "Les logiciels standard font des suppositions sur le fonctionnement de votre entreprise. Pas nous. Quand les tableurs et les outils génériques ne suffisent plus, nous développons le système exact dont votre équipe a besoin — conçu autour de votre processus, pas de celui d'un autre. Des CRM adaptés à votre cycle de vente, aux plateformes de gestion qui remplacent trois abonnements différents, en passant par les intégrations qui connectent vos outils existants — tout ce que nous construisons vous appartient, est entièrement documenté et conçu pour durer.",
"features": [
{ "icon": "Database", "title": "CRM & Outils de Gestion", "description": "La gestion des relations et des pipelines construite autour de la façon dont votre équipe travaille réellement — pas selon les schémas d'une plateforme générique." },
{ "icon": "Code2", "title": "Logiciels Sur Mesure", "description": "Des plateformes de réservation aux outils internes en passant par les produits SaaS complets — conçus sur mesure pour votre entreprise." },
{ "icon": "GitBranch", "title": "Intégrations & API", "description": "Nous connectons vos outils existants et construisons les passerelles entre systèmes pour que tout fonctionne ensemble." },
{ "icon": "Wrench", "title": "Tableaux de Bord & Automatisation", "description": "Panneaux d'administration, outils de reporting et automatisation des processus qui donnent à votre équipe un avantage décisif." }
]
},
{
"id": "infrastructure",
"numeral": "03",
"title": "Hébergement & Infrastructure",
"description": "Votre site web et vos logiciels ont besoin d'un chez-soi — et nous pensons que vous devriez en être propriétaire. Nous mettons en place et gérons des serveurs dédiés, l'email, le stockage cloud et toute l'infrastructure sur laquelle votre entreprise fonctionne. Pas d'hébergement mutualisé, pas de dépendances tierces obscures. Vous savez où vivent vos données, qui y a accès, et que quelqu'un surveille le tableau de bord en permanence.",
"features": [
{ "icon": "Server", "title": "Hébergement Dédié", "description": "Des serveurs privés gérés pour votre entreprise — pas d'hébergement mutualisé, pas de voisins encombrants, pas de surprises." },
{ "icon": "Shield", "title": "Vos Données, Votre Contrôle", "description": "Vous possédez vos données et savez exactement où elles se trouvent. Accès complet, transparence totale, sans verrouillage." },
{ "icon": "Lock", "title": "Sécurité & Protection", "description": "Une sécurité sérieuse, une surveillance proactive et une protection intégrée dans votre infrastructure dès le premier jour." },
{ "icon": "Settings", "title": "Surveillance & Support", "description": "Surveillance proactive, mises à jour régulières et support continu pour que vous n'ayez jamais à vous soucier de la disponibilité." }
]
}
],
"ai": {
"eyebrow": "Couche Intelligente",
"title": "L'IA Intégrée Partout",
"subtitle": "Votre plateforme, rendue plus intelligente.",
"description": "Nous intégrons l'IA directement dans les sites web et les logiciels que nous développons pour vous. Non pas comme un mot à la mode ou un module complémentaire — mais comme des fonctionnalités concrètes qui font gagner du temps à votre équipe et offrent une meilleure expérience à vos clients.",
"bottomNote": "Chaque fonctionnalité IA est adaptée à votre entreprise — vos données restent sur vos serveurs",
"capabilities": [
{ "id": "ai-teammate", "title": "IA Coéquipier", "description": "Un assistant IA intégré à votre flux de travail — automatise les tâches répétitives, fait remonter les informations dont votre équipe a besoin et connecte vos outils." },
{ "id": "customer-facing-ai", "title": "IA Orientée Client", "description": "Des fonctionnalités intelligentes pour vos clients — recherche avancée, recommandations personnalisées et interfaces conversationnelles disponibles en permanence." },
{ "id": "data-intelligence", "title": "Intelligence des Données", "description": "L'IA qui vous aide à comprendre vos données — rapports automatisés, détection de tendances et insights sur lesquels vous pouvez réellement agir." }
]
},
"cta": {
"eyebrow": "Parlons-en",
"title": "Prêt à vous lancer ?",
"subtitle": "Répondez à quelques questions et nous préparerons un brief projet sur mesure pour vous — sans engagement, juste de la clarté.",
"primary": "Démarrer Votre Projet",
"email": "hello@letsbe.biz",
"reassurance": "Sans engagement — juste une conversation sur ce qui est possible."
}
},
"caseStudy": {
"labels": {
"challenge": "Le Défi",
"challengeHeading": "Le problème que nous cherchions à résoudre",
"approach": "Notre Approche",
"approachHeading": "Comment nous avons réfléchi",
"outcome": "Le Résultat",
"outcomeHeading": "Ce que nous avons livré",
"builtWith": "Développé avec",
"yourTurn": "À Votre Tour",
"ctaTitle": "Prêt à construire quelque chose comme ça ?",
"ctaSubtitle": "Chaque projet commence par une conversation. Dites-nous sur quoi vous travaillez et nous trouverons la meilleure façon de le concrétiser.",
"ctaButton": "Démarrer votre projet"
},
"projects": {
"monaco-ocean": {
"subtitle": "Plateforme de Jugement & d'Analyse Propulsée par l'IA",
"description": "Un système complet de jugement et d'analyse avec intégration avancée d'un jury IA pour l'un des événements de conservation les plus prestigieux de la Méditerranée.",
"challenge": "Le Monaco Ocean Protection Challenge avait besoin d'une plateforme moderne pour gérer les candidatures, coordonner les juges à travers différents fuseaux horaires et fournir une évaluation assistée par l'IA des projets de conservation — tout en maintenant le prestige et la sécurité attendus d'une institution monégasque.",
"approach": "Nous avons développé une plateforme sur mesure de A à Z en utilisant Next.js et une infrastructure PostgreSQL privée. Le module de jury IA utilise le traitement du langage naturel pour présélectionner les candidatures et générer des rapports de synthèse, tandis que les juges humains conservent le contrôle total des décisions finales.",
"outcome": "La plateforme a traité plus de 200 candidatures lors de sa première saison, réduisant la charge de travail des juges de 40 % grâce à la présélection assistée par l'IA. Le client a salué la fiabilité du système et l'élégance de son interface."
},
"port-nimara": {
"subtitle": "Hub Digital Maritime",
"description": "Hub digital évolutif pour la logistique maritime.",
"challenge": "Port Nimara avait besoin d'une présence digitale moderne pouvant servir à la fois de site vitrine et de hub opérationnel pour les demandes d'anneaux, la gestion d'événements et les communications avec les partenaires.",
"approach": "Nous avons conçu et développé une application Nuxt.js performante avec un CMS headless pour la gestion de contenu, intégrée à leurs systèmes de planification maritime existants via un middleware API sur mesure.",
"outcome": "La nouvelle plateforme a multiplié par 3 les demandes d'anneaux en ligne et a fourni aux autorités portuaires des capacités de gestion de contenu en temps réel dont elles manquaient jusqu'alors."
},
"port-amador": {
"subtitle": "Expérience Nautique Premium",
"description": "Expérience digitale premium pour des services nautiques d'élite.",
"challenge": "Port Amador avait besoin d'une expérience digitale de standing luxe à la hauteur de l'exclusivité de ses services nautiques, avec une prise en charge multilingue et une intégration de réservation transparente.",
"approach": "Nous avons créé un site web sur mesure avec des visuels cinématographiques, des animations fluides et un tunnel de réservation intégré. Le site a été développé avec des technologies web modernes en mettant l'accent sur la performance et le SEO pour le marché maritime de luxe très concurrentiel.",
"outcome": "La plateforme repensée a élevé la présence digitale de Port Amador pour correspondre à son positionnement premium, avec une amélioration de 60 % des temps de chargement des pages et une augmentation significative du trafic organique."
}
}
}
}

471
src/i18n/messages/it.json Normal file
View File

@@ -0,0 +1,471 @@
{
"meta": {
"siteName": "LetsBe.",
"home": {
"title": "LetsBe. | Web Design Su Misura, Software & Infrastruttura Digitale",
"description": "Siti web su misura, software dedicato, integrazione IA e infrastruttura privata — progettati, sviluppati e gestiti da un unico team."
},
"about": {
"title": "Chi Siamo | LetsBe. — La Nostra Storia & Approccio",
"description": "Uno studio digitale fondato negli Stati Uniti che crea siti web, software e piattaforme su misura per aziende che puntano alla qualità."
},
"services": {
"title": "Servizi | LetsBe. — Web Design, Software & Infrastruttura",
"description": "Web design su misura, software dedicato, automazione IA e infrastruttura privata — tre pilastri dell'eccellenza digitale sotto un unico tetto."
},
"work": {
"monaco-ocean": {
"title": "Monaco Ocean Protection Challenge | LetsBe.",
"description": "Piattaforma di giuria e analisi basata sull'IA per uno dei principali eventi di conservazione del Mediterraneo."
},
"port-nimara": {
"title": "Port Nimara — Hub Digitale Marittimo | LetsBe.",
"description": "Sito web su misura e CRM completo per la gestione dei lead, l'assegnazione dei posti barca e le operazioni del porto."
},
"port-amador": {
"title": "Port Amador — Esperienza Nautica Premium | LetsBe.",
"description": "Sito web e infrastruttura digitale privata per un marina di lusso — cloud storage, email e gestione dei file."
}
}
},
"nav": {
"services": "Servizi",
"configure": "Inizia",
"process": "Metodo",
"work": "Lavori",
"about": "Chi Siamo",
"startProject": "Avvia un Progetto",
"bookCall": "Prenota una Chiamata"
},
"hero": {
"title": "Il tuo sito. Il tuo software. Il tuo mondo digitale {accentWord}.",
"accentWord": "completo",
"subtitle": "Siti web su misura, software dedicato e l'infrastruttura per far girare tutto — progettati, sviluppati e gestiti da un unico team.",
"cta": "Avvia il Tuo Progetto",
"ctaSecondary": "Scopri i Nostri Lavori",
"trust": "La fiducia di aziende in tutto il mondo"
},
"trustBar": {
"customBuilt": {
"title": "Progettato da Zero",
"description": "Nessun template, nessun page builder. Ogni sito è progettato su misura e costruito a mano per il tuo brand."
},
"privateInfra": {
"title": "Tutto è Tuo",
"description": "Il tuo codice, i tuoi dati, i tuoi server. Lo costruiamo noi, lo possiedi tu — nessun lock-in, nessuna sorpresa."
},
"aiPowered": {
"title": "Un Team, dall'Inizio alla Fine",
"description": "Niente freelance da coordinare. Un solo team gestisce design, codice, hosting e supporto."
},
"rivieraBased": {
"title": "IA Integrata",
"description": "Funzionalità intelligenti e automazione integrate direttamente nel tuo sito web e nei tuoi software."
}
},
"services": {
"eyebrow": "Cosa Facciamo",
"title": "Progettare. Sviluppare. Crescere.",
"web": {
"title": "Web Design & Sviluppo",
"features": ["Design di Siti Su Misura", "Sviluppo Responsive", "SEO & Performance", "Gestione dei Contenuti"]
},
"systems": {
"title": "Software & Piattaforme",
"features": ["Strumenti di Gestione Aziendale", "CRM & Dashboard", "Sistemi di Prenotazione", "Integrazioni API"]
},
"infrastructure": {
"title": "Hosting & Infrastruttura",
"features": ["Server Dedicati", "Email & Cloud Storage", "Sicurezza & Monitoraggio", "Supporto Continuativo"]
},
"aiNarrative": "E integriamo l'IA in tutto — dalle funzionalità intelligenti nel tuo sito web all'automazione che connette tutti i tuoi strumenti."
},
"configurator": {
"eyebrow": "Inizia",
"title": "Dicci di cosa hai bisogno.",
"description": "Rispondi a qualche domanda e prepareremo un brief di progetto su misura per te.",
"step1": {
"title": "Di cosa hai bisogno?",
"subtitle": "Seleziona i servizi che si adattano al tuo progetto."
},
"step2": {
"title": "Parlaci del tuo progetto",
"subtitle": "Qualche dettaglio ci aiuta a preparare l'approccio giusto."
},
"step3": {
"title": "Quasi fatto",
"subtitle": "Controlla le tue selezioni e dicci come contattarti."
},
"complete": {
"title": "Il tuo brief di progetto è pronto",
"subtitle": "Controlla la tua casella — abbiamo inviato un brief dettagliato a {email}",
"nextStep": "Prossimo passo: parliamo del tuo brief",
"bookSubtitle": "Prenota una chiamata gratuita di 30 minuti per discutere del tuo progetto e dei prossimi passi.",
"bookCall": "Prenota una Chiamata",
"briefPreview": "Il tuo brief di progetto",
"reachDirectly": "O contattaci direttamente a"
},
"howItWorks": "Come funziona",
"noCommitment": "Nessun impegno richiesto",
"selectService": "Seleziona almeno un servizio per continuare",
"services": {
"web": {
"title": "Web Design & Sviluppo",
"description": "Siti web e applicazioni su misura — progettati da zero, costruiti per performare e ottimizzati per essere trovati."
},
"systems": {
"title": "Software Su Misura",
"description": "CRM, piattaforme di gestione e strumenti aziendali costruiti attorno al modo in cui il tuo team lavora davvero."
},
"infrastructure": {
"title": "Infrastruttura Privata",
"description": "Hosting dedicato, email, cloud storage e l'infrastruttura su cui gira la tua azienda — interamente di tua proprietà."
}
},
"aiToggle": "Aggiungi Integrazione IA",
"aiDescription": "Funzionalità IA pratiche e automazione integrate direttamente nel tuo sito web e nei tuoi software.",
"aiTypes": {
"teammate": {
"title": "IA come Collaboratore",
"description": "Un assistente IA interno che aiuta il tuo team a lavorare più velocemente — automatizza le attività, risponde alle domande, connette i tuoi strumenti."
},
"customer-facing": {
"title": "IA per i Clienti",
"description": "Funzionalità IA con cui interagiscono i tuoi clienti — ricerca intelligente, raccomandazioni personalizzate, interfacce conversazionali."
},
"data-intelligence": {
"title": "Intelligenza dei Dati",
"description": "L'IA analizza i dati della tua azienda per far emergere insight, trend e raccomandazioni concrete."
},
"notsure": {
"title": "Non Ancora Sicuro",
"description": "Nessun problema — esploreremo insieme il miglior approccio IA durante la fase di discovery."
}
},
"industries": {
"maritime": "Marittimo / Yachting",
"hospitality": "Ospitalità",
"technology": "Tecnologia",
"realestate": "Immobiliare",
"finance": "Finanza",
"ngo": "ONG / Non Profit",
"other": "Altro"
},
"timelines": {
"asap": "Prima possibile",
"1-3months": "13 mesi",
"3-6months": "36 mesi",
"exploring": "Sto solo esplorando"
},
"fields": {
"industry": "Il tuo settore",
"scope": "Cosa vuoi ottenere?",
"scopeOptional": "(opzionale)",
"scopePlaceholder": "es. Dobbiamo sostituire il nostro sistema di prenotazione attuale e migliorare l'esperienza cliente…",
"timeline": "Tempistiche",
"name": "Il tuo nome",
"company": "Azienda",
"email": "Indirizzo email",
"phone": "Telefono",
"phoneOptional": "(opzionale)",
"contactPreference": "Metodo di contatto preferito",
"contactEmail": "Email",
"contactPhone": "Telefono",
"contactWhatsapp": "WhatsApp",
"currentSiteUrl": "Sito web attuale",
"currentSiteUrlOptional": "(opzionale)",
"currentSiteUrlPlaceholder": "https://iltuosito.com",
"currentSiteThoughts": "Opinioni sul tuo sito attuale",
"currentSiteThoughtsPlaceholder": "Cosa funziona, cosa non funziona, cosa vorresti cambiare..."
},
"summary": {
"heading": "Le tue selezioni",
"aiEnhancement": "Potenziamento IA"
},
"generating": "Generazione",
"generatingSteps": {
"preparingBrief": "Preparazione del tuo brief",
"analyzingSite": "Analisi del tuo sito attuale",
"runningAudit": "Audit delle performance in corso",
"generatingBrief": "Generazione del tuo brief personalizzato"
},
"voice": {
"agentName": "Assistente di progetto LetsBe",
"endConversation": "Termina la Conversazione",
"analyzingSite": "Analisi del tuo sito...",
"connecting": "Connessione in corso...",
"mute": "Silenzia",
"unmute": "Riattiva audio",
"generatingBrief": "Generazione del tuo brief...",
"contactConfirm": "È tutto corretto?",
"contactEdit": "Modifica",
"contactConfirmButton": "È corretto",
"reconnect": "Riconnetti",
"connectionLost": "Connessione persa. La tua conversazione è salvata.",
"briefComplete": "Brief completato",
"startConversation": "Avvia conversazione"
},
"privacy": "Le tue informazioni sono private e non saranno mai condivise.",
"generateBrief": "Genera il Mio Brief",
"nextStep": "Prossimo Passo",
"back": "Indietro",
"startOver": "Ricomincia",
"errors": {
"general": "Qualcosa è andato storto. Riprova.",
"network": "Errore di rete. Controlla la connessione e riprova."
}
},
"discovery": {
"eyebrow": "Troviamolo Insieme",
"title": "Non sai da dove iniziare?",
"description": "Dicci cosa hai in mente e lo capiremo insieme. Riceverai un brief personalizzato alla fine.",
"cta": "Parliamone",
"privacy": "Le conversazioni vocali non vengono registrate né memorizzate."
},
"process": {
"eyebrow": "Come Lavoriamo",
"title": "Dall'Idea al Lancio",
"steps": {
"discovery": {
"title": "Discovery",
"description": "Studiamo la tua azienda, i tuoi utenti e ciò che hai davvero bisogno di costruire."
},
"strategy": {
"title": "Strategia & Pianificazione",
"description": "Definiamo l'architettura, scegliamo gli strumenti giusti e pianifichiamo lo sviluppo."
},
"build": {
"title": "Design & Sviluppo",
"description": "Il tuo progetto prende forma — pixel dopo pixel, funzionalità dopo funzionalità."
},
"launch": {
"title": "Lancio & Supporto",
"description": "Facciamo il deploy, monitoriamo e manteniamo tutto funzionante senza intoppi."
}
}
},
"work": {
"eyebrow": "I Nostri Lavori",
"title": "Progetti Che Abbiamo Realizzato",
"readCaseStudy": "Vedi Progetto",
"comingSoon": "Prossimamente",
"projects": {
"monaco": {
"title": "Monaco Ocean Protection Challenge",
"description": "Piattaforma di giuria e analisi con filtraggio basato su IA, assegnazione automatica dei giudici e valutazione intelligente dei progetti per uno dei principali eventi di conservazione del Mediterraneo.",
"tags": ["Software Su Misura", "Integrazione IA"]
},
"portNimara": {
"title": "Port Nimara",
"description": "Sito web su misura e CRM completo per la gestione dei lead, l'assegnazione dei posti barca e le operazioni del porto.",
"tags": ["Sito Web", "Software Su Misura"]
},
"portAmador": {
"title": "Port Amador",
"description": "Sito web e infrastruttura digitale privata — cloud storage, email e gestione dei file per un marina di lusso.",
"tags": ["Sito Web", "Infrastruttura"]
}
},
"comingSoonProjects": {
"riviera": {
"title": "Piattaforma di Gestione Immobiliare",
"subtitle": "Prossimamente"
},
"sophia": {
"title": "SaaS Enterprise — Austin, TX",
"subtitle": "Lancio Q4"
}
}
},
"philosophy": {
"eyebrow": "Perché Noi",
"title": "Facciamo le cose diversamente.",
"subtitle": "La maggior parte delle agenzie ti dà un template e lo chiama su misura. Noi pensiamo che la tua azienda meriti di meglio — design vero, ingegneria vera e un team che resta anche dopo il lancio.",
"ownership": {
"title": "Costruito per Essere Tuo",
"description": "Tutto quello che costruiamo è tuo. Il tuo codice, i tuoi dati, la tua infrastruttura — nessun lock-in, nessuna dipendenza da piattaforme, nessuna sorpresa."
},
"craftsmanship": {
"title": "Qualità Prima della Comodità",
"description": "Scriviamo codice pulito, costruito a mano, ottimizzato per velocità e motori di ricerca. Nessun page builder, nessun tema gonfio, nessuna scorciatoia."
},
"oneTeam": {
"title": "Un'Unica Relazione",
"description": "Dal primo design al supporto continuativo — un solo team che conosce la tua azienda a fondo. Nessun passaggio di mano, nessun brief perso per strada."
},
"quote": "Costruiamo tecnologia che lavora per la tua azienda — non il contrario.",
"foundedLocation": "Matt Ciaccio, Fondatore"
},
"cta": {
"eyebrow": "Parliamone",
"title": "Pronto a costruire qualcosa di grande?",
"subtitle": "Dicci su cosa stai lavorando. Niente presentazioni, niente pressioni — solo una conversazione onesta su ciò che è possibile.",
"cta": "Avvia il Tuo Progetto",
"configure": "Avvia il Tuo Progetto",
"email": "hello@letsbe.biz",
"reassurance": "Nessun impegno richiesto."
},
"footer": {
"tagline": "Siti web, software e piattaforme digitali su misura — progettati e sviluppati per aziende che rifiutano di accontentarsi.",
"location": "Fondato negli Stati Uniti. Al servizio di clienti in tutto il mondo.",
"services": "Servizi",
"studio": "Studio",
"connect": "Contatti",
"serviceLinks": {
"designDev": "Web Design & Sviluppo",
"customSystems": "Software Su Misura",
"infrastructure": "Infrastruttura Privata",
"aiAutomation": "Integrazione IA"
},
"privacy": "Privacy Policy",
"terms": "Termini di Servizio"
},
"aboutPage": {
"hero": {
"eyebrow": "Chi Siamo",
"title": "Le grandi aziende meritano grandi partner digitali.",
"subtitle": "Progettiamo e sviluppiamo siti web, software e piattaforme digitali su misura per aziende che puntano alla qualità — e che cercano un team che faccia lo stesso."
},
"story": {
"eyebrow": "La Nostra Storia",
"title": "Costruito per aziende come la tua.",
"p1": "LetsBe. è nata da una convinzione semplice: le aziende ambiziose meritano strumenti digitali curati quanto il lavoro che svolgono. Non template. Non piattaforme preconfezionate. Design e ingegneria reali, costruiti da zero.",
"p2": "I nostri primi clienti erano founder e imprenditori che avevano bisogno di qualcosa di più di un sito web — un partner tecnico capace di progettare, sviluppare, ospitare e mantenere tutto sotto un unico tetto. Quei progetti hanno plasmato il nostro modo di lavorare oggi.",
"p3": "Costruiamo piattaforme pensate per essere possedute, non affittate. Documentiamo tutto, consegniamo codebase che sopravvivono al progetto e non leghiamo mai i clienti a sistemi che non possono lasciare. Non è una caratteristica — è come pensiamo che il business dovrebbe funzionare.",
"quote": "Costruire meno cose. Costruirle meglio. Costruirle per durare.",
"quoteAttrib": "Principio fondante di LetsBe."
},
"pillars": {
"eyebrow": "Le Nostre Convinzioni",
"title": "In Cosa Crediamo",
"subtitle": "Tre principi alla base di ogni progetto che realizziamo.",
"craftsmanship": {
"title": "Prima la Qualità",
"description": "La differenza tra un sito che funziona e uno che dura è la cura artigianale. Ci preoccupiamo della tipografia, delle transizioni, delle performance, dei casi limite. Ogni interfaccia che rilasciamo è qualcosa di cui siamo orgogliosi di firmare."
},
"oneTeam": {
"title": "Un Team, Tutto",
"description": "Design, sviluppo, hosting, infrastruttura — un unico team, un unico punto di contatto, un unico standard di qualità. Nessun passaggio tra agenzie. Nessun freelance da coordinare. Solo persone che si preoccupano dell'intero progetto."
},
"ownership": {
"title": "Costruito per Essere Tuo",
"description": "Tutto quello che costruiamo è tuo — il codice, i dati, l'infrastruttura. Nessun vendor lock-in, nessuna dipendenza da piattaforme. Consegniamo lavoro che sopravvive al progetto."
}
},
"quote": {
"text": "Non costruiamo solo siti web — costruiamo le fondamenta su cui gira la tua azienda.",
"attrib": "Filosofia fondante di LetsBe."
},
"cta": {
"eyebrow": "Lavora Con Noi",
"title": "Costruiamo qualcosa insieme.",
"subtitle": "Che tu abbia un brief chiaro o solo un'idea iniziale, ci farebbe piacere parlare di ciò che è possibile.",
"primary": "Avvia il tuo progetto",
"secondary": "Prenota una chiamata"
}
},
"servicesPage": {
"hero": {
"eyebrow": "I Nostri Servizi",
"title": "Tutto ciò di cui la tua azienda",
"titleAccent": "ha bisogno online.",
"subtitle": "Progettiamo siti web su misura, sviluppiamo software dedicato e gestiamo l'infrastruttura che li supporta — un unico team, un unico standard di qualità, niente esternalizzato."
},
"pillars": [
{
"id": "design-development",
"numeral": "01",
"title": "Web Design & Sviluppo",
"description": "Il tuo sito web non dovrebbe assomigliare a quello di tutti gli altri — e non dovrebbe essere costruito come quello di tutti gli altri. Progettiamo e sviluppiamo siti web e applicazioni web da una tela bianca, curando ogni layout, ogni interazione e ogni pagina con intenzione. Il risultato è veloce, ottimizzato per i motori di ricerca e costruito per crescere con la tua azienda. Che tu abbia bisogno di un sito marketing che converte, di un'applicazione web su cui il tuo team fa affidamento, o di una piattaforma e-commerce che scala — lo costruiamo da zero, e lo costruiamo per durare.",
"features": [
{ "icon": "Palette", "title": "Design Su Misura", "description": "Ogni layout, componente e interazione è progettato per il tuo brand. Nessun tema, nessun template, nessuna scorciatoia." },
{ "icon": "Globe", "title": "Applicazioni Web", "description": "Applicazioni moderne e responsive sviluppate con le tecnologie più recenti — veloci, affidabili e pronte a scalare." },
{ "icon": "ShoppingCart", "title": "E-Commerce", "description": "Storefront personalizzati, flussi di checkout e piattaforme multi-valuta costruite per il retail online serio." },
{ "icon": "Zap", "title": "Performance & SEO", "description": "Tempi di caricamento rapidi, codice pulito e ottimizzazione per i motori di ricerca integrati nelle fondamenta — non aggiunti in un secondo momento." }
]
},
{
"id": "custom-systems",
"numeral": "02",
"title": "Software & Piattaforme",
"description": "I software preconfezionati fanno ipotesi su come funziona la tua azienda. Noi no. Quando fogli di calcolo e strumenti generici non bastano più, costruiamo esattamente il sistema di cui il tuo team ha bisogno — progettato attorno al tuo flusso di lavoro, non a quello di qualcun altro. Dai CRM adatti al tuo processo di vendita, alle piattaforme di gestione che sostituiscono tre abbonamenti diversi, alle integrazioni che connettono i tuoi strumenti esistenti — tutto quello che costruiamo è tuo, completamente documentato e costruito per durare.",
"features": [
{ "icon": "Database", "title": "CRM & Strumenti di Gestione", "description": "Gestione delle relazioni e della pipeline costruita attorno a come lavora davvero il tuo team — non come pensa una piattaforma generica che dovresti lavorare." },
{ "icon": "Code2", "title": "Software Su Misura", "description": "Dalle piattaforme di prenotazione agli strumenti interni, fino ai prodotti SaaS completi — costruiti su misura per la tua azienda." },
{ "icon": "GitBranch", "title": "Integrazioni & API", "description": "Connettiamo i tuoi strumenti esistenti e costruiamo i ponti tra i sistemi affinché tutto funzioni insieme." },
{ "icon": "Wrench", "title": "Dashboard & Automazione", "description": "Pannelli di amministrazione, strumenti di reporting e automazione dei flussi di lavoro che danno al tuo team un vantaggio competitivo." }
]
},
{
"id": "infrastructure",
"numeral": "03",
"title": "Hosting & Infrastruttura",
"description": "Il tuo sito web e il tuo software hanno bisogno di una casa — e noi pensiamo che dovresti possederla. Configuriamo e gestiamo server dedicati, email, cloud storage e tutta l'infrastruttura su cui gira la tua azienda. Nessun hosting condiviso, nessuna misteriosa dipendenza da terze parti. Sai dove vivono i tuoi dati, chi vi ha accesso e che qualcuno tiene d'occhio la dashboard 24 ore su 24.",
"features": [
{ "icon": "Server", "title": "Hosting Dedicato", "description": "Server privati gestiti per la tua azienda — nessun hosting condiviso, nessun vicino rumoroso, nessuna sorpresa." },
{ "icon": "Shield", "title": "I Tuoi Dati, Il Tuo Controllo", "description": "Possiedi i tuoi dati e sai esattamente dove si trovano. Accesso completo, piena trasparenza, nessun lock-in." },
{ "icon": "Lock", "title": "Sicurezza & Protezione", "description": "Sicurezza seria, monitoraggio proattivo e protezione integrata nella tua infrastruttura fin dal primo giorno." },
{ "icon": "Settings", "title": "Monitoraggio & Supporto", "description": "Monitoraggio proattivo, aggiornamenti regolari e supporto continuativo così non dovrai mai preoccuparti dell'uptime." }
]
}
],
"ai": {
"eyebrow": "Livello Intelligente",
"title": "IA Integrata in Tutto",
"subtitle": "La tua piattaforma, resa più intelligente.",
"description": "Integriamo l'IA direttamente nei siti web e nei software che costruiamo per te. Non come parola d'ordine o un componente aggiuntivo — come funzionalità pratiche che fanno risparmiare tempo al tuo team e offrono ai tuoi clienti un'esperienza migliore.",
"bottomNote": "Ogni funzionalità IA è adattata alla tua azienda — i tuoi dati rimangono sui tuoi server",
"capabilities": [
{ "id": "ai-teammate", "title": "IA come Collaboratore", "description": "Un assistente IA integrato nel tuo flusso di lavoro — automatizza le attività ripetitive, porta in superficie le informazioni di cui il tuo team ha bisogno e connette i tuoi strumenti." },
{ "id": "customer-facing-ai", "title": "IA per i Clienti", "description": "Funzionalità intelligenti per i tuoi clienti — ricerca intelligente, raccomandazioni personalizzate e interfacce conversazionali attive 24 ore su 24." },
{ "id": "data-intelligence", "title": "Intelligenza dei Dati", "description": "IA che ti aiuta a capire i tuoi dati — report automatizzati, individuazione di trend e insight su cui puoi davvero agire." }
]
},
"cta": {
"eyebrow": "Parliamone",
"title": "Pronto per iniziare?",
"subtitle": "Rispondi a qualche domanda e prepareremo un brief di progetto su misura per te — nessun impegno richiesto, solo chiarezza.",
"primary": "Avvia il Tuo Progetto",
"email": "hello@letsbe.biz",
"reassurance": "Nessun impegno richiesto — solo una conversazione su ciò che è possibile."
}
},
"caseStudy": {
"labels": {
"challenge": "La Sfida",
"challengeHeading": "Il problema che ci siamo proposti di risolvere",
"approach": "Il Nostro Approccio",
"approachHeading": "Come abbiamo ragionato",
"outcome": "Il Risultato",
"outcomeHeading": "Cosa abbiamo consegnato",
"builtWith": "Sviluppato con",
"yourTurn": "Tocca a Te",
"ctaTitle": "Pronto a costruire qualcosa di simile?",
"ctaSubtitle": "Ogni progetto inizia con una conversazione. Dicci su cosa stai lavorando e troveremo insieme il modo migliore per realizzarlo.",
"ctaButton": "Avvia il tuo progetto"
},
"projects": {
"monaco-ocean": {
"subtitle": "Piattaforma di Giuria e Analisi con IA",
"description": "Un sistema completo di giuria e analisi con integrazione avanzata di giuria IA per uno degli eventi di conservazione più prestigiosi del Mediterraneo.",
"challenge": "Il Monaco Ocean Protection Challenge aveva bisogno di una piattaforma moderna per gestire le candidature, coordinare i giudici in fusi orari diversi e fornire una valutazione assistita dall'IA delle proposte di conservazione — il tutto mantenendo il prestigio e la sicurezza attesi da un'istituzione monegasca.",
"approach": "Abbiamo costruito una piattaforma personalizzata da zero usando Next.js e un'infrastruttura PostgreSQL privata. Il modulo di giuria IA utilizza l'elaborazione del linguaggio naturale per pre-selezionare le candidature e generare report riassuntivi, mentre i giudici umani mantengono il pieno controllo sulle decisioni finali.",
"outcome": "La piattaforma ha elaborato oltre 200 candidature nella sua prima stagione, riducendo il carico di lavoro dei giudici del 40% grazie alla pre-selezione assistita dall'IA. Il cliente ha elogiato l'affidabilità del sistema e l'eleganza della sua interfaccia."
},
"port-nimara": {
"subtitle": "Hub Digitale Marittimo",
"description": "Hub digitale scalabile per la logistica marittima.",
"challenge": "Port Nimara aveva bisogno di una presenza digitale moderna capace di servire sia come sito di marketing che come hub operativo per le richieste di ormeggio, la gestione degli eventi e le comunicazioni con i partner.",
"approach": "Abbiamo progettato e sviluppato un'applicazione Nuxt.js performante con un CMS headless per la gestione dei contenuti, integrata con i loro sistemi di pianificazione marittima esistenti tramite middleware API personalizzato.",
"outcome": "La nuova piattaforma ha triplicato le richieste di ormeggio online e ha fornito all'autorità portuale capacità di gestione dei contenuti in tempo reale di cui prima erano privi."
},
"port-amador": {
"subtitle": "Esperienza Nautica Premium",
"description": "Esperienza digitale premium per servizi nautici di élite.",
"challenge": "Port Amador richiedeva un'esperienza digitale di livello lusso che rispecchiasse l'esclusività dei loro servizi nautici, con supporto multilingue e un'integrazione di prenotazione fluida.",
"approach": "Abbiamo realizzato un sito web su misura con immagini cinematografiche, animazioni fluide e un flusso di prenotazione integrato. Il sito è stato costruito su tecnologie web moderne con un focus su performance e SEO per il competitivo mercato marittimo di lusso.",
"outcome": "La piattaforma ridisegnata ha elevato la presenza digitale di Port Amador alla sua posizione premium, con un miglioramento del 60% nei tempi di caricamento delle pagine e un aumento significativo del traffico organico."
}
}
}
}

View File

@@ -90,9 +90,7 @@ export const AGENT_TOOLS = [
// ─── System Prompt ────────────────────────────────────────────────────────────
export function buildSystemPrompt(locale: string): string {
const isFr = locale === 'fr';
if (isFr) {
if (locale === 'fr') {
return `Tu es l'assistant de projets LetsBe — un consultant chaleureux et expérimenté pour LetsBe Solutions. Tu mènes de vraies conversations qui aident les gens à comprendre ce dont ils ont réellement besoin. Toute la conversation se fait en français.
Présente-toi : "Bonjour, je suis l'assistant de projets LetsBe. Dites-moi ce que vous avez en tête et on trouvera ensemble la bonne approche."
@@ -135,6 +133,92 @@ Utilisation des outils :
- Souveraineté des données et confidentialité numérique comme priorité`;
}
if (locale === 'it') {
return `Sei l'assistente di progetti LetsBe — un consulente esperto e cordiale di LetsBe Solutions. Conduci conversazioni reali che aiutano le persone a capire di cosa hanno effettivamente bisogno. Tutta la conversazione si svolge in italiano.
Presentati: "Ciao, sono l'assistente di progetti LetsBe. Dimmi cosa hai in mente e troveremo insieme l'approccio giusto."
Il tuo obiettivo: capire le esigenze di questa persona in modo abbastanza approfondito da redigere un brief convincente e personalizzato. Non stai compilando un modulo. Stai avendo una vera conversazione da consulente.
Come comportarti:
- Segui il filo della conversazione. Se menzionano una frustrazione, approfondisci. Se emergono argomenti correlati, probabilmente sono importanti. Non reindirizzare verso il tuo prossimo argomento.
- Fai una domanda alla volta. Lasciali finire prima di proseguire.
- Offri la tua prospettiva, non solo domande. "Sembra più un problema di integrazione dei sistemi che di rifacimento del sito web" — hai opinioni ed esperienza, condividile.
- Menziona il lavoro di LetsBe in modo naturale quando è pertinente. "Abbiamo costruito qualcosa di simile per un gruppo alberghiero" — non una lista di funzionalità.
- Mantieni ogni risposta a 2-3 frasi. Sei un consulente, non un conferenziere.
- Va bene se gli argomenti emergono in ordine diverso. Va bene se certi argomenti non emergono affatto.
Argomenti da esplorare (ma non trattarli come una checklist):
- Cosa li ha spinti a contattarci ora? Qual è il bisogno sottostante?
- Cosa non funziona o è frustrante nella loro configurazione attuale?
- Quali strumenti o sistemi usa il loro team oggi?
- Se hanno un sito web, offri di analizzarlo — poi discuti i risultati in modo naturale.
- Come sarebbe il successo per loro?
- Chi altro è coinvolto nella decisione?
- Cosa guida la loro tempistica?
Utilizzo degli strumenti:
- Chiama update_selections silenziosamente ogni volta che capi un dato strutturato. Mappa ciò che senti al valore predefinito più vicino. Non fare mai domande in stile modulo.
- services: "web", "systems", "infrastructure"
- aiTypes: "teammate", "customer-facing", "data-intelligence", "notsure"
- industry: "maritime", "hospitality", "technology", "realestate", "finance", "ngo", "other"
- timeline: "asap", "1-3months", "3-6months", "exploring"
- Chiama analyze_website quando menzionano un URL.
- Quando la conversazione raggiunge una conclusione naturale e hai una buona comprensione delle loro esigenze, chiedi nome ed email. Di' qualcosa come "Ho un quadro chiaro di ciò di cui hai bisogno — lasciami preparare un brief. Come ti chiami e qual è la tua email?"
- Dopo che hanno fornito nome ed email, chiama request_contact per mostrare i loro dati sullo schermo. Di' "Ho messo i tuoi dati sullo schermo — dai un'occhiata e dimmi se è tutto corretto." Aspetta la loro conferma prima di procedere.
- Dopo la conferma, chiama complete_brief immediatamente. Di' "Perfetto, sto generando il tuo brief ora." Includi un conversationSummary dettagliato che catturi TUTTI i dettagli: punti critici, strumenti attuali, cosa vogliono mantenere o cambiare, contesto business, decisori, come appare il successo, requisiti unici. Il conversationSummary è l'input principale del brief — più dettagli ci sono, migliore sarà il brief.
Su LetsBe (menzionare naturalmente, non recitare):
- Tutto sviluppato su misura da zero — nessun template, nessun page builder
- Infrastruttura privata: i clienti possiedono e controllano completamente i loro dati e server
- Team piccolo ed esperto con decenni di esperienza combinata in design e ingegneria
- Integrazione IA profonda in qualsiasi tipo di sistema
- Sovranità dei dati e privacy digitale come priorità fondamentale`;
}
if (locale === 'es') {
return `Eres el asistente de proyectos LetsBe — un consultor experimentado y cercano de LetsBe Solutions. Tienes conversaciones reales que ayudan a las personas a descubrir lo que realmente necesitan. Toda la conversación se realiza en español.
Preséntate: "Hola, soy el asistente de proyectos LetsBe. Cuéntame qué tienes en mente y encontraremos juntos el enfoque adecuado."
Tu objetivo: entender las necesidades de esta persona con suficiente profundidad para redactar un brief convincente y personalizado. No estás rellenando un formulario. Estás teniendo una conversación consultiva genuina.
Cómo comportarte:
- Sigue el hilo de la conversación. Si mencionan una frustración, profundiza en ella. Si surge un tema tangencial, probablemente sea importante. No redirigirles hacia tu próximo tema.
- Haz una sola pregunta a la vez. Deja que terminen antes de continuar.
- Ofrece tu perspectiva, no solo preguntas. "Eso suena más a un problema de integración de sistemas que a un rediseño de sitio web" — tienes opiniones y experiencia, compártelas.
- Menciona el trabajo de LetsBe de forma natural cuando sea relevante. "Construimos algo similar para un grupo hotelero" — no una lista de funcionalidades.
- Mantén cada respuesta en 2-3 frases. Eres un consultor, no un conferenciante.
- Está bien si los temas surgen en un orden diferente. Está bien si algunos temas no surgen en absoluto.
Temas que vale la pena explorar (pero no los trates como una lista de verificación):
- ¿Qué les llevó a contactarnos ahora? ¿Cuál es la necesidad subyacente?
- ¿Qué no funciona o es frustrante en su configuración actual?
- ¿Qué herramientas o sistemas usa su equipo hoy en día?
- Si tienen un sitio web, ofrécete a analizarlo — luego comenta los resultados de forma natural.
- ¿Cómo sería el éxito para ellos?
- ¿Quién más está involucrado en la decisión?
- ¿Qué impulsa su calendario?
Uso de herramientas:
- Llama a update_selections silenciosamente cada vez que captes un dato estructurado. Mapea lo que escuchas al valor predefinido más cercano. Nunca hagas preguntas tipo formulario.
- services: "web", "systems", "infrastructure"
- aiTypes: "teammate", "customer-facing", "data-intelligence", "notsure"
- industry: "maritime", "hospitality", "technology", "realestate", "finance", "ngo", "other"
- timeline: "asap", "1-3months", "3-6months", "exploring"
- Llama a analyze_website cuando mencionen una URL.
- Cuando la conversación llegue a una conclusión natural y tengas una buena comprensión de sus necesidades, pide su nombre y email. Di algo como "Tengo una imagen clara de lo que necesitas — déjame preparar un brief. ¿Cuál es tu nombre y tu email?"
- Después de que proporcionen nombre y email, llama a request_contact para mostrar sus datos en pantalla. Di "He puesto tus datos en pantalla — échales un vistazo y dime si está todo correcto." Espera su confirmación antes de continuar.
- Después de la confirmación, llama a complete_brief inmediatamente. Di "Perfecto, generando tu brief ahora." Incluye un conversationSummary detallado que capture TODOS los detalles: puntos de dolor, herramientas actuales, qué quieren mantener o cambiar, contexto del negocio, decisores, cómo es el éxito, requisitos únicos. El conversationSummary es el input principal del brief — cuantos más detalles, mejor será el brief.
Sobre LetsBe (mencionar de forma natural, no recitar):
- Todo desarrollado a medida desde cero — sin plantillas, sin page builders
- Infraestructura privada: los clientes son dueños y controlan completamente sus datos y servidores
- Equipo pequeño y experimentado con décadas de experiencia combinada en diseño e ingeniería
- Integración profunda de IA en cualquier tipo de sistema
- Soberanía de datos y privacidad digital como enfoque principal`;
}
return `You are the LetsBe project assistant — a warm, experienced consultant for LetsBe Solutions. You have real conversations that help people figure out what they actually need.
Introduce yourself: "Hi, I'm the LetsBe project assistant. Tell me what's on your mind and we'll figure out the right approach together."

View File

@@ -4,5 +4,5 @@ import { routing } from './i18n/routing'
export default createMiddleware(routing)
export const config = {
matcher: ['/', '/(fr|en)/:path*', '/((?!api|_next|admin|media|fonts|images|favicon.ico).*)'],
matcher: ['/', '/(fr|en|it|es)/:path*', '/((?!api|_next|admin|media|fonts|images|favicon.ico).*)'],
}

View File

@@ -37,6 +37,8 @@ export default buildConfig({
locales: [
{ label: 'English', code: 'en' },
{ label: 'Français', code: 'fr' },
{ label: 'Italiano', code: 'it' },
{ label: 'Español', code: 'es' },
],
defaultLocale: 'en',
fallback: true,