{"id":48974641,"url":"https://github.com/josoavj/magicmirror","last_synced_at":"2026-04-18T08:12:46.834Z","repository":{"id":338645370,"uuid":"1158581217","full_name":"josoavj/magicmirror","owner":"josoavj","description":"Miroir intelligent avec caméra, météo et suggestions de tenues","archived":false,"fork":false,"pushed_at":"2026-04-17T18:20:27.000Z","size":3981,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-04-17T19:27:21.167Z","etag":null,"topics":["flutter","flutter-android","flutter-apps","flutter-ui"],"latest_commit_sha":null,"homepage":"","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/josoavj.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-15T15:59:09.000Z","updated_at":"2026-04-17T18:20:34.000Z","dependencies_parsed_at":"2026-04-02T15:01:05.533Z","dependency_job_id":null,"html_url":"https://github.com/josoavj/magicmirror","commit_stats":null,"previous_names":["josoavj/magicmirror"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/josoavj/magicmirror","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/josoavj%2Fmagicmirror","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/josoavj%2Fmagicmirror/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/josoavj%2Fmagicmirror/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/josoavj%2Fmagicmirror/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/josoavj","download_url":"https://codeload.github.com/josoavj/magicmirror/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/josoavj%2Fmagicmirror/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31961354,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T00:39:45.007Z","status":"online","status_checked_at":"2026-04-18T02:00:07.018Z","response_time":103,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["flutter","flutter-android","flutter-apps","flutter-ui"],"created_at":"2026-04-18T08:12:45.325Z","updated_at":"2026-04-18T08:12:46.827Z","avatar_url":"https://github.com/josoavj.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/josoavj/magicmirror/blob/master/assets/logo/magicmirrorlogo.png\" alt=\"Magic Mirror Logo\" width=\"150\"/\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eMagic Mirror\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eMiroir intelligent avec caméra, météo et suggestions de tenues\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003c!-- Badges --\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Flutter-%3E%3D3.1.0-blue?style=flat-square\" alt=\"Flutter Version\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Dart-%3E%3D3.1.0-blue?style=flat-square\" alt=\"Dart Version\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Version-1.0.0--beta.1-orange?style=flat-square\" alt=\"Current Version\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Status-Beta-yellow?style=flat-square\" alt=\"Beta Status\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/license-MIT-green?style=flat-square\" alt=\"License\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/last-commit/josoavj/magicmirror?style=flat-square\" alt=\"Last Commit\"\u003e\n\u003c/p\u003e\n\n---\n\n## 📊 Vue d'ensemble des fonctionnalités\n\n| Fonctionnalité | Status | Détails |\n|---|---|---|\n| 🪞 **Miroir Caméra** | ✅ 100% | Caméra temps réel, détection morphologie, affichage full-screen |\n| 📅 **Agenda/Calendrier** | ✅ 100% | Agenda cloud Supabase lie au compte actif |\n| 🌦️ **Météo** | ✅ 100% | OpenWeatherMap API réelle + géolocalisation automatique |\n| 🤖 **Morphologie AI** | ✅ 100% | Google ML Kit détection de pose + classification corps |\n| 👔 **Suggestions tenues** | ✅ 100% | Filtrée par morphologie + TTS français intégrée |\n| 🗣️ **Synthèse vocale** | ✅ 100% | FlutterTTS français pour recommandations |\n| 📱 **Responsive UI** | ✅ 100% | Glass morphism design, support multi-écran |\n\n---\n\n## 🚀 Démarrage rapide\n\n### Installation\n```bash\n# Cloner et installer\ngit clone https://github.com/josoavj/magicmirror.git\ncd magicmirror\nflutter pub get\n\n# Vérifier les erreurs (optionnel)\nflutter analyze\n```\n\n### Exécution\n```bash\n# Lancer l'app en développement\nflutter run\n\n# Lancer sur appareil spécifique\nflutter run -d \u003cdevice_id\u003e\n\n# Build production\nflutter build apk          # Android\nflutter build ios          # iOS\nflutter build web          # Web\nflutter build windows      # Windows\nflutter build linux        # Linux\nflutter build macos        # macOS\n```\n\n---\n\n## ⚙️ Configuration requise\n\n### AVANT de lancer l'app\n\n#### 1️⃣ **Configurer la météo (2 min)** ⚡\n**NOUVEAU: Configuration sécurisée avec `.env`**\n\n1. Copier le template d'environnement:\n```bash\ncp .env.example .env\n```\n\n2. Obtenir une clé API gratuite:\n- Aller sur: https://openweathermap.org/api\n- S'inscrire gratuitement\n- Copier votre clé API\n\n3. Remplacer la clé dans `.env`:\n```env\nOPENWEATHERMAP_API_KEY=votre_cle_ici\n```\n\n**⚠️ Important**: Le fichier `.env` est automatiquement dans `.gitignore` - votre clé ne sera jamais exposée sur GitHub! ✅\n\nVoir: [WEATHER_SETUP.md](docs/WEATHER_SETUP.md) pour guide complet\n\n#### 2️⃣ **Backend Supabase (recommandé)**\n- Configuration URL + ANON KEY dans `.env`\n- Création tables `profiles` + `agenda_events` + policies RLS\n- Guide complet: [SUPABASE_SETUP.md](docs/SUPABASE_SETUP.md)\n\n---\n\n## 📁 Structure du projet\n\n```\nlib/\n├── main.dart                          # Point d'entree (AuthGate + routes)\n├── config/\n│   ├── app_config.dart                # Feature flags \u0026 configuration\n│   └── di_setup.dart                  # Bootstrap des dependances\n├── core/\n│   ├── constants/\n│   ├── services/\n│   ├── theme/\n│   └── utils/\n├── features/\n│   ├── auth/                          # Connexion, vérification email, reset\n│   ├── user_profile/                  # Profil utilisateur + sync cloud\n│   ├── agenda/                        # Agenda Supabase (CRUD)\n│   ├── mirror/                        # Écran miroir/caméra principal\n│   ├── weather/                       # Météo + providers/repositories\n│   ├── ai_ml/                         # Détection morphologie (ML Kit)\n│   ├── outfit_suggestion/             # Suggestions de tenues\n│   └── settings/                      # Paramètres app + compte\n├── presentation/\n│   ├── screens/\n│   │   └── about_screen.dart\n│   └── widgets/\n│       └── glass_container.dart\n├── routes/\n│   ├── app_routes.dart\n│   └── route_names.dart\n└── generated/\n  └── assets.gen.dart\n```\n\n### Exemple de structure feature (agenda)\n\n```\nlib/features/agenda/\n├── data/\n│   ├── datasources/\n│   ├── models/\n│   ├── repositories/\n│   └── services/\n└── presentation/\n  ├── providers/\n  ├── screens/\n  └── widgets/\n```\n\n### Extraits de fichiers importants\n\n```\nlib/features/agenda/data/services/agenda_supabase_service.dart\nlib/features/auth/presentation/screens/auth_screen.dart\nlib/features/settings/presentation/screens/account_settings_screen.dart\nlib/features/user_profile/presentation/providers/user_profile_provider.dart\nlib/features/weather/data/services/weather_service.dart\n```\n\n---\n\n## 🔐 Dépendances principales\n\n### State Management\n- `flutter_riverpod: ^3.2.1` - Gestion d'état réactive\n\n### Configuration \u0026 Secrets\n- `flutter_dotenv: ^5.1.0` - Gestion variables d'environnement sécurisée\n\n### Services \u0026 API\n- `dio: ^5.3.1` - Client HTTP\n- `supabase_flutter: ^2.x` - Backend Auth + Profil + Agenda (mobile + web)\n- `geolocator: ^12.0.0` - Géolocalisation GPS\n\n### Caméra \u0026 Média\n- `camera: ^0.12.0` - Accès caméra\n- `camera_linux: ^0.0.8` - Support Linux\n- `image: ^4.1.3` - Traitement images\n- `google_ml_kit: ^0.21.0` - ML Kit pour détection de pose\n\n### Utils\n- `intl: ^0.20.2` - Localisation \u0026 internationalization\n- `uuid: ^4.0.0` - Génération UUIDs\n- `shared_preferences: ^2.2.2` - Stockage local\n- `flutter_tts: ^4.2.5` - Synthèse vocale\n- `permission_handler: ^12.0.1` - Gestion permissions\n\n---\n\n## 🌍 Support plateforme\n\n| Plateforme | Status | Caméra | Météo | Agenda | Notes |\n|---|---|---|---|---|---|\n| 📱 **Android** | ✅ | ✅ | ✅ | ✅ | Full support |\n| 🍎 **iOS** | ✅ | ✅ | ✅ | ✅ | Full support |\n| 🖥️ **macOS** | ✅ | ✅ | ✅ | ✅ | Full support |\n| 💻 **Windows** | ⚠️ | ⚠️ | ✅ | ✅ | Caméra partielle |\n| 🐧 **Linux** | ⚠️ | ⚠️ | ✅ | ✅ | Caméra partielle |\n| 🌐 **Web** | ❌ | ❌ | ✅ | ✅ | Pas de caméra |\n\n*Voir [CAMERA_SUPPORT.md](docs/CAMERA_SUPPORT.md) pour détails platform-spécifiques*\n\n---\n\n## 📚 Documentation\n\n- [SETUP.md](docs/SETUP.md) - Configuration complète production\n- [WEATHER_SETUP.md](docs/WEATHER_SETUP.md) - Configuration météo OpenWeatherMap\n- [GETTING_STARTED.md](docs/GETTING_STARTED.md) - Quick start guide\n- [CAMERA_SUPPORT.md](docs/CAMERA_SUPPORT.md) - Support caméra par plateforme\n- [ARCHITECTURE.md](docs/ARCHITECTURE.md) - Architecture de l'application\n- [OUTFIT_ML_PIPELINE.md](docs/OUTFIT_ML_PIPELINE.md) - Pipeline ML léger (LightGBM)\n- [CHANGELOG.md](CHANGELOG.md) - Historique des changements\n\n---\n\n## 🔧 Configuration avancée\n\n### Feature Flags\nVoir [`lib/config/app_config.dart`](lib/config/app_config.dart) :\n```dart\nstatic const bool enableAIFeatures = true;\nstatic const bool enableWeatherIntegration = true;\nstatic const bool enableAgendaSync = true;\nstatic const bool enableOutfitSuggestions = true;\n```\n\n### Mode développement vs production\n```dart\nstatic const bool isDevelopment = true;  // true = dev, false = prod\nstatic const bool enableDebugLogging = true;\n```\n\n### Délais et timeouts\n```dart\nstatic const Duration networkTimeout = Duration(seconds: 30);\nstatic const Duration cacheExpiry = Duration(hours: 24);\n```\n\n---\n\n## 🧪 Tests \u0026 Validation\n\n### Vérifier la compilation\n```bash\nflutter analyze          # Lint \u0026 errors\nflutter doctor          # Diagnostics plateforme\nflutter pub get         # Dépendances\n```\n\n### Lancer les tests\n```bash\nflutter test            # Tests unitaires\nflutter test --coverage # Coverage report\n```\n\n---\n\n## 🐛 Troubleshooting\n\n### \"Permission denied\" sur Android\n**Solution** :\n```bash\nflutter clean\nflutter pub get\nflutter run\n# Accepter les permissions au premier lancement\n```\n\n### Erreur \"Camera not initialized\"\n**Solution** :\n- Attendre 5 sec pour que la caméra se verrouille\n- Vérifier permissions dans paramètres\n- Relancer l'app\n\n### Météo affiche \"Non disponible\"\n**Solution** :\n- Vérifier la clé API dans `weather_service.dart`\n- Vérifier la connexion internet\n- Voir [WEATHER_SETUP.md](docs/WEATHER_SETUP.md) troubleshooting\n\n### \"Agenda non disponible\"\n**Solution** :\n- Verifier `SUPABASE_URL` et `SUPABASE_ANON_KEY` dans `.env`\n- Executer le SQL de [SUPABASE_SETUP.md](docs/SUPABASE_SETUP.md)\n- Verifier que l'utilisateur est bien connecte\n\n---\n\n## 📈 Prochaines étapes\n\n### Court terme (Phase 1)\n- [ ] Tests unitaires \u0026 intégration\n- [ ] Optimisation performance caméra\n- [ ] Caching offline pour météo\n\n### Moyen terme (Phase 2)\n- [ ] Widget system (horloge, météo, agenda modulaires)\n- [ ] Support multi-écransNon native\n- [ ] Intégration Spotify/Deezer\n- [ ] Anti-vol reconnaissance faciale\n\n### Long terme (Phase 3)\n- [ ] Intelligence artificielle améliorée\n- [ ] Intégration maison intelligente (MQTT/IoT)\n- [ ] App Cloud synchronisation\n- [ ] Version web full-featured\n\n---\n\n## 👥 Contribution\n\nLes contributions sont bienvenues ! \n\n1. Fork le projet\n2. Créer une branche feature (`git checkout -b feature/amazing-feature`)\n3. Commit changements (`git commit -m 'Add amazing feature'`)\n4. Push (`git push origin feature/amazing-feature`)\n5. Ouvrir une Pull Request\n\n---\n\n## 📄 Licence\n\nMIT License - voir [LICENSE](LICENSE) pour détails\n\n---\n\n## 📞 Support\n\n- **Issues** : [GitHub Issues](https://github.com/josoavj/magicmirror/issues)\n- **Discussions** : [GitHub Discussions](https://github.com/josoavj/magicmirror/discussions)\n- **Email** : support@magicmirror.app\n\n---\n\n**Made with ❤️ by [@josoavj](https://github.com/josoavj)**\n\n---\n\n### Quick Links\n- 🌐 [GitHub Repository](https://github.com/josoavj/magicmirror)\n- 📖 [Flutter Documentation](https://flutter.dev)\n- 🤖 [Google ML Kit](https://developers.google.com/ml-kit)\n- 📡 [OpenWeatherMap API](https://openweathermap.org/api)\n- 🗄️ [Supabase Docs](https://supabase.com/docs)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjosoavj%2Fmagicmirror","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjosoavj%2Fmagicmirror","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjosoavj%2Fmagicmirror/lists"}