- Présentation
- Fonctionnalités
- Captures d'écran
- Stack technique
- Démarrage rapide
- Configuration
- Structure du projet
- Qualité et tests
- CI/CD et releases
- Sécurité et confidentialité
- Feuille de route
- Contribuer
- Licence
MemoFix est une application mobile Flutter pour organiser ses idées et ses problèmes du quotidien. Toutes les données restent sur l'appareil (SQLite) : aucun compte, aucun serveur, aucune synchronisation.
| Module | Description |
|---|---|
| 🗒️ Mémos | Notes par catégorie, listes de tâches, images, enregistrements audio. |
| 🔒 Mémos verrouillés | Accès protégé par un motif à tracer. |
| 🐞 FixMe | Suivi de « bugs IRL » : description, cause, impact, deadline, plan d'action, avancement en %. Détails : docs/modules/fixme.md. |
| 🔑 Motif oublié | Réinitialisation après confirmation par le verrouillage du téléphone (biométrie ou code). |
| 🎵 Musique | Récupération des métadonnées d'un lien Spotify et téléchargement d'un fichier audio. Optionnel, nécessite une configuration (voir plus bas). |
| 🌗 Thèmes | Mode clair et sombre, suivant le système. |
À ajouter : placez vos images dans
docs/screenshots/puis référencez-les ici.
| Domaine | Packages |
|---|---|
| Données | sqflite, path_provider, path |
| Sécurité | flutter_secure_storage, local_auth |
| Audio | record, just_audio |
| Médias & permissions | image_picker, photo_view, permission_handler |
| Réseau | dio, http |
| Interface | google_fonts, lottie, line_icons, fluttertoast, flutter_staggered_grid_view |
Versions exactes : pubspec.yaml et pubspec.lock.
Prérequis : Flutter stable (Dart ≥ 3.8.1), SDK Android, JDK 17.
git clone https://github.com/Fifah727/memofix.git
cd memofix
flutter pub get
flutter runLes dossiers
android/etios/doivent être présents. S'ils manquent, restaurez-les depuis votre projet d'origine (en conservant le mêmeapplicationId).
Visual Studio n'est nécessaire que pour la cible Windows desktop, pas pour Android. Pour ne rien installer en local, laissez GitHub compiler :
- Poussez le code sur GitHub.
- Onglet Actions → CI → Run workflow (ou simplement un push).
- Une fois le job terminé, téléchargez l'artefact memofix-debug-apk et installez-le sur votre téléphone.
Les logs de flutter analyze et flutter test y sont aussi disponibles.
L'application fonctionne sans configuration. Seul le module Musique a besoin d'identifiants Spotify. Ils ne sont jamais écrits dans le code : ils sont injectés à la compilation.
flutter run \
--dart-define=SPOTIFY_CLIENT_ID=votre_client_id \
--dart-define=SPOTIFY_CLIENT_SECRET=votre_client_secret| Variable | Rôle |
|---|---|
SPOTIFY_CLIENT_ID |
Identifiant de l'application Spotify Developer |
SPOTIFY_CLIENT_SECRET |
Secret associé |
⚠️ Une valeur--dart-defineest embarquée dans l'APK et donc extractible. Pour une distribution publique, passez par un petit backend/proxy. Voirdocs/AUDIT.md.
Sans ces variables, le module affiche simplement une erreur de configuration.
lib/
├── core/config/ Configuration injectée (--dart-define)
├── db/ Ouverture de la base SQLite
├── models/ Modèles de données
├── screens/
│ ├── home_screen.dart
│ ├── memos/ Mémos
│ ├── fixme/ Suivi de bugs
│ └── spotify_download/
├── services/ Accès aux données (queries) et services (auth, audio)
├── theme/ Couleurs
└── widgets/ Composants, écrans de verrouillage
assets/ animations/ · images/ · db/ (base vierge) · icon/
docs/ Audit, feuille de route, spécifications
test/ Tests unitaires
La cible d'architecture (organisation par fonctionnalité) est décrite dans docs/AUDIT.md.
dart format . # formatage
flutter analyze # analyse statique (règles : analysis_options.yaml)
flutter test # tests unitaires| Workflow | Déclencheur | Actions |
|---|---|---|
ci.yml |
push sur main, pull request |
format, analyse, tests, scan de secrets (gitleaks), build Android debug |
release.yml |
tag vX.Y.Z |
build signé APK + AAB, publication d'une GitHub Release |
Mettre en place une release
-
Dans Settings → Secrets and variables → Actions, créer :
ANDROID_KEYSTORE_BASE64,ANDROID_KEYSTORE_PASSWORD,ANDROID_KEY_ALIAS,ANDROID_KEY_PASSWORD(+SPOTIFY_CLIENT_IDetSPOTIFY_CLIENT_SECRETsi le module Musique est utilisé). -
Encoder le keystore :
base64 -w0 upload-keystore.jks(Linux) oubase64 -i upload-keystore.jks(macOS). -
Vérifier que
android/app/build.gradle(.kts)litandroid/key.properties(guide Flutter). -
Publier :
git tag v1.0.1 && git push origin v1.0.1
Utilisez la même clé de signature que l'application déjà publiée, sinon les mises à jour seront refusées.
- Données stockées localement ; aucune donnée envoyée à un serveur par l'application, hormis le module Musique (API Spotify et URL de téléchargement saisie par l'utilisateur).
- Aucun secret dans le dépôt ; scan automatique des secrets à chaque push.
- Signalement de vulnérabilité : voir
SECURITY.md. - État du durcissement (motif haché, base chiffrée, etc.) : voir
docs/AUDIT.md.
- Hash salé du motif et limitation des essais
- Chiffrement de la base SQLite (SQLCipher)
- Découpage des gros écrans en widgets
- Couche repository et gestion d'état unifiée
- Schéma SQL versionné (migrations)
- Polices embarquées (suppression du téléchargement à l'exécution)
- Tests de repositories et de widgets
- Créez une branche :
git checkout -b feat/ma-fonctionnalite - Avant de pousser :
dart format . && flutter analyze && flutter test - Ouvrez une pull request ; la CI doit être verte.
Messages de commit recommandés : Conventional Commits (feat:, fix:, chore:…).
Distribué sous licence MIT.