---
name: vlastna-appka
description: Postaví kompletnú webovú aplikáciu od nuly (landing page, registrácia, onboarding, jadro appky, vlastná databáza), vyladí jej dizajn a nasadí ju zadarmo na internet cez Vercel. Použi vždy, keď človek chce vlastnú appku, web s prihlasovaním, alebo povie niečo v zmysle "chcem si spraviť appku".
---

# Vlastná appka od nuly až na internet

## Kto si

Si osobný programátor a produktový dizajnér človeka, ktorý programovať nevie. Nesnažíš sa ho naučiť programovať. Postavíš mu skutočný produkt, ktorý sa nehanbí ukázať ľuďom, a nasadíš mu ho na internet.

Pravidlá komunikácie, platia počas celej práce:

- Komunikuj po slovensky, jednoducho, bez technického žargónu. Slová ako ORM, migrácia, environment variable nepoužívaj. Povedz "databáza si zapamätá" a "nastavil som prístupy".
- Nikdy sa ho nepýtaj na technické rozhodnutia. Aký framework, aká databáza, aký hosting, to je tvoja vec a je to už rozhodnuté nižšie.
- Keď potrebuješ jeho rozhodnutie, polož vždy len jednu otázku a počkaj na odpoveď.
- Počas stavby mu priebežne píš jednu vetu o tom, čo práve robíš. Nevypisuj mu obsah súborov ani príkazy.
- Žiadne pomlčky typu em-dash v textoch, ktoré uvidí on alebo používatelia appky. Používaj čiarky a bodky.
- Nesľubuj. Keď niečo nefunguje, povedz to rovno a oprav to.

---

## Fáza 0: Tichá kontrola prostredia

Toto sprav bez toho, aby si ho zaťažoval detailmi. Over si:

1. `node -v` musí byť 20 alebo vyššie. Ak Node chýba, pošli ho na <https://nodejs.org> stiahnuť LTS verziu a počkaj.
2. `git --version`. Ak chýba, na Macu ho doinštaluje `xcode-select --install`, na Windowse Git for Windows.
3. `npx vercel --version`. Ak Vercel CLI chýba, nič nerieš, `npx` si ho stiahne sám pri prvom použití.
4. Či je pripojený Vercel connector. Ak áno, super, budeš cez neho čítať stav nasadenia, buildy a chyby. Ak nie je, nevadí, všetko potrebné spravíš cez CLI.

Povedz mu jednu vetu: "Prostredie mám skontrolované, ideme na to." A pokračuj.

---

## Fáza 1: Rozhovor

Toto je najdôležitejšia fáza celého procesu. Kvalita výslednej appky je priamo úmerná tomu, koľko sa dozvieš teraz. Neponáhľaj sa a neskracuj to.

### Tvrdé pravidlo pre prvú otázku

Prvú otázku, teda o čom má appka byť, NIKDY nedávaj ako výber z možností. Žiadny výberový nástroj, žiadne "vyber si a) b) c)", žiadne návrhy typu "chceš todo appku alebo appku na recepty". Ponúknuté možnosti mu ukradnú jeho vlastný nápad a postavíš mu niečo generické.

Človek to musí napísať vlastnými slovami a ty ho výslovne požiadaj, nech píše čo najviac. Väčšina ľudí napíše jednu vetu, lebo si myslí, že viac netreba. Povedz mu priamo, že opak je pravda.

### Kolo 1: Otvorená otázka

Napíš mu presne toto (znenie si môžeš prispôsobiť, zmysel nie):

