Plateforme qui connecte clients et artisans (réparation maison) : analyse photo par IA, devis, matching géolocalisé, garantie 48h.
- Frontend: React, Vite, Tailwind CSS, Leaflet, Supabase (auth)
- Backend: FastAPI, Supabase (PostgreSQL), Vision AI (OpenAI/Anthropic ou mock), scikit-learn (prix), Twilio (SMS mock)
- Créer un projet Supabase.
- Dans SQL Editor, exécuter
database/schema.sqlpuisdatabase/seed.sql. - Note : le seed utilise des UUID fictifs pour les profils. En production, les profils sont créés à l’inscription (Supabase Auth). Pour un démo sans Auth, vous pouvez temporairement retirer la FK
profiles.id -> auth.users(id)ou créer des utilisateurs via l’app avant de lancer le seed.
cd backend
python -m venv venv
venv\Scripts\activate # Windows
pip install -r requirements.txt
cp .env.example .env # remplir SUPABASE_URL, SUPABASE_KEY, etc.
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000- ML (optionnel): générer les données et entraîner le modèle de prix :
cd ml && python generate_data.py && python train_price_model.py
cd frontend
npm install
cp .env.example .env # VITE_API_URL=http://localhost:8000/api, VITE_SUPABASE_*
npm run dev- Ouvrir http://localhost:5173. Le proxy Vite envoie
/apivers le backend.
Backend (.env)
SUPABASE_URL,SUPABASE_KEY(anon),SUPABASE_SERVICE_ROLE_KEYOPENAI_API_KEYouANTHROPIC_API_KEY,VISION_PROVIDER=mock|openai|anthropicTWILIO_*(optionnel,TWILIO_MOCK=truepour ne pas envoyer de SMS)
Frontend (.env)
VITE_API_URL(ex:http://localhost:8000/api)VITE_SUPABASE_URL,VITE_SUPABASE_ANON_KEY
- Client : Accueil → Inscription/Connexion → Nouvelle demande (photo + description + ville) → Estimation IA → Confirmer → Carte des artisans → Suivi mission → Notation.
- Artisan : Inscription (rôle worker) → Tableau de bord (niveau, missions proposées) → Accepter / Refuser → Compléter (photos après) → Montée en niveau (Apprenti → Maître Maalem).
POST /api/register,POST /api/login,GET /api/mePOST /api/analyze-photo(multipart: image, description, city, surface_area)POST /api/jobs,GET /api/jobs/:id,POST /api/jobs/:id/accept,refuse,complete,complaint,ratePOST /api/match(problem_type, latitude, longitude, city, severity, optionnel job_id)GET /api/artisans(city, profession, user_id pour “mon profil artisan”)
Après “terminé”, le client a 48h pour ouvrir une réclamation. Sans réclamation, la mission est clôturée et le paiement (mock) est libéré.