diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..3cbd212 --- /dev/null +++ b/.env.example @@ -0,0 +1,13 @@ +# Firebase Configuration +# Copiez ce fichier en .env et remplissez avec vos vraies valeurs +# Ne commitez JAMAIS le fichier .env dans Git ! + +FIREBASE_API_KEY=your_api_key_here +FIREBASE_AUTH_DOMAIN=your_project_id.firebaseapp.com +FIREBASE_PROJECT_ID=your_project_id +FIREBASE_STORAGE_BUCKET=your_project_id.appspot.com +FIREBASE_MESSAGING_SENDER_ID=your_messaging_sender_id +FIREBASE_APP_ID=your_app_id + +# Expo Configuration (optionnel) +EXPO_PUBLIC_API_URL=https://api.wallettracker.com diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..2dc5f6d --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,132 @@ +# Changelog + +Toutes les modifications notables de ce projet seront documentées dans ce fichier. + +Le format est basé sur [Keep a Changelog](https://keepachangelog.com/fr/1.0.0/), +et ce projet adhère au [Semantic Versioning](https://semver.org/lang/fr/). + +## [Non publié] + +### À venir +- Notifications push pour les rappels d'abonnements +- Mode sombre +- Export des données en CSV/PDF +- Objectifs budgétaires mensuels +- Support multilingue (EN, ES) +- Widgets pour l'écran d'accueil +- Reconnaissance de tickets avec OCR + +## [1.0.0] - 2025-10-23 + +### Ajouté +- **Authentification** + - Inscription avec email et mot de passe + - Connexion sécurisée via Firebase Auth + - Déconnexion + - Persistance de session avec AsyncStorage + - Gestion des erreurs d'authentification en français + +- **Dashboard** + - Vue d'ensemble mensuelle du budget + - Affichage du solde actuel (revenus - dépenses) + - Statistiques mensuelles (total revenus, total dépenses) + - Liste des 5 dernières transactions + - Boutons d'action rapide pour ajouter dépense/revenu + - Pull-to-refresh pour actualiser les données + +- **Gestion des transactions** + - Ajout de dépenses et revenus + - Sélection de catégorie avec icônes + - Ajout de notes optionnelles + - Affichage de la liste complète des transactions + - Tri par date (plus récentes en premier) + - Synchronisation temps réel avec Firestore + +- **Gestion des abonnements** + - Ajout d'abonnements récurrents + - Fréquences supportées : quotidien, hebdomadaire, mensuel, annuel + - Calcul automatique de la prochaine date de paiement + - Affichage du nombre de jours avant prélèvement + - Mise en évidence des abonnements proches (< 3 jours) + - Calcul du total mensuel des abonnements + +- **Analyses et statistiques** + - Graphique en camembert par catégorie + - Basculement entre dépenses et revenus + - Sélection du mois à analyser + - Statistiques détaillées par catégorie (montant, nombre, pourcentage) + - Affichage du total mensuel + +- **Catégories** + - 10 catégories de dépenses par défaut + - 5 catégories de revenus par défaut + - Icônes et couleurs personnalisées + - Initialisation automatique au premier usage + +- **Navigation** + - Bottom tabs avec 4 onglets principaux + - Navigation fluide entre les écrans + - Indicateurs visuels pour l'onglet actif + +- **Composants réutilisables** + - Button : Bouton personnalisable avec variantes + - InputText : Champ de saisie avec validation + - TransactionCard : Carte d'affichage de transaction + - SubscriptionCard : Carte d'affichage d'abonnement + +- **Services Firebase** + - authService : Gestion de l'authentification + - transactionService : CRUD des transactions + - subscriptionService : CRUD des abonnements + - categoryService : Gestion des catégories + +- **Utilitaires** + - Helpers : Fonctions de formatage et validation + - Constants : Couleurs, espacements, messages + - Sample data : Générateur de données de test + +- **Documentation** + - README.md complet + - QUICKSTART.md pour démarrage rapide + - FIREBASE_SETUP.md pour configuration Firebase + - TESTING.md avec checklist de tests + - DEPLOYMENT.md pour le déploiement + - CONTRIBUTING.md pour les contributions + +- **Sécurité** + - Règles Firestore pour protéger les données + - Validation côté client et serveur + - Stockage sécurisé des tokens + +### Technique +- React Native 0.81.5 +- Expo SDK 54 +- TypeScript 5.9 +- Firebase 12.4 +- React Navigation 7 +- React Native Chart Kit 6.12 + +## [0.1.0] - 2025-10-23 + +### Ajouté +- Configuration initiale du projet Expo +- Structure de base des dossiers +- Configuration TypeScript +- Installation des dépendances + +--- + +## Types de changements + +- `Ajouté` pour les nouvelles fonctionnalités +- `Modifié` pour les changements aux fonctionnalités existantes +- `Déprécié` pour les fonctionnalités bientôt supprimées +- `Supprimé` pour les fonctionnalités supprimées +- `Corrigé` pour les corrections de bugs +- `Sécurité` pour les vulnérabilités corrigées + +## Liens + +- [Non publié]: https://github.com/yourusername/wallettracker/compare/v1.0.0...HEAD +- [1.0.0]: https://github.com/yourusername/wallettracker/releases/tag/v1.0.0 +- [0.1.0]: https://github.com/yourusername/wallettracker/releases/tag/v0.1.0 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..7898e18 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,381 @@ +# 🤝 Guide de contribution - WalletTracker + +Merci de votre intérêt pour contribuer à WalletTracker ! Ce guide vous aidera à démarrer. + +## 📋 Table des matières + +- [Code de conduite](#code-de-conduite) +- [Comment contribuer](#comment-contribuer) +- [Structure du projet](#structure-du-projet) +- [Standards de code](#standards-de-code) +- [Process de développement](#process-de-développement) +- [Soumettre une Pull Request](#soumettre-une-pull-request) + +## Code de conduite + +En participant à ce projet, vous acceptez de respecter notre code de conduite : + +- Soyez respectueux et inclusif +- Acceptez les critiques constructives +- Concentrez-vous sur ce qui est le mieux pour la communauté +- Faites preuve d'empathie envers les autres membres + +## Comment contribuer + +### Signaler un bug + +1. Vérifiez que le bug n'a pas déjà été signalé dans les [Issues](https://github.com/yourusername/wallettracker/issues) +2. Créez une nouvelle issue avec le template "Bug Report" +3. Incluez : + - Description claire du problème + - Steps to reproduce + - Comportement attendu vs actuel + - Screenshots si applicable + - Version de l'app et de l'OS + +### Proposer une fonctionnalité + +1. Vérifiez que la fonctionnalité n'a pas déjà été proposée +2. Créez une issue avec le template "Feature Request" +3. Expliquez : + - Le problème que cela résout + - La solution proposée + - Des alternatives considérées + - Des mockups si applicable + +### Contribuer au code + +1. Fork le projet +2. Créez une branche pour votre fonctionnalité (`git checkout -b feature/AmazingFeature`) +3. Committez vos changements (`git commit -m 'Add some AmazingFeature'`) +4. Push vers la branche (`git push origin feature/AmazingFeature`) +5. Ouvrez une Pull Request + +## Structure du projet + +``` +WalletTracker/ +├── src/ +│ ├── components/ # Composants réutilisables +│ ├── config/ # Configuration (Firebase, etc.) +│ ├── hooks/ # Custom hooks +│ ├── navigation/ # Configuration de navigation +│ ├── screens/ # Écrans de l'application +│ ├── services/ # Services (API, Firebase) +│ ├── types/ # Types TypeScript +│ └── utils/ # Fonctions utilitaires +├── assets/ # Images, fonts, etc. +└── App.tsx # Point d'entrée +``` + +## Standards de code + +### TypeScript + +- Utilisez TypeScript strict +- Définissez des types explicites +- Évitez `any`, utilisez `unknown` si nécessaire +- Utilisez des interfaces pour les objets + +```typescript +// ✅ Bon +interface User { + id: string; + email: string; + displayName?: string; +} + +// ❌ Mauvais +const user: any = { ... }; +``` + +### Naming Conventions + +- **Composants** : PascalCase (`LoginScreen`, `Button`) +- **Fonctions** : camelCase (`formatCurrency`, `getUserData`) +- **Constantes** : UPPER_SNAKE_CASE (`API_URL`, `MAX_RETRIES`) +- **Fichiers** : Même nom que le composant principal + +### Composants React + +- Utilisez des functional components avec hooks +- Déstructurez les props +- Utilisez TypeScript pour typer les props + +```typescript +// ✅ Bon +interface ButtonProps { + title: string; + onPress: () => void; + variant?: 'primary' | 'secondary'; +} + +export const Button: React.FC = ({ title, onPress, variant = 'primary' }) => { + return ( + + {title} + + ); +}; +``` + +### Styles + +- Utilisez StyleSheet.create() +- Groupez les styles par composant +- Utilisez les constantes pour les couleurs et espacements + +```typescript +import { COLORS, SPACING } from '../utils/constants'; + +const styles = StyleSheet.create({ + container: { + padding: SPACING.lg, + backgroundColor: COLORS.white + } +}); +``` + +### Imports + +Organisez les imports dans cet ordre : + +1. React et React Native +2. Bibliothèques tierces +3. Composants locaux +4. Services et utils +5. Types +6. Styles + +```typescript +import React, { useState, useEffect } from 'react'; +import { View, Text } from 'react-native'; +import { useNavigation } from '@react-navigation/native'; + +import { Button } from '../components/Button'; +import { authService } from '../services/authService'; +import { formatDate } from '../utils/helpers'; +import { User } from '../types'; + +import styles from './styles'; +``` + +### Commentaires + +- Commentez le "pourquoi", pas le "quoi" +- Utilisez JSDoc pour les fonctions publiques +- Évitez les commentaires évidents + +```typescript +/** + * Calcule la prochaine date de paiement basée sur la fréquence + * @param currentDate - Date actuelle du paiement + * @param frequency - Fréquence de l'abonnement + * @returns La prochaine date de paiement + */ +export const calculateNextPaymentDate = ( + currentDate: Date, + frequency: SubscriptionFrequency +): Date => { + // ... +}; +``` + +## Process de développement + +### 1. Setup + +```bash +git clone https://github.com/yourusername/wallettracker.git +cd wallettracker +npm install +``` + +### 2. Créer une branche + +```bash +git checkout -b feature/nom-de-la-fonctionnalite +``` + +Types de branches : +- `feature/` : Nouvelle fonctionnalité +- `fix/` : Correction de bug +- `refactor/` : Refactoring +- `docs/` : Documentation +- `test/` : Tests + +### 3. Développer + +- Écrivez du code propre et testé +- Suivez les standards de code +- Testez sur iOS et Android +- Vérifiez qu'il n'y a pas d'erreurs TypeScript + +### 4. Tester + +```bash +# Lancer l'app +npm start + +# Vérifier TypeScript +npx tsc --noEmit + +# Linter (si configuré) +npm run lint +``` + +### 5. Committer + +Utilisez des messages de commit clairs : + +```bash +git commit -m "feat: add dark mode support" +git commit -m "fix: resolve crash on transaction deletion" +git commit -m "docs: update README with new features" +``` + +Format des commits : +- `feat:` Nouvelle fonctionnalité +- `fix:` Correction de bug +- `docs:` Documentation +- `style:` Formatage, pas de changement de code +- `refactor:` Refactoring +- `test:` Ajout de tests +- `chore:` Maintenance + +## Soumettre une Pull Request + +### Checklist avant soumission + +- [ ] Le code compile sans erreurs +- [ ] Les tests passent +- [ ] Le code suit les standards du projet +- [ ] La documentation est à jour +- [ ] Les commits sont bien formatés +- [ ] La PR a une description claire + +### Template de PR + +```markdown +## Description +Brève description des changements + +## Type de changement +- [ ] Bug fix +- [ ] Nouvelle fonctionnalité +- [ ] Breaking change +- [ ] Documentation + +## Comment tester +1. Étape 1 +2. Étape 2 +3. Résultat attendu + +## Screenshots (si applicable) +[Ajouter des screenshots] + +## Checklist +- [ ] Code testé sur iOS +- [ ] Code testé sur Android +- [ ] Documentation mise à jour +- [ ] Pas de console.log +``` + +### Review process + +1. Un mainteneur reviewera votre PR +2. Des changements peuvent être demandés +3. Une fois approuvée, la PR sera mergée +4. Votre contribution sera ajoutée au CHANGELOG + +## 🎨 Design Guidelines + +### UI/UX + +- Suivez les guidelines Material Design (Android) et Human Interface (iOS) +- Utilisez des animations fluides +- Assurez l'accessibilité (contraste, taille de texte) +- Testez sur différentes tailles d'écran + +### Couleurs + +Utilisez les couleurs définies dans `src/utils/constants.ts` + +### Espacements + +Utilisez les espacements standardisés (8, 12, 16, 24, 32px) + +## 🧪 Tests + +### Tests manuels + +Utilisez le guide dans `TESTING.md` + +### Tests automatisés (à venir) + +```bash +npm test +``` + +## 📝 Documentation + +- Mettez à jour le README si nécessaire +- Documentez les nouvelles fonctionnalités +- Ajoutez des exemples d'utilisation +- Mettez à jour le CHANGELOG + +## 🐛 Debugging + +### Outils utiles + +- React Native Debugger +- Flipper +- Reactotron +- Firebase Console + +### Logs + +```typescript +// Développement +console.log('Debug info'); + +// Production +// Utilisez un service de logging (Sentry, etc.) +``` + +## 💡 Bonnes pratiques + +### Performance + +- Utilisez `React.memo` pour les composants lourds +- Évitez les re-renders inutiles +- Optimisez les images +- Utilisez FlatList pour les longues listes + +### Sécurité + +- Ne hardcodez jamais de secrets +- Validez toutes les entrées utilisateur +- Utilisez HTTPS uniquement +- Suivez les règles de sécurité Firebase + +### Accessibilité + +- Ajoutez des labels accessibles +- Testez avec VoiceOver/TalkBack +- Assurez un contraste suffisant +- Supportez les grandes tailles de texte + +## 🆘 Besoin d'aide ? + +- Consultez la [documentation](./README.md) +- Posez vos questions dans les [Discussions](https://github.com/yourusername/wallettracker/discussions) +- Rejoignez notre [Discord](https://discord.gg/wallettracker) (si applicable) + +## 🙏 Remerciements + +Merci à tous les contributeurs qui rendent ce projet possible ! + +--- + +**Happy coding! 🚀** diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md new file mode 100644 index 0000000..9b87240 --- /dev/null +++ b/DEPLOYMENT.md @@ -0,0 +1,341 @@ +# 🚀 Guide de déploiement - WalletTracker + +Ce guide explique comment déployer WalletTracker en production. + +## Prérequis + +- Compte Expo (gratuit) : https://expo.dev/ +- EAS CLI installé : `npm install -g eas-cli` +- Compte développeur Apple (pour iOS) ou Google Play (pour Android) + +## Étape 1 : Configuration EAS + +### Installer EAS CLI + +```bash +npm install -g eas-cli +``` + +### Se connecter à Expo + +```bash +eas login +``` + +### Initialiser EAS Build + +```bash +eas build:configure +``` + +Cela créera un fichier `eas.json` avec la configuration de build. + +## Étape 2 : Configurer les variables d'environnement + +### Pour la production + +Créez un fichier `.env.production` : + +```env +FIREBASE_API_KEY=votre_clé_production +FIREBASE_AUTH_DOMAIN=votre_domaine_production +FIREBASE_PROJECT_ID=votre_projet_production +FIREBASE_STORAGE_BUCKET=votre_bucket_production +FIREBASE_MESSAGING_SENDER_ID=votre_sender_id +FIREBASE_APP_ID=votre_app_id +``` + +### Configurer les secrets EAS + +```bash +eas secret:create --scope project --name FIREBASE_API_KEY --value "votre_clé" +eas secret:create --scope project --name FIREBASE_AUTH_DOMAIN --value "votre_domaine" +# ... répétez pour toutes les variables +``` + +## Étape 3 : Build pour iOS + +### Configuration + +1. Assurez-vous d'avoir un compte Apple Developer +2. Configurez votre Bundle Identifier dans `app.json` + +### Lancer le build + +```bash +# Build de développement +eas build --platform ios --profile development + +# Build de preview (TestFlight) +eas build --platform ios --profile preview + +# Build de production +eas build --platform ios --profile production +``` + +### Soumettre à l'App Store + +```bash +eas submit --platform ios +``` + +## Étape 4 : Build pour Android + +### Configuration + +1. Configurez votre package name dans `app.json` +2. Générez un keystore (EAS le fait automatiquement) + +### Lancer le build + +```bash +# Build de développement +eas build --platform android --profile development + +# Build de preview (Internal Testing) +eas build --platform android --profile preview + +# Build de production +eas build --platform android --profile production +``` + +### Soumettre à Google Play + +```bash +eas submit --platform android +``` + +## Étape 5 : Configuration eas.json + +Exemple de configuration complète : + +```json +{ + "cli": { + "version": ">= 5.0.0" + }, + "build": { + "development": { + "developmentClient": true, + "distribution": "internal", + "ios": { + "simulator": true + } + }, + "preview": { + "distribution": "internal", + "ios": { + "simulator": false + } + }, + "production": { + "env": { + "FIREBASE_API_KEY": "$FIREBASE_API_KEY", + "FIREBASE_AUTH_DOMAIN": "$FIREBASE_AUTH_DOMAIN", + "FIREBASE_PROJECT_ID": "$FIREBASE_PROJECT_ID", + "FIREBASE_STORAGE_BUCKET": "$FIREBASE_STORAGE_BUCKET", + "FIREBASE_MESSAGING_SENDER_ID": "$FIREBASE_MESSAGING_SENDER_ID", + "FIREBASE_APP_ID": "$FIREBASE_APP_ID" + } + } + }, + "submit": { + "production": { + "ios": { + "appleId": "votre@email.com", + "ascAppId": "1234567890", + "appleTeamId": "ABCD123456" + }, + "android": { + "serviceAccountKeyPath": "./google-service-account.json", + "track": "production" + } + } + } +} +``` + +## Étape 6 : Over-The-Air (OTA) Updates + +EAS Update permet de déployer des mises à jour sans passer par les stores. + +### Configurer EAS Update + +```bash +eas update:configure +``` + +### Publier une mise à jour + +```bash +# Pour la branche de production +eas update --branch production --message "Fix bug XYZ" + +# Pour la branche de preview +eas update --branch preview --message "New feature ABC" +``` + +## Étape 7 : Monitoring et Analytics + +### Sentry (erreurs) + +1. Créez un compte sur https://sentry.io/ +2. Installez le SDK : + +```bash +npm install @sentry/react-native +``` + +3. Configurez dans `App.tsx` : + +```typescript +import * as Sentry from '@sentry/react-native'; + +Sentry.init({ + dsn: 'votre_dsn_sentry', + enableInExpoDevelopment: false, + debug: false +}); +``` + +### Firebase Analytics + +Déjà inclus avec Firebase. Activez-le dans la console Firebase. + +## Étape 8 : Checklist avant déploiement + +### Code + +- [ ] Tous les tests passent +- [ ] Pas de console.log en production +- [ ] Variables d'environnement configurées +- [ ] Version incrémentée dans `app.json` +- [ ] Changelog mis à jour + +### Firebase + +- [ ] Règles Firestore en mode production +- [ ] Règles Storage configurées +- [ ] Quotas vérifiés +- [ ] Backup configuré +- [ ] Monitoring activé + +### App Stores + +- [ ] Screenshots préparés +- [ ] Description de l'app rédigée +- [ ] Politique de confidentialité publiée +- [ ] Conditions d'utilisation publiées +- [ ] Icône et splash screen finalisés + +### Sécurité + +- [ ] HTTPS uniquement +- [ ] Pas de secrets hardcodés +- [ ] Validation côté serveur (règles Firestore) +- [ ] Rate limiting configuré +- [ ] Authentification sécurisée + +## Étape 9 : Déploiement progressif + +### Phase 1 : Beta Testing (1-2 semaines) + +```bash +# Build preview +eas build --platform all --profile preview + +# Inviter des beta testeurs +eas build:list +``` + +### Phase 2 : Soft Launch (1 mois) + +- Déployer dans un pays test +- Monitorer les métriques +- Corriger les bugs critiques + +### Phase 3 : Production + +```bash +# Build production +eas build --platform all --profile production + +# Soumettre aux stores +eas submit --platform all +``` + +## Étape 10 : Post-déploiement + +### Monitoring + +- Surveiller les crashs (Sentry) +- Analyser les métriques (Firebase Analytics) +- Vérifier les performances (Firebase Performance) +- Lire les reviews utilisateurs + +### Mises à jour + +```bash +# Mise à jour mineure (bug fixes) +eas update --branch production --message "Bug fixes" + +# Mise à jour majeure (nouvelles fonctionnalités) +# Nécessite un nouveau build +eas build --platform all --profile production +``` + +## 📊 Métriques à surveiller + +- **DAU/MAU** : Utilisateurs actifs quotidiens/mensuels +- **Retention** : Taux de rétention à J1, J7, J30 +- **Crash rate** : Taux de crash < 1% +- **Performance** : Temps de chargement < 3s +- **Engagement** : Nombre de transactions par utilisateur + +## 🔧 Dépannage + +### Build échoue + +```bash +# Nettoyer le cache +eas build:cancel +eas build --clear-cache --platform all +``` + +### Update ne fonctionne pas + +```bash +# Vérifier la configuration +eas update:list --branch production +``` + +### Problèmes de certificats iOS + +```bash +# Régénérer les certificats +eas credentials +``` + +## 💰 Coûts estimés + +### Gratuit +- Expo (plan gratuit) : Builds limités +- Firebase (plan Spark) : Limité mais suffisant pour débuter + +### Payant +- Apple Developer : 99€/an +- Google Play : 25€ (une fois) +- Expo (plan Production) : ~29$/mois (builds illimités) +- Firebase (plan Blaze) : Pay-as-you-go + +## 📚 Ressources + +- [EAS Build Documentation](https://docs.expo.dev/build/introduction/) +- [EAS Submit Documentation](https://docs.expo.dev/submit/introduction/) +- [EAS Update Documentation](https://docs.expo.dev/eas-update/introduction/) +- [App Store Guidelines](https://developer.apple.com/app-store/review/guidelines/) +- [Google Play Guidelines](https://play.google.com/about/developer-content-policy/) + +--- + +**Bon déploiement ! 🎉**