ARCHITECTURE.md: - Section 6.5: modèle de comptes (local/gitea/github) - Matrice d'intégrations & règles de déconnexion - 3 scénarios de workspace (A/B/C) - Sidebar: règles d'affichage par type de compte - Share & Publish: modale 2 tabs + schéma DB - Library: /library?tab= + filtres source - Trash local-only, édition unifiée, stockage Private - Plan de migration 5 phases ROADMAP.md: - v4.0.0 section prioritaire: Account Model, Intégrations, Sidebar rules, Share/Publish, Library, Édition unifiée
335 lines
15 KiB
Markdown
335 lines
15 KiB
Markdown
# Roadmap FlowDeck — Notion Clone
|
||
|
||
> **Vision**: Copie conforme de l'UI/UX Notion, intégrée à Gitea.
|
||
> **19 images de référence** dans `images/` — analysées le 2026-07-08.
|
||
|
||
## Completed
|
||
|
||
### v0.2.0 ✅ — Base
|
||
Dashboard + Board Kanban + Gitea sync + Notes + Docker
|
||
|
||
### v0.3.0 ✅ — Auth
|
||
OAuth2 Gitea, token par utilisateur, CSRF, rate limiting, webhooks
|
||
|
||
### v0.4.0 ✅ — UI Notion
|
||
Layout 3 zones (sidebar 240px + topbar 44px), dark mode, CSS 31KB, Alpine.js
|
||
|
||
### v0.5.0 ✅ — Kanban
|
||
Colonnes, groupes, cartes enrichies, drag&drop, modale détail, checklists, commentaires
|
||
|
||
### v0.6.0 ✅ — Table View
|
||
6 colonnes triables, groupes rétractables
|
||
|
||
### v0.7.0 ✅ — Filtres & Tri
|
||
Filtres cumulables AND, status dropdown, sort multi-critères
|
||
|
||
### v0.8.0 ✅ — Vues Spéciales
|
||
Status Overview (donut SVG), Team Load (barres), Detailed Board
|
||
|
||
### v0.9.0 ✅ — Backend
|
||
Propriétés custom, AI keywords, sync API, 12 tables DB
|
||
|
||
### v1.0.0 ✅ — Production
|
||
- [x] FastAPI lifespan (deprecation fix)
|
||
- [x] 28 tests — 5 vues, filtres, tris, APIs, CSRF, CORS, DB
|
||
- [x] CI/CD Gitea Actions (`.gitea/workflows/ci.yml`)
|
||
- [x] CHANGELOG.md, ARCHITECTURE.md à jour
|
||
- [x] Version 1.0.0 partout (main.py, api.py, health)
|
||
- [x] Tag git v1.0.0
|
||
|
||
### v1.1.0 ✅ — Pages & Sidebar
|
||
- [x] Pages Markdown avec arbre imbriqué (parent_id, sort_order)
|
||
- [x] Block editor mode (content_format='blocks', JSON storage)
|
||
- [x] Soft delete → Trash → Restore → Permanent delete
|
||
- [x] Drag & drop réorganisation pages
|
||
- [x] Sidebar Notion-style avec sections Recents/Private/Shared
|
||
- [x] "+ New page" footer button
|
||
- [x] Workspace header avec avatar + chevron toggle
|
||
|
||
### v1.2.0 ✅ — Éditeur Notion
|
||
- [x] Slash menu (/) 15 commandes fonctionnelles
|
||
- [x] Navigation clavier (flèches, Enter, Escape)
|
||
- [x] Placeholders Notion-style (Heading 1/2/3/4, Toggle, Quote, Code)
|
||
- [x] Suppression outline blanc sur les blocs
|
||
- [x] Heading 4 support
|
||
- [x] Breadcrumbs contextuels (workspace > projet > page)
|
||
|
||
### v1.3.0 ✅ — Database Concept (Bloc 1 du gap analysis)
|
||
- [x] Tables `collections`, `collection_pages`, `collection_views`
|
||
- [x] Rétrocompatibilité Gitea via `GiteaBoardCompat`
|
||
- [x] Router `/db` — API CRUD collections + pages (12 endpoints)
|
||
- [x] 34/34 tests passent
|
||
|
||
### v1.4.0 ✅ — Propriétés Avancées (Bloc 2)
|
||
- [x] Table `collection_properties` — 21 types Notion
|
||
- [x] Service `property_types.py` — validation, formatage, auto-values
|
||
- [x] 38/38 tests passent
|
||
|
||
### v1.5.0 ✅ — Relations & Rollups
|
||
- [x] Type `relation` — lien bidirectionnel entre collections
|
||
- [x] Type `rollup` — aggregation via relation (COUNT, SUM, AVG, etc.)
|
||
- [x] Type `formula` — moteur d'expressions (19 fonctions)
|
||
- [x] Formula engine + Rollup engine
|
||
- [x] 43/43 tests passent
|
||
|
||
### v1.6.0 ✅ — Vues Manquantes (Bloc 3)
|
||
- [x] Calendar, Gallery, List, Timeline, Table views
|
||
- [x] View tabs navigation
|
||
- [x] 49/49 tests passent
|
||
|
||
### v1.7.0 ✅ — Vues Améliorées
|
||
### v1.8.0 ✅ — Sub-items & Dépendances
|
||
- [x] View config API, Save view as
|
||
- [x] Sub-items (parent_id auto-référence)
|
||
- [x] Status aggregate, Dependencies (blocking constraint)
|
||
- [x] 56/56 tests passent
|
||
|
||
### v1.9.0 ✅ — My Tasks & Dashboard Unifié (Bloc 5)
|
||
- [x] Vue `/my-tasks` — agrège pages assignées à l'utilisateur
|
||
- [x] Groupement par collection, filtres globaux
|
||
- [x] 60/60 tests passent
|
||
|
||
### v2.0.0 ✅ — Éditeur Complet & Multi-Utilisateurs (Blocs 6-7)
|
||
- [x] Workspaces, Comments, Page History, Favorites
|
||
- [x] Database Templates, Page Templates, CSV Import/Export
|
||
- [x] Public Sharing
|
||
- [x] 67/67 tests passent
|
||
|
||
### v2.1.0 ✅ — Workspace Local & Arborescence
|
||
### v2.2.0 ✅ — Tags & Recherche Avancée
|
||
### v2.3.0 ✅ — Multi-Vues Workspace & Preview Panel
|
||
### v2.4.0 ✅ — Tags Personnalisés par Utilisateur
|
||
### v2.5.0 ✅ — Administration Avancée
|
||
### v2.6.0 ✅ — My Account & Auth Locale
|
||
### v2.7.0 ✅ — Intégration Gitea Phase 1
|
||
### v2.7.1 ✅ — Private Pages Gitea
|
||
|
||
### v2.8.0 ✅ — Gitea Phase 2 (2026-07-14)
|
||
- [x] Créer fichiers dans le repo (New file UI + API PUT)
|
||
- [x] Upload fichiers binaires (POST /upload, drag-drop)
|
||
- [x] Syntax highlighting via Prism.js CDN
|
||
- [x] Labels Gitea → tags FlowDeck (POST /sync-labels, 16 labels importés)
|
||
- [x] Historique commits par fichier (GET /commits?path=)
|
||
|
||
### v2.9.0 ✅ — GitHub OAuth Provider (2026-07-14)
|
||
- [x] GitHubProvider dans `app/auth/providers.py`
|
||
- [x] GitHubAdapter dans `app/services/github_adapter.py`
|
||
- [x] Config GitHub dans `.env.example` (GITHUB_OAUTH_CLIENT_ID/SECRET)
|
||
|
||
### v3.0.0 ✅ — UX Professionnelle (2026-07-14)
|
||
- [x] Multi-sélection (checkboxes + Shift/Ctrl-click dans le sidebar)
|
||
- [x] Raccourcis clavier (Ctrl+N, F2, Delete, Escape, Ctrl+S)
|
||
- [x] Inline rename (double-clic → champ inline)
|
||
- [x] Loading skeletons (animations pulse dans workspaces + file viewer
|
||
- [x] Grid/card view (mode grille/vignettes)
|
||
- [x] Table sorting (tri par colonnes)
|
||
- [x] Sélecteur de vue: Tree, List, Details, Title, Content (5 modes)
|
||
- [x] Preview Panel latéral (contenu, métadonnées, tags, actions)
|
||
- [x] Tri par date (Oldest/Newest)
|
||
|
||
### v2.4.0 ✅ — Tags Personnalisés par Utilisateur (2026-07-13)
|
||
- [x] Tags isolés par `user_id` — chaque utilisateur voit ses propres tags
|
||
- [x] `UNIQUE(name, user_id)`, migration des tags existants
|
||
- [x] API filtrage transparent (session cookie)
|
||
|
||
### v2.5.0 ✅ — Administration Avancée (2026-07-13)
|
||
- [x] Premier compte créé = admin automatique
|
||
- [x] Panneau Admin dans Settings (Users & Roles, Audit)
|
||
- [x] Table `login_history` (IP, user_agent, timestamp)
|
||
- [x] CRUD utilisateurs (créer, modifier rôle/password, supprimer)
|
||
- [x] Statistiques par utilisateur (workspaces, pages, utilisation)
|
||
- [x] CSRF fix sur les appels admin
|
||
|
||
### v2.6.0 ✅ — My Account & Auth Locale (2026-07-13)
|
||
- [x] Section My Account: modifier username, nom, email, mot de passe
|
||
- [x] Toggle voir/cacher mot de passe (oeil/barré)
|
||
- [x] Label "Email or username" dans login
|
||
- [x] Refresh cookie session après modification compte
|
||
- [x] Register avec Gitea (OAuth crée compte + active intégration)
|
||
|
||
### v2.7.0 ✅ — Intégration Gitea Phase 1 (2026-07-13)
|
||
- [x] **OAuth2 Provider** — Gitea comme fournisseur OAuth2 (Client ID/Secret dans `.env`)
|
||
- [x] **Redirect URI dynamique** — basé sur le header `Host` (localhost + IP réseau)
|
||
- [x] **Workspace listing** — 2 sections: My Workspaces + Gitea Projects
|
||
- [x] **Tabs par organisation** — All | user | org1 | org2 avec compteurs
|
||
- [x] **Barre de recherche** — filtrage live par nom/description
|
||
- [x] **Lazy tree** — arborescence chargée un dossier à la fois
|
||
- [x] **File viewer** — lecture fichiers Gitea (décodé base64)
|
||
- [x] **Éditeur + commit** — modifier et commiter dans Gitea
|
||
- [x] **Delete fichier** — suppression avec confirmation + commit
|
||
- [x] **Arborescence dans le sidebar** — comme un workspace local
|
||
- [x] **Settings › Integrations** — connecter/déconnecter Gitea
|
||
- [x] **Fallback token admin** — GET sans token utilisateur (read-only)
|
||
- [x] **Write ops** — exigent token OAuth utilisateur (commit, delete)
|
||
- [x] **Limit=100** — tous les repos visibles (pas de pagination tronquée)
|
||
|
||
### v2.7.1 ✅ — Private Pages Gitea (2026-07-13)
|
||
- [x] Table `gitea_private_pages` — liée par (user_id, owner, repo)
|
||
- [x] API CRUD: GET/POST/PUT/DELETE private-pages
|
||
- [x] UI dans le workspace Gitea: liste + éditeur titre/contenu
|
||
- [x] Lien Private Pages dans le sidebar
|
||
- [x] Persistant entre sessions — survit au changement de workspace
|
||
|
||
---
|
||
|
||
## v4.0.0 — Accounts, Integrations & Sidebar (priorité haute)
|
||
|
||
> **Rappel** : Section 6.5 de ARCHITECTURE.md documente le design complet.
|
||
|
||
### 4.0 Account Model
|
||
- [ ] **`auth_method`** — colonne `users.auth_method ∈ {local, gitea, github}`
|
||
- [ ] **Auto-détection** — migrer les comptes existants (gitea_token → gitea, sinon local)
|
||
- [ ] **Badge OAuth** — 🦎/🐙 dans sidebar SI `auth_method` = provider
|
||
- [ ] **Pas de badge** — un compte local avec intégration ne montre PAS de badge
|
||
|
||
### 4.0a Intégrations & Déconnexion
|
||
- [ ] **Settings page** — montre toutes les intégrations avec bouton Connect/Disconnect
|
||
- [ ] **Matrice déconnexion** : local→déco ok · gitea→déco github ok · github→déco gitea ok
|
||
- [ ] **Provider principal** — pas de bouton Disconnect sur auth_method
|
||
- [ ] **Compte local** — peut connecter Gitea + GitHub simultanément
|
||
|
||
### 4.0b Sidebar — règles par type de compte
|
||
- [ ] **Private visible** UNIQUEMENT si workspace actif est distant (Gitea/GitHub)
|
||
- [ ] **Private caché** pour Scénario A (local pur)
|
||
- [ ] **Trash local-only** — caché pour compte OAuth pur, restreint au contenu local
|
||
- [ ] **Boutons → Library** sur chaque section (recents, favorites, shared, published…)
|
||
|
||
### 4.0c Share & Publish
|
||
- [ ] **Modale Share** — 2 tabs (Share + Publish) fonctionnels
|
||
- [ ] **Share tab** — inviter email/user, général access lien
|
||
- [ ] **Publish tab** — activer/désactiver, slug généré
|
||
- [ ] **Page publique** — `/p/<slug>` sert le contenu publié
|
||
- [ ] **Tables DB** — `page_shares`, colonnes `is_published`, `is_shared`, `share_mode`
|
||
|
||
### 4.0d Library
|
||
- [ ] **Page `/library?tab=`** — tabs Recents, Favorites, Shared, Published, Private, Workspace
|
||
- [ ] **Filtres source** — All | Local | Gitea | GitHub
|
||
- [ ] **Table `recents`** — tracking automatique des documents consultés
|
||
|
||
### 4.0e Édition unifiée
|
||
- [ ] **Même UI** pour fichiers locaux ET distants
|
||
- [ ] **Bouton Commit** — visible uniquement pour fichiers distants
|
||
- [ ] **Champ message** — pour les commits Gitea/GitHub
|
||
|
||
---
|
||
|
||
## v4.0.0 — Parité Notion (Delta Analysis)
|
||
|
||
> **Méthodologie**: Comparaison exhaustive de FlowDeck v3.0.1 vs Notion (2025) — 60+ fonctionnalités analysées, 45 manquantes identifiées, 30 retenues pour v4.0.0.
|
||
|
||
### 🟢 Tier 1 — Critique (16 features)
|
||
|
||
#### 4.1 AI Assistant
|
||
- [ ] **Notion AI-style** — intégration LLM locale/nuage pour: écriture, résumé, traduction, brainstorming
|
||
- [ ] **Auto-complétion** — suggestions de contenu pendant la frappe
|
||
- [ ] **AI properties** — auto-remplissage de propriétés (résumé auto, catégorisation)
|
||
- [ ] **Slash AI commands** — `/ai write`, `/ai summarize`, `/ai translate`
|
||
|
||
#### 4.2 Embeds & Rich Media
|
||
- [ ] **60+ embeds** — YouTube, Figma, Google Maps, Loom, Twitter, CodePen, Miro, etc.
|
||
- [ ] **Image lightbox** — clic pour agrandir, navigation entre images
|
||
- [ ] **Inline file previews** — PDF, vidéo, audio directement dans la page
|
||
- [ ] **Bookmark cards** — aperçu riche des liens (OG metadata)
|
||
|
||
#### 4.3 Export & Import
|
||
- [ ] **Export PDF** — mise en page fidèle, table des matières
|
||
- [ ] **Export Markdown** — avec images et sous-pages
|
||
- [ ] **Export HTML** — site statique
|
||
- [ ] **Import Confluence/Evernote/Asana** — migration depuis autres outils
|
||
|
||
### 🟡 Tier 2 — Important (8 features)
|
||
|
||
#### 4.4 Collaboration & Notifications
|
||
- [ ] **Realtime editing** — WebSocket, curseurs multi-utilisateurs
|
||
- [ ] **Inline comments** — commentaires sur sélection de texte
|
||
- [ ] **@mentions** — notifier un utilisateur → page/commentaire
|
||
- [ ] **Email notifications** — changements, mentions, rappels
|
||
|
||
#### 4.5 Content Blocks
|
||
- [ ] **Callout blocks** — boîtes colorées (info, warning, tip, success)
|
||
- [ ] **Table of contents** — auto-généré depuis les headings
|
||
- [ ] **Math equations** — LaTeX / KaTeX inline + block
|
||
- [ ] **Toggle lists** — contenu expandable/collapsible
|
||
|
||
### 🟠 Tier 3 — Avancé (6 features)
|
||
|
||
#### 4.6 Views & Layout
|
||
- [ ] **Linked databases** — vue d'une DB dans plusieurs pages
|
||
- [ ] **Charts & dashboards** — graphiques depuis données DB (bar, line, donut)
|
||
- [ ] **Multi-colonnes** — layout flexible (2, 3, 4 colonnes)
|
||
- [ ] **Command palette** — Ctrl+P / Cmd+K recherche universelle
|
||
|
||
#### 4.7 Automations
|
||
- [ ] **Database automations** — if-this-then-that (ex: statut=done → assign next)
|
||
- [ ] **Buttons** — boutons cliquables déclenchant des actions (créer page, modifier propriété…)
|
||
|
||
#### 4.8 Database Avancée
|
||
- [ ] **Database unifiée** — refonte complète du système de database Notion-style
|
||
- Inline databases dans n'importe quelle page
|
||
- Full-page databases avec vues multiples
|
||
- Templates de database (Project tracker, CRM, Inventory…)
|
||
- Champs calculés avec formules complexes
|
||
- Groupes de propriétés pliables
|
||
- Validation des propriétés (required, unique, min/max)
|
||
- Types de propriétés manquants: Person (multi-select users), Last edited time, Created by
|
||
- [ ] **Vues Notion complètes**
|
||
- Vue Timeline/Gantt avec dépendances visuelles
|
||
- Vue Board (Kanban) avec swimlanes et WIP limits
|
||
- Vue Calendar avec drag & drop reschedule
|
||
- Vue Gallery avec images de couverture
|
||
|
||
#### 4.9 Kanban Adaptable
|
||
- [ ] **Kanban personnalisable par utilisateur**
|
||
- Colonnes configurables (propriété Select/Status)
|
||
- Cartes configurables (choisir quelles propriétés afficher)
|
||
- Couverture de carte (image, icône, couleur)
|
||
- Sous-tâches visibles directement sur la carte
|
||
- WIP limits par colonne avec alertes visuelles
|
||
- Vues sauvegardées par utilisateur (nom, filtres, tri, colonnes)
|
||
- Mode compact / mode détaillé
|
||
|
||
#### 4.10 Calendar & Meetings
|
||
- [ ] **Calendrier intégré**
|
||
- Vue Calendrier avec drag & drop pour reschedule
|
||
- Vue Jour/Semaine/Mois (comme Notion Calendar)
|
||
- Récurrence d'événements (daily, weekly, monthly, custom)
|
||
- Timezone support
|
||
- Rappels (in-app, email)
|
||
- [ ] **Meeting Notes**
|
||
- Template Meeting Notes avec sections: Attendees, Agenda, Notes, Action Items
|
||
- Lien automatique avec le calendrier
|
||
- Action items → création automatique de tâches
|
||
|
||
---
|
||
|
||
## v4.1.0 — Pro (futur)
|
||
|
||
- [ ] **PWA** — Progressive Web App, offline support
|
||
- [ ] **SSO/SAML** — enterprise authentication
|
||
- [ ] **Granular permissions** — page-level, property-level access control
|
||
- [ ] **Web Clipper** — extension navigateur sauvegarder vers FlowDeck
|
||
- [ ] **API publique** — REST API + webhooks
|
||
- [ ] **Synced blocks** — bloc synchronisé entre plusieurs pages
|
||
- [ ] **Conditional formatting** — couleur cellule basée sur valeur
|
||
- [ ] **Pivot tables** — vues agrégées
|
||
- [ ] **Database containers** — sous-DBs imbriquées
|
||
|
||
---
|
||
|
||
## Résumé des phases
|
||
|
||
```
|
||
v1.0.0 ✅ v1.1.0 ✅ v1.2.0 ✅ v1.3.0 ✅ v1.4.0 ✅ v1.5.0 ✅ v1.6.0 ✅ v1.7.0 ✅
|
||
Production Pages Editor DB Concept Properties Relations Views View+
|
||
|
||
v2.0.0 ✅ v2.1.0 ✅ v2.2.0 ✅ v2.3.0 ✅ v2.4.0 ✅ v2.5.0 ✅ v2.6.0 ✅ v2.7.0 ✅
|
||
Editor+ Workspace Tags Views5 Tags/user Admin Account Gitea P1
|
||
Local Panel
|
||
|
||
v2.7.1 ✅ v2.8.0 ✅ v2.9.0 ✅ v3.0.0 ✅ v3.0.1 ✅ v4.0.0 ⬜ v4.1.0 ⬜
|
||
Private Gitea P2 GitHub Pro UX Quality Notion Pro
|
||
Pages
|
||
```
|
||
|
||
*Dernière mise à jour: 2026-07-14 — v4.0.0 planifié*
|