---
layout: 'page'
uri: '/skills/gk-init'
position: 10
slug: 'skills-gk-init'
parent: 'skills-start'
navTitle: 'gk-init'
title: 'GK — Rozjetí projektu (init)'
description: 'Rozjetí projektu po `git clone` NEBO z GitHub template („Use this template") — install, build, seed admina, dev loop a jednorázový GitHub bootstrap `make setup-github` (Actions permissions + branch ruleset + reset verze), který se z template nepřenese. Use when máš čerstvý clone nebo nový repo z template/boilerplate a potřebuješ se dostat od nuly k běžícímu serveru A správně nakonfigurovanému repu (git hooky, releasy, branch protection, verzování).'
name: 'gk-init'
---

# GK — Rozjetí projektu (init)

Cesta od `git clone` k běžícímu serveru: nainstalovat nástroje, sestavit binárku,
naseedovat admin účet, a vědět, jak točit dev loop.

## What & when

- Sáhni sem, když máš **čerstvý clone** (nebo nový stroj / onboarding kolegy) a chceš
  se dostat k běžícímu serveru, na který se dá přihlásit.
- Pokrývá: `make install`, `make build` vs `make dev`, `make serve`, `make fe-dev`,
  seed admina, a **základ CLI** (`serve` / `seed` / `create-user` / `worker`).
- NEtýká se: konfigurace a env (`/gk-config`), přidávání featur end-to-end
  (`/gk-feature`), ani celkového mentálního modelu vrstev (`/gk-architecture`).
  Hloubku scheduleru / durable enginu tu jen zmíníme — patří do samostatného skillu.

## For non-tech / juniors

Projekt je **jedna binárka** (`bin/app`): Go server, do kterého je „zazipovaný" celý
frontend (Vue 3 SPA). Když ji spustíš, dostaneš web i API z jednoho procesu — žádná
další služba se nemusí pouštět zvlášť.

Aby ta binárka vznikla, je potřeba pár věcí: stáhnout Go a Node knihovny
(`make install`), sestavit frontend i backend (`make build`), a spustit
(`make serve`). Databáze je obyčejný soubor SQLite na disku (`./data/app.db`) — žádný
DB server. **Seed** je jednorázové naplnění DB výchozími daty (admin účet), aby ses měl
čím přihlásit.

## How it works

- **Migrace běží samy.** `Application.Run()` (`app/application.go`) zavolá
  `migrations.RunUp()` **před každým** subcommandem — takže DB schéma se dorovná i při
  `seed` / `create-user`, nejen u `serve`. Ruční `make migrate-up` na první spuštění
  nepotřebuješ.
- **`make build` = plná binárka:** `di` (Wire) → `fe-build` (Vite → `public/`) → Go
  build, který `public/` embeduje. **`make dev` je jen backend** (Makefile řádek ~95:
  `di` + `go build`, **bez** `fe-build`) — rychlý při práci na Go, ale neembeduje SPA.
- **`make serve`** jen spustí `./bin/app serve` — nejdřív musíš mít sestavenou binárku.

  | Příkaz | Co dělá |
  |---|---|
  | `./bin/app serve` | HTTP server **+ in-process scheduler + durable-task worker** v jednom procesu (sdílí jeden `ctx`, SIGTERM nechá vše korektně dobíhat — `console/serve.go`) |
  | `./bin/app seed` | Vytvoří admin účet (pokud chybí), heslo z `APP_SEED_ADMIN_PASSWORD` (`console/seed.go`) |
  | `./bin/app create-user -n <nick> -p <pass> [-e <email>] [-r <role>]` | Vytvoří uživatele; role default `admin`, alternativa `user` (`console/create_user.go`) |
  | `./bin/app create-superadmin -n <nick> -p <pass> [-e <email>]` | Vytvoří platform superadmina (cross-tenant) — roli nelze založit přes API, jen out-of-band: tímto příkazem (`console/create_superadmin.go`) nebo `seed` s `APP_SEED_SUPERADMIN_PASSWORD` |
  | `./bin/app create-tenant -n <name>` | Vytvoří tenant a vypíše jeho id — pro multitenant režim (`console/create_tenant.go`) |
  | `./bin/app worker` | Jen persistentní durable-task worker, bez HTTP serveru — pro škálování workerů zvlášť (`console/worker.go`) |

- **`create-user` jede přes `SystemCommandBus`** (transakce, audit trail, post-commit
  eventy, panic→Sentry — bez Authorize/Tenant middleware) a uvnitř volá stejný
  `*usercmd.CreateUserHandler` jako HTTP API — recykluje stejnou validaci, hashing
  a unique-nickname check.

## Recipe

### Recipe: první rozjetí po clone (plná binárka)

1. `corepack enable` — zapne yarn 4 (Berry), který projekt používá.
2. `cp .env.example .env` — v `.env` **změň `APP_JWT_SECRET`** z placeholderu (≥ 32 znaků)
   a nastav `APP_SEED_ADMIN_PASSWORD` (8–128 znaků), jinak `seed` selže.
3. `make install` — stáhne Go deps, doinstaluje nástroje (`wire`, `golines`,
   `golangci-lint`, `goose`, `go-arch-lint`) a yarn balíčky.
4. `make build` — sestaví frontend i backend → `bin/app` (migrace pak doběhnou samy při
   prvním spuštění).
