Votre compagnon Agile tout-en-un, 100% offline
Une application web complète pour Product Owners qui couvre l'intégralité du cycle de vie produit : de la stratégie à la livraison, de la découverte utilisateur à l'analyse de performance.
ProductOwnerApp est actuellement en version Beta. L'application est fonctionnelle et stable, mais en développement actif.
Points importants :
- 🚧 Possibles bugs mineurs sur certains cas d'usage
- 💾 Données stockées localement (localStorage) - Exportez régulièrement
- 🖥️ Optimisé pour desktop (responsive en cours d'amélioration)
- 📧 Vos retours sont précieux : GitHub Issues
Version stable production : Décembre 2025
📷 TODO : Ajouter screenshots
- Dashboard
- Liste contacts
- Backlog stories
- Sprint board
- Gestion produits : Multi-produits avec roadmap
- Objectifs OKR : Suivi objectifs et progression
- Stakeholders : Contacts internes/externes, équipes
- Budget : Suivi budgétaire par équipe/produit
- Entretiens utilisateurs : Préparation, conduite, insights
- Besoins utilisateurs : Capture et priorisation
- Personas : Profils utilisateurs détaillés
- Analyse : Extraction insights, enrichissement besoins
- User Stories : Backlog complet avec critères d'acceptation
- MoSCoW : Priorisation Must/Should/Could/Won't
- RICE Scoring : Reach × Impact × Confidence / Effort
- Planning Poker : Estimation collaborative
- Roadmap : Vision long terme
- Gestion sprints : Planification, tracking, vélocité
- Sprint Board : Kanban temps réel
- Tâches : Gestion granulaire avec outcomes
- Task Board : Suivi avancement tâches
- Sprint Review : Démonstrations et feedback
- Rétrospectives : Keep/Drop/Try, actions
- Dashboard : Métriques temps réel
- Health Score : Score santé produit 0-100
- Vélocité : Historique et tendances
- Capacité équipes : Utilisation ressources
- Jalons : Prochains événements importants
- Wiki : Base de connaissances intégrée
- FAQ : Questions fréquentes
- Paramètres : Personnalisation application
- Export/Import : Sauvegarde données JSON
- Node.js 18+ (Télécharger)
- npm 9+ (inclus avec Node.js)
- Navigateur moderne : Chrome 90+, Firefox 88+, Safari 14+, Edge 90+
# 1. Cloner le repository
git clone https://github.com/yourusername/ProductOwnerApp.git
cd ProductOwnerApp
# 2. Installer les dépendances
npm install
# 3. Lancer en développement
npm run dev
# 4. Ouvrir dans le navigateur
# http://localhost:5173# Build optimisé
npm run build
# Prévisualiser le build
npm run previewNavigation : Produits → Ajouter un produit
- Nom : Ex. "Application Mobile"
- Code : Ex. "MOBILE"
- Statut : Actif
- Description : Vision du produit
Navigation : Contacts → Ajouter un contact
- Nom et rôle
- Type : Interne / Externe
- Produits assignés
- Informations équipe (si applicable)
Navigation : Besoins → Ajouter un besoin
- Contexte du besoin
- Objectifs recherchés
- Importance (Critical, High, Medium, Low)
- Lier aux contacts et produit
Navigation : Stories → Ajouter une story
- Format : "En tant que [persona], je veux [action] afin de [bénéfice]"
- Critères d'acceptation
- Estimation (points)
- Priorité MoSCoW
- Lier aux besoins et objectifs
Navigation : Sprints → Ajouter un sprint
- Nom : Ex. "Sprint 12"
- Dates de début et fin
- Objectif du sprint
- Sélectionner les stories
- Assigner l'équipe
Navigation : Dashboard
- Vue d'ensemble métriques
- Health Score produit
- Sprint actif et vélocité
- Alertes et jalons
📤 Exportez régulièrement vos données
Menu ≡ → Export/Import → Exporter toutes les données
Sauvegardez le fichier JSON en lieu sûr
🔄 Workflow recommandé
1. Discovery : Entretiens → Besoins → Personas
2. Stratégie : Objectifs → Priorisation (RICE/MoSCoW)
3. Backlog : User Stories → Estimation
4. Sprint : Planification → Board → Review → Rétro
5. Analyse : Dashboard → Ajustements
👥 Utilisation en équipe
- Planification Poker : Sessions d'estimation collaboratives
- Sprint Review : Démo des réalisations
- Rétrospective : Keep/Drop/Try pour amélioration continue
Frontend
- React 18.2 - Framework UI
- Vite 5.0 - Build tool ultra-rapide
- Tailwind CSS 3.4 - Styling utilitaire
Librairies
- Lucide React - Icônes SVG optimisées
- Recharts - Graphiques et visualisations
- @hello-pangea/dnd - Drag & drop Kanban
Stockage
- localStorage - 100% offline, pas de backend
- Factory Pattern - API CRUD standardisée
ProductOwnerApp/
├── public/ # Assets statiques
├── src/
│ ├── components/ # Composants React
│ │ ├── Common/ # Composants partagés (FilterBar, etc.)
│ │ ├── ui/ # Design System (30+ composants)
│ │ ├── Contacts/ # Module Contacts
│ │ ├── Dashboard/ # Module Dashboard
│ │ ├── Interviews/ # Module Entretiens
│ │ ├── UserStories/ # Module Stories
│ │ ├── SprintsManagement/ # Module Sprints
│ │ └── [25+ autres modules]
│ │
│ ├── hooks/ # Hooks personnalisés
│ │ ├── useContacts.js
│ │ ├── useUserStories.js
│ │ ├── useSprints.js
│ │ └── [11 hooks métier]
│ │
│ ├── contexts/ # Context API
│ │ ├── AppContext.jsx # État global
│ │ ├── PreferencesContext.jsx # Préférences utilisateur
│ │ └── NavigateContext.jsx # Navigation
│ │
│ ├── utils/ # Utilitaires
│ │ ├── storage/ # Factory Pattern storage
│ │ │ ├── storageFactory.js
│ │ │ ├── entities.js
│ │ │ └── constants.js
│ │ ├── constants.js # Constantes globales
│ │ ├── exportImport.js
│ │ └── [15+ helpers]
│ │
│ ├── App.jsx # Composant racine
│ ├── main.jsx # Point d'entrée
│ └── index.css # Styles globaux
│
├── audit/ # Documentation audit technique
├── package.json
├── vite.config.js
├── tailwind.config.js
└── README.md
Factory Pattern Storage
// Génération automatique API CRUD pour chaque entité
const ContactsAPI = createStorageAPI('po_app_contacts', defaults);
// API standard : get, add, update, remove, getById
const contacts = ContactsAPI.get();
const newContact = ContactsAPI.add({ name: 'John' });Hooks métier
// Pattern standard pour tous les hooks CRUD
export const useContacts = (showNotification) => {
const [contacts, setContacts] = useState([]);
const [loading, setLoading] = useState(true);
// CRUD avec notifications
const handleAddContact = useCallback((data) => {
const newContact = addContact(data);
setContacts(prev => [...prev, newContact]);
showNotification('Contact créé', 'success');
return newContact;
}, [showNotification]);
return { contacts, loading, addContact: handleAddContact, ... };
};Composants UI standardisés
// Pattern FormModal uniforme
<FormModal isOpen={isOpen} onClose={onClose} size="large">
<FormHeader title="Ajouter un contact" icon={<UserIcon />} />
<FormSection title="Informations générales">
<FormGrid cols={2}>
<Input label="Nom" value={name} onChange={setName} />
<Input label="Email" value={email} onChange={setEmail} />
</FormGrid>
</FormSection>
<FormFooter onCancel={onClose} onSubmit={handleSubmit} />
</FormModal># Développement
npm run dev # Serveur dev avec hot reload (port 5173)
# Build
npm run build # Build production optimisé
npm run preview # Prévisualiser build production
# Linting (si configuré)
npm run lint # Vérifier qualité codeVite (vite.config.js)
// Build optimisé, hot reload, React Fast RefreshTailwind (tailwind.config.js)
// Classes utilitaires, thème personnalisé, mode darklocalStorage
// Clés utilisées (préfixe: po_app_)
po_app_products
po_app_contacts
po_app_user_stories
po_app_sprints
// ... 16 entitésLes contributions sont les bienvenues ! Voici comment participer :
# Fork le projet sur GitHub
# Puis clone ton fork
git clone https://github.com/ton-username/ProductOwnerApp.git
cd ProductOwnerApp
npm installgit checkout -b feature/ma-nouvelle-fonctionnalite
# ou
git checkout -b fix/correction-bug# Faire les modifications
# Tester localement
npm run devgit add .
git commit -m "feat: ajout de [fonctionnalité]"
# ou
git commit -m "fix: correction de [bug]"
git push origin feature/ma-nouvelle-fonctionnaliteOuvrir une PR sur GitHub avec :
- Description claire des changements
- Captures d'écran si UI
- Tests manuels effectués
JavaScript/React
- ESLint (configuré)
- Composants fonctionnels avec hooks
- Props destructuring
- useCallback pour fonctions passées en props
- useMemo pour calculs complexes
Naming
// Composants : PascalCase
const ContactCard = () => { ... };
// Hooks : useCamelCase
const useContacts = () => { ... };
// Fichiers : PascalCase pour composants, camelCase pour utils
ContactCard.jsx
storageFactory.jsTailwind CSS
// Classes utilitaires, pas de CSS custom sauf exceptions
className="bg-white rounded-lg shadow hover:shadow-lg p-5"| Métrique | Valeur | Cible |
|---|---|---|
| Bundle size (gzipped) | ~250 KB | < 150 KB |
| First Load (3G) | ~3s | < 2s |
| Time to Interactive | ~4s | < 2.5s |
| Lighthouse Performance | 75 | 90+ |
- ⚡ Lazy loading modules (-50% bundle initial)
- 🚀 Virtualisation listes longues
- 🎯 Context API optimisé
- 💾 Compression localStorage
localStorage uniquement
- ✅ 100% offline, pas de serveur
- ✅ Données restent sur votre machine
- ✅ Pas de tracking, pas d'analytics tiers
⚠️ Limité à 5-10 MB selon navigateur⚠️ Effacé si vous videz le cache
📤 Export régulier (IMPORTANT)
Menu ≡ → Export/Import → Exporter toutes les données
Fréquence recommandée : Hebdomadaire
Format : JSON (lisible et portable)
🔐 Pas de données sensibles
Ne PAS stocker :
- Mots de passe
- Données personnelles sensibles (SSN, etc.)
- Informations bancaires
- Secrets d'entreprise critiques
OK pour stocker :
- Contacts professionnels
- Stories et sprints
- Notes de réunions
- Métriques projet
💾 Backup stratégie
1. Export JSON régulier
2. Versioning fichiers (ex: backup-2025-12-07.json)
3. Stockage sécurisé (Drive, Dropbox, etc.)
4. Test restauration mensuel
Performances
⚠️ Ralentissements possibles avec 500+ items par liste⚠️ Chargement initial 3s sur connexion lente
Responsive
⚠️ Expérience mobile partielle (60% optimisé)- ✅ Optimisé pour desktop/laptop 1280px+
Navigateurs
- ✅ Chrome 90+ : Support complet
- ✅ Firefox 88+ : Support complet
- ✅ Safari 14+ : Support complet
- ✅ Edge 90+ : Support complet
- ❌ IE11 : Non supporté
localStorage
⚠️ Quota 5-10 MB selon navigateur⚠️ Données perdues si cache vidé⚠️ Pas de sync multi-device
- (à venir)
- 📖 Guide utilisateur : docs/user-guide.md (à venir)
- 🏗️ Architecture : docs/architecture.md (à venir)
- 🎨 Design System : docs/design-system.md (à venir)
- 🐛 Changelog : CHANGELOG.md
Q : Mes données sont-elles synchronisées entre appareils ?
R : Non, localStorage est local à chaque navigateur. Utilisez Export/Import pour transférer.
Q : Puis-je utiliser l'app sans connexion internet ?
R : Oui ! L'app est 100% offline une fois chargée. Ajoutez-la à l'écran d'accueil (PWA à venir).
Q : Combien de données puis-je stocker ?
R : Environ 5-10 MB selon navigateur. L'app affiche une alerte à 80% du quota.
Q : Que faire si je perds mes données ?
R : Restaurez depuis votre dernier export JSON (Menu → Import). D'où l'importance d'exporter régulièrement !
Q : L'app est-elle gratuite ?
R : Oui, 100% gratuit et open-source (MIT License).
Q : Puis-je contribuer au projet ?
R : Absolument ! Voir section Contribuer.
Q : Comment signaler un bug ?
R : Créer une issue GitHub
🐛 Bug ou problème technique
→ Créer une issue GitHub
💡 Suggestion de fonctionnalité
→ GitHub Discussions
📧 Questions & Support
→ Utilisez GitHub Issues
💬 Communauté
→ Discord / Slack à venir
🎉 Version initiale MVP
Fonctionnalités principales
- ✅ 26 modules métier complets
- ✅ Factory Pattern storage
- ✅ Design System harmonisé (92% conformité)
- ✅ Dashboard analytique
- ✅ Export/Import JSON
Améliorations prévues
- ⚡ Performances (lazy loading)
- 📱 Responsive mobile
- 🧪 Tests automatisés
MIT License - Copyright (c) 2025 ProductOwnerApp
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Merci à tous les contributeurs et testeurs beta qui ont rendu ce projet possible !
Technologies utilisées
Si ProductOwnerApp vous est utile :
- ⭐ Star le projet sur GitHub
- 🐛 Signalez des bugs ou proposez des améliorations
- 📢 Partagez avec d'autres Product Owners
- 💬 Donnez votre feedback pour guider le développement
Made with ❤️ for Product Owners everywhere