# 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) ### (2026-07-10, commit c574d2c, tag v1.3.0) - [x] **Table `collections`** — base de données abstraite, indépendante de Gitea - `id`, `name`, `description`, `icon`, `schema_json` - Optionnellement liée à Gitea (`gitea_owner`, `gitea_repo`) - [x] **Table `collection_pages`** — remplace `cards`, pages génériques - `collection_id`, `title`, `position`, `parent_id`, `property_values_json` - `gitea_issue_id` optionnel, auto-propriétés (`created_at`, `updated_at`) - [x] **Table `collection_views`** — vues configurables par collection - `name`, `view_type`, `config_json`, `position` - [x] **Rétrocompatibilité Gitea** — adaptateur `GiteaBoardCompat` - Les boards Gitea existants deviennent des collections - Migration transparente `cards` → `collection_pages` - Routes `/db/boards/api`, `/db/board/{o}/{r}/api`, `/db/board/{o}/{r}/sync` - [x] **Router `/db`** — API CRUD collections + pages (12 endpoints) - [x] **34/34 tests** passent (+6 nouveaux tests v1.3) - [x] **Database lock** — mode lecture seule (`collections.is_locked`) - [x] **Database description** — champ `description` sur les collections --- ### v1.4.0 ✅ — Propriétés Avancées (Bloc 2) ### (2026-07-10) - [x] **Table `collection_properties`** — remplace `project_properties` - Liée à `collections` (pas à `project_owner/name`) - Supporte tous les types Notion (21 types) - [x] **Type `number`** — avec formatage (nombre, %, €, $, £, ¥) - [x] **Type `checkbox`** — booléen natif - [x] **Type `url`** — lien cliquable - [x] **Type `email`** — email cliquable - [x] **Type `phone`** — téléphone cliquable - [x] **Type `status`** — select avec couleurs forcées (9 couleurs Notion) - [x] **Type `files`** — uploads/images attachés aux pages - [x] **Type `unique_id`** — ID auto-incrémenté par collection - [x] **Type `created_time` / `created_by`** — auto-propriétés - [x] **Type `last_edited_time` / `last_edited_by`** — auto-propriétés - [x] **Service `property_types.py`** — validation, formatage, auto-values - [x] **API CRUD** — `/db/property-types/api` + CRUD `/db/{id}/properties/api` - [x] **38/38 tests** passent (+4 nouveaux tests v1.4) - [ ] **Migration** `project_properties` → `collection_properties` (v1.5) ### v1.5.0 ✅ — Relations & Rollups (Bloc 2 suite) ### (2026-07-10) - [x] **Type `relation`** — lien bidirectionnel entre collections - `related_collection_id`, `reverse_name` auto-généré - Stockage : JSON array de page IDs dans `property_values_json` - API: `POST /db/{id}/properties/relation` (création avec reverse) - API: `POST /db/{id}/properties/relation/link` (lier 2 pages) - [x] **Type `rollup`** — agrégation via relation - Functions : COUNT, SUM, AVG, MIN, MAX, RANGE, UNIQUE, PERCENT_CHECKED - API: `POST /db/rollup/compute` - [x] **Type `formula`** — propriétés calculées - Moteur d'expressions JavaScript-like (19 fonctions) - API: `POST /db/formula/evaluate` - [x] **Formula engine** — `services/formula_engine.py` - [x] **Rollup engine** — `services/rollup_engine.py` - [x] **43/43 tests** passent (+5 nouveaux tests v1.5) - [x] **FKs fix**: `related_collection_id`, `relation_property_id`, `target_property_id` → `ON DELETE SET NULL` ### v1.6.0 ✅ — Vues Manquantes (Bloc 3) ### (2026-07-10) - [x] **Calendar view** — grid mensuel, navigation mois, événements par date - Route: `GET /db/{id}/view/calendar` - [x] **Gallery view** — cartes visuelles avec cover image optionnelle - `card_size`: small/medium/large, `cover_property` configurable - [x] **List view** — liste compacte avec preview propriétés - [x] **Timeline/Gantt view** — barres horizontales sur axe date - [x] **Table view** — rendu SSR, colonnes properties - [x] **View tabs** — navigation entre vues (Table/Board/Calendar/Gallery/List/Timeline) - [x] **49/49 tests** passent (+6 nouveaux tests v1.6) ### v1.7.0 ✅ — Vues Améliorées ### v1.8.0 ✅ — Sub-items & Dépendances ### (2026-07-10, combined) - [x] **View config API** — PUT /db/views/{id}/config (group_by, card_size, cover, visible) - [x] **Save view as** — POST /db/{id}/views/save-as - [x] **List views** — GET /db/{id}/views/api - [x] **Sub-items** — parent_id auto-référence, GET/POST sub-items - [x] **Status aggregate** — GET status-aggregate (Done only if all children Done) - [x] **Dependencies** — POST dependencies + POST check-deps (blocking constraint) - [x] **56/56 tests** passent (+7 tests v1.7+v1.8) ### v1.9.0 ✅ — My Tasks & Dashboard Unifié (Bloc 5) ### (2026-07-10) - [x] **Vue `/my-tasks`** — agrège toutes les pages assignées à l'utilisateur - Scan cross-collection (toutes les databases du workspace) - Filtre automatique : admin voit tout - [x] **Groupement par collection** — sections par database d'origine - [x] **Filtres globaux** — All, Today, Overdue, Next 7 days - [x] **API JSON** — `GET /my-tasks/api` - [x] **60/60 tests** passent (+4 tests v1.9) ### v2.0.0 ✅ — Éditeur Complet & Multi-Utilisateurs (Blocs 6-7) ### (2026-07-10) - [x] **Workspaces** — `workspaces` + `workspace_members` tables, CRUD API, roles admin/editor/commenter/viewer - [x] **Comments** — table `comments` avec thread (parent_id), resolved, API CRUD - [x] **Page History** — table `page_history`, snapshot JSON, API record/list - [x] **Favorites** — table `favorites`, API add/remove/list - [x] **Database Templates** — table `database_templates`, apply to create collection - [x] **Page Templates** — table `page_templates`, apply with pre-filled properties - [x] **CSV Import/Export** — `POST .../import/csv`, `GET .../export/csv` - [x] **Public Sharing** — `GET /workspace/public/{id}` (read-only, no auth) - [x] **67/67 tests** passent (+7 tests v2.0) ### v2.1.0 ✅ — Workspace Local & Arborescence ### (2026-07-11) - [x] **Page `/local-workspace`** — file/folder tree avec breadcrumb - [x] **API tree récursive** — `GET /api/local-workspace/tree?folder=ID` - [x] **Breadcrumb** — `GET /api/local-workspace/breadcrumb` - [x] **CRUD items** — create/rename/delete/move files & folders - [x] **Drag & drop upload** — fichiers + dossiers récursifs depuis l'OS - [x] **Drag & drop interne** — déplacer items entre dossiers - [x] **Expand/collapse** — toggle dossiers, persisté localStorage - [x] **File viewer** — images, PDF, texte/code avec coloration syntaxique - [x] **Preview hover** — popup au survol des fichiers - [x] **Icônes par type** — 📝 pages, 📕 PDF, 🖼️ images, 🐍 code, etc. - [x] **Recherche + filtre** — par nom + par type (chips) - [x] **Menu contextuel sidebar** — clic droit / long-press mobile - [x] **Expand/Collapse all** — boutons ⊞ ⊟ - [x] **Sidebar persistante** — sectionsOpen + expandedFolders localStorage - [x] **Création instantanée** — AJAX sans reload - [x] **73 tests** passent --- ## Upcoming ### v2.2.0 — Workspace & Sidebar Professionnel (Gap Analysis) ### Cible: Q3 2026 Analyse complète de ce qui manque pour une expérience utilisateur de niveau professionnel, comparable à Notion, VS Code, et Finder. #### A. Workspace Page — Productivité & Raccourcis | # | Feature | Priorité | Effort | Description | |---|---------|----------|--------|-------------| | A1 | **Multi-sélection** | P0 | M | Checkboxes + Shift-click range + Ctrl-click toggle. Bulk delete/move. | | A2 | **Raccourcis clavier** | P0 | M | Enter=open, F2=rename, Del=delete, Ctrl+A=select all, Ctrl+C/V=copy/paste, Ctrl+Z=undo | | A3 | **Inline rename** | P0 | S | Double-clic → champ inline (pas prompt()). Garder le même comportement que Finder. | | A4 | **Drag count badge** | P1 | S | Afficher un badge "[N]" sur le curseur quand on drag plusieurs items. | | A5 | **Undo delete** (toast) | P1 | M | Remplacer `confirm('Delete?')` par un delete immédiat + toast "Undo" 5s. | | A6 | **Duplicate file/folder** | P1 | S | Action "Duplicate" dans le menu contextuel + Ctrl+D. | | A7 | **Copy/paste items** | P1 | M | Ctrl+C copie (stockage sessionStorage), Ctrl+V colle dans le dossier courant. | #### B. Workspace Page — Affichage & Métadonnées | # | Feature | Priorité | Effort | Description | |---|---------|----------|--------|-------------| | B1 | **Vue détails/tableau** | P0 | L | Toggle entre arbre et tableau (Nom, Taille, Type, Modifié le). | | B2 | **Tri** | P0 | M | Barre d'en-tête: clic pour trier par nom/date/taille/type. Asc/desc. | | B3 | **Métadonnées dans l'arbre** | P1 | S | Afficher taille + date de modification en grisé à droite du nom. | | B4 | **Compteur d'enfants par dossier** | P1 | S | Badge "(3)" à côté du nom du dossier indiquant le nombre d'items directs. | | B5 | **Loading skeletons** | P1 | S | Remplacer "Loading..." par des skeletons animés (barres grises pulsing). | | B6 | **Empty state illustré** | P2 | S | Illustration SVG + texte d'aide pour workspace vide et dossier vide. | #### C. Workspace Page — Navigation & Breadcrumb | # | Feature | Priorité | Effort | Description | |---|---------|----------|--------|-------------| | C1 | **Breadcrumb éditable** | P1 | M | Cliquer sur un segment du breadcrumb = naviguer. Dernier segment éditable (rename). | | C2 | **Barre d'adresse / path** | P2 | M | Champ texte affichant le path complet, éditable pour jump direct. | | C3 | **Back/Forward navigation** | P2 | M | Boutons ← → dans la topbar, historique de navigation interne. | | C4 | **Dossier parent ".."** | P2 | S | Premier élément de la liste quand on est dans un sous-dossier. | #### D. Sidebar Workspace — Polissage | # | Feature | Priorité | Effort | Description | |---|---------|----------|--------|-------------| | D1 | **Indicateur de dossier actif** | P0 | S | Highlight + point coloré sur le dossier courant (navigué). | | D2 | **Badge compteur par dossier** | P1 | S | "(5)" à côté des dossiers montrant le nombre d'items récursifs. | | D3 | **Drop indicator line** | P1 | S | Ligne bleue entre les items pendant le drag pour montrer la position d'insertion. | | D4 | **Scroll into view** | P1 | S | Auto-scroll pour rendre visible le dossier actif dans la sidebar. | | D5 | **Animation expand/collapse** | P2 | S | Transition fluide CSS pour l'ouverture/fermeture des dossiers (max-height). | | D6 | **Indicateur "modifié récemment"** | P2 | S | Petit point bleu à côté des items modifiés dans les dernières 24h. | #### E. Expérience Générale — Cross-cutting | # | Feature | Priorité | Effort | Description | |---|---------|----------|--------|-------------| | E1 | **Mode grille/vignettes** | P2 | L | Alternative au tree: icônes larges avec preview, style Finder/Dropbox. | | E2 | **Upload progress détaillé** | P1 | M | Barre de progression par fichier, vitesse, ETA, possibilité d'annuler. | | E3 | **Drag depuis sidebar vers workspace** | P2 | L | Permettre de glisser un item de la sidebar directement dans la page workspace. | | E4 | **Pin/favoris dans le workspace** | P2 | S | Épingler des dossiers/fichiers en haut de la liste pour accès rapide. | | E5 | **Aperçu des fichiers dans le dossier parent** | P3 | M | Quand on survole un dossier dans l'arbre, montrer un petit popup listant les 5 premiers fichiers. | | E6 | **Dark/Light theme cohérent** | P1 | M | S'assurer que le file viewer standalone respecte le thème actif (cookie/session). | #### F. Mobile & Responsive | # | Feature | Priorité | Effort | Description | |---|---------|----------|--------|-------------| | F1 | **Swipe actions** | P2 | M | Swipe gauche sur un item → Delete. Swipe droit → Rename. | | F2 | **Bottom sheet context menu** | P1 | M | Remplacer le menu contextuel desktop par une bottom sheet native sur mobile. | | F3 | **Touch hold feedback** | P1 | S | Haptic feedback (si supporté) + scale animation sur long-press. | | F4 | **Grille adaptative** | P2 | M | En mode paysage tablette: 2 colonnes (sidebar + contenu). | #### G. Performance & Robustesse | # | Feature | Priorité | Effort | Description | |---|---------|----------|--------|-------------| | G1 | **Virtual scrolling** | P2 | L | Pour les dossiers avec >1000 items, rendre seulement les éléments visibles. | | G2 | **Lazy loading des enfants** | P1 | M | Ne charger les enfants d'un dossier que quand on l'expand (API `?folder=ID`). | | G3 | **Cache navigateur** | P1 | S | Cache le contenu des fichiers déjà chargés pour le preview hover. | | G4 | **Offline indicator** | P3 | S | Bannière "You are offline" + queue des actions pour synchro au retour. | | G5 | **Rate limiting + retry** | P1 | S | Retry automatique avec backoff exponentiel sur les appels API échoués. | --- #### Résumé des priorités **P0 — Bloquant pour une expérience pro :** - A1 Multi-sélection - A2 Raccourcis clavier - A3 Inline rename - B1 Vue détails/tableau - B2 Tri - D1 Indicateur dossier actif **P1 — Important pour la qualité perçue :** - A4 Drag count badge, A5 Undo toast, A6 Duplicate, A7 Copy/paste - B3 Métadonnées, B4 Compteur, B5 Skeletons - C1 Breadcrumb éditable - D2 Badge compteur, D3 Drop indicator, D4 Scroll into view - E2 Upload progress, E6 Thème cohérent - F2 Bottom sheet mobile, F3 Touch feedback - G2 Lazy loading, G3 Cache, G5 Retry **Estimation globale : ~4-6 semaines pour P0+P1 avec 1 développeur.** --- ### v2.1.0 — Intégrations Avancées (futur) - [ ] **API publique** — REST API documentée pour usage externe - [ ] **Webhooks sortants** — notifier des services externes - [ ] **n8n integration** — nœud FlowDeck pour workflows - [ ] **Slack/Discord integration** — notifications dans les channels - [ ] **Google Calendar sync** — synchronisation bidirectionnelle - [ ] **Mobile PWA** — Progressive Web App pour mobile - [ ] **PostgreSQL migration** — si passage multi-tenant --- ## 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+ ────────────────────────────────────────────── 52 fonctionnalités identifiées dans le gap analysis │ ├─ Bloc 1: Database Concept (v1.3) — 6 items ✅ ├─ Bloc 2: Propriétés avancées (v1.4-1.5) — 14 items ✅ ├─ Bloc 3: Vues manquantes (v1.6-1.7) — 10 items ✅ ├─ Bloc 4: Sub-items & Deps (v1.8) — 7 items ✅ ├─ Bloc 5: My Tasks (v1.9) — 7 items ✅ ├─ Bloc 6: Éditeur complet (v2.0) — 8 items ✅ └─ Bloc 7: Fonctions transversales — +multi-user ✅ v2.0.0 ✅ v2.1.0 ✅ v2.2.0 ⬜ Editor+ Workspace Pro UX Local ```