Application interactive de Rubik's Cube construite avec Vite, React et TypeScript.
- Vue 3D interactive (drag + zoom) via Three.js et React Three Fiber
- Vue 2D (net) en SVG
- Support des tailles 2x2, 3x3, 4x4 et 5x5
- Scramble adapte a la taille du cube
- 4x4 et 5x5: mouvements wide (Rw, Uw, etc.) pour melanger les centres
- Resolution dans un Web Worker (UI non bloquante)
- Lecture animee de la solution (pas a pas, vitesse reglable)
- Bascule de langue EN/FR
Le solver interne fonctionne en deux etapes:
- Strategie principale: inversion du scramble
- Fallback borne (actif en 3x3)
Implication pratique:
- Si le cube vient du bouton Scramble de l'application, la resolution fonctionne de maniere fiable
- Pour des etats arbitraires complexes (notamment 4x4/5x5), le fallback peut ne pas trouver de solution
| Couche | Technologie |
|---|---|
| Framework | React 18 + TypeScript |
| Build Tool | Vite 6 |
| 3D | Three.js + @react-three/fiber |
| Etat global | React Context + useReducer |
| i18n | Systeme interne React Context |
| Solver | Web Worker + moteur interne |
src/
├── components/ # Cube3D, CubeNet, AnimationControls
├── cube/ # Types, etat NxN, moves, notation, scramble
├── i18n/ # Provider/hook de traduction + locales EN/FR
├── solver/ # Worker de resolution + hook useSolver
├── store/ # Store global React Context + useReducer
├── App.tsx # UI principale
└── main.tsx # Bootstrap React
npm installnpm run devServeur local: http://localhost:5173
Le mode Debug live peut utiliser un modele vision local via Ollama pour mieux suivre les couleurs ternies et les cas ambigus.
Variables d'environnement utiles:
DETECTOR_PROVIDER=autoouclassicOLLAMA_BASE_URL=http://localhost:11434en local, ouhttp://host.docker.internal:11434si le backend tourne dans Docker DesktopOLLAMA_VISION_MODEL=qwen2.5vl:7bou un autre modele vision disponible localementOLLAMA_TIMEOUT_SECONDS=12pour eviter d'attendre une minute avant fallback si Ollama ne repond pas
Pour un mode modele optimise (moins de faux positifs qu'un fallback classique seul):
DETECTOR_PROVIDER=autoOLLAMA_VISION_MODEL=qwen2.5vl:7bOLLAMA_BASE_URL=http://host.docker.internal:11434(backend Docker sur Windows)
Installer le modele:
ollama pull qwen2.5vl:7b
Si Ollama n'est pas disponible, le backend retombe automatiquement sur la detection classique.
Si tu lances le backend dans Docker sur Windows, Ollama doit etre joignable depuis le conteneur via http://host.docker.internal:11434.
Si tu lances le backend Docker depuis backend/, utilise bien le port Flask et un tag d'image explicite:
docker build -t rubix-cube-solver-backend ./backend
docker run --name rubix-cube-solver-backend -p 5000:5000 rubix-cube-solver-backend
# Pour un retour visuel instantane en debug (sans attente Ollama)
docker run --name rubix-cube-solver-backend -e DETECTOR_PROVIDER=classic -p 5000:5000 rubix-cube-solver-backend
# Pour forcer le mode modele vision optimise (Ollama)
docker run --name rubix-cube-solver-backend -e DETECTOR_PROVIDER=auto -e OLLAMA_BASE_URL=http://host.docker.internal:11434 -e OLLAMA_VISION_MODEL=qwen2.5vl:7b -e OLLAMA_TIMEOUT_SECONDS=10 -p 5000:5000 rubix-cube-solver-backendnpm run build
npm run previewLe projet est dockerise avec un build multi-stage:
- stage 1: build Vite avec Node.js
- stage 2: service statique avec Nginx
Prerequis: Docker Desktop (ou Docker Engine) doit etre installe et lance.
docker build -t rubix-cube-solver .docker run --name rubix-cube-solver -p 8080:80 rubix-cube-solverCette commande concerne le conteneur frontend Nginx, pas le backend Flask.
Application disponible sur:
docker stop rubix-cube-solver
docker rm rubix-cube-solver| Script | Description |
|---|---|
| npm run dev | Lance le serveur de developpement |
| npm run build | Verifie TypeScript et construit la version production |
| npm run preview | Sert le dossier dist localement |
| npm run lint | Lance ESLint |
| npm run format | Formate les fichiers source avec Prettier |
- Librairies et dependances: docs/libraries.md
- Resume des changements: doc/change.rm