JK
>LADEN // LADEN
WEERGAVE INITIALISEREN
Privacybewuste CV-maker die ATS-geoptimaliseerde LaTeX-documenten produceert met modulaire sjablonen.
Traditionele tools slaan gevoelige data op in de cloud en genereren PDF's die ATS-systemen niet goed parsen.
| Technologie | Versie | Doel | Waarom gekozen |
|---|---|---|---|
| React | 19 | UI framework | Latest concurrent features, lazy loading |
| TypeScript | ~6.0 | Type safety | Prevents runtime errors on complex resume data model |
| Vite | 8.x | Build tool & dev server | Fast HMR, native ESM, code splitting via glob imports |
| Tailwind CSS | v4 | Utility-first styling | Rapid UI development, consistent design tokens |
| Zustand | 5.x | State management | Minimal boilerplate, built-in persist middleware |
| @dnd-kit | core 6, sortable 10 | Drag-and-drop | Accessible, performant sortable lists |
| Go | 1.25+ | Backend runtime | Fast startup, small binaries, excellent concurrency |
| Gin | 1.12 | HTTP framework | High performance, middleware ecosystem |
| Tectonic | 0.16.9 | LaTeX→PDF compiler | Self-contained, no TeX distribution needed |
| Docker | — | Containerization | Reproducible builds, production parity |
| SQLite | modernc.org/sqlite 1.54 | Stats persistence | No CGO dependency, cross-compilation |
| Sentry | 10.x | Error tracking & monitoring | Session replay, performance monitoring, feedback widget |
| Methode | Route | Doel |
|---|---|---|
| POST | /api/compile | Compile LaTeX to PDF (HTTP) |
| GET | /api/compile/ws | WebSocket compile with progress streaming |
| POST | /api/stats/visit | Record page visit |
| POST | /api/stats/download | Record PDF download |
| GET | /api/stats | Get aggregate stats |
| GET | /api/health | Health check (Tectonic + DB status) |
| GET | /metrics | Prometheus metrics |
| Kolom | Type | Notities |
|---|---|---|
| keyPK | TEXT | Counter name: 'visits' or 'downloads' |
| value | INTEGER | Counter value, default 0 |
Single table with 2 key-value rows. WAL mode enabled. Used only for aggregate visit/download statistics — no user data stored.
No relationships. Single table with 2 counter rows.
Beslissing: All resume data, editing, preview, and LaTeX generation happen in the browser
Waarom: Privacy-first: all data stays in browser with localStorage persistence
Voordelen: Zero server costs for editing, user privacy, offline-capable editing
Afwegingen: No cloud sync, no cross-device access, localStorage size limits
Beslissing: Use Tectonic instead of pdflatex or other TeX distributions
Waarom: Self-contained binary, no TeX distribution needed on the server
Voordelen: Simple Docker image, reproducible builds
Afwegingen: Slower than pdflatex for complex documents
Beslissing: Use Zustand for state management with built-in persist middleware
Waarom: Minimal boilerplate, built-in localStorage persistence
Voordelen: Simple state management, easy persistence
Afwegingen: Less ecosystem than Redux
Beslissing: Use WebSocket instead of HTTP polling for PDF compilation
Waarom: Real-time progress feedback improves UX during 5-60s compilation
Voordelen: User sees compilation stages (validating → writing → compiling → done)
Afwegingen: More complex than HTTP polling
Beslissing: Each template implements a Template interface with config, Preview, and generateLatex
Waarom: Multiple visual styles with shared data model
Voordelen: Extensible, each template self-contained, lazy-loadable via import.meta.glob
Afwegingen: Code duplication across templates
Beslissing: Use SQLite for aggregate visit/download counters only
Waarom: Zero-config embedded DB adequate for 2 counter rows
Voordelen: No external database dependency, simple deployment
Afwegingen: Write contention under concurrent access