Profile picture
Mehdi Rhifar
Software Engineer
Home
Projets
Parcours
đŸ‡«đŸ‡· 🇬🇧
Retour
★ Featured

Maze Generator - Visualisation d'algorithmes

Technologies & tools
Rust
WebAssembly
CI/CD GitHub Actions
React
TypeScript
Vite
Code source
MehdiRhifar/MazeGenerator
Démo en ligne
maze-generator-mehdi-rhifar.vercel.app/

Vue d’ensemble

Application web de génération et visualisation de labyrinthes en temps réel, exploitant la performance de WebAssembly pour des animations fluides.

Mes Réalisations :

  • Backend Rust compilĂ© en WASM pour des performances natives dans le navigateur
  • ImplĂ©mentation de 5 algorithmes de gĂ©nĂ©ration (Recursive Backtracking, Prim, Kruskal, Wilson, Recursive Division)
  • Interface React avec contrĂŽle de la vitesse d’animation et navigation temps rĂ©el
  • Pipeline CI/CD automatisĂ© avec compilation Rust dans GitHub Actions et dĂ©ploiement Vercel

Challenges techniques

Projet conçu pour explorer l’interopĂ©rabilitĂ© Rust/JavaScript et optimiser les performances d’algorithmes visuels dans le navigateur.

1. Interopérabilité Rust/WASM avec JavaScript

ProblĂ©matique : Permettre au code Rust haute performance de communiquer efficacement avec l’interface React.

Architecture avec wasm-bindgen :

  • GĂ©nĂ©ration automatique des bindings TypeScript depuis les exports Rust
  • Transfert de donnĂ©es optimisĂ© avec sĂ©rialisation minimale
  • Gestion de la mĂ©moire partagĂ©e entre WASM et JavaScript
  • Types sĂ»rs cĂŽtĂ© TypeScript grĂące aux dĂ©clarations gĂ©nĂ©rĂ©es

Résultats :

  • API JavaScript idiomatique gĂ©nĂ©rĂ©e depuis le code Rust
  • Zero-copy pour les structures de donnĂ©es critiques
  • Type safety end-to-end (Rust → TypeScript)

2. Animation temps réel et contrÎle de performance

ImplĂ©mentation d’un systĂšme d’animation fluide avec contrĂŽle de vitesse dynamique.

Optimisations clés :

  • Mode turbo - Switch automatique vers requestAnimationFrame (60+ FPS) quand la vitesse est maximale
  • GĂ©nĂ©ration par Ă©tapes - Algorithmes conçus comme des itĂ©rateurs pour permettre l’animation progressive
  • Batching intelligent - Calcul de plusieurs steps par frame selon la vitesse configurĂ©e
  • Rendu optimisĂ© - Canvas 2D avec minimisation des redraws et batch des opĂ©rations de dessin

Résultats : Animation fluide de 10 FPS (debug) à 100+ FPS (turbo) sans blocking du thread principal.

3. Pipeline CI/CD pour Rust/WASM

ProblĂ©matique : Vercel ne supporte pas nativement Rust. NĂ©cessitĂ© d’une compilation WASM avant le dĂ©ploiement.

Architecture GitHub Actions :

  • Compilation Rust → WASM avec cache Cargo pour builds rapides (~30s au lieu de 2min)
  • Build frontend avec bundling automatique du WASM via Vite
  • DĂ©ploiement sur Vercel via CLI avec artifacts prĂ©-compilĂ©s
  • Preview deployments automatiques sur les Pull Requests

Workflow : Push → GitHub Actions installe Rust → Compile WASM → Build frontend (bundle WASM) → Deploy Vercel

Bénéfices :

  • Aucun fichier gĂ©nĂ©rĂ© versionnĂ© (WASM compilĂ© uniquement en CI)
  • DĂ©ploiement automatique Ă  chaque push
  • Builds reproductibles avec versions fixĂ©es des toolchains

4. Algorithmes de génération optimisés

Implémentation de 5 algorithmes classiques avec focus sur la performance et la visualisation.

Défis spécifiques :

  • Wilson’s algorithm - Algorithme probabiliste complexe avec loop-erased random walks
  • Kruskal - Gestion efficace d’un Union-Find pour dĂ©tecter les cycles
  • Recursive Division - Approche top-down nĂ©cessitant une stratĂ©gie de partitionnement intelligente

Optimisations :

  • Structures de donnĂ©es efficaces (Vec, HashSet) pour minimiser les allocations
  • Randomisation avec rand crate optimisĂ© pour WASM
  • Trait GenerationAlgorithm commun pour faciliter l’ajout de nouveaux algorithmes

Stack technique

Backend (Rust/WASM) :

  • wasm-pack pour la compilation et gĂ©nĂ©ration de bindings
  • wasm-bindgen pour l’interop JavaScript
  • Optimisations de taille avec wasm-opt (315KB → 51KB)

Frontend (React/TypeScript) :

  • Vite pour le bundling et HMR
  • TailwindCSS 4 pour le styling
  • Architecture modulaire (services, components, constants)

DevOps :

  • GitHub Actions pour CI/CD
  • Vercel pour l’hĂ©bergement
  • Cache Cargo pour accĂ©lĂ©rer les builds