JK
>CHARGEMENT // CHARGEMENT
INITIALISATION DE LA VUE
Outil de CV respectueux de la vie privée produisant des documents LaTeX optimisés pour les systèmes ATS.
Les générateurs traditionnels conservent les données personnelles dans le cloud et créent des PDF mal structurés. Cet outil assure une confidentialité locale et une mise en page LaTeX irréprochable.
| Technologie | Version | Objectif | Pourquoi ce choix |
|---|---|---|---|
| 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 |
| Méthode | Route | Objectif |
|---|---|---|
| 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 |
| Colonne | Type | Notes |
|---|---|---|
| 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.
Décision : All resume data, editing, preview, and LaTeX generation happen in the browser
Pourquoi : Privacy-first: all data stays in browser with localStorage persistence
Avantages : Zero server costs for editing, user privacy, offline-capable editing
Compromis : No cloud sync, no cross-device access, localStorage size limits
Décision : Use Tectonic instead of pdflatex or other TeX distributions
Pourquoi : Self-contained binary, no TeX distribution needed on the server
Avantages : Simple Docker image, reproducible builds
Compromis : Slower than pdflatex for complex documents
Décision : Use Zustand for state management with built-in persist middleware
Pourquoi : Minimal boilerplate, built-in localStorage persistence
Avantages : Simple state management, easy persistence
Compromis : Less ecosystem than Redux
Décision : Use WebSocket instead of HTTP polling for PDF compilation
Pourquoi : Real-time progress feedback improves UX during 5-60s compilation
Avantages : User sees compilation stages (validating → writing → compiling → done)
Compromis : More complex than HTTP polling
Décision : Each template implements a Template interface with config, Preview, and generateLatex
Pourquoi : Multiple visual styles with shared data model
Avantages : Extensible, each template self-contained, lazy-loadable via import.meta.glob
Compromis : Code duplication across templates
Décision : Use SQLite for aggregate visit/download counters only
Pourquoi : Zero-config embedded DB adequate for 2 counter rows
Avantages : No external database dependency, simple deployment
Compromis : Write contention under concurrent access