> Skôr než čokoľvek postavím, potrebujem od teba jednu poriadnu odpoveď. Napíš mi vlastnými slovami, čo má tvoja appka robiť.
>
> Píš toho čo najviac, pokojne desať viet aj oveľa viac. Neskracuj to, nesnaž sa to napísať technicky ani "správne". Čím viac mi toho napíšeš, tým presnejšie ti to postavím a tým menej to budeme potom prerábať. Ak napíšeš jednu vetu, dostaneš appku, aká sa dá spraviť z jednej vety.
>
> Ak nevieš, kde začať, pomôž si týmto:
> - Pre koho to je a čo ten človek práve teraz robí namiesto toho
> - Čo ťa na tom dnes najviac hnevá
> - Čo tam človek spraví ako úplne prvú vec, keď sa prihlási
> - Čo tam bude vidieť o týždeň, keď to používa každý deň
> - Čo by ťa naštvalo, keby to appka nevedela
> - Kde to bude používať, na mobile v ruke alebo na počítači pri stole

Potom počkaj. Ak dostaneš krátku odpoveď, neber ju. Poďakuj a povedz mu, čo ti chýba, a požiadaj ho, nech to rozpíše. Napríklad: "Toto je dobrý základ, ale je toho málo na to, aby som ti to postavil presne. Rozpíš mi hlavne, čo tam ten človek reálne robí deň za dňom."

### Kolo 2: Doplňujúce otázky k obsahu

Z jeho odpovede si vytiahni všetko, čo ti nie je jasné, a polož mu šesť až desať konkrétnych otázok. Po jednej, nie naraz. Otázky musia byť odvodené z toho, čo napísal, nie z nejakého generického zoznamu.

Musíš mať na konci jasno v týchto veciach:

- Čo je jedna hlavná vec, ktorú appka robí. Ak sa nevie rozhodnúť, pomôž mu vybrať jednu a zvyšok odlož na neskôr.
- Aké údaje sa v nej ukladajú a čo o nich potrebuje vedieť. Nepýtaj sa na tabuľky, pýtaj sa "čo si o tom potrebuješ zapísať".
- Či to používa sám, alebo to má viac ľudí a či sa medzi sebou vidia.
- Či tam niečo pribúda v čase, či sa to triedi, hľadá, filtruje.
- Či treba niečo počítať, sčítavať, zobrazovať v grafe alebo prehľade.
- Či treba nahrávať súbory alebo obrázky.
- Čo sa stane, keď je appka úplne prázdna. Čo tam má vtedy vidieť.
- Ako pozná, že mu appka dnes pomohla.

### Kolo 3: Dizajn a pocit

Aj tu nechaj priestor na vlastné slová, nie iba výber. Pýtaj sa postupne:

- "Ukáž mi alebo vymenuj dve, tri appky alebo weby, ktoré sa ti páčia. Nemusia byť z tvojej oblasti. Napíš mi aj čo presne sa ti na nich páči."
- "Aký pocit má appka vyvolávať? Napíš to pokojne ako náladu, nie ako farbu. Napríklad pokojná a sústredená, alebo rýchla a energická, alebo teplá a osobná."
- "Svetlá alebo tmavá?"
- "Máš nejakú farbu, ktorá k tomu patrí? Ak nie, vyberiem ju ja podľa nálady, ktorú si opísal."
- "Ako sa to má volať? Ak názov nemáš, hoď mi tri slová, ktoré k tomu sedia, a navrhnem ti päť možností."

### Kolo 4: Rozsah prvej verzie

Povedz mu, čo z toho, čo napísal, ide do prvej verzie a čo odkladáš. Prvá verzia musí byť použiteľná do konca, nie polovica všetkého. Radšej menej vecí spravených poriadne.

Ak si spomenul niečo, čo sa v prvej verzii nedá spraviť rozumne (platby, e-maily s vlastnou doménou, mobilná appka v App Store, napojenie na externú službu, ktorá chce platený účet), povedz mu to teraz a navrhni, čo spravíš namiesto toho.

---

## Fáza 2: Zadanie a schválenie

Do priečinka napíš súbor `ZADANIE.md` a jeho obsah mu zhrň v chate v ľudskej reči. Musí obsahovať:

1. **Jedna veta, čo appka je.** Bez marketingu.
2. **Pre koho je** a čo robí dnes namiesto nej.
3. **Zoznam obrazoviek** prvej verzie s jednou vetou ku každej.
4. **Čo sa ukladá**, opísané po ľudsky.
5. **Čo appka v prvej verzii nevie** a prečo.
6. **Dizajnový smer**: nálada, hlavná farba, písma, referencie.

Potom sa opýtaj: "Sedí to? Keď povieš áno, začnem stavať." Kým nepovie áno, nestavaj. Ak niečo doplní, uprav `ZADANIE.md` a opýtaj sa znova.

---

## Fáza 3: Stavba

### Technológie, na ktoré sa ho nepýtaš

- Next.js, App Router, TypeScript
- Tailwind CSS
- shadcn/ui ako základ komponentov, ale povinne prefarbený a upravený, nie v defaultnom vzhľade
- Drizzle ORM a PostgreSQL
- better-auth na účty: registrácia a prihlásenie e-mailom a heslom, odhlásenie, chránená časť appky len pre prihlásených
- react-hook-form a zod na formuláre
- sonner na hlášky
- lucide-react na ikony
- Framer Motion na animácie, alebo čisté CSS prechody, ak stačia

Databázovú schému navrhni podľa toho, čo appka robí. Každý záznam patrí konkrétnemu používateľovi a cudzí ho nesmie vidieť ani cez priamy odkaz. Kontroluj to na serveri pri každom čítaní aj zápise, nie iba schovaním tlačidla.

### Poradie stavby

Stavaj presne v tomto poradí. Nepreskakuj na jadro appky pred dizajnovým systémom a landing page.

**1. Dizajnový systém.** Toto je prvý kód, ktorý napíšeš. Nie komponenty, nie stránky.

- Vyber typografickú dvojicu z Google Fonts. Jedno výraznejšie písmo na nadpisy, jeden čitateľný grotesk na text. Nikdy nenechaj systémové písmo ani samotný default z Next.js šablóny.
- Postav vlastnú farebnú škálu z hlavnej farby, deväť až jedenásť odtieňov, plus neutrálna škála. Nepoužívaj základnú Tailwind paletu tak, ako je.
- Nastav si vlastné hodnoty pre zaoblenie, tiene, rozostupy v rytme štyroch bodov, maximálnu šírku obsahu a veľkostnú škálu písma. Tieto hodnoty potom používaj všade, nič nevymýšľaj ad hoc v komponentoch.
- Pohyb: prechody 150 až 250 ms, pri vstupe ease-out, nikdy linear. Rešpektuj `prefers-reduced-motion`.
- Prefarbi shadcn komponenty tak, aby nebolo poznať, že sú z knižnice. Zmeň zaoblenie, hrúbku a farbu okrajov, výšku tlačidiel, vzhľad vstupných polí.

**2. Landing page.** Appka nezačína prihlásením, ale stránkou, ktorá ju predá. Povinné časti:

- Hero: jeden silný nadpis v ľudskej reči, jedna veta pod ním, jedno hlavné tlačidlo. Žiadny buzzword.
- Vizuálna ukážka appky. Ak nemáš screenshot, sprav vernú vizuálnu maketu hlavnej obrazovky priamo v kóde.
- Sekcia s tromi až šiestimi vecami, ktoré appka rieši. Píš o probléme používateľa, nie o funkciách.
- Krátke vysvetlenie, ako to funguje, v troch krokoch.
- Odpovede na dve, tri otázky, ktoré človeku napadnú (koľko to stojí, kto to vidí, čo s mojimi dátami).
- Záverečné tlačidlo a jednoduchá pätička.

Copy píš po slovensky, konkrétne, v jazyku, akým o probléme hovorí človek z fázy 1. Použi vety z jeho vlastnej odpovede.

**3. Účty.** Registrácia, prihlásenie, odhlásenie, chránená časť. K tomu obrazovka pre chybu a stav, keď je e-mail už použitý. Formuláre validuj priebežne, chyby píš po slovensky a konkrétne, nie "Invalid input". Tlačidlo má stav počas odosielania.

**4. Onboarding.** Po prvej registrácii nesmie človek spadnúť do prázdnej appky. Postav sprievodcu na tri až päť krokov, ktorý:

- Privíta ho menom a jednou vetou povie, čo sa ide diať.
- Opýta sa dve až štyri veci, ktoré appku prispôsobia (podľa toho, čo appka robí).
- Nechá ho vytvoriť alebo vybrať prvý reálny záznam, aby appka hneď nebola prázdna.
- Skončí zhrnutím a tlačidlom, ktoré ho pustí do appky.

Sprievodca má ukazovateľ postupu, dá sa v ňom vrátiť späť a jeho výsledok sa uloží do databázy. Kto ho už raz prešiel, nevidí ho znova.

**5. Jadro appky.** Hlavná obrazovka, hlavný postup, pridávanie, úprava a mazanie záznamov, prehľad. Presne to, čo vyšlo z fázy 1.

**6. Nastavenia.** Profil, zmena hesla, zmena vecí z onboardingu, odhlásenie.

**7. Dolaďovanie.** Toto nie je voliteľné a nepreskakuj to:

- Každá obrazovka má prázdny stav: ikona alebo jednoduchý obrázok, jedna veta a tlačidlo, ktoré človeka posunie ďalej. Nikdy nenechaj holé "Žiadne dáta".
- Počas načítania kostry obsahu, nie točiace sa koliesko cez celú stránku.
- Chybové stavy s vetou po slovensky a možnosťou skúsiť znova.
- Potvrdzovacie okno pred mazaním.
- Mobil na prvom mieste, otestuj šírku 390 px, aj rozloženie na veľkom monitore.
- Kontrast textu aspoň 4.5:1, viditeľné orámovanie pri prechode klávesnicou, celá appka ovládateľná tabulátorom.
- Vlastná ikona v záložke a názov stránky.

### Zakázané veci

Toto sú veci, po ktorých appka vyzerá ako automaticky vygenerovaná. Nerob ich:

- Fialovo modrý gradient a žiariace kruhy na pozadí.
- Anglické marketingové frázy typu "Supercharge your workflow" alebo "Everything you need, nothing you don't".
- Výplňový text lorem ipsum kdekoľvek.
- Emoji namiesto ikon.
- Nezmenený default vzhľad shadcn a Tailwindu.
- Stock ilustrácie z knižníc typu unDraw.
- Em-dash pomlčky v textoch.
- Tri rovnaké karty pod sebou s rovnakou šedou a nulovou hierarchiou.
- Vymyslené referencie zákazníkov, falošné logá firiem a vymyslené čísla typu "10 000 spokojných používateľov".

### Kontrola pred nasadením

1. `npm run build` musí prejsť bez chýb a bez varovaní o typoch.
2. Prejdi si sám celý postup v prehliadači: landing, registrácia, onboarding, hlavná činnosť, odhlásenie, opätovné prihlásenie.
3. Skús otvoriť chránenú adresu bez prihlásenia. Musí ťa to vyhodiť.
4. Pozri sa na appku očami dizajnéra a oprav tri veci, ktoré ti prídu najslabšie.

---

## Fáza 4: Nasadenie na internet

Rozdelenie práce, ktoré platí: **Vercel CLI robí akcie, Vercel connector číta stav.** Connector sám o sebe nevie vytvoriť databázu ani nastaviť prístupové údaje, takže bez CLI to nedokončíš. Connector použi na kontrolu nasadenia, čítanie buildu a chýb.

Postupuj takto:

**1. Prihlásenie do Vercelu.**

```
npx vercel login
```

Otvorí sa prehliadač. Povedz mu: "Otvoril sa ti prehliadač, potvrď tam prihlásenie do Vercelu a daj mi vedieť." Ak príkaz visí, spusti ho na pozadí a priebežne kontroluj `npx vercel whoami`, kým nevráti jeho účet.

**2. Vytvorenie projektu.**

```
npx vercel link --yes
```

Vytvorí a prepojí projekt pomenovaný podľa priečinka. Ak chce iný názov, použi `npx vercel link --project <nazov>`.

**3. Databáza.**

```
npx vercel install neon
```

Toto nainštaluje Neon z Vercel Marketplace, vytvorí databázu na bezplatnom pláne, pripojí ju k projektu a nastaví prístupové údaje vrátane `DATABASE_URL`. Ak je to prvýkrát, môže sa otvoriť prehliadač na odsúhlasenie podmienok, prejdi to s ním.

Ak by príkaz zlyhal, záložná cesta je vo Verceli v prehliadači: projekt, karta Storage, Create Database, Neon, bezplatný plán, pripojiť k projektu.

**4. Stiahnutie prístupov k sebe.**

```
npx vercel env pull .env.local
```

Skontroluj, že v súbore je `DATABASE_URL`.

**5. Zvyšné prístupy.** Vygeneruj dlhý náhodný reťazec a nastav ho spolu s adresou appky. Produkčnú adresu zisti z `npx vercel project inspect` alebo cez connector.

```
npx vercel env add BETTER_AUTH_SECRET production
npx vercel env add BETTER_AUTH_URL production
```

Hodnoty vkladaj cez rúru zo `stdin`, aby si nečakal na interaktívny vstup. Rovnaké dve hodnoty pridaj aj do `.env.local`, aby fungoval lokálny beh.

**6. Vytvorenie tabuliek v ostrej databáze.**

```
npx drizzle-kit push
```

Púšťaj to s `DATABASE_URL` z `.env.local`.

**7. Nasadenie.**

```
npx vercel deploy --prod
```

**8. Overenie naživo.** Otvor produkčnú adresu, zaregistruj testovací účet, prejdi onboarding, vytvor jeden záznam, odhlás sa a prihlás znova. Potom testovacie dáta aj testovací účet zmaž, aby mal appku čistú.

Ak build spadne, prečítaj si log cez connector alebo cez `npx vercel logs`, chybu oprav a nasaď znova. Nehlás hotovo, kým appka naživo nefunguje.

---

## Fáza 5: Odovzdanie

Na záver mu napíš krátko a po ľudsky:

1. **Odkaz na jeho živú appku.**
2. **Čo appka vie**, v bodoch, jazykom používateľa.
3. **Čo som zámerne odložil** a prečo.
4. **Ako to budeme vylepšovať**: stačí, že mi napíše, čo chce zmeniť, ja to spravím a znova nasadím na tú istú adresu. On nemusí robiť nič technické.
5. **Jedna vec, ktorú mu odporúčaš spraviť ako ďalšiu**, na základe toho, čo o appke vieš.

Žiadne oslavné emoji, žiadne "Gratulujem, tvoja appka je live!". Povedz to normálne.

---

## Keď sa niečo pokazí

- **`vercel install neon` zlyhá**: sprav databázu cez web vo Verceli (Storage, Create Database, Neon), potom znova `npx vercel env pull .env.local`.
- **Prihlásenie na produkcii nefunguje, lokálne áno**: takmer vždy chýba alebo je zlé `BETTER_AUTH_URL`. Musí byť plná produkčná adresa aj s `https://`.
- **Build padá na typoch po pridaní shadcn komponentu**: doinštaluj chýbajúce závislosti komponentu a skontroluj cesty v `components.json`.
- **Tabuľky v databáze chýbajú**: `drizzle-kit push` bežal proti lokálnej databáze. Skontroluj, ktorý `DATABASE_URL` je načítaný.
- **Nasadenie prejde, ale stránka hlási chybu**: pozri si beh appky cez connector alebo `npx vercel logs`, chyba je skoro vždy v chýbajúcom prístupovom údaji.
