--- layout: 'page' uri: '/framework/overview/dev-stack' position: 1 slug: 'framework-overview-dev-stack' parent: 'framework-overview' navTitle: 'Dev Stack' title: 'Dev Stack' description: 'Technologický stack a adresářová struktura.' --- # Dev Stack Single-binary Go server s embedovaným Vue 3 SPA. Po buildu vznikne jedna spustitelná binárka `./app serve`. Minimální verze Go 1.26. ## Backend (Go) | Komponenta | Knihovna | Účel | |---|---|---| | CLI framework | `github.com/spf13/cobra` | Definice příkazů | | Dependency Injection | `github.com/google/wire` | Compile-time DI | | HTTP server | `net/http` (stdlib) | Go 1.26 routing | | Databáze | `github.com/ncruces/go-sqlite3` | Pure-Go SQLite (bez CGO) | | SQL extensions | `github.com/jmoiron/sqlx` | Named queries, struct scanning | | Migrace | `github.com/pressly/goose/v3` | Verzované SQL migrace | | Env konfigurace | `github.com/joho/godotenv` | Načítání `.env` | | UUID | `github.com/google/uuid` | Unikátní identifikátory | | Hesla | `golang.org/x/crypto` | bcrypt (s SHA-256 prehash) | | JWT | `github.com/golang-jwt/jwt/v5` | Generování a validace tokenů | | Arch linting | `github.com/fe3dback/go-arch-lint` | Kontrola závislostí mezi vrstvami | | Error tracking | `github.com/getsentry/sentry-go` | Sentry — paniky + terminální selhání jobů (gated na DSN) | ## Frontend (Vue 3 + Vite) | Komponenta | Knihovna | Účel | |---|---|---| | Framework | `vue@^3.5` | Reaktivní UI | | Routing | `vue-router@^5` | Client-side SPA routing | | Build tool | `vite@^8` | Dev server + produkční build | | CSS | `tailwindcss@^4` + `@tailwindcss/vite` | Utility-first styling | | TypeScript | `typescript@^6` + `vue-tsc` | Typová kontrola (maximum strictness) | | Linting | `eslint@^10` + `typescript-eslint` + `eslint-plugin-vue` | Statická analýza (strictTypeChecked) | | Formatting | `@stylistic/eslint-plugin` | Formátování kódu (nahrazuje Prettier) | | Testování | `vitest@^4` + `@vue/test-utils` + `jsdom` | Unit testy komponent | | Error tracking | `@sentry/vue@^10` | Sentry — Vue chyby + unhandled rejections (gated na DSN) | | Source maps | `@sentry/vite-plugin@^5` | Upload source-map do Sentry (čitelné stack traces, dev-dependency) | | Package manager | `yarn@4` (Berry, nodeLinker: node-modules) | Správa závislostí | ## Adresářová struktura ``` project/ ├── cmd/main.go # Entry point ├── app/ # Go backend │ ├── application.go # App lifecycle │ │ │ ├── domain/ # Vrstva 1: Čisté jádro │ │ ├── shared/ # AuthClaims, errors, events, interfaces │ │ │ (PasswordHasher, PermissionChecker, Transactor) │ │ ├── user/ # User entity, Nickname/Role VO, Repository interface │ │ └── token/ # RefreshToken entity, TokenRepository interface │ │ │ ├── application/ # Vrstva 2: Use cases (po doménách) │ │ ├── bus/ # CommandBus, QueryBus, EventBus │ │ │ └── middleware/ # Recovery, logging, authorize, transaction, events │ │ ├── auth/ # command/ (login, refresh, logout) │ │ ├── profile/ # command/ (change_password), query/ (get_profile) │ │ ├── user/ # command/ (create, update, delete), query/ (list) │ │ └── dashboard/ # query/ (user_dashboard, admin_dashboard) -- placeholdery │ │ │ ├── infrastructure/ # Vrstva 3: Implementace │ │ ├── config/ # Konfigurace (.env) │ │ ├── database/ # SqliteManager + MigrationManager │ │ ├── sqlite/ # BaseRepository, Conn, Seeder │ │ │ ├── user/ # user.Repository implementace │ │ │ └── token/ # token.TokenRepository implementace │ │ ├── security/ # JWT, PasswordHasher, PermissionChecker │ │ └── di/ # Wire DI providers + wire_gen.go │ │ │ └── presentation/ # Vrstva 4: I/O │ ├── http/ │ │ ├── handler/ # HTTP handlery │ │ ├── middleware/ # Trace, security headers, CORS, logging, JWT │ │ ├── response/ # JSON response helpery │ │ └── server/ # HTTP server + routing │ └── console/ # Cobra CLI (serve, seed, create-user) │ ├── assets/ # Frontend zdrojáky (Vue 3 + Vite) │ ├── app.ts # Vue mount point (createApp + router + CSS) │ ├── App.vue # Root komponenta (<RouterView /> + Toast) │ ├── router.ts # Vue Router (routes, guards) │ ├── tailwind.css # Tailwind entry (@import 'tailwindcss') │ ├── app/ # Aplikační komponenty (po doménách) │ │ ├── <Domain>/Views/ # Routované views (orchestrátory) │ │ ├── <Domain>/Components/ # Doménové komponenty (formuláře, tabulky, karty) │ │ ├── <Domain>/types/ # Typové definice (.ts soubory, jeden typ na soubor) │ │ └── Layout/ # AppLayout + AppHeader (chrome pro autentizovaný stav) │ └── app-ui/ # Sdílené, generic UI komponenty a composables │ ├── Auth/ # useAuth, authFetch, state, login/logout/refresh, permissions + typy │ ├── Fetch/ # apiFetch, apiUpload, apiDownload, accessToken, parseResponse + typy │ ├── Alerts/ # ErrorAlert │ ├── Buttons/ # Button │ ├── ClickOutside/ # useClickOutside composable │ ├── Dropdown/ # Dropdown (slot-based, click-outside auto-close) │ ├── Icons/ # SVG ikony │ ├── Inputs/ # Input, Select, CheckBox, DateTimeInput │ ├── Loading/ # Spinner │ ├── Modals/ # Modal, ConfirmModal │ └── Toast/ # useToast + Toast komponenty │ ├── tests/ # Frontend testy (Vitest + Vue Test Utils) │ ├── public/ # Vite build output (embedováno do Go binárky) │ ├── embed.go # //go:embed * → embed.FS │ ├── favicon.ico # Favicon (commitováno) │ ├── index.html # Generovaný Vite entry (gitignored) │ └── assets/ # Generované JS/CSS bundly (gitignored) ├── migrations/ # Goose SQL migrace (embed) ├── docs/ # Documan dokumentace (markdown) ├── docker/ # Docker konfigurace │ ├── production/ # Produkční Dockerfile (multi-stage) │ └── documan/ # Documan dev service │ ├── Makefile # Build, lint, format, migrate, serve ├── go.mod / go.sum # Go dependencies ├── package.json / yarn.lock # Frontend dependencies ├── .yarnrc.yml # Yarn v4 konfigurace (nodeLinker: node-modules) ├── vite.config.ts # Vite build + dev proxy konfigurace ├── tsconfig.json # TypeScript (maximum strictness) ├── eslint.config.ts # ESLint (strictTypeChecked + Stylistic) ├── index.html # Vite HTML entry point ├── env.d.ts # TypeScript deklarace (Vite client, .vue moduly) ├── .env / .env.example # Env konfigurace (porty, DB, JWT) ├── .go-arch-lint.yml # Pravidla závislostí mezi vrstvami └── docker-compose.yml # Docker services (documan) ``` ## Detaily - SQLite je pure-Go (`ncruces/go-sqlite3`) -- žádné CGO, cross-compile bez problémů. - `sqlx` používá `db:"..."` tagy na entity structech pro automatický struct scanning. - `go-arch-lint` se spouští přes `make arch-check` a hlídá pravidla závislostí mezi vrstvami (viz [Architecture](/framework/overview/architecture)). - Frontend se builduje do `public/` a embeduje se do Go binárky přes `embed.FS`. - Error tracking přes **Sentry** (BE `sentry-go` i FE `@sentry/vue`) je gated na DSN — bez `APP_SENTRY_DSN` / `APP_SENTRY_DSN_FRONTEND` běží jako no-op. Hlásí se jen neočekávané chyby (recovered paniky, terminální selhání jobů, Vue chyby + rejections), ne běžné 4xx. Detaily: [Observability](/framework/infrastructure/observability), nastavení: [Sentry guide](/guides/sentry). --- [← Overview](/framework/overview.md) | [Installation →](/framework/overview/commands.md)