Přemění skeleton-app na reálnou web appku podle popisu uživatele. Zeptá se co chce, naimplementuje funkční MVP, lokálně commitne a deployne na Vercel přes CLI bez Git integrace.
Přeměníš skeleton-app na reálnou web appku. Uživatel popíše co chce, ty to naimplementuješ jako funkční MVP, lokálně commitneš do main a deployneš na Vercel přes CLI bez Git integrace.
Skeleton-app je Next.js 16 starter s tímto stackem:
docs/drizzle-query-guide.md)@ai-sdk/openai)CLAUDE.md v kořenu — přečti ho a dodržujKlíčové soubory:
src/app/ — App Router stránky a API routessrc/db/index.ts — DB klient (lazy inicializace přes getDb() — , ale až při prvním použití, aby build na Vercelu nepadal kvůli chybějícím env vars)src/db/schema.ts — Drizzle schéma (tabulky users, rateLimits)src/lib/api-handler.ts — wrapper pro API routes (vždy používej)src/lib/env.ts — env proměnné (bez Zod)src/proxy.ts — route protection (Clerk middleware)src/components/ui/ — base UI componentssrc/emails/ — React Email šablonysrc/db/index.ts používá lazy getDb() pattern: DB klient se vytvoří až při prvním zavolání funkce, ne při importu modulu. To je kritické pro Vercel deployment — při next build se importují API routes, ale env proměnné (TURSO_DATABASE_URL) nejsou dostupné. Pokud by se DB klient inicializoval na top-level, build spadne s LibsqlError: URL_INVALID: undefined.
Nikdy neměň src/db/index.ts na eager (top-level) inicializaci. Pokud potřebuješ upravit DB setup, zachovej lazy pattern.
Pokud uživatel zadal popis jako argument ($ARGUMENTS), použij ho. Pokud ne, zeptej se.
Zeptej se max 2-3 doplňujících otázek — jen to nejdůležitější:
Neptej se na: barvy, fonty, technické detaily stacku (ten je daný), deployment, auth flow.
Rozhodni co bude v první iteraci. Pravidla:
Stručně uživateli napiš co budeš implementovat (5-10 bodů max). Neptej se na potvrzení — rovnou implementuj.
Přečti CLAUDE.md a dodržuj všechny konvence.
Typicky budeš:
src/db/schema.ts (přidat tabulky pro appku)src/app/src/app/api/ (vždy přes apiHandler)src/proxy.ts pokud potřebuješ chránit nové routessrc/app/layout.tsx (metadata, navigace)src/components/src/emails/ pokud potřebasrc/app/page.tsx — hlavní landing pageDB dotazy piš výhradně Select API stylem podle docs/drizzle-query-guide.md.
Pokud přidáváš nové DB tabulky, vždy jim dej prefix podle projektu/appky, aby názvy nebyly generické a nepletly se při dalším rozšiřování skeletonu.
Turso DB je sdílená napříč klony skeleton-app. Tabulky jiných projektů v ní můžou existovat.
drizzle-kit push — v non-TTY shellu padne na interaktivní prompt a může poškodit cizí tabulky.schema.ts spusť pnpm db:generate --name <popis> (kebab-case, např. --name add-posts-table).DROP TABLE, ručně ho z migračního souboru smaž (tabulku odeber ze schématu, ale v DB ji nech).pnpm db:migrate → aplikuje migraci do DB.Při odebírání čehokoli ze schématu nebo sdíleného kódu grepni všechny importy (grep -r "importovanýNázev" src/ tests/) a smaž/uprav závislý kód včetně testů. Jinak build spadne na mrtvé importy.
pnpm lint
pnpm build
Obojí musí projít. Pokud ne, oprav chyby.
Projekt se musí přejmenovat ze skeleton-app na konkrétní název appky (kebab-case, např. recipe-tracker). Název skeleton-app, app, my-app apod. nejsou přípustné — projekt musí mít vlastní identitu. Název se promítne do:
package.json — name a descriptionCLAUDE.md — popis projektu a architektura pokud se výrazně změnilaREADME.md — název, popis a specifika appkysrc/app/layout.tsx — metadata (title, description)recipetracker_recipes)git add -A
git commit -m "feat: initialize [název appky] from skeleton
[stručný popis co appka dělá a jaké funkce má]
Co-Authored-By: Claude Opus 4.6 <[email protected]>"
Nikdy nepoužívej git push ani jiný push do remote repozitáře. Lokální commit je v pořádku, remote Git workflow není součástí tohohle skillu.
Používej ověřený CLI-only postup bez Git integrace.
Pravidla:
origin; pokud existuje, odstraň ho jen lokálně přes git remote remove origin--scope <team-nebo-user-scope> (to stačí jenom při prvním vercel --prod)vercel --prod, případně vercel --prod --scope <scope>Directory: ., Modify settings: No, Connect Git: No.env.local přes vercel env add <KEY> production --value <VALUE> --yes --force; nikdy je neposílej přes stdinvercel env add spouštěj jako samostatný příkaz — řetězení přes && se zasekne (CLI drží stdin)vercel --prodDůvody:
--value je bezpečnější než stdin, protože nehrozí nechtěný trailing newline v hodnotě env proměnnéPokud deploy selže:
originNa konci uživateli napiš:
console.* — vždy logger z @/lib/loggerapiHandlerdb.query.*, žádné relationsdrizzle-kit push — použij db:generate + db:migrateDROP TABLE — zkontroluj vygenerovaný SQL a DROP ručně smažany — TypeScript strict mode@/ — vždy