Compare commits

..

3 Commits

Author SHA1 Message Date
Roberto Musso
0006f36215 layout for mobile
All checks were successful
Deploy Website / deploy (push) Successful in 3s
2026-04-12 10:19:31 +02:00
Roberto Musso
b522ff10dd fix(i18n): use culturally idiomatic heroTagline translations
All checks were successful
Deploy Website / deploy (push) Successful in 3s
Replace literal 'chief of staff' translations with natural equivalents:
- IT: 'Il tuo nuovo braccio destro.'
- ES: 'Tu nuevo brazo derecho.'
- FR: 'Votre nouveau bras droit.'
- DE: 'Deine neue rechte Hand.'
2026-04-12 10:11:16 +02:00
Roberto Musso
10a8152c5c feat(i18n): send current language in waitlist form POST body 2026-04-12 10:06:47 +02:00
2 changed files with 22 additions and 16 deletions

View File

@@ -98,7 +98,7 @@ const I18N = {
it: { it: {
navJoinWaitlist: 'Unisciti alla waitlist', navJoinWaitlist: 'Unisciti alla waitlist',
heroBadge: 'Beta in arrivo a giugno 2026', heroBadge: 'Beta in arrivo a giugno 2026',
heroTagline: 'Il tuo nuovo capo di gabinetto.', heroTagline: 'Il tuo nuovo braccio destro.',
heroH1: 'E se l\'AI potesse essere<br><span class="accent">la tua segretaria?</span>', heroH1: 'E se l\'AI potesse essere<br><span class="accent">la tua segretaria?</span>',
heroSub: 'Non un chatbot. Non un\'altra app. Un\'AI reale che legge le tue email, conosce i tuoi progetti e ti dice su cosa concentrarti — senza mai vedere i tuoi dati.', heroSub: 'Non un chatbot. Non un\'altra app. Un\'AI reale che legge le tue email, conosce i tuoi progetti e ti dice su cosa concentrarti — senza mai vedere i tuoi dati.',
heroButton: 'Ottieni l\'accesso anticipato', heroButton: 'Ottieni l\'accesso anticipato',
@@ -180,7 +180,7 @@ const I18N = {
es: { es: {
navJoinWaitlist: 'Únete a la lista de espera', navJoinWaitlist: 'Únete a la lista de espera',
heroBadge: 'Beta en junio 2026', heroBadge: 'Beta en junio 2026',
heroTagline: 'Conoce a tu nuevo jefe de gabinete.', heroTagline: 'Tu nuevo brazo derecho.',
heroH1: '¿Y si la IA pudiera ser<br><span class="accent">tu secretaria?</span>', heroH1: '¿Y si la IA pudiera ser<br><span class="accent">tu secretaria?</span>',
heroSub: 'No es un chatbot. No es otra app. Una IA real que lee tu correo, conoce tus proyectos y te dice en qué enfocarte — sin que tus datos salgan de tu dispositivo.', heroSub: 'No es un chatbot. No es otra app. Una IA real que lee tu correo, conoce tus proyectos y te dice en qué enfocarte — sin que tus datos salgan de tu dispositivo.',
heroButton: 'Obtén acceso anticipado', heroButton: 'Obtén acceso anticipado',
@@ -262,7 +262,7 @@ const I18N = {
fr: { fr: {
navJoinWaitlist: 'Rejoindre la liste d\'attente', navJoinWaitlist: 'Rejoindre la liste d\'attente',
heroBadge: 'Bêta en juin 2026', heroBadge: 'Bêta en juin 2026',
heroTagline: 'Votre nouveau chef de cabinet.', heroTagline: 'Votre nouveau bras droit.',
heroH1: 'Et si l\'IA pouvait être<br><span class="accent">votre secrétaire ?</span>', heroH1: 'Et si l\'IA pouvait être<br><span class="accent">votre secrétaire ?</span>',
heroSub: 'Pas un chatbot. Pas une autre app. Une vraie IA qui lit vos emails, connaît vos projets et vous dit sur quoi vous concentrer — sans jamais voir vos données.', heroSub: 'Pas un chatbot. Pas une autre app. Une vraie IA qui lit vos emails, connaît vos projets et vous dit sur quoi vous concentrer — sans jamais voir vos données.',
heroButton: 'Obtenir un accès anticipé', heroButton: 'Obtenir un accès anticipé',
@@ -344,7 +344,7 @@ const I18N = {
de: { de: {
navJoinWaitlist: 'Auf die Warteliste', navJoinWaitlist: 'Auf die Warteliste',
heroBadge: 'Beta ab Juni 2026', heroBadge: 'Beta ab Juni 2026',
heroTagline: 'Dein neuer Stabschef.', heroTagline: 'Deine neue rechte Hand.',
heroH1: 'Was wäre, wenn KI<br><span class="accent">deine Sekretärin</span> wäre?', heroH1: 'Was wäre, wenn KI<br><span class="accent">deine Sekretärin</span> wäre?',
heroSub: 'Kein Chatbot. Keine weitere App. Eine echte KI, die deine E-Mails liest, deine Projekte kennt und dir sagt, worauf du dich konzentrieren sollst — ohne deine Daten jemals zu sehen.', heroSub: 'Kein Chatbot. Keine weitere App. Eine echte KI, die deine E-Mails liest, deine Projekte kennt und dir sagt, worauf du dich konzentrieren sollst — ohne deine Daten jemals zu sehen.',
heroButton: 'Frühen Zugang sichern', heroButton: 'Frühen Zugang sichern',

View File

@@ -1122,6 +1122,10 @@
.features-grid { grid-template-columns: 1fr; } .features-grid { grid-template-columns: 1fr; }
.pillars { flex-direction: column; align-items: center; } .pillars { flex-direction: column; align-items: center; }
nav { padding: 0 16px; } nav { padding: 0 16px; }
.nav-right { gap: 8px; }
.lang-switcher summary { padding: 6px; gap: 0; }
.lang-switcher .lang-label { display: none; }
.nav-right .btn-primary { padding: 8px 16px; font-size: 0.78rem; }
.section { padding: 48px 20px; } .section { padding: 48px 20px; }
.final-cta { padding: 48px 20px; } .final-cta { padding: 48px 20px; }
.founder-quote { padding: 28px; } .founder-quote { padding: 28px; }
@@ -1156,17 +1160,19 @@
<circle cx="32" cy="32" r="2.5" fill="#040404" opacity="0.18"/> <circle cx="32" cy="32" r="2.5" fill="#040404" opacity="0.18"/>
</svg><span>adiuv<span class="ai">AI</span></span> </svg><span>adiuv<span class="ai">AI</span></span>
</a> </a>
<details id="lang-dropdown" class="lang-switcher"> <div class="nav-right">
<summary class="lang-current" aria-label="Select language"><i data-lucide="globe" style="width:16px;height:16px;"></i> <span id="lang-current-label">EN</span></summary> <details id="lang-dropdown" class="lang-switcher">
<div class="lang-options"> <summary class="lang-current" aria-label="Select language"><i data-lucide="globe" style="width:16px;height:16px;"></i> <span id="lang-current-label" class="lang-label">EN</span></summary>
<button class="lang-option active" data-lang="en">EN</button> <div class="lang-options">
<button class="lang-option" data-lang="it">IT</button> <button class="lang-option active" data-lang="en">EN</button>
<button class="lang-option" data-lang="es">ES</button> <button class="lang-option" data-lang="it">IT</button>
<button class="lang-option" data-lang="fr">FR</button> <button class="lang-option" data-lang="es">ES</button>
<button class="lang-option" data-lang="de">DE</button> <button class="lang-option" data-lang="fr">FR</button>
</div> <button class="lang-option" data-lang="de">DE</button>
</details> </div>
<a href="#final-cta" class="btn btn-primary" data-i18n="navJoinWaitlist">Join the waitlist</a> </details>
<a href="#final-cta" class="btn btn-primary" data-i18n="navJoinWaitlist">Join the waitlist</a>
</div>
</nav> </nav>
<!-- ═══════ HERO ═══════ --> <!-- ═══════ HERO ═══════ -->
@@ -1674,7 +1680,7 @@
const res = await fetch('/api/v1/waitlist', { const res = await fetch('/api/v1/waitlist', {
method: 'POST', method: 'POST',
headers: { 'Content-Type': 'application/json' }, headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email }), body: JSON.stringify({ email, lang }),
}); });
if (!res.ok) throw new Error(res.statusText); if (!res.ok) throw new Error(res.statusText);