Spaces:
Sleeping
Sleeping
HomePilot Deploy Bot commited on
chore: sync installer from monorepo
Browse files- static/index.html +23 -4
static/index.html
CHANGED
|
@@ -29,11 +29,14 @@ a:hover{color:var(--cyan)}
|
|
| 29 |
.hero{text-align:center;padding:56px 20px 8px;position:relative}
|
| 30 |
.hero::before{content:'';position:absolute;top:-50%;left:50%;transform:translateX(-50%);
|
| 31 |
width:140%;height:120%;background:radial-gradient(ellipse 50% 40% at 50% 0%,rgba(59,130,246,0.1),transparent);pointer-events:none}
|
| 32 |
-
.hero-
|
| 33 |
.hero h1{font-size:clamp(1.7rem,4.5vw,2.4rem);font-weight:800;letter-spacing:-0.03em;
|
| 34 |
line-height:1.15;margin-top:16px;position:relative}
|
| 35 |
.hero h1 span{background:var(--grad);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}
|
| 36 |
.hero p{color:var(--dim);font-size:14px;line-height:1.6;margin:10px auto 0;max-width:420px;position:relative}
|
|
|
|
|
|
|
|
|
|
| 37 |
|
| 38 |
/* ── Trust bar ── */
|
| 39 |
.trust{display:flex;justify-content:center;gap:20px;padding:24px 0 36px;flex-wrap:wrap}
|
|
@@ -169,9 +172,14 @@ a:hover{color:var(--cyan)}
|
|
| 169 |
|
| 170 |
<!-- ── HERO ── -->
|
| 171 |
<div class="hero">
|
| 172 |
-
<
|
| 173 |
-
|
| 174 |
-
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 175 |
</div>
|
| 176 |
|
| 177 |
<!-- Language picker -->
|
|
@@ -343,6 +351,7 @@ const T = {
|
|
| 343 |
successH: 'Your HomePilot is running!', successP: 'Wait ~3 minutes for the first build.',
|
| 344 |
openSpace: 'Open Space →', goChata: 'Go to Chata',
|
| 345 |
tokenEmpty: 'Empty or invalid token', verifyFirst: 'Connect your account first (Step 1)',
|
|
|
|
| 346 |
},
|
| 347 |
es: {
|
| 348 |
hero: 'Tu IA privada en 2 minutos',
|
|
@@ -361,6 +370,7 @@ const T = {
|
|
| 361 |
successH: '¡Tu HomePilot está en marcha!', successP: 'Espera ~3 minutos para el primer build.',
|
| 362 |
openSpace: 'Abrir Space →', goChata: 'Ir a Chata',
|
| 363 |
tokenEmpty: 'Token vacío o inválido', verifyFirst: 'Conecta tu cuenta primero (Paso 1)',
|
|
|
|
| 364 |
},
|
| 365 |
pt: {
|
| 366 |
hero: 'Sua IA privada em 2 minutos',
|
|
@@ -379,6 +389,7 @@ const T = {
|
|
| 379 |
successH: 'Seu HomePilot está rodando!', successP: 'Aguarde ~3 minutos para o primeiro build.',
|
| 380 |
openSpace: 'Abrir Space →', goChata: 'Ir para Chata',
|
| 381 |
tokenEmpty: 'Token vazio ou inválido', verifyFirst: 'Conecte sua conta primeiro (Passo 1)',
|
|
|
|
| 382 |
},
|
| 383 |
fr: {
|
| 384 |
hero: 'Votre IA privée en 2 minutes',
|
|
@@ -397,6 +408,7 @@ const T = {
|
|
| 397 |
successH: 'Votre HomePilot est en marche !', successP: 'Attendez ~3 minutes pour le premier build.',
|
| 398 |
openSpace: 'Ouvrir Space →', goChata: 'Aller sur Chata',
|
| 399 |
tokenEmpty: 'Token vide ou invalide', verifyFirst: 'Connectez votre compte d\'abord (Étape 1)',
|
|
|
|
| 400 |
},
|
| 401 |
de: {
|
| 402 |
hero: 'Ihre private KI in 2 Minuten',
|
|
@@ -415,6 +427,7 @@ const T = {
|
|
| 415 |
successH: 'Ihr HomePilot läuft!', successP: 'Warten Sie ~3 Minuten auf den ersten Build.',
|
| 416 |
openSpace: 'Space öffnen →', goChata: 'Zu Chata',
|
| 417 |
tokenEmpty: 'Token leer oder ungültig', verifyFirst: 'Verbinden Sie zuerst Ihr Konto (Schritt 1)',
|
|
|
|
| 418 |
},
|
| 419 |
};
|
| 420 |
|
|
@@ -458,6 +471,12 @@ function setLang(l) {
|
|
| 458 |
document.querySelector('#success h2').textContent = t.successH;
|
| 459 |
document.querySelector('#open-space').textContent = t.openSpace;
|
| 460 |
document.querySelector('#go-chata').textContent = t.goChata;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 461 |
// Lang picker
|
| 462 |
document.querySelectorAll('.lang-btn').forEach(b => {
|
| 463 |
b.classList.toggle('active', b.dataset.lang === l);
|
|
|
|
| 29 |
.hero{text-align:center;padding:56px 20px 8px;position:relative}
|
| 30 |
.hero::before{content:'';position:absolute;top:-50%;left:50%;transform:translateX(-50%);
|
| 31 |
width:140%;height:120%;background:radial-gradient(ellipse 50% 40% at 50% 0%,rgba(59,130,246,0.1),transparent);pointer-events:none}
|
| 32 |
+
.hero-logo{width:72px;height:72px;position:relative;filter:drop-shadow(0 0 20px rgba(59,130,246,.2))}
|
| 33 |
.hero h1{font-size:clamp(1.7rem,4.5vw,2.4rem);font-weight:800;letter-spacing:-0.03em;
|
| 34 |
line-height:1.15;margin-top:16px;position:relative}
|
| 35 |
.hero h1 span{background:var(--grad);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}
|
| 36 |
.hero p{color:var(--dim);font-size:14px;line-height:1.6;margin:10px auto 0;max-width:420px;position:relative}
|
| 37 |
+
.alt-link{margin-top:16px;font-size:12px;color:var(--faint);position:relative;display:flex;align-items:center;justify-content:center;gap:6px}
|
| 38 |
+
.alt-link a{color:var(--muted);font-weight:600;transition:color .2s}
|
| 39 |
+
.alt-link a:hover{color:var(--cyan)}
|
| 40 |
|
| 41 |
/* ── Trust bar ── */
|
| 42 |
.trust{display:flex;justify-content:center;gap:20px;padding:24px 0 36px;flex-wrap:wrap}
|
|
|
|
| 172 |
|
| 173 |
<!-- ── HERO ── -->
|
| 174 |
<div class="hero">
|
| 175 |
+
<img src="https://raw.githubusercontent.com/ruslanmv/HomePilot/master/assets/homepilot-logo.svg"
|
| 176 |
+
alt="HomePilot" class="hero-logo">
|
| 177 |
+
<h1><span>Your private AI in 2 minutes</span></h1>
|
| 178 |
+
<p>Deploy HomePilot with Ollama and 14 AI personas on your own Hugging Face Space. No code. Private by default.</p>
|
| 179 |
+
<div class="alt-link">
|
| 180 |
+
<span>Prefer to run locally?</span>
|
| 181 |
+
<a href="https://ruslanmv.com/HomePilot/getting-started.html" target="_blank" id="desktop-link">Desktop version →</a>
|
| 182 |
+
</div>
|
| 183 |
</div>
|
| 184 |
|
| 185 |
<!-- Language picker -->
|
|
|
|
| 351 |
successH: 'Your HomePilot is running!', successP: 'Wait ~3 minutes for the first build.',
|
| 352 |
openSpace: 'Open Space →', goChata: 'Go to Chata',
|
| 353 |
tokenEmpty: 'Empty or invalid token', verifyFirst: 'Connect your account first (Step 1)',
|
| 354 |
+
altPref: 'Prefer to run locally?', altLink: 'Desktop version →',
|
| 355 |
},
|
| 356 |
es: {
|
| 357 |
hero: 'Tu IA privada en 2 minutos',
|
|
|
|
| 370 |
successH: '¡Tu HomePilot está en marcha!', successP: 'Espera ~3 minutos para el primer build.',
|
| 371 |
openSpace: 'Abrir Space →', goChata: 'Ir a Chata',
|
| 372 |
tokenEmpty: 'Token vacío o inválido', verifyFirst: 'Conecta tu cuenta primero (Paso 1)',
|
| 373 |
+
altPref: '¿Prefieres ejecutar localmente?', altLink: 'Versión de escritorio →',
|
| 374 |
},
|
| 375 |
pt: {
|
| 376 |
hero: 'Sua IA privada em 2 minutos',
|
|
|
|
| 389 |
successH: 'Seu HomePilot está rodando!', successP: 'Aguarde ~3 minutos para o primeiro build.',
|
| 390 |
openSpace: 'Abrir Space →', goChata: 'Ir para Chata',
|
| 391 |
tokenEmpty: 'Token vazio ou inválido', verifyFirst: 'Conecte sua conta primeiro (Passo 1)',
|
| 392 |
+
altPref: 'Prefere executar localmente?', altLink: 'Versão desktop →',
|
| 393 |
},
|
| 394 |
fr: {
|
| 395 |
hero: 'Votre IA privée en 2 minutes',
|
|
|
|
| 408 |
successH: 'Votre HomePilot est en marche !', successP: 'Attendez ~3 minutes pour le premier build.',
|
| 409 |
openSpace: 'Ouvrir Space →', goChata: 'Aller sur Chata',
|
| 410 |
tokenEmpty: 'Token vide ou invalide', verifyFirst: 'Connectez votre compte d\'abord (Étape 1)',
|
| 411 |
+
altPref: 'Préférez-vous exécuter localement ?', altLink: 'Version bureau →',
|
| 412 |
},
|
| 413 |
de: {
|
| 414 |
hero: 'Ihre private KI in 2 Minuten',
|
|
|
|
| 427 |
successH: 'Ihr HomePilot läuft!', successP: 'Warten Sie ~3 Minuten auf den ersten Build.',
|
| 428 |
openSpace: 'Space öffnen →', goChata: 'Zu Chata',
|
| 429 |
tokenEmpty: 'Token leer oder ungültig', verifyFirst: 'Verbinden Sie zuerst Ihr Konto (Schritt 1)',
|
| 430 |
+
altPref: 'Lieber lokal ausführen?', altLink: 'Desktop-Version →',
|
| 431 |
},
|
| 432 |
};
|
| 433 |
|
|
|
|
| 471 |
document.querySelector('#success h2').textContent = t.successH;
|
| 472 |
document.querySelector('#open-space').textContent = t.openSpace;
|
| 473 |
document.querySelector('#go-chata').textContent = t.goChata;
|
| 474 |
+
// Alt link
|
| 475 |
+
const altLink = document.querySelector('.alt-link');
|
| 476 |
+
if (altLink) {
|
| 477 |
+
altLink.querySelector('span').textContent = t.altPref;
|
| 478 |
+
altLink.querySelector('a').textContent = t.altLink;
|
| 479 |
+
}
|
| 480 |
// Lang picker
|
| 481 |
document.querySelectorAll('.lang-btn').forEach(b => {
|
| 482 |
b.classList.toggle('active', b.dataset.lang === l);
|