🌳 PictoTree — Classeur de communication numérique pour la CAA
PictoTree est un projet open source de Communication Alternative et Améliorée (CAA) permettant de créer, organiser et utiliser des classeurs de pictogrammes personnalisés.
Le projet repose aujourd’hui sur deux applications complémentaires :
- Une application web, utilisée pour créer et gérer les classeurs et préparer leur impression ;
- Une application Android native, destinée à leur utilisation quotidienne, notamment en mobilité et hors connexion.
Le projet est développé de bout en bout et est actuellement déployé en production sur
pictotree.eu.
🌐 Application web & API
L'application web constitue le cœur de gestion du projet. Elle permet notamment de créer des arbres de pictogrammes, d'assembler des pages en classeurs et de préparer leur utilisation sur mobile ou leur impression.
Fonctionnalités
- Création et gestion de comptes utilisateurs.
- Construction d'arbres de pictogrammes avec une interface en glisser-déposer.
- Organisation des pages en classeurs.
- Recherche et import de pictogrammes, notamment depuis la banque ARASAAC.
- Import et gestion de photos personnelles dans un espace utilisateur isolé.
- Génération de documents PDF adaptés à différents usages d'impression.
- API REST sécurisée utilisée par l'application Android.
- Gestion des classeurs et des données nécessaires à leur synchronisation avec le mobile.
Stack Technique
Python
Flask
JavaScript
SQLAlchemy
PostgreSQL
REST API
JWT
L'application est conteneurisée avec Docker Compose et s'appuie notamment sur :
- Un conteneur pour l'application Flask ;
- Un conteneur PostgreSQL ;
- Un volume dédié aux données persistantes et aux médias utilisateurs.
Le déploiement en production est automatisé par CI/CD.
📱 Application Android
L'application Android constitue le volet utilisateur du projet. Elle permet de récupérer les classeurs créés sur le site et de les utiliser directement pour communiquer.
Elle est développée nativement en Kotlin et repose sur une architecture MVVM.
Fonctionnalités actuellement opérationnelles
- Connexion au compte PictoTree et récupération des classeurs.
- Navigation fluide dans les arbres de pictogrammes.
- Composition d'une phrase à partir de pictogrammes.
- Réorganisation et suppression des pictogrammes dans le bandeau de phrase.
- Lecture vocale via le moteur Text-to-Speech de Google.
- Utilisation hors connexion complète après synchronisation.
- Fonctionnalités de minuterie et de jalons sur les pictogrammes.
- Interface responsive adaptée aux smartphones et tablettes.
L'application utilise Room pour la persistance locale et Retrofit / OkHttp pour les échanges avec l'API.
Développement en cours
L'application mobile est encore en développement actif. Les prochaines étapes concernent notamment :
- L'intégration complète des opérations de création, modification et suppression (CRUD) ;
- La synchronisation bidirectionnelle avec le site web ;
- La couverture de l'ensemble des fonctionnalités par des tests automatisés ;
- L'enrichissement des possibilités d'utilisation des pictogrammes, notamment avec l'association de sons personnalisés.
L'objectif est progressivement de faire de l'application Android un véritable client mobile complet du système, et non uniquement une interface de consultation des classeurs créés sur le web.
🏗️ Architecture & déploiement
PictoTree est organisé autour d'une séparation claire entre la plateforme web/API et le client Android :
┌─────────────────────────┐
│ Application │
│ Android / Kotlin │
└────────────┬────────────┘
│ REST (JWT)
┌────────────▼────────────┐
│ Flask / API │ ◄─── Conteneur Docker
└────────────┬────────────┘
│
┌────────────▼────────────┐ ┌─────────────────────────┐
│ PostgreSQL │ │ Volume persistant │
│ Conteneur Docker │ │ données / médias │
└─────────────────────────┘ └─────────────────────────┘
L'infrastructure de production repose sur Docker Compose, avec séparation stricte des services et persistance des données via volumes dédiés.
Le déploiement est intégré au workflow de développement grâce à un pipeline CI/CD, permettant de valider puis de déployer les évolutions sur l'environnement de production.
🧪 Qualité logicielle & tests
Le projet web dispose d'une suite de tests automatisés couvrant plusieurs niveaux de l'application :
- Analyse statique et linting avec Ruff (Python) et ESLint (JavaScript) ;
- Tests unitaires du backend et du JavaScript ;
- Tests d'intégration de l'API, de l'authentification, de la base de données et des mécanismes de sécurité ;
- Tests End-to-End avec Playwright, exécutés dans un environnement isolé reproduisant le fonctionnement complet de l'application.
Les scénarios E2E couvrent notamment des parcours utilisateurs complets : construction d'un arbre, création d'un classeur, import d'images et génération de fiches PDF.
La stratégie de test est intégrée directement au projet via la commande unique :
make test
L'objectif est de conserver une validation automatisée suffisamment large pour limiter les régressions au fur et à mesure de l'évolution du projet.
La même démarche de couverture et de validation est progressivement appliquée à l'application Android.
🚧 État du projet
- Application web : 🟢 en production et fonctionnelle.
- API REST : 🟢 utilisée par le site et l'application Android.
- Application Android : 🟡 fonctionnelle sur le socle principal, mais encore en développement.
- Synchronisation mobile : 🟡 en cours d'évolution, notamment pour permettre la modification des données depuis Android.
Le projet continue donc d'évoluer autour d'un objectif : disposer d'un écosystème complet permettant de concevoir un classeur sur le web, le synchroniser avec un appareil Android et l'utiliser quotidiennement, y compris hors connexion.
Licence : AGPL-3.0
Technologies principales
Python
Flask
JavaScript
Kotlin
Android SDK
PostgreSQL
SQLAlchemy
Room
Retrofit
REST
JWT
Docker
Docker Compose
CI/CD
Pytest
Playwright
ESLint
Ruff
Les liens du projet
Backend Web & API
Dépôt Git du projet Pictogram-Tree Builder (Flask, Docker, tests Playwright)
Lien du dépôt GitHub
Application Android
Dépôt Git de l'application mobile native Kotlin (MVVM, Room, TTS, Retrofit)
Lien du dépôt GitHub
Plateforme en ligne
Accéder directement à l'application web déployée en production
Visiter pictotree.eu