Sylvio BENJAMIN
SIGNA
Tous les projets

mobile · 2026

SIGNA

SIGNA est une application Expo (React Native) couplée à une API Hono/Neon qui structure le cycle de vie d’un signalement urbain : du citoyen qui déclare un problème jusqu’à la validation finale par la collectivité. Quatre espaces isolés (citoyen, collectivité, vérification, intervention) appliquent une machine à états stricte, avec unités d’intervention type Active Directory, preuves photo (R2) et attribution automatique du quartier à partir des coordonnées GPS.

ExpoReact NativeTypeScriptExpo RouterHonoNeon PostgresCloudflare R2WebSocketJWT

01 : Contexte

Pourquoi ce 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.

02 : Problématique

Le problème

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

Ce qui a été développé

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

  1. 01

    Frontend mobile : Expo / React Native (Expo Router)

  2. 02

    Backend : Hono (Node) — auth, incidents, org, chat, uploads

  3. 03

    Base de données : Neon Postgres

  4. 04

    Stockage médias : Cloudflare R2

  5. 05

    Temps réel : WebSocket (/ws)

05 : Fonctionnalités

Ce que le projet fait

4 espaces isolés par rôle : citoyen, collectivité, vérification, intervention

Workflow d’états (envoye → verification → confirme → 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

ExpoReact NativeTypeScriptExpo RouterHonoNeon PostgresCloudflare R2WebSocketJWT

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.

RésultatLa 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

Ce qui est observable

  • 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

Page d'accueil
Carte des incdents
Statut des signalements
Espace Marie / collectivité
Selection du type d'incident (one click)
Activation de la géeolocalisation
Message de confirmation de l'activation de la géolocalisation
Géolocalisation activée
Preuve visuelle
Choix de la gravité de l'accident
Recapitulatif du signalement
Chat intégré de l'application
SIGNA : Sylvio BENJAMIN