Application mobile communautaire pour localiser, filtrer et consulter les toilettes publiques à Paris et en Île-de-France.
SOS TOILETTES privilégie une expérience cartographique native, rapide et accessible. Les données structurelles proviennent exclusivement de l'open data; Firebase ne stocke que les profils et contributions communautaires.
- Carte native: Apple Maps sur iOS, Google Maps sur Android
- Localisation, recentrage et recherche d'adresse limitée à l'Île-de-France
- Clustering et marqueurs personnalisés
- Filtres persistants: disponibilité, gratuité, PMR, relais bébé, 24 h/24 et type
- Liste des toilettes proches et mode urgence
- Fiche détaillée, itinéraire, favoris, avis et signalements
- Profil anonyme avec avatar, XP, niveaux et badges
- Thèmes clair, sombre ou système
- Français, anglais et espagnol
- Cache local des données publiques et des préférences
- React Native 0.81 et Expo SDK 54
- TypeScript strict
react-native-maps- React Navigation
- Zustand et AsyncStorage
- Firebase Authentication anonyme et Firestore
- i18next
- Reanimated et Gorhom Bottom Sheet
src/
├── components/ composants partagés, feedback et navigation
├── config/ constantes produit, Firebase et gamification
├── core/ providers, navigation et stores globaux
├── features/ explorer, favoris, filtres, onboarding, profil, réglages
├── hooks/ bootstrap, localisation et utilitaires React
├── i18n/ traductions FR, EN et ES
├── motion/ animations partagées
├── repositories/ données open data et communautaires
├── services/ Firebase, géocodage, haptics et journalisation
├── theme/ tokens et thèmes clair/sombre
├── types/ modèles métier et navigation
└── utils/ distance, toilettes, préférences et XP
Les deux domaines de données restent séparés:
- Open data: définition et localisation des toilettes
- Firestore: utilisateurs, favoris, avis, signalements, XP, badges et overrides communautaires
- Node.js 22 LTS
- npm
- Xcode et CocoaPods pour iOS
- Android Studio et un JDK compatible pour Android
- Un projet Firebase avec Authentication anonyme et Firestore
- Une clé Google Maps SDK for Android restreinte au package et au SHA-1
git clone https://github.com/BFMIX/SOS-TOILETTES.git
cd SOS-TOILETTES
npm ci
cp .env.example .envRenseigner ensuite les variables locales sans jamais versionner .env:
EXPO_PUBLIC_FIREBASE_API_KEY=
EXPO_PUBLIC_FIREBASE_AUTH_DOMAIN=
EXPO_PUBLIC_FIREBASE_PROJECT_ID=
EXPO_PUBLIC_FIREBASE_STORAGE_BUCKET=
EXPO_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=
EXPO_PUBLIC_FIREBASE_APP_ID=
EXPO_PUBLIC_FIREBASE_MEASUREMENT_ID=
EXPO_PUBLIC_GOOGLE_MAPS_API_KEY=# Expo standard
npm start
# Development build distinct: DEV SOS TOILETTES
npm run ios:dev
npm run start:dev
# Build de production local
npm run ios:prod
npm run android:prodLes identifiants natifs sont séparés:
| Variante | Nom iOS | Bundle / package |
|---|---|---|
| Développement | DEV SOS TOILETTES | com.sostoilettes.app.dev |
| Production | SOS TOILETTES | com.sostoilettes.app |
Le dossier natif est généré. La compatibilité de cycle de vie UIScene et la cible iOS minimale sont appliquées automatiquement par le config-plugin du projet:
npm run prebuild:dev -- --clean
cd ios && pod install- Activer
Authentication > Anonymous. - Créer Firestore en mode production.
- Installer la CLI Firebase si nécessaire.
- Associer ce dépôt au bon projet Firebase.
- Déployer les règles et index après validation:
firebase deploy --only firestore:rules,firestore:indexesCollections utilisées: users, toilet_overrides, reviews, reports.
Les règles actuelles correspondent au MVP. Le renforcement serveur des XP, badges et statuts communautaires est une priorité avant une publication publique à grande échelle.
Aucune copie du dataset public n'est stockée dans Firestore.
npm run check
npx expo-doctornpm run check exécute TypeScript et ESLint. Les tests automatisés et le crash reporting font partie du chantier de stabilisation en cours.
- Ne jamais committer
.env, certificats, profils ou clés privées. - Restreindre la clé Google Maps au package Android et aux SHA-1 autorisés.
- Considérer les clés Firebase clientes comme publiques et protéger les données avec des règles Firestore strictes.
- Signaler une vulnérabilité en privé au propriétaire du dépôt plutôt que dans une issue publique.
Le MVP est en stabilisation. Les fonctionnalités produit actuelles sont conservées pendant les travaux de fiabilité, performance, accessibilité et sécurisation communautaire.
Conçu et maintenu par BFMIX.