Spécifications produit — DocApp V1

Documentation Pierre 07 avril 2026 1 vue

Spécifications produit — DocApp V1

Document Product Manager — Version 1.0 — Avril 2026

1. Vision produit

Problème résolu

Les organisations (écoles, PME, administrations) gèrent leur documentation interne de façon dispersée : fichiers Word éparpillés, emails, Google Drive non structuré. Résultat : information introuvable, versions obsolètes qui circulent, aucune traçabilité.

Proposition de valeur

DocApp centralise, structure et publie la documentation interne dans une interface moderne, sécurisée et accessible depuis n'importe quel navigateur — sans installation côté utilisateur.

Positionnement

DocAppConfluenceNotionSharePoint
Auto-hébergé✅ (onprem)
RGPD natif⚠️⚠️
Simple à déployerN/A
Compositeur fragments
CoûtInfra seule€€€€€€€€

2. Utilisateurs cibles

Persona 1 — L'Administrateur

  • Qui : Directeur d'école, responsable administratif, DSI PME
  • Objectif : Avoir une documentation à jour, structurée, accessible à tous
  • Frustration actuelle : Passe du temps à chercher les bonnes versions, les envoie par email
  • Ce qu'il gagne : Source unique de vérité, publication en un clic

Persona 2 — L'Éditeur

  • Qui : Enseignant, coordinateur, responsable RH
  • Objectif : Rédiger et partager ses procédures sans dépendre de l'IT
  • Frustration actuelle : Doit passer par quelqu'un d'autre pour publier
  • Ce qu'il gagne : Autonomie de rédaction, workflow de validation clair

Persona 3 — Le Lecteur

  • Qui : Employé, élève, parent, partenaire externe
  • Objectif : Trouver rapidement l'information dont il a besoin
  • Frustration actuelle : Ne sait pas où chercher, reçoit des versions différentes
  • Ce qu'il gagne : Recherche full-text instantanée, accès sans compte

3. Fonctionnalités — V1

Front-office (public)

FonctionnalitéDescriptionPriorité
HomepageListe des documents publiés récentsP0
Recherche full-textPostgreSQL tsvector, résultats pondérés avec surlignageP0
Navigation catégoriesArborescence 2 niveauxP0
Page documentContenu HTML, compteur de vuesP0
Navigation tagsFiltrage par étiquettesP1
Sitemap XMLIndexation SEO automatiqueP1

Back-office (authentifié)

FonctionnalitéDescriptionRôle
CRUD DocumentsCréation, édition, publication, archivageADMIN + EDITOR
Éditeur TipTapWYSIWYG riche : titres, listes, tableaux, images, codeADMIN + EDITOR
Auto-sauvegardeBrouillons sauvés toutes les 30sADMIN + EDITOR
Fragments réutilisablesMarquage de documents comme blocs réutilisablesADMIN + EDITOR
CompositeurAssemblage drag & drop de fragments en nouveau documentADMIN
Gestion catégoriesCRUD + ordonnancementADMIN
Gestion tagsCRUD + association documentsADMIN
Gestion utilisateursCRUD + rôles + soft delete RGPDADMIN
Upload imagesjpg/png/gif/webp, 5MB maxADMIN + EDITOR

4. Architecture technique


┌─────────────────────────────────────────────────────┐
│                    INTERNET                          │
└──────────────────────┬──────────────────────────────┘
                       │ HTTPS
┌──────────────────────▼──────────────────────────────┐
│           Nginx Proxy Manager (port 80/443)          │
│           SSL Let's Encrypt auto-renew               │
└──────────────────────┬──────────────────────────────┘
                       │ HTTP :3001
┌──────────────────────▼──────────────────────────────┐
│              Next.js 14 — Standalone                 │
│  ┌─────────────────┐   ┌─────────────────────────┐  │
│  │  App Router     │   │  API Routes             │  │
│  │  Server Compon. │   │  /api/documents         │  │
│  │  Middleware auth│   │  /api/search            │  │
│  └─────────────────┘   │  /api/upload            │  │
│                         └─────────────────────────┘  │
│  ┌────────────────────────────────────────────────┐  │
│  │  NextAuth.js v4 — JWT — Sessions 8h            │  │
│  └────────────────────────────────────────────────┘  │
└──────────────────────┬──────────────────────────────┘
                       │ Prisma ORM
┌──────────────────────▼──────────────────────────────┐
│              PostgreSQL 16                           │
│  ┌──────────┐ ┌──────────┐ ┌──────────────────────┐ │
│  │ documents│ │  users   │ │ categories / tags    │ │
│  │ tsvector │ │ soft del.│ │ consent_logs         │ │
│  │ GIN index│ │ bcrypt   │ └──────────────────────┘ │
│  └──────────┘ └──────────┘                          │
└─────────────────────────────────────────────────────┘

Stack

CoucheTechnologieChoix justifié
FrameworkNext.js 14 App RouterSSR natif, API routes intégrées, output standalone pour Docker
ORMPrisma 5.xMigrations versionnées, typage TypeScript, compatible Next.js 14
Base de donnéesPostgreSQL 16Full-text search natif (tsvector), robustesse, ACID
AuthNextAuth.js v4Credentials provider, JWT, sessions courtes RGPD
ÉditeurTipTap v3WYSIWYG extensible, output HTML propre
UIshadcn/ui v4 + Base UIComposants accessibles, pas de dépendance Radix
CSSTailwind CSS v3CSS variables, design system cohérent
InfraDocker + NPMPortabilité, isolation, SSL automatique

5. Modèle de données


users
├── id (uuid)
├── email (unique)
├── password (bcrypt)
├── name
├── role (ADMIN | EDITOR)
├── createdAt
└── deletedAt (soft delete RGPD)

categories
├── id (uuid)
├── name / slug
├── description
├── order
└── parentId (max 2 niveaux)

documents
├── id (uuid)
├── title / slug (unique)
├── content (HTML)
├── excerpt
├── status (DRAFT | PUBLISHED | ARCHIVED)
├── isFragment (bool)
├── categoryId → categories
├── authorId → users
├── views
├── publishedAt
└── search_vector (tsvector GENERATED — GIN index)

tags
└── relation M-M avec documents via _DocumentTags

consent_logs
├── userId? → users
├── ipHash (SHA-256 — jamais d'IP brute)
├── action
└── createdAt

6. Sécurité & RGPD

MesureImplémentation
AuthentificationJWT signé, expiration 8h
Mots de passebcrypt salt 10
SessionsCourtes (8h) — conformité RGPD
Soft deleteJamais de DELETE physique sur users
IPsSHA-256 uniquement dans consent_logs
UploadsValidation type + taille, stockage volume Docker
HTMLSanitisation DOMPurify côté serveur
Headers HTTPX-Frame-Options, X-Content-Type-Options, Referrer-Policy
Rate limitinglib/rateLimit.ts sur les routes sensibles
TransportHTTPS forcé via NPM + Let's Encrypt

7. Déploiement


LOCAL (dev)                    VPS (prod)
┌──────────────────┐          ┌──────────────────────────────┐
│ npm run dev      │          │ Docker Compose               │
│ :3000            │   ──►    │ ┌────────────┐ ┌──────────┐  │
│                  │  build   │ │ docapp     │ │postgres  │  │
│ Docker           │  image   │ │ :3001      │ │ :5432    │  │
│ postgres:5432    │  +       │ └────────────┘ └──────────┘  │
│ pgadmin:5050     │  deploy  │                              │
└──────────────────┘          │ Nginx Proxy Manager          │
                              │ docs.dedobbeleer.online      │
                              │ SSL Let's Encrypt            │
                              └──────────────────────────────┘

Workflow de déploiement :
① docker buildx build --platform linux/amd64 -t docapp:latest .
② docker save | gzip | ssh | docker load
③ scp docker-compose.prod.yml → VPS
④ docker compose up -d --remove-orphans
   └── migrations auto au démarrage

8. Roadmap

VersionFonctionnalitésStatut
V1.0CRUD documents, recherche, catégories, tags, users, fragments, compositeur✅ Livré
V1.1Notifications email (validation documents), workflow de révision formalisé📋 Planifié
V1.2Export PDF, historique des versions de documents📋 Planifié
V2.0Multi-organisation, permissions granulaires, API publique🔭 Vision

9. KPIs de succès

  • Adoption : % de documents migrés depuis l'ancien système dans les 30 jours
  • Usage : Nombre de recherches / semaine
  • Contenu : Nombre de documents publiés / mois
  • Qualité : Ratio documents PUBLISHED vs DRAFT
  • Performance : Time to first byte < 200ms