5. `./bin/app seed` — vytvoří admina.
6. `make serve` — server běží na `http://localhost:3000` (port z `APP_HTTP_PORT`).
   Přihlas se nickem `admin` a heslem z `APP_SEED_ADMIN_PASSWORD`.

### Recipe: nový projekt z template (gokick jako boilerplate)

gokick je GitHub **template**. „Use this template" → nový repo dostane všechny
**soubory** (workflowy, `lefthook.yml`, `commitlint.config.js`, release-please
config, …) a CI se rozběhne samo (Actions jsou u template-repa zapnuté, na rozdíl
od forků). Ale **nastavení repa** a **lokální git hooky** se nepřenášejí — musíš je
jednou dorovnat:

1. Naklonuj nový repo a projeď „první rozjetí po clone" výše (`make install` mimo
   jiné nadrátuje git hooky — `.git/hooks` není v repu, takže bez tohoto kroku
   commit-msg + pre-push hook neběží; do té doby commity chytá CI `commitlint.yml`).
2. `make setup-github ARGS="--reset-version 0.1.0"` — jednorázový bootstrap
   (potřebuje `gh` login s adminem na repu). Zapne **Actions write + create-PR
   permissions** (bez nich release-please neotevře release PR ani nepushne tag) a
   založí **branch ruleset** na `main` (vyžadovat PR, zákaz force-push/mazání).
   `--reset-version` přepíše `.release-please-manifest.json` z gokickovy verze na
   tvoji výchozí (jinak by tvůj první release navázal na gokickovu verzi) — commitni
   ho pak přes PR. Detail: `scripts/setup-github.sh --help`.
3. (Volitelně) Publikace image do GHCR: `gh variable set RELEASE_PUSH --body true`
   (bez ní se image jen postaví, nepushne). Sentry: `SENTRY_*` vars + `SENTRY_AUTH_TOKEN`.

Od té chvíle běží plný workflow: Conventional Commits (lokálně hook + CI), branch
naming, a release-please řídí verze + `CHANGELOG.md`. Konvence: `CONTRIBUTING.md`;
release mechanika: `/gk-deploy`.

### Recipe: dev loop (rychlá iterace)

- **Práce na Go:** `make dev` (backend-only build) → `make serve`. Opakuj po každé změně.
- **Práce na frontendu:** `make fe-dev` — Vite dev server s hot-reloadem na
  `http://localhost:5173`, který proxuje API na běžící `serve` (`:3000`). Drž oba
  procesy zároveň. `APP_CORS_ORIGIN=http://localhost:5173` v `.env` tomu odpovídá.
- Po změně Wire providerů: `make di`. Po změně vrstev: `make arch-check`.

## Invariants & pitfalls

- **`make dev` neembeduje SPA.** Sestaví jen backend (bez `fe-build`) a vygenerované
  bundly v `public/` jsou gitignored — po čistém clone tedy `make dev` + `serve` dá
  server **bez frontendu**. Na funkční web použij `make build` (embed) **nebo**
  `make fe-dev` (Vite na `:5173`).
- **`make serve` nic nebuilduje** — jen spustí `./bin/app`. Když binárka neexistuje
  nebo je stará, nejdřív `make build` / `make dev`.
- **`seed` bez `APP_SEED_ADMIN_PASSWORD` selže.** Proměnná je povinná jen pro `seed`;
  v prostředích, kde seed neběží, ji nech prázdnou.
- **Změň `APP_JWT_SECRET`.** Placeholder v `.env.example` je ≥ 32 znaků — délku vynucuje
  `NewJwtService` (`app/infrastructure/security/jwt.go`): prázdný nebo kratší secret
  shodí start. Ale ponechat výchozí tajemství je bezpečnostní díra — vždy ho přepiš
  na vlastní náhodný řetězec.
- **Nepotřebuješ ruční migraci na první boot** — `RunUp()` ji udělá za tebe před každým
  subcommandem.
- **Go 1.26+ a Node 24+** jsou prerekvizity.
- **Z template se nepřenášejí nastavení ani hooky, jen soubory.** Branch ruleset a
  Actions permissions jsou nastavení repa (řeší `make setup-github`); git hooky jsou
  lokální (řeší `make install`); `.release-please-manifest.json` nese gokickovu verzi
  (řeší `--reset-version`). Repo variables (`RELEASE_PUSH`, `SENTRY_*`) taky ne — ale
  `release.yml` je defaultně safe-off, takže bez nich se image jen postaví, nepushne.

## Related

- Sousední skills: `/gk-config` (env + konfigurace), `/gk-feature` (přidání featury
  end-to-end), `/gk-architecture` (vrstvy a pravidla závislostí), `/gk-bus` (CQRS busy).
- Docs: [Installation](/framework/installation).
- Workflow: `CONTRIBUTING.md` (větve, commity, release), `/gk-deploy` (release mechanika).
- Kód: `app/presentation/console/` (`root.go`, `serve.go`, `seed.go`, `create_user.go`,
  `create_superadmin.go`, `create_tenant.go`, `worker.go`), `app/application.go` (auto-migrace), `Makefile`, `scripts/setup-github.sh`, `.env.example`.

---

[← Start & orientace](/skills/start.md) | [gk-config →](/skills/gk-config.md)