Migrer une app
Découper en API, remonter une UI réactive, empaqueter en app de bureau. Fil rouge : EVQuest, de Streamlit à Tauri + React + FastAPI.
Vérifié le
0/6
Vue d'ensemble
Ton prototype marche, mais il est devenu un monolithe : l'UI et la logique vivent dans le meme process, chaque clic re-execute tout, et tu ne peux rien distribuer. La methode tient en trois mouvements que tu peux mener dans cet ordre, sans jamais reecrire ta logique metier : decouper en API, remonter une UI reactive, empaqueter en app de bureau.
Cas reel : EVQuest
Tout ce guide est illustre par une migration qu'on a faite pour de vrai — EVQuest v0.5, de Streamlit (monolithe Python) vers un trio Tauri + React + FastAPI. Les chiffres, les arborescences et les extraits de code viennent de ce projet. Ta pile sera differente : ce qui se transfere, c'est l'ordre des etapes et les pieges, pas le choix des outils. Toute la logique metier Python a ete preservee intacte — c'est le critere qui rend la migration tenable.
Avant Streamlit
text
Streamlit (Python)
├── Re-execute TOUT le script
│ a chaque clic
├── UI + logique = meme process
├── Latence perceptible
└── Pas d'animations fluidesApres Tauri + React + FastAPI
text
Tauri (Rust) → Desktop natif
├── React (TypeScript) → UI reactive
├── FastAPI (Python) → API REST
├── Logique metier → INCHANGEE
└── Communication HTTP/SSEArchitecture v0.5
Schema d'architecture
┌──────────────────────────────────────┐
│ Fenetre Tauri (Rust) │
│ │
│ ┌────────────────────────────────┐ │
│ │ Frontend React (TS) │ │
│ │ Vite + TailwindCSS + Axios │ │
│ └──────────────┬─────────────────┘ │
│ │ HTTP / SSE │
│ ┌──────────────▼─────────────────┐ │
│ │ Backend FastAPI (Python) │ │
│ │ 34 endpoints, 10 routers │ │
│ │ → parsers, analysis, storage │ │
│ └────────────────────────────────┘ │
└──────────────────────────────────────┘Decisions cles
| Decision | Detail |
|---|---|
| Orbitron pour les titres | La spec suggerait Inter partout, on garde Orbitron pour la continuite visuelle |
| Port random | TcpListener::bind("127.0.0.1:0") — plus sur que le port fixe 8742 |
| 0 fichiers Python modifies | Seul pyproject.toml a change (ajout fastapi + uvicorn). Zero impact sur le code existant. |
| Scope v0.5 = skeleton + API | Pas de pages React completes — seulement le proof-of-concept health check |
Ce qui a change
- frontend/
- src-tauri/
- src/poker_coach/api/
- tests/test_api.py
- pyproject.toml
Ce qui n'a PAS change
- parsers/
- engine/
- strategy/
- analysis/
- storage/
- ui/ (legacy)
- scripts/
- data/