# Luusti na Hostpoint domene Tento navod je pre realny pilot, kde sa kamarati vedia registrovat, admin ich schvali a potom mozu tvorit profily miest s videom, fotkami a AI pomocou. ## Dolezite rozhodnutie Luusti nie je iba staticka stranka. Potrebuje Node.js backend pre: - registraciu a login, - admin schvalovanie uzivatelov a miest, - nahravanie videa a fotiek, - AI pomoc pri tvorbe profilu, - sukromne poziadavky na hladanie spoluhraca, - záchranne kody miest ako `TG1223`. Obycajny FTP upload do `www` priecinka na Hostpointe preto nestaci. FTP je vhodne pre staticky web, ale Luusti potrebuje stale bezat ako serverova aplikacia. Najlepsia cesta pre pilot: ```text Render = spusti Node aplikaciu Supabase = databaza a media storage Hostpoint = domena a DNS pre luusti.com / pilot.luusti.com ``` Alternativa je priame nasadenie na Hostpoint Managed Flex Server M alebo vyssi. ## Varianta A: odporucany pilot cez Render + Hostpoint DNS Toto je najrychlejsia a najcistejsia cesta pre investor demo a prvych priatelov. ### 1. Priprav Supabase 1. Otvor Supabase a vytvor novy projekt. 2. Otvor SQL Editor. 3. Spusti cely subor `supabase-schema.sql`. 4. Skopiruj: - `Project URL` ako `SUPABASE_URL`, - `service_role key` ako `SUPABASE_SERVICE_ROLE_KEY`. Service role key patri iba do server environment variables. Nikdy ho nedavaj do frontendu. ### 2. Nasad Luusti na Render 1. V Render vytvor `Web Service`. 2. Nahraj alebo pripoj projekt Luusti. 3. Nastav: ```text Build command: npm install Start command: npm start Health check path: /api/health ``` 4. Nastav environment variables: ```text NODE_ENV=production HOST=0.0.0.0 PORT=10000 LUUSTI_PUBLIC_PLACES=false LUUSTI_ADMIN_CODE=vlastny-silny-admin-kod LUUSTI_INVITE_CODE=vlastny-pilot-invite-kod LUUSTI_ALLOWED_EMAILS=tvoj@email.com,kamarat1@email.com,kamarat2@email.com SUPABASE_URL=https://tvoj-projekt.supabase.co SUPABASE_SERVICE_ROLE_KEY=tvoj-service-role-key SUPABASE_MEDIA_BUCKET=place-media OPENAI_API_KEY=volitelne OPENAI_MODEL=gpt-5.2 ``` Ak `OPENAI_API_KEY` zatial nenastavis, AI pomoc pobezi v lokalnom fallback rezime. Na investor demo je lepsie kluc doplnit. ### 3. Pripoj domenu v Hostpointe Odporucanie pre pilot: ```text pilot.luusti.com ``` 1. V Render otvor svoj Web Service. 2. Otvor `Settings` -> `Custom Domains`. 3. Pridaj `pilot.luusti.com`. 4. Render ti ukaze DNS hodnotu, najcastejsie CNAME target. 5. Prihlas sa do Hostpoint Control Panel. 6. Otvor domenu `luusti.com`. 7. Otvor DNS Zone / DNS records. 8. Pridaj zaznam: ```text Type: CNAME Name: pilot Target: hodnota-z-Render TTL: default ``` 9. Pockaj na DNS propagaciu. 10. V Render over domenu a zapni SSL, ak sa nezapne automaticky. ### 4. Pilot test po nasadeni Otvor: ```text https://pilot.luusti.com/api/health ``` Spravna odpoved: ```json { "ok": true, "mode": "private-pilot", "storage": "supabase" } ``` Potom otestuj: 1. Registruj test usera cez invite kod. 2. Prihlas sa ako admin. 3. Prihlas sa ako user. 4. Vytvor miesto s GPS, videom, fotkami a AI pomocou. 5. Prihlas sa ako admin. 6. Schval miesto. 7. Skontroluj, ze miesto ma kod ako `TG1223`. 8. Skontroluj, ze bez loginu verejnost nevidi neverejny pilot obsah. ## Varianta B: priame nasadenie na Hostpoint Managed Flex Server Toto pouzi iba ak mas Hostpoint Managed Flex Server M alebo vyssi. Bez Flex Servera Node.js backend nepobezi ako treba. ### 1. Prihlas sa do Hostpoint Control Panel 1. Otvor `https://admin.hostpoint.ch`. 2. Prihlas sa Hostpoint ID. 3. Skontroluj, ze mas Managed Flex Server M alebo vyssi. 4. Ak mas iba bezny webhosting, pouzi Variantu A cez Render. ### 2. Nahraj projekt cez SSH/SFTP 1. Vytvor alebo pouzi SSH/SFTP pristup. 2. Na serveri vytvor priecinok: ```text ~/app/luusti ``` 3. Nahraj obsah balika `Luusti-production-ready.zip` do `~/app/luusti`. 4. Rozbal ZIP tak, aby v `~/app/luusti` boli priamo subory: ```text server.js app.js index.html package.json supabase-schema.sql assets/ ``` ### 3. Vytvor `.env` V `~/app/luusti` vytvor subor `.env` podla `.env.pilot.example`: ```text HOST=127.0.0.1 PORT=4173 LUUSTI_ADMIN_CODE=vlastny-silny-admin-kod LUUSTI_INVITE_CODE=vlastny-pilot-invite-kod LUUSTI_PUBLIC_PLACES=false LUUSTI_ALLOWED_EMAILS=tvoj@email.com,kamarat1@email.com,kamarat2@email.com SUPABASE_URL=https://tvoj-projekt.supabase.co SUPABASE_SERVICE_ROLE_KEY=tvoj-service-role-key SUPABASE_MEDIA_BUCKET=place-media OPENAI_API_KEY=volitelne OPENAI_MODEL=gpt-5.2 ``` ### 4. Otestuj Node aplikaciu cez SSH V SSH spusti: ```text cd ~/app/luusti npm install npm start ``` Ak aplikacia bezi, mala by pocuvat na: ```text 127.0.0.1:4173 ``` ### 5. Nastav Nginx proxy vo Hostpoint Control Panel 1. Otvor Hostpoint Control Panel. 2. Otvor `Websites`. 3. Vytvor alebo uprav website pre `luusti.com` alebo `pilot.luusti.com`. 4. V basic settings vyber `Nginx custom mode (proxy for own application)`. 5. Ako backend server nastav port `4173`. 6. Ak upravujes existujucu website, hladaj: ```text Websites -> Edit -> Locations -> Proxy settings -> Backend server ``` Hostpoint proxy ocakava, ze aplikacia pocuva na IPv4 loopback adrese `127.0.0.1`. ### 6. Nastav automaticke spustanie Na produkcii nesmie aplikacia bezat iba v otvorenom SSH okne. Nastav Custom Service Control / supervisord: ```text hpservices supervisord add luusti ``` Potom uprav: ```text ~/.services/supervisord/luusti/service.conf ``` Minimalne nastavenie: ```text [program:luusti] command=/usr/local/bin/node %(ENV_HOME)s/app/luusti/server.js directory=%(ENV_HOME)s/app/luusti/ autostart=true autorestart=true stdout_logfile=%(ENV_HOME)s/.services/supervisord/luusti/log/default.log stderr_logfile=%(ENV_HOME)s/.services/supervisord/luusti/log/default.err ``` Potom spusti: ```text supervisorctl update ``` Ak dostanes chybu, najprv spusti: ```text hpservices supervisord start ``` ### 7. Finalna kontrola Otvor: ```text https://tvoja-domena/api/health ``` Musi vratit: ```text ok: true mode: private-pilot storage: supabase ``` Ak `storage` ukaze `json`, chyba Supabase nastavenie v `.env`. ## Co poslat priatelom Priatelom neposielaj admin kod. Posli im iba: ```text Pilot URL Invite kod Postup: Register s invite kodom -> Add place -> pockat na schvalenie miesta ``` Admin flow: ```text Admin login -> schval miesto ``` ## Hostpoint zdroje - Hostpoint Node.js na Managed Flex Serveri: https://support.hostpoint.ch/en/products/flex-server/frequently-asked-questions-about-managed-server/node-js-on-flex-servers - Hostpoint FTP upload: https://www.support.hostpoint.ch/en/products/webhosting/first-steps/how-do-i-upload-my-website-via-ftp - Hostpoint DNS: https://support.hostpoint.ch/en/technical/dns