
SIGNA est une application mobile de signalement d’incidents urbains qui permet à une collectivité de suivre chaque dossier, de sa création à sa résolution. Les rôles citoyen, vérification, intervention et collectivité disposent d’espaces distincts.
01 : Contexte
Objectif du projet
Les collectivités manquent souvent d’un canal unique pour recevoir, prioriser et suivre les signalements terrain. Les échanges restent fragmentés (appels, mails, WhatsApp) et la responsabilité opérationnelle (constat vs réparation vs validation) est floue. Projet réalisé seul.
02 : Problématique
Problème identifié
Comment permettre à un citoyen de signaler un incident géolocalisé, et à une collectivité de le piloter jusqu’à résolution, avec une séparation claire entre vérification terrain et intervention technique ?
03 : Solution
Solution mise en œuvre
App Expo Router + API Hono sur Neon Postgres, auth JWT, realtime WebSocket, stockage R2, unités/membres d’intervention, et écran collectivité pour confirmer, affecter et valider. Le technicien soumet une preuve ; seule la collectivité clôture en « résolu ».
04 : Architecture
Schéma technique
- 01
Frontend mobile : Expo / React Native (Expo Router)
- 02
Backend : Hono (Node) — auth, incidents, org, chat, uploads
- 03
Base de données : Neon Postgres
- 04
Stockage médias : Cloudflare R2
- 05
Temps réel : WebSocket (/ws)
05 : Fonctionnalités
Fonctions principales
4 espaces isolés par rôle : citoyen, collectivité, vérification, intervention
Workflow d’états (envoyé → vérification → confirmé → prise en charge → intervention → résolution → résolu)
Création de signalement multi-étapes (type, position, détails, photo, récap)
Carte interactive des incidents ouverts + disparition des dossiers clôturés
Unités d’intervention + techniciens (liaison type Active Directory)
Affectation collectivité : vérificateur et/ou unité ± technicien
Upload photos via API vers Cloudflare R2 (preuve obligatoire à la soumission de résolution)
Attribution automatique du quartier depuis les coordonnées GPS
Notifications temps réel (WebSocket) : toast in-app + notifs locales
Chat citoyen avec les signalements affichés comme notifications
Comptes démo multi-rôles pour démontrer le parcours de bout en bout
06 : Technologies
Stack utilisée
07 : Défis techniques
Problème → résultat
Isoler strictement les espaces sans mélanger les rôles ; encoder une machine à états partagée client/serveur ; fiabiliser l’upload photo (PUT R2 vides côté RN) ; gérer Expo Go SDK 57 (login obligatoire + limites push) ; afficher un lieu lisible (quartier) plutôt que de simples coordonnées.
La gouvernance métier (qui décide vs qui constate vs qui répare) doit être modélisée dans le code (FSM × rôle). Les uploads mobiles passent mieux par une API serveur que par des URL présignées directes. Le reverse geocoding + un référentiel local de quartiers améliore fortement l’UX métier.
08 : Sécurité
Contrôles concernés
- Auth JWT obligatoire pour les actions métier
- Isolation des espaces par rôle (useSpaceGate)
- Transitions de statut refusées si hors machine à états
- Technicien / vérificateur limités aux dossiers qui leur sont assignés
- Propriétaire seul autorisé à modifier/supprimer son signalement
- Secrets hors client (DATABASE_URL, JWT, R2 dans server/.env)
09 : Résultats
Résultats observables
- Parcours démo bout-en-bout opérationnel sur 4 comptes
- Pilotage collectivité avec équipes et affectations par unité
- Preuves photo visibles dans le détail du dossier
- Lieu affiché sous forme de quartier (ex. attribution auto)
10 : Galerie
Visuels
Cliquez pour voir l’image en entier