KartIA est une super-application mobile open-source combinant intelligence artificielle (Google Gemini), cartographie (Mapbox/OpenStreetMap) et backend Firebase pour permettre aux citoyens africains de signaler, découvrir et contribuer à leur environnement local.
🌍 Donnons vie à la cartographie en Afrique, ensemble
KartIA est une plateforme modulaire construite autour des besoins réels des communautés africaines :
- Signalement géolocalisé de problèmes urbains (routes, éclairage, déchets...)
- Classification automatique par IA des problèmes à partir de photos
- Suivi de l'évolution des signalements
- Actions communautaires (votes, commentaires)
- Recherche en langage naturel ("Où manger pas cher ?", "Où acheter des médicaments ?")
- Suggestions intelligentes basées sur les préférences de l'utilisateur
- Résumés générés par IA de lieux et établissements
- Cartographie des infrastructures médicales avec services détaillés
- Recherche par type de service médical
- Fiches d'établissements enrichies par IA
- Avis communautaire fiable sur la qualité des services
- Contribution simplifiée à OpenStreetMap sans compétences techniques
- L'IA analyse les photos pour suggérer automatiquement les tags OSM appropriés
- Mode hors-ligne pour zones à connectivité limitée
- Gamification des contributions (badges, niveaux)
- Cartographie participative des prix des produits essentiels (carburant, denrées alimentaires...)
- Visualisation par cartes thermiques des variations de prix
- Alertes sur les hausses significatives
- Analyse IA des tendances de prix
KartIA est construit avec les technologies modernes suivantes :
| Domaine | Technologies |
|---|---|
| Application Mobile | Flutter 3.29.3, Dart 3.6.0, BLoC (State Management) |
| Cartographie | OpenStreetMap (données), Mapbox SDK (rendu) |
| Backend | Firebase (Auth, Firestore, Storage, Functions) |
| Intelligence Artificielle | Google Gemini API (Pro + Vision) |
| Base de données locale | Drift (SQLite) |
| CI/CD | GitHub Actions |
| Analytics | Firebase Analytics, Crashlytics |
| Tests | flutter_test, integration_test, mockito |
KartIA suit une architecture Clean Architecture pour une séparation claire des responsabilités :
lib/
├── generated/ # Code généré automatiquement
├── l10n/ # Fichiers d'internationalisation
├── src/
│ ├── core/ # Composants partagés
│ │ ├── database/ # Gestion base de données locale
│ │ ├── di/ # Injection de dépendances
│ │ ├── helpers/ # Classes helper
│ │ ├── services/ # Services partagés
│ │ └── utils/ # Utilitaires divers
│ ├── data/ # Couche de données
│ │ ├── datasources/
│ │ ├── models/
│ │ └── repositories/
│ ├── domain/ # Couche de domaine (logique métier)
│ │ ├── entities/
│ │ ├── repositories/
│ │ └── usecases/
│ ├── modules/ # Modules fonctionnels
│ │ ├── app/ # Configuration app
│ │ ├── civact/ # Module Signalement
│ │ ├── city_ai_guide/ # Module Découverte
│ │ ├── sante_map/ # Module Santé
│ │ ├── osm_helper/ # Module OSM
│ │ └── carto_prix/ # Module Prix
│ ├── widgets/ # Widgets réutilisables
│ ├── app.dart # Configuration app
│ ├── init.dart # Initialisation
│ └── splash.screen.dart # Écran de démarrage
├── blocobserver.dart # Observateur BLoC
└── main.dart # Point d'entrée principal
- Flutter SDK (3.29.3 ou supérieur)
- Dart SDK (3.6.0 ou supérieur)
- Android Studio / VS Code avec extensions Flutter
- Compte Firebase (gratuit)
- Compte Mapbox (gratuit avec quota)
- Compte Google AI Studio (pour Gemini API)
-
Clonez le dépôt :
git clone https://github.com/BorisGautier/kartia.git cd kartia -
Vérifiez votre environnement Flutter :
flutter doctor
-
Installez les dépendances :
flutter pub get
-
Créez un fichier
.envà la racine du projet :# Mapbox MAPBOX_API_KEY=your_mapbox_api_key_here
-
Configurez Firebase :
dart pub global activate flutterfire_cli flutterfire configure
-
Générez les fichiers de localisation :
dart run intl_utils:generate
-
Lancez l'application :
flutter run
KartIA est conçu pour fonctionner dans des zones à connectivité limitée :
- Stockage local des données via Drift (SQLite)
- Mise en cache des tuiles de carte pour les zones fréquentes
- Upload différé des contributions lorsque la connexion est rétablie
- Fonctionnalités dégradées mais toujours utilisables sans connexion
- Synchronisation intelligente en arrière-plan
KartIA est disponible en plusieurs langues :
- 🇫🇷 Français (langue principale)
- 🇬🇧 Anglais
- 🚧 Prochainement : Arabe, Swahili, Wolof
Pour ajouter une nouvelle langue, consultez notre guide de traduction.
Les contributions sont les bienvenues ! Consultez CONTRIBUTING.md pour les directives.
- 🎨 UI/UX : Amélioration des interfaces utilisateur
- 🌍 Traductions : Ajout de nouvelles langues
- 📱 Optimisation offline : Amélioration de l'expérience hors-ligne
- 📚 Documentation : Tutoriels, guides d'utilisation
- 🧪 Tests : Couverture de tests unitaires et d'intégration
- 🗺️ Données cartographiques : Enrichissement des données OSM
- 🤖 IA : Amélioration des algorithmes de classification
- Fork le projet
- Créez votre branche feature (
git checkout -b feature/AmazingFeature) - Committez vos changements (
git commit -m 'Add some AmazingFeature') - Push vers la branche (
git push origin feature/AmazingFeature) - Ouvrez une Pull Request
| Période | Milestone | Statut |
|---|---|---|
| Q3 2025 | MVP avec module Signalement et base cartographique | 🚧 En cours |
| Q4 2025 | Alpha avec intégration IA et module Découverte | 📋 Planifié |
| Q1 2026 | Beta avec modules SantéMap et OSM Helper | 📋 Planifié |
| Q2 2026 | Version 1.0 avec module CartoPrix | 📋 Planifié |
| Q3 2026 | Extensions communautaires et APIs publiques | 📋 Planifié |
kartia/
├── android/ # Configuration Android
├── ios/ # Configuration iOS
├── lib/ # Code Dart principal
├── cloud/ # Fonctions Firebase Cloud
├── test/ # Tests unitaires et d'intégration
├── docs/ # Documentation
│ ├── architecture/ # Documentation d'architecture
│ ├── api/ # Documentation API
│ └── screenshots/ # Captures d'écran
├── assets/ # Ressources statiques
│ ├── images/ # Images et icônes
│ ├── map_styles/ # Styles de cartes personnalisés
│ └── translations/ # Fichiers de traduction
├── .github/ # Configuration GitHub
│ └── workflows/ # GitHub Actions
└── scripts/ # Scripts de build et déploiement
- Créez un compte sur Mapbox
- Obtenez une clé API
- Ajoutez-la à votre fichier
.env - Configurez les styles de carte dans
assets/map_styles/
- Créez un compte sur Google AI Studio
- Créez une clé API pour Gemini
- Ajoutez-la à votre fichier
.env
flutter testflutter drive --target=test_driver/app.dartflutter test test/widget_test/flutter test --coverage
genhtml coverage/lcov.info -o coverage/htmlflutter run# Android
flutter build appbundle --release
# iOS
flutter build ipa --releaseflutter build appbundle --releaseflutter build ipa --releaseLes déploiements sont automatisés via GitHub Actions. Consultez .github/workflows/ pour plus de détails.
- Firebase Analytics : Suivi de l'usage
- Crashlytics : Rapports de crash
- Performance Monitoring : Surveillance des performances
- Remote Config : Configuration à distance
- Graylog : Centralisation des logs
- Chiffrement des données sensibles
- Authentification sécurisée via Firebase
- Validation côté serveur avec Cloud Functions
- Respect du RGPD et des données personnelles
Ce projet est sous licence Apache 2.0 - voir le fichier LICENSE pour plus de détails.
- ✅ Usage commercial autorisé
- ✅ Modification autorisée
- ✅ Distribution autorisée
- ✅ Utilisation privée autorisée
- ⚖️ Attribution requise
- ⚖️ Conservation des notices de licence
- 🛡️ Protection contre les litiges de brevets
- Flutter Team pour le framework exceptionnel
- Firebase Team pour l'infrastructure backend
- Mapbox pour les outils cartographiques
- OpenStreetMap pour les données cartographiques libres
- Google AI pour l'API Gemini
- Communauté open source pour les contributions
- Organisations africaines pour le feedback et les tests terrain
- Issues GitHub : Signaler un bug
- Discussions : Forum communautaire
- Email : me@borisgautier.com
- Twitter : @BorisGautier
⭐ Si ce projet vous intéresse, n'hésitez pas à lui donner une étoile et à le partager !
Conçu avec ❤️ pour améliorer la cartographie participative en Afrique
