Application de gestion de décisions pour organisations avec différentes modalités décisionnelles.
- Multi-organisations : Gestion de plusieurs organisations et équipes
- Modalités décisionnelles :
- ✅ Consensus : Unanimité requise
- 🤝 Consentement : Pas d'objection majeure
- 📊 Vote nuancé : Échelle de préférences (-3 à +3)
- 🗳️ Vote majoritaire : Simple ou qualifié
- 💬 Consultatif : Avis sans décision contraignante
- Registre des décisions : Historique complet et traçabilité
- Discussions : Commentaires et débats sur chaque décision
- Frontend : Next.js 15 + TypeScript + Tailwind CSS
- Backend : Next.js API Routes
- Base de données : PostgreSQL + Prisma ORM
- Authentification : NextAuth.js
decidoo/
├── app/ # Next.js App Router
│ ├── layout.tsx
│ ├── page.tsx
│ └── globals.css
├── components/ # Composants React réutilisables
├── lib/ # Logique métier et utilitaires
│ ├── prisma.ts # Client Prisma
│ └── decision-logic.ts # Logique de calcul des décisions
├── types/ # Types TypeScript
│ └── index.ts
├── prisma/ # Schéma DB et migrations
│ └── schema.prisma
└── package.json
- User : Utilisateurs de la plateforme
- Organization : Organisations (entreprises, associations...)
- Team : Équipes au sein d'une organisation
- Decision : Décisions à prendre
- Vote : Votes des membres sur les décisions
- Comment : Discussions et commentaires
enum DecisionType {
CONSENSUS // Unanimité requise
CONSENT // Pas d'objection majeure
MAJORITY // Vote majoritaire simple
SUPERMAJORITY // Vote qualifié (2/3)
WEIGHTED_VOTE // Vote nuancé avec échelle
ADVISORY // Consultatif
}enum VoteValue {
STRONG_SUPPORT // ++ (poids +3)
SUPPORT // + (poids +2)
WEAK_SUPPORT // ~+ (poids +1)
ABSTAIN // 0
WEAK_OPPOSE // ~- (poids -1)
OPPOSE // - (poids -2)
STRONG_OPPOSE // -- (poids -3)
BLOCK // Veto (consentement uniquement)
}- Node.js 18+
- PostgreSQL 14+
- npm ou yarn
- Cloner le projet
git clone <votre-repo>
cd decidoo- Installer les dépendances
npm install- Configurer la base de données
Créer un fichier .env :
cp .env.example .envModifier la variable DATABASE_URL avec vos credentials PostgreSQL :
DATABASE_URL="postgresql://user:password@localhost:5432/decidoo?schema=public"
- Générer le client Prisma
npm run db:generate- Créer la base de données
npm run db:push- Lancer l'application
npm run devL'application sera accessible sur http://localhost:3000
npm run dev: Lancer en mode développementnpm run build: Build de productionnpm run start: Lancer en productionnpm run lint: Linter le codenpm run db:generate: Générer le client Prismanpm run db:push: Pousser le schéma vers la DB (dev)npm run db:migrate: Créer une migrationnpm run db:studio: Ouvrir Prisma Studio (interface DB)
Le calcul du résultat varie selon le type de décision :
- ✅ Approuvé si tous les votes sont "Support fort"
- ❌ Rejeté sinon
- 🚫 Bloqué si un seul vote "Block"
- ❌ Rejeté si "Opposition forte"
- ✅ Approuvé sinon
- Calcul du score :
Σ (valeur_vote × poids) - ✅ Approuvé si score > 0
- ❌ Rejeté si score ≤ 0
- ✅ Approuvé si votes positifs > votes négatifs
- ✅ Approuvé si votes positifs ≥ 2/3 du total
NextAuth.js permet :
- Inscription / Connexion par email + mot de passe
- OAuth (Google, GitHub... extensible)
- Gestion de sessions sécurisées
Le projet est conçu pour faciliter une future migration :
- Logique métier isolée dans
/lib - Types TypeScript partagés
- API REST via Next.js API Routes
- Possible utilisation de React Native avec code partagé
Les contributions sont les bienvenues ! N'hésitez pas à ouvrir une issue ou une pull request.
MIT
Fait avec ❤️ pour la gouvernance collaborative