Agents & SystèmesPacemaker
Architecture
Architecture technique de Pacemaker : App Router, API routes, store Zustand, services externes.
REF-SPEC/PM-010 v1.0 — 2026-04-05
1. Vue d'ensemble
Pacemaker est une application Next.js 14 App Router avec rendu hybride. Les pages sont rendues cote serveur, les interactions utilisent des API routes internes. Aucune logique LLM ou embedding n'est executee cote client.
┌─────────────────────────────────────────────────┐
│ Client (React) │
│ Zustand store ◄── API routes ──► Services │
│ 8 slices /api/* externes │
└───────────────────────┬─────────────────────────┘
│
┌──────────────┼──────────────┐
│ │ │
┌────▼────┐ ┌─────▼─────┐ ┌────▼────┐
│ Turso │ │ Anthropic │ │ Voyage │
│ (SQLite │ │ Claude │ │ AI │
│ + vector)│ │ API │ │ API │
└─────────┘ └───────────┘ └─────────┘
│
┌─────▼─────┐
│ Vercel │
│ Blob │
└───────────┘2. Couches applicatives
Client (React + Zustand)
Le client React utilise un store Zustand avec 8 slices :
| Slice | Responsabilite |
|---|---|
tasks | Taches par semaine, CRUD, generation IA |
risks | Risques projet, scoring |
livrables | Livrables planifies et generes |
events | Journal de bord |
docs | Base documentaire |
corrections | Regles d'apprentissage |
project | Etat projet (budget, semaine courante) |
schedule | Planning, deviations, baseline |
Chaque slice effectue un fetch initial au mount et des mutations via les API routes.
API Routes (Next.js App Router)
Les routes API sont organisees par domaine :
/api/
├── data/
│ ├── tasks/ CRUD taches
│ ├── risks/ CRUD risques
│ ├── livrables/ CRUD livrables
│ └── events/ CRUD evenements
├── llm/
│ ├── generate-tasks/ Generation IA de taches
│ ├── parse-upload/ Parsing de compte-rendu
│ ├── recalibrate/ Recalibration du plan
│ ├── generate-livrables/ Specs de livrables
│ └── create-livrable/ Creation fichier livrable
│ └── prompt/ Preview du prompt
├── vision/
│ └── extract/ Extraction photo
├── docs/
│ ├── upload/ Upload document
│ ├── search/ Recherche semantique
│ └── [id]/ Detail/suppression document
├── embeddings/ Embedding direct
├── generations/ Historique generations LLM
├── corrections/ Corrections et regles
│ ├── [id]/ Gestion regle individuelle
│ └── stats/ Statistiques regles
├── migrate/ Migration DB
└── seed/ Initialisation DBServices externes
| Service | Usage | Cout estime |
|---|---|---|
| Turso | Base de donnees SQLite + vecteurs | Inclus dans free tier |
| Anthropic Claude | Generation texte + vision | 5-10 USD / mission |
| Voyage AI | Embeddings 1024 dims | Negligeable |
| Vercel Blob | Stockage images et fichiers | Negligeable |
3. Librairies internes
| Fichier | Responsabilite |
|---|---|
lib/db.ts | Client Turso (query, execute) |
lib/llm.ts | Wrapper Anthropic (texte) |
lib/vision.ts | Wrapper Claude Vision |
lib/embeddings.ts | Wrapper Voyage AI |
lib/rag.ts | Chunking + recherche + getRelevantContext |
lib/prompts.ts | Construction de tous les prompts |
lib/computed.ts | Calculs derives (stats, budget, progress) |
lib/corrections.ts | Tracking generations + extraction regles |
lib/rules.ts | Recherche et injection de regles |
lib/storage-blob.ts | Wrapper Vercel Blob |
lib/image-utils.ts | Resize client-side |
lib/seed.ts | Initialisation complete de la DB |
4. Securite
| Mesure | Implementation |
|---|---|
| Auth admin | Middleware mot de passe sur /admin/* |
| API keys | Cote serveur uniquement, jamais exposees au client |
| Upload | Validation serveur (max 10 MB, types jpg/png/webp/heic) |
| Blob URLs | URLs signees pour affichage |
| Vue client | Lecture seule, aucune action possible |
5. Responsive
L'application est mobile-first :
| Element | Mobile | Desktop |
|---|---|---|
| Navigation | BottomBar 4 icones + drawer | TopBar avec onglets |
| Tableaux | Cards empilees | Tableaux HTML |
| Modales | Plein ecran | Centrees max-width |
| Zones tactiles | Min 44x44px | Standard |
| Grids | 1 colonne | 2-4 colonnes |
6. Deploy
Pacemaker est deploye sur Vercel :
- Build :
next build - Runtime : Node.js serverless functions
- Edge : non (incompatible avec les SDKs Anthropic/Voyage)
- Variables d'environnement : configurees dans le dashboard Vercel