LITEOPSDOCS
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 :

SliceResponsabilite
tasksTaches par semaine, CRUD, generation IA
risksRisques projet, scoring
livrablesLivrables planifies et generes
eventsJournal de bord
docsBase documentaire
correctionsRegles d'apprentissage
projectEtat projet (budget, semaine courante)
schedulePlanning, 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 DB

Services externes

ServiceUsageCout estime
TursoBase de donnees SQLite + vecteursInclus dans free tier
Anthropic ClaudeGeneration texte + vision5-10 USD / mission
Voyage AIEmbeddings 1024 dimsNegligeable
Vercel BlobStockage images et fichiersNegligeable

3. Librairies internes

FichierResponsabilite
lib/db.tsClient Turso (query, execute)
lib/llm.tsWrapper Anthropic (texte)
lib/vision.tsWrapper Claude Vision
lib/embeddings.tsWrapper Voyage AI
lib/rag.tsChunking + recherche + getRelevantContext
lib/prompts.tsConstruction de tous les prompts
lib/computed.tsCalculs derives (stats, budget, progress)
lib/corrections.tsTracking generations + extraction regles
lib/rules.tsRecherche et injection de regles
lib/storage-blob.tsWrapper Vercel Blob
lib/image-utils.tsResize client-side
lib/seed.tsInitialisation complete de la DB

4. Securite

MesureImplementation
Auth adminMiddleware mot de passe sur /admin/*
API keysCote serveur uniquement, jamais exposees au client
UploadValidation serveur (max 10 MB, types jpg/png/webp/heic)
Blob URLsURLs signees pour affichage
Vue clientLecture seule, aucune action possible

5. Responsive

L'application est mobile-first :

ElementMobileDesktop
NavigationBottomBar 4 icones + drawerTopBar avec onglets
TableauxCards empileesTableaux HTML
ModalesPlein ecranCentrees max-width
Zones tactilesMin 44x44pxStandard
Grids1 colonne2-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

On this page