VímŽeNicNevím.cz - Tech Stack a Architektura Projektu
"Jediné, co vím, je, že nic nevím." — Sokrates (a každý Senior Developer)
Osobní blog a digitální zahrada zaměřená na paradox expertízy v softwarovém inženýrství. Místo pro dokumentaci slepých uliček, technických deep-dives a hledání pokory v nekonečném světě JavaScriptu.
🚀 O projektu
Tento web není postaven na Next.js, jak by se v roce 2025 slušelo. Je to experimentální hřiště postavené na TanStack Start — moderním full-stack frameworku od tvůrců TanStack Query a TanStack Router. Projekt slouží jako důkaz konceptu (PoC) pro type-safe React aplikace s důrazem na Developer Experience, bezpečnost a moderní vývojářské workflow.
Aplikace je navržena jako single-page application s server-side rendering (SSR), která kombinuje rychlost klientské interakce s SEO benefity serverového renderování. Celý stack je postaven na moderních nástrojích, které jsou často přehlíženy ve prospěch "velkých hráčů", ale nabízejí větší kontrolu a flexibilitu.
🛠 Tech Stack
Core Framework & Language
-
Framework: TanStack Start 1.159.5
- Full-stack React framework s built-in SSR/SSG
- File-based routing s automatickou code-splitting
- Type-safe data loading s loaders a actions
- Streaming SSR pro optimální performance
-
React: 19.2.4
- React 19 s novými features (Server Components, Actions)
- Concurrent rendering pro lepší UX
-
TypeScript: 5.9.3
- Striktní typová kontrola (
strict: true) - Type-safe routing a data fetching
- Automatická inference typů pro lepší DX
- Striktní typová kontrola (
Routing & Navigation
- TanStack Router: 1.159.5
- Type-safe routing bez "magic strings"
- Nested layouts a route groups
- Automatic route-based code splitting
- Built-in search params validation
- Pre-loading strategies pro instant navigation
Styling & UI
-
Tailwind CSS: 4.1.18
- Utility-first CSS framework
- JIT (Just-In-Time) compiler pro minimální bundle size
- Custom design tokens a theme extensions
- @tailwindcss/typography: Plugin pro krásnou typografii v MDX obsahu
-
Lucide React: 0.563.0
- Moderní, konzistentní icon library
- Tree-shakeable a optimalizovaná pro bundle size
-
Motion: 12.34.0
- Declarative animations pro React
- Smooth transitions a micro-interactions
-
@lottiefiles/dotlottie-react: 0.17.14
- Podpora pro komplexní Lottie animace
- Optimalizované pro web performance
Obsah & Markdown
- react-markdown: 10.1.0
- Renderování Markdown obsahu jako React komponenty
- rehype-highlight: 7.0.2 — Syntax highlighting pro code blocks
- highlight.js: 11.11.1 — Zvýrazňování kódu s podporou pro 200+ jazyků
- gray-matter: 4.0.3 — Parsing frontmatter z MDX souborů (metadata článků)
Monitoring & Error Tracking
-
Sentry: @sentry/tanstackstart-react 10.38.0
- Real-time error tracking a performance monitoring
- Source maps pro debugging produkčních errorů
- Session replay pro analýzu user experience
- Custom error boundaries pro graceful error handling
- Integrace s TanStack Start pro SSR error tracking
-
UptimeRobot:
- Monitoring dostupnosti aplikace (external service)
- Upozornění na downtime přes email/SMS/aplikace
- Performance metrics a response time tracking
Testing & Quality Assurance
-
Vitest: 4.0.18
- Unit testing framework kompatibilní s Vite
- Fast execution díky native ESM
- @vitest/browser-playwright: 4.0.18 — Browser testing s Playwright
- @testing-library/react: 16.3.2 — Testing utilities pro React
- @testing-library/jest-dom: 6.9.1 — Custom matchers pro DOM assertions
- @vitest/coverage-v8: 4.0.18 — Code coverage reporting
- jsdom: 28.0.0 — DOM simulation pro unit testy
-
Playwright: 1.58.2
- End-to-end testing v reálných browserech
- Cross-browser testing (Chromium, Firefox, WebKit)
Development Tools
-
Storybook: 10.2.8
- Component-driven development environment
- @storybook/react-vite: Vite integration pro fast refresh
- @storybook/addon-docs: Automatická dokumentace komponent
- @storybook/addon-a11y: Accessibility testing v real-time
- @storybook/addon-vitest: Integrace Vitest testů do Storybooku
- @chromatic-com/storybook: Visual regression testing
-
ESLint: 10.0.0
- Static code analysis pro konzistenci kódu
- typescript-eslint: 8.55.0 — TypeScript-specific pravidla
- eslint-plugin-react: 7.37.5 — React best practices
- eslint-plugin-react-hooks: 7.0.1 — Validace React Hooks pravidel
- eslint-plugin-interface-to-type: 1.1.0 — Vlastní pravidlo pro vynucení
typemístointerface - eslint-plugin-storybook: 10.2.8 — Storybook-specific linting
-
Vite: 7.3.1
- Lightning-fast dev server s Hot Module Replacement (HMR)
- Optimalizovaný production build s Rollup
- @vitejs/plugin-react: 5.1.4 — React Fast Refresh support
- vite-tsconfig-paths: 6.1.0 — Support pro TypeScript path aliases
Dependency Management & Security
-
pnpm: 10.29.2
- Rychlý, disk-efficient package manager
- Strict node_modules structure pro zabránění phantom dependencies
- ignore-scripts=true v
.npmrc— Blokace postinstall skriptů pro prevenci supply chain útoků
-
Renovate Bot:
- Automatické dependency updates každé pondělí ráno
- Grouping souvisejících balíčků (React core, ESLint)
- Pinned versions pro konzistenci napříč prostředími
- Automatické merging vypnuté pro manuální review
📦 Klíčové Funkcionalita
1. Type-Safe Routing
Díky TanStack Routeru neexistují "broken links". Každá route je plně typovaná — pokud cesta není definována v typu aplikace, TypeScript zakáže kompilaci. To eliminuje runtime chyby způsobené překlepem v URL nebo odkazem na neexistující stránku.
// ❌ Chyba při kompilaci - cesta neexistuje
<Link to="/neexistujici-stranka">Link</Link>
// ✅ Typovaný link s autocomplete
<Link to="/blog/$slug" params={{ slug: "typescript-tips" }}>Článek</Link>
2. Server-Side Rendering (SSR) & Streaming
Aplikace využívá plný potenciál SSR pro:
- SEO optimalizaci — crawlery vidí plně renderovaný HTML
- Rychlejší First Contentful Paint (FCP) — uživatel vidí obsah bez čekání na JS
- Streaming — progresivní rendering dlouhých stránek (blog posts)
- Hydration — React převezme kontrolu po načtení na klientu
3. Bezpečnostní Strategie (Supply Chain Security)
Projekt používá agresivní nastavení pro minimalizaci rizika kompromitovaných npm balíčků:
-
.npmrc:
ignore-scripts=true- Blokuje všechny postinstall/preinstall skripty
- Prevence proti malicious code injection přes npm packages
- Manuální kontrola nutných skriptů před povolením
-
Renovate Bot
- Pravidelné dependency updates každé pondělí
- Grouping balíčků pro přehlednost (React, ESLint)
- Pinned versions strategie pro stabilitu
- Manuální review před merge
-
Sentry Error Tracking
- Monitoring produkčních errorů v real-time
- Alerting při spike v error rate
- Source maps pro debugging minifikovaného kódu
4. Content Management s MDX
Blog články jsou psány v MDX (Markdown + JSX), což umožňuje:
- Vložení React komponent přímo do Markdown obsahu
- Syntax highlighting kódu přes highlight.js
- Frontmatter pro metadata (title, date, tags, description)
- Type-safe import článků s automatickým generováním seznamu
---
title: "Jak funguje TanStack Router"
date: "2025-01-15"
tags: ["react", "typescript", "routing"]
---
# Článek
<InteractiveDemo />
\`\`\`typescript
const demo = "highlighted code"
\`\`\`
5. Component-Driven Development
Storybook umožňuje vývoj komponent v izolaci:
- Dokumentace komponent s automaticky generovanými prop tabulkami
- Visual regression testing přes Chromatic
- Accessibility testing v real-time (a11y addon)
- Integration testing s Vitest přímo ve Storybooku
6. Vlastní ESLint Pravidla
Součástí projektu je vlastní ESLint plugin eslint-plugin-interface-to-type:
- Vynucuje
typealiasy místointerfacedeklarací - Konzistence v celé codebase (důležité pro union types a intersections)
- Publikován na npm jako open-source balíček
- Automatické fixery pro snadnou migraci
7. Performance Monitoring
-
Sentry Performance Monitoring:
- Tracking page load times
- Measuring React component render performance
- Database query performance (pokud použito)
- Custom transactions pro business-critical operace
-
UptimeRobot:
- 5-minutové interval checks dostupnosti
- Multi-location monitoring (EU, US, Asia)
- Status page pro uživatele
- Incident timeline a downtime statistics
🏃♂️ Jak spustit lokálně
Prerequisites
- Node.js: 18.x nebo vyšší (doporučeno 20.x LTS)
- pnpm: 10.29.2 nebo vyšší
npm install -g pnpm
Instalace
-
Klonování repozitáře:
git clone https://github.com/janszotkowski/vimzenicnevim.git cd vimzenicnevim -
Instalace závislostí:
pnpm install⚠️ Poznámka: postinstall skripty jsou vypnuté (
.npmrc: ignore-scripts=true). Pokud něco nefunguje, zkontrolujte, zda nepoužíváte balíček vyžadující build step. -
Environment Variables (volitelné): Vytvořte
.env.localsoubor pro Sentry integraci:SENTRY_DSN=your-sentry-dsn SENTRY_ENVIRONMENT=development
Development Workflow
Spuštění vývojového serveru:
pnpm run dev
Aplikace poběží na http://localhost:3000 s Hot Module Replacement (HMR).
Spuštění Storybooku:
pnpm run storybook
Storybook UI poběží na http://localhost:6006.
Linting:
pnpm run lint # Kontrola
pnpm run lint:fix # Automatická oprava
Testing:
pnpm run test # Spustí všechny testy
pnpm run test:watch # Watch mode pro TDD
Build pro produkci:
pnpm run build # Vytvoří optimalizovaný build
pnpm run start # Spustí produkční server
pnpm run preview # Preview produkčního buildu
Storybook build:
pnpm run build-storybook # Vytvoří statický Storybook export
📂 Struktura projektu
vimzenicnevim.cz/
├── .github/ # GitHub-specific configs
│ ├── workflows/ # CI/CD pipelines (pokud existují)
│ ├── CODE_OF_CONDUCT.md # Pravidla chování
│ ├── CONTRIBUTING.md # Návod pro contributory
│ └── SECURITY.md # Security policy
│
├── .storybook/ # Storybook konfigurace
│ ├── main.ts # Storybook main config
│ ├── preview.ts # Global decorators a parameters
│ └── test-runner.ts # Vitest integration config
│
├── public/ # Statické assety (serializované as-is)
│ ├── images/ # Obrázky, loga
│ ├── fonts/ # Custom fonts (pokud ne z CDN)
│ └── favicon.ico # Favicon a meta images
│
├── src/
│ ├── components/ # React komponenty
│ │ ├── ui/ # Reusable UI komponenty (Button, Card, etc.)
│ │ ├── layout/ # Layout komponenty (Header, Footer, Sidebar)
│ │ └── features/ # Feature-specific komponenty
│ │
│ ├── routes/ # File-based routing (TanStack Router)
│ │ ├── __root.tsx # Root layout (obaluje všechny stránky)
│ │ ├── index.tsx # Homepage (/)
│ │ ├── blog/ # Blog routes
│ │ │ ├── index.tsx # Blog listing (/blog)
│ │ │ └── $slug.tsx # Article detail (/blog/[slug])
│ │ └── about.tsx # About page (/about)
│ │
│ ├── content/ # Content files (MDX, JSON)
│ │ └── blog/ # Blog články v MDX formátu
│ │ ├── typescript-tips.mdx
│ │ └── react-performance.mdx
│ │
│ ├── styles/ # CSS a styling
│ │ ├── app.css # Globální styly + Tailwind imports
│ │ └── themes/ # Theme variables (pokud existují)
│ │
│ ├── utils/ # Utility funkce
│ │ ├── seo.ts # SEO helpers (meta tags, og:image)
│ │ ├── formatters.ts # Date formatting, string utils
│ │ └── mdx.ts # MDX parsing a processing
│ │
│ ├── hooks/ # Custom React hooks (pokud existují)
│ ├── types/ # TypeScript type definitions
│ ├── app.tsx # App entry point
│ └── router.tsx # Router configuration
│
├── tests/ # Test files (pokud ne v src/)
│ ├── unit/ # Unit testy
│ ├── integration/ # Integration testy
│ └── e2e/ # End-to-end Playwright testy
│
├── .npmrc # pnpm konfigurace (ignore-scripts=true)
├── eslint.config.js # ESLint konfigurace
├── tailwind.config.ts # Tailwind konfigurace
├── tsconfig.json # TypeScript konfigurace
├── vite.config.ts # Vite build konfigurace
├── vitest.config.ts # Vitest test konfigurace
├── instrument.server.mjs # Sentry instrumentace pro SSR
├── package.json # Dependencies a scripts
├── pnpm-lock.yaml # Lockfile
└── README.md # Tento soubor
Důležité soubory
instrument.server.mjs: Sentry instrumentace, která musí běžet před jakoukoli jinou logikou (proto--importflag vpackage.jsonscriptech)app.tsx: Root komponenta aplikace s Error Boundaries a Sentry integracírouter.tsx: TanStack Router setup s definicí všech route.npmrc: Konfigurace pnpm signore-scripts=truepro bezpečnost
🔐 Bezpečnostní Praktiky
-
Supply Chain Security:
- postinstall skripty vypnuté
- Renovate Bot pro automatické updates
- Pravidelné dependency audity
-
Runtime Monitoring:
- Sentry error tracking s alertingem
- UptimeRobot pro monitoring dostupnosti
- Performance metrics pro optimalizaci
-
Code Quality:
- TypeScript strict mode
- ESLint s přísnou konfigurací
- Automatické testy před deployem
🚀 Deployment
Aplikace je deployována na [platformě] (doplň dle skutečnosti) s následující konfigurací:
- Build command:
pnpm run build - Start command:
pnpm run start(nebonode --import ./dist/server/instrument.server.mjs dist/server/index.mjs) - Environment variables: Sentry DSN, další secrets