# Roadmap FlowDeck — Notion Clone > **Vision**: Copie conforme de l'UI/UX Notion, intégrée à Gitea/GitHub. > **MVP en production** : v4.0.0 — authentification locale/OAuth, pages blocs, sidebar, library, share/publish, intégrations. > **Branche principale** : `main` (production) · `develop` (intégration) · `feat/*` (features). ## 🏗️ Stratégie de branches ``` main ──●────────────●────── production (tags vX.Y.Z) \ / develop ●──●──●──●────── intégration continue \ \ \ feat/xxx ● ● ●──── feature branches ``` - **`main`** : code en production, déploiement Docker automatique - **`develop`** : branche d'intégration, merges des `feat/*` - **`feat/`** : une branche par feature/fix, PR → code review → merge dans `develop` - **Tags** `vX.Y.Z` sur `main` pour chaque release **Workflow** : ```bash git checkout -b feat/mon-truc develop # ... coder, commit, push ... # Créer une PR feat/mon-truc → develop sur Gitea # Après review + CI verte → merge # Pour release: PR develop → main + tag vX.Y.Z ``` **Règles** : - Ne jamais commiter directement sur `main` - Une branche = une feature / un fix - Tests passent avant merge (CI Gitea Actions) - Commit + push après chaque modification significative --- ## 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 - [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 - [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 - [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é - [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 - [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 - [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 - [x] GitHubProvider dans `app/auth/providers.py` - [x] GitHubAdapter dans `app/services/github_adapter.py` - [x] Config GitHub dans `.env.example` ### v3.0.0 ✅ — UX Professionnelle - [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) ### v4.0.0 ✅ — Accounts, Integrations & Sharing (MVP) - [x] `auth_method` sur users (local/gitea/github) - [x] Badge OAuth dans sidebar - [x] Settings page avec Connect/Disconnect Gitea + GitHub - [x] Sidebar rules (Private = distant seulement, Trash local-only) - [x] Library page avec tabs + filtres source (All/Local/Gitea/GitHub) - [x] Modale Share (2 tabs: Share + Publish) - [x] Page publique `/p/` (no auth, rendu HTML) - [x] Table `page_shares`, colonnes `is_published`, `is_shared`, `share_mode` - [x] Table `recents` — tracking automatique - [x] Édition unifiée local/distant (même UI, bouton Commit pour Gitea) - [x] 133 tests passent --- ## 🔜 Prochaines versions ### v4.0.1 — Onboarding & Polish ✅ (2026-07-18) > **Objectif** : rendre l'app utilisable dès la première visite, sans friction. **COMPLETED**. - [x] **Landing page `/` pour visiteurs non-auth** — template `landing.html`, design Notion dark - [x] **Page `/auth/register` GET** — formulaire d'inscription dédié (tab register actif) - [x] **Redirection `/` intelligente** — non-auth → landing, auth sans Gitea → local workspace, auth+Gitea → dashboard - [x] **Empty states** — déjà présents dans local workspace (« Welcome to your Workspace ») - [x] **Page 404 stylisée** — thème Notion sombre, JSON pour `/api/*`, HTML pour le reste - [x] **Unifier les routes API** — `/api/pages` GET/POST → 307 redirect vers `/board/api/pages` - [x] **Page Settings** — lien déjà présent dans le menu utilisateur (Settings → `/accounts/settings`) ### v4.0.2 — Qualité & Robustesse ✅ (2026-07-18) > **Objectif** : zéro crash, zéro regression, DX impeccable. - [x] **Gestion d'erreurs** — try/catch dans create_page, message user-friendly (500 JSON) - [x] **Validation inputs** — login/register déjà validés, titre vide → "Untitled" - [x] **Rate limiting** — 100 req/min/IP déjà en place, testé OK - [x] **Session expiry UX** — redirect avec ?expired=1, bannière sur la page login - [x] **CSRF token refresh** — auto-refresh sur 403, endpoint `/api/csrf-token` - [x] **Mobile responsive** — sidebar slide-in, modales centrées, landing adaptative - [x] **Tests de non-régression** — +10 tests (landing, register, 404, validation, duplicate, expiry) - [x] **143 tests passent** --- ### v4.1.0 — Database: Data Sources & Linked Databases ✅ (2026-07-21) > **Objectif** : Collections multi-sources, databases liées (linked). **COMPLETED**. > **Doc** : [`NOTION_DATABASE_TASKS_GUIDE.md` Phase 1](docs/NOTION_DATABASE_TASKS_GUIDE.md#14-plan-implémentation) - [x] **Table `collection_data_sources`** — multi-sources par collection (FK `collection_id` + `source_collection_id`, flag `is_linked`) - [x] **API sources** — `GET /db/{id}/sources/api` (liste), `POST /db/{id}/sources/api` (ajouter), `DELETE /db/{id}/sources/{sid}/api` (retirer) - [x] **API linked DB** — `POST /db/{id}/linked/api` (crée une collection liée : copie vues + propriétés + data source `is_linked=1`) - [x] **Full-page vs Inline** — `POST /db/{id}/toggle-inline/api` (toggle), `POST /db/inline/api` (créer inline avec `parent_page_id`) - [x] **Règle permissions** — linked DB hérite du `workspace_id` de la source → mêmes ACLs - [x] **Migration** — ajout colonnes `workspace_id`, `created_by` sur `collections` - [x] **153 tests passent** (+10 nouveaux) ### v4.2.0 — Database: Templates & Dashboards ✅ (2026-07-21) > **Objectif** : Templates réutilisables + dashboards combinant vues/widgets. **COMPLETED**. - [x] **Table `page_templates` enrichie** — colonnes `description`, `is_recurring`, `recurrence_rule` (daily/weekly/monthly/yearly) - [x] **Table `collection_dashboards`** — layout widgets (grille configurable : `columns`, `widgets` avec `view_id`, `x`, `y`, `width`, `height`) - [x] **API templates CRUD complet** — `PUT /workspace/collections/{id}/templates/page/{tid}` (update), `DELETE` (delete) - [x] **API dashboards CRUD** — `GET/POST/PUT/DELETE /workspace/collections/{id}/dashboards` - [x] **159 tests passent** (+6 nouveaux) ### v4.3.0 — Database Views complètes (10 types) ✅ (2026-07-21) > **Objectif** : Tous les types de vues Notion avec layouts. **COMPLETED**. - [x] **Chart** — barres, courbes, camemberts, donuts, scatter (Chart.js CDN) - [x] **Form** — formulaire HTML auto-généré depuis les propriétés → POST création page - [x] **Map** — Leaflet/OSM pour propriété Place (lat,lng parsing) - [x] **Feed** — vue chronologique type fil d'actualité (newest first) - [x] **Timeline/Gantt** — barres horizontales avec group_by et plages de dates - [x] **View tabs** — 11 onglets de navigation (table, board, calendar, gallery, list, timeline, gantt, chart, form, map, feed) - [x] **Layout options** — card_size, chart_type, group_by, place_property via config_json - [x] **166 tests passent** (+7 nouveaux) ### v4.4.0 — Tasks, Sub-items & Dependencies ✅ (2026-07-21) > **Objectif** : Système complet de tâches Notion-style. **COMPLETED**. - [x] **Flag `is_task`** sur collections — PUT /db/{id}/toggle-task/api (Turn into Tasks) - [x] **Table `page_dependencies`** — bloque/bloqué par/related avec auto_shift - [x] **API dependencies** — GET/POST/DELETE /db/{c}/pages/{p}/dependencies/api - [x] **Auto-shift dates** — POST /db/{c}/pages/{p}/auto-shift/api (skip_weekends option) - [x] **171 tests passent** (+5 nouveaux) ### v4.5.0 — Sprints & My Tasks ✅ (2026-07-21) > **Objectif** : Sprints agiles + vue My Tasks cross-databases. **COMPLETED**. - [x] **Tables `sprints`, `sprint_pages`** — sprints agiles avec velocity_points - [x] **API sprints** — CRUD + assignation/retrait pages - [x] **Burndown chart** — GET /workspace/collections/{id}/sprints/burndown/{sid} (total/completed/remaining/ideal) - [x] **My Tasks** — agrégation cross-databases avec filtre (all/today/overdue/upcoming) - [x] **175 tests passent** (+4 nouveaux) ### v4.6.0 — Content Blocks enrichis ✅ (2026-09-02) > **Objectif** : parité d'édition avec Notion. - [x] **Callout blocks** — boîtes colorées avec sélecteur d'emoji/icône - [x] **Table of contents** — auto-généré depuis les headings avec ancres - [x] **Math equations** — LaTeX / KaTeX (self-hosted) block - [x] **Toggle lists** — contenu expandable/collapsible avec enfants - [x] **Multi-colonnes** — layout flexible (2, 3 colonnes) + bouton ajouter/retirer colonne Détails livrés : - 5 types de blocs enrichis dans le slash menu (callout, table_of_contents, math, columns, toggle) - Rendu des nouveaux blocs dans les pages publiques (`/p/`) — TOC ancré, KaTeX, colonnes, toggle `
` - Intégration KaTeX 0.16.11 self-hosté (`/static/js/katex.min.js`, `/static/css/katex.min.css`, `/static/fonts/`) - Persistance `children` (colonnes/toggle) via le format de blocs JSON - Export Markdown étendu aux nouveaux blocs - 183 tests au total (dont 5 nouveaux tests v4.6.0) ### v4.7.0 — Export ✅ (2026-09-03) > **Objectif** : exporter une page (ou un site) depuis l'éditeur. - [x] **Export Markdown** — avec images et sous-pages (récursif) - [x] **Export PDF** — via xhtml2pdf (fidèle, sans CDN/lib système) - [x] **Export HTML** — site statique standalone (document autonome + site .zip) Détails livrés : - Service serveur `app/services/export.py` : conversion blocs → Markdown / HTML / PDF - 4 formats exposés : `/api/export/markdown|html|pdf|site/{page_id}` - Sous-pages incluses récursivement (Markdown et site) - UI : menu « More › Export » dans l'éditeur (Markdown, HTML, PDF, Site .zip) - PDF généré via `xhtml2pdf` (pip) — aucun lib système requise - 6 nouveaux tests (Markdown, sous-pages, HTML, PDF, Site, 404) ### v4.7.1 — Fix UI Export / Share / More ✅ (2026-09-03) - [x] **Share / More / Activity / Move-to popovers** — rendus sous le viewport (absolute + parent scrollable) → repositionnés fixed sous la topbar - [x] **Sous-menu Export** — l'itém Export fermait le menu More ; devient un toggle, formats accessibles - [x] **Cache CSS** — query string app.css bumpé v4.7.1 - [x] Vérifié Playwright headless + 190/190 tests ### v4.7.2 — Fix Export : contenu absent ✅ (2026-09-03) - [x] **Export MD/HTML/PDF des documents** — le service ne lisait que les pages `blocks` ; les pages `file` (upload `.md`/code, contenu sur disque) et `markdown` sortaient avec le seul titre. Résolution de la vraie source pour les 3 formats + rendu HTML/PDF correct des headings/listes. - [x] 5 nouveaux tests → 195/195 ; vérifié sur les vraies données ### v4.7.3 — Fix export PDF/HTML : tableaux + émojis ✅ (2026-09-03) - [x] **Tableaux** — parseur GFM (bloc `table`) + rendu `` HTML (thead/tbody, alignements, bordures `.ftable`) dans les exports HTML/PDF ; roundtrip markdown pipe valide. - [x] **Émojis PDF** — passage du moteur à **WeasyPrint** (émojis couleur via Pango + fonts-noto-color-emoji dans l'image) ; repli automatique xhtml2pdf si libs natives absentes (dev Windows). - [x] Dockerfile : libs pango/harfbuzz/gdk-pixbuf + polices ; requirements : + weasyprint==69.0 - [x] 4 nouveaux tests → 199/199 ; PDF README.md vérifié : tableau structuré + émojis colorés ### v4.8.0 — Bloc Tableau simple ✅ (2026-09-03) - [x] **Bloc `table` éditable dans l'éditeur** — insertion via `/table` (commandes slash, section BASIC), tableau 3×3 avec en-tête, cellules éditables au clic, auto-sauvegarde. - [x] **Lignes** — bouton `+ Row` sous le tableau (clic = ajouter) ; clic droit sur une cellule de corps → Insérer dessus/dessous, Dupliquer, Effacer, Supprimer la ligne, Supprimer le tableau. - [x] **Colonnes** — poignée (⋮⋮) au-dessus de chaque colonne → Insérer à gauche/droite, Dupliquer, Effacer le contenu, Supprimer la colonne, Supprimer le tableau. - [x] **Import Markdown (GFM)** — `md2b` transforme les tableaux pipe en bloc `table` au lieu de les aplatir en paragraphes ; roundtrip Markdown (JS + export) et sortie MD/HTML/PDF correcte d'un bloc `table`. ### v4.8.1 — Fix bloc Tableau ✅ (2026-09-03) - [x] **« + Row » (bas) corrigé** — l'insertion de ligne utilisait `splice(index, ligne)` (mauvaise signature) → aucune ligne ajoutée ; désormais `splice(index, 0, ligne)`. - [x] **Bouton « + » à droite** — ajoute une colonne à droite (équivalent « Add column »). - [x] **Redimensionnement des colonnes** — curseur `col-resize` au survol des bordures d'en-tête, drag = largeur ; persisté via `colsW`. ### v4.9.0 — Collaboration ✅ (2026-09-04) > **Objectif** : commentaires inline, mentions @, notifications in-app + email. **COMPLETED**. > **Doc** : [`docs/Guide_Complet_Notion_sharing_collaborartion.md`](docs/Guide_Complet_Notion_sharing_collaborartion.md) - [x] **Inline comments** — commentaires sur sélection de texte dans l'éditeur (bouton flottant 💬) ; table `comments` étendue (`target_type`/`target_id`/`anchor_block_id`/`anchor_start`/`anchor_end`) et migrée (FK générique, idempotente) ; panneau de commentaires + résolution/suppression + compteur topbar - [x] **@mentions** — autocomplétion `@` (recherche utilisateurs temps réel), insertion `@login` dans les blocs et commentaires, table `notifications` ; endpoint `POST /api/pages/{id}/mentions` (notif des mentions de contenu) - [x] **Email notifications** — service SMTP (`app/services/mailer.py` + templates HTML) ; préférences email par utilisateur (comments/mentions) ; config `.env` (`SMTP_*`, `APP_BASE_URL`) ; repli no-op sans SMTP - [x] **Centre de notifications in-app** — cloche topbar (badge non-lus, polling 30s), panneau déroulant, mark as read / mark all read - [x] **Settings** — toggles réels dans Settings → Notifications (Commentaires / Mentions) - [x] **208 tests passent** (+9 v4.9.0) ### v4.11.0 — Agent IA : clés API par utilisateur & commandes slash ✅ > **Livré (2026-09-05)** : credentials par utilisateur (table `user_llm_keys`, plusieurs providers), > chargement dynamique des modèles depuis le fournisseur (`POST /keys/{p}/models`), > commandes slash dans le chat (`/provider`, `/model`, `/keys`, … via `PATCH` conversation), > `/run` utilise la clé de l'utilisateur. 239 tests verts. ### v4.10.1 — Agent IA : config LLM dans l'UI ✅ > **Livré (2026-09-05)** : sélecteur provider/modèle dans le panneau agent (persisté par > conversation), config runtime DB-backed (`llm_config`), écran admin *Agent & IA* avec > test de connexion (`LLMClient.ping()`, sans fallback mock). 232 tests verts. ### v4.10.0 — FlowDeck Agent (Agent IA natif) ✅ > **Livré (2026-09-05)** : agent conversationnel complet — boucle ReAct, streaming SSE, > 18 outils avec snapshots rollback, ACL par rôle, contexte automatique, custom agents, > déclencheurs planifiés + skills, multi-LLM (offline mock + 8 providers). 18 tests dédiés. > Voir [`docs/Flowdeck_Agent_integration.md`](docs/Flowdeck_Agent_integration.md). **Objectif :** Un agent IA intégré à FlowDeck, capable de planifier, rechercher et **agir** directement sur les workspaces — collections, pages, propriétés, vues, issues Gitea. Inspiré de Notion Agent (2026). **Documentation :** [`docs/Flowdeck_Agent_integration.md`](docs/Flowdeck_Agent_integration.md) (702 lignes) · [`docs/Guide_Complet_Notion_Agent_2026.md`](docs/Guide_Complet_Notion_Agent_2026.md) (464 lignes) #### Concept Là où un assistant IA classique répond (`prompt → réponse`), FlowDeck Agent **réalise** : `objectif → planification → collecte contexte → actions API → résultat` | Notion AI | FlowDeck Agent | |-----------|----------------| | Répond, résume, réécrit | Planifie, recherche, **agit** | | Bloc de texte | Crée collections, pages, propriétés, vues | | Sans état | Historique conversation + snapshots rollback | | Aucune action DB | Modifie le workspace via API FastAPI existantes | #### Fonctionnalités clés - [x] **Interface conversationnelle** — panneau agent dans le sidebar (🤖 Agents) + popup chat - [x] **Boucle ReAct** — Raisonnement → Action → Observation → itération (max 12 tours) - [x] **Streaming SSE** — affichage temps réel du raisonnement et des actions - [x] **10+ outils actionnables** — search, read/write collections/pages, views, properties, Gitea sync - [x] **Permissions** — même ACL que l'utilisateur (`PermissionManager`), audit log + rollback - [x] **Contexte automatique** — workspace actif, pages mentionnées, fichiers uploadés - [x] **Custom agents** — instructions, modèle, outils, scope par agent - [x] **Déclencheurs** — planifiés, webhooks, événements workspace - [x] **Skills réutilisables** — templates d'instructions + outils (ex: "Rédiger rapport hebdo") - [x] **Multi-LLM** — GPT, Claude, Gemini, modèles locaux (Ollama), deepseek, qwencloud, Nvidia, openrouter #### Architecture (nouveaux composants) ``` app/ ├── routers/agent.py — /api/agent/* (run, conversations, tools) ├── services/agent_engine.py — Orchestrateur ReAct + boucle tool calls ├── services/llm_client.py — Abstraction multi-fournisseur LLM ├── services/tool_registry.py — 10+ outils wrappant les API existantes ├── services/context_builder.py — Collecte contexte workspace └── templates/ ├── agent_panel.html — Panneau conversation Alpine.js └── agent_message.html — Fragment message (streaming) ``` #### Nouvelles tables | Table | Rôle | |-------|------| | `agents` | Config agent (nom, instructions, modèle, tools scope) | | `agent_conversations` | Sessions (titre, agent, workspace, statut) | | `agent_messages` | Messages (role, content, tool_calls, artifacts) | | `agent_actions` | Journal d'audit (tool, args, result, undo_snapshot) | | `agent_skills` | Skills réutilisables (nom, prompt template, outils) | | `agent_triggers` | Déclencheurs (cron, webhook, event, agent cible) | #### Cas d'usage FlowDeck - **Créer un CRM complet** — agent crée collection, propriétés, vues, exemples - **Résumer les notes de réunion** — lit les pages, synthétise, crée une page résumé - **Générer des OKR** — crée la database OKR avec relations et vues - **Analyser un repo Gitea** — lit les issues, crée un dashboard de suivi - **Rédiger un rapport hebdomadaire** — agrège les pages modifiées, génère le rapport #### Plan de migration (5 phases) 1. **Phase 1 — Core Agent** : AgentEngine + LLMClient + 3 outils (search, read, create) + SSE streaming 2. **Phase 2 — UI** : agent_panel.html, historique conversations, sélecteur de modèle ✅ (v4.10.1) 3. **Phase 3 — Outils avancés** : 7 outils supplémentaires (views, properties, Gitea, uploads) 4. **Phase 4 — Autonomie** : custom agents, skills, déclencheurs planifiés 5. **Phase 5 — Plateforme** : API publique agent → intégrations tierces, marketplace skills #### Limitations (v1) - Pas de modification concurrente (lock optimiste DB) - Pas d'appels API externes non-FlowDeck (sandbox strict) - Budget tokens max par conversation (500k tokens) - Timeout 5 minutes par run ### v5.0.0 — Command Palette & Recherche ✅ (2026-09-06) > **Objectif** : `Ctrl+K` / `Ctrl+P` palette de commandes universelle + recherche full-text. **COMPLETED**. - [x] **Command palette** — Ctrl+K / Ctrl+P recherche universelle (modale, fuzzy, navigation clavier) - [x] **Quick actions** — navigation, création, commandes - [x] **Recherche full-text** — SQLite FTS5 sur pages + propriétés (prérequis technique de la palette) ### v5.1.0 — Automations ✅ (2026-09-07) > **Objectif** : moteur de règles if-this-then-that + boutons cliquables. **COMPLETED**. - [x] **Database automations** — moteur de règles if-this-then-that (trigger + condition + action) - Déclencheurs : événement (`page.created/updated/deleted/moved`, `collection.*`) / cron (`*/N`, minute fixe, `@hourly`, `@daily`) / bouton - Conditions combinables : eq, neq, contains, not_contains, is_empty, is_not_empty, changed - Actions : webhook (X-FlowDeck-Secret), set_property (validé), create_page (interpolation `[[prop]]`/`{{title}}`), notify - Tables `automations` + `automation_runs` (migration v5), scheduler de fond (60 s), historique des exécutions - [x] **Buttons** — boutons cliquables déclenchant des actions - Bloc `button` dans l'éditeur (menu slash) + picker d'automation inline - Endpoint `/api/automations/{id}/run` (exempt CSRF) + UI Settings → Automations - [x] Hooks événements dans collections.py / board.py / workspace.py (apply_page_template) - [x] **11 tests** `tests/test_automations.py` ; suite complète 289 verte ### v5.2.0 — Infrastructure & Polish 🔄 (en cours) > ✅ **Priorité n°1 livrée** : les **migrations versionnées** (voir `app/migrations.py` + > table `schema_version`) — la base comptait 30+ tables créées ad-hoc ; tout nouveau > schéma passe désormais par des étapes versionnées (baseline v1, indexes v2, FTS5 v3). > **État actuel** : API publique + tokens **partiellement implémentés** (`routers/public_api.py`, > test `test_public_api_token`) — à compléter dans la section Sécurité. **Design system** - [ ] **Design tokens** — `design-tokens.css` (couleurs, espacements, typographie unifiés) - [ ] **Composants réutilisables** — boutons, inputs, modales, dropdowns, toasts **Sécurité & Utilisateur** - [ ] **API Tokens** — générer/révoquer des clés API utilisateur *(PARTIEL : `public_api.py` + tokens existent, manque la gestion UI dans Settings)* - [ ] **Sessions actives** — voir et révoquer les sessions - [ ] **Onboarding wizard** — `/welcome` au premier lancement (créer compte → lier forges → premier projet) **Infrastructure** - [x] **🥇 Migrations versionnées** — table `schema_version` + runner `app/migrations.py` (baseline v1, indexes v2, FTS5 v3) ✅ - [ ] **Backup automatique** — cron daily → fichier daté - [x] **Index manquants** — `users.email`, `user_oauth_tokens(user_id, provider)`, `collections/pages(workspace_id)`, `pages(deleted_at)` ✅ - [ ] **Linting** — ruff (Python), eslint (JS) *(aucune config actuellement)* - [ ] **Tests parallèles** — pytest-xdist - [ ] **Build Docker multi-stage** — optimiser taille d'image **Forge integration** - [ ] **DB: table `projects`** — type (builtin/gitea/github), forge_id, clone_url, default_branch, language - [ ] **Cron: sync périodique des projets** — configurable (défaut: chaque heure) - [ ] **GitHubAdapter** complet — API GitHub v3 → interface ForgeAdapter **Tests (cibles)** - [x] **267 tests** — 259+ (dont 8 nouveaux migrations/search) ✅ - [ ] Tests d'intégration auth (OAuth mock) - [ ] Tests des adapters forge (mock HTTP) - [ ] Tests multi-user (permissions croisées) ### v5.3.0 — Database Avancée ✅ (2026-09-06) > **Objectif** : databases inline + templates prédéfinis + validation propriétés. **COMPLETED**. - [x] **Inline databases dans n'importe quelle page** — slash command `/database` (groupe DATA) → sélecteur de templates → bloc `embed_type:'collection'` rendu par `FlowDeckDB` - [x] **Templates de database prédéfinis** — 6 templates seedés (CRM, Project tracker, Task list, Content calendar, Meeting notes, Reading list) + galerie au clic « Database » (Get Started) et `/database` ; `POST /db/api` & `/db/inline/api` acceptent `template` et matérialisent les propriétés - [x] **Validation des propriétés** (required, unique, min/max) — côté serveur (`validate_property_rule`, 400 + messages) + UI (modale propriété + erreurs de cellule) ### v5.10.0 — Éditeur : interactions de bloc ✅ (2026-09-08) > **Objectif** : parité de manipulation des blocs avec Notion — les blocs étaient éditables > mais *statiques* (impossible de les déplacer, dupliquer ou annuler une action). **COMPLETED**. - [x] **Drag & drop des blocs** — poignée ⋮⋮ au survol de chaque bloc, drag vertical pour réordonner, indicateur de drop (ligne bleue) ; **multi-sélection** (Shift+clic sur poignée → sélection groupée déplacée d'un seul geste, ordre reconstruit depuis le DOM via `data-id`) - [x] **Menu contextuel de bloc** — clic (ou clic droit) sur ⋮⋮ : Turn into (sous-menu conservant le contenu), Duplicate, Copy link to block (`#fdblk-` avec re-focus), Move to (recherche de pages + API), Delete, couleurs texte/fond appliquées au bloc ou à la sélection - [x] **Undo / Redo** — `Ctrl+Z` / `Ctrl+Shift+Z`/`Ctrl+Y`, pile de 100 opérations en mémoire du tab, re-focus du bloc restauré, déclencheur sur toutes les mutations (entrée, retour arrière, slash, tableaux, colonnes, toggles…) - [x] **Duplicate block** — `Ctrl+D`, menu bloc ou slash command « Duplicate » ; copie profonde (enfants columns/toggle) en multi-sélection - [x] **Slash command étendue** — groupe « Actions » : Turn into, Duplicate, Copy link to block, Delete block - [x] **En-têtes de tableau** — toggles « Header row » / « First col » dans la barre du tableau (`has_header` défaut actif + nouveau `first_col_header`), persistés + rendu `
` en preview et exports Markdown/HTML - [x] **Intégration realtime** — `syncNow()` poussé après chaque mutation programmatique ; **9 tests** `tests/test_block_interactions.py` ; suite complète 307 verte (+3 PDF pré-existants) ### v5.13.0 — Collaboration temps réel ✅ (2026-09-08) > **Objectif** : édition collaborative en direct (parité Notion en équipe). **COMPLETED**. > Chantier n°1 de la parité Notion ; socle pour v5.14.0 (synced blocks). - [x] **WebSocket gateway** — endpoint `WS /ws/pages/{id}`, auth via cookie session (refus 4401), page introuvable/supprimée → 4404 ; rooms par page en mémoire, chargées depuis la base au premier connect, droppées quand vides - [x] **Présence** — avatars des utilisateurs connectés (topbar), couleur par utilisateur, join/leave broadcasté ; `welcome` = self + peers - [x] **Curseurs live** — position curseur/sélection des autres éditeurs (block + offset), calque dédié, label avec nom, mise à jour à l'édition/au scroll - [x] **Merge de modifications** — diffusion des ops de blocs insert/update/delete/move avec **last-write-wins par bloc** + version de page (stale → sync complet) ; titre synchronisé (debounce) ; persistance debounce ~1 s + flush à la déconnexion du dernier client - [x] **Fallback polling** — si WS indisponible, rafraîchissement diff toutes les 10 s (adopté seulement sans brouillon local) + reconnexion automatique - [x] CSP `connect-src` étendu à `ws:` ; **12 tests** `tests/test_realtime.py` ; suite complète 298 verte (+3 PDF pré-existants) ### v5.4.0 — Expérience éditeur (nouveautés, parité Notion) - [ ] **Backlinks** — section « Lié depuis… » en bas de page (scan des liens internes) - [ ] **Duplicates** — « Duplicate » sur page + collection (menu `...`) - [ ] **Corbeille globale améliorée** — vue cross-workspace + purge automatique après 30 jours - [ ] **Historique de version UI** — browser + restaurer une version (table `page_history` existe) - [ ] **Import** — Markdown/CSV/Notion (complète l'export v4.7.0, facilite la migration d'utilisateurs) ### v5.5.0 — Embeds & Média Riche > **Objectif** : parité avec les 60+ embeds Notion — contenu tiers rendu dans la page. > **Source** : analyse Notion clone (delta v4 → v5.5, 2026-09-04). - [ ] **Bloc Embed universel** — `/embed` : YouTube, Vimeo, Figma, Google Maps, Loom, X/Twitter, CodePen, Miro, Spotify, SoundCloud, Twitch, Office… - [ ] **Bookmark cards** — aperçu riche des URLs (métadonnées OG : titre, image, description) - [ ] **Image lightbox** — clic pour agrandir, navigation clavier/consultation plein écran - [ ] **Previews inline** — PDF, vidéo, audio rendus directement dans la page - [ ] **Cover & icône de page** — upload image de couverture + emoji/icône custom (déjà partiel ?) ### v5.6.0 — Import de données (étendu) > **Objectif** : compléter l'import de base (Markdown/CSV/Notion, déjà dans v5.4.0) par les formats pro et l'inférence de types. - [ ] **Import CSV typé** — inférence automatique des types de propriétés (texte, nombre, date, select) - [ ] **Import Confluence / Evernote / Asana / Trello** — via leurs formats d'export (HTML/JSON) ### v5.7.0 — Database Avancée (Pt. 2) > **Objectif** : compléter la parité sur les propriétés, les vues sauvegardées et le Kanban pro. - [ ] **Types propriété manquants** — `person`, `created_time`, `created_by`, `last_edited_time`, `last_edited_by` - [ ] **Groupes de propriétés** — sections pliables dans le header de DB - [ ] **Vues sauvegardées par utilisateur** — save view (per-user, pas workspace-wide) - [ ] **Swimlanes Kanban** — sous-groupes horizontaux (2e dimension de groupement) - [ ] **WIP limits** — par colonne, alerte visuelle au dépassement - [ ] **Cartes configurables** — propriétés affichées par carte, couverture (image/icône/couleur), mode compact / détaillé - [ ] **Calendar avec drag & drop** — reschedule direct sur la grille - [ ] **Gallery avec couvertures** — image/icône comme vignette de carte ### v5.8.0 — Calendrier & Rappels > **Objectif** : calendrier complet + notifications proactives. - [ ] **Vues Jour / Semaine / Mois** — calendrier complet (actuellement mois seulement) - [ ] **Récurrence d'événements** — daily/weekly/monthly/custom (RRULE) - [ ] **Support timezone** — par utilisateur + par événement - [ ] **Rappels** — in-app + email (avant échéance : N minutes/heures/jours) - [ ] **Centre de notifications** — cloche in-app (mentions, assignations, commentaires, rappels) - [ ] **Template Meeting Notes** — Attendees, Agenda, Notes, Action Items ### v5.9.0 — AI Writing Assist (éditeur) > **Objectif** : l'IA Notion dans l'éditeur, au-dessus du moteur v4.9.0 (Agent IA). - [ ] **Slash AI commands** — `/ai write`, `/ai summarize`, `/ai translate`, `/ai continue` - [ ] **Autocomplétion** — suggestions de fin de ligne pendant la frappe - [ ] **AI properties** — auto-remplissage de propriétés (résumé, catégorisation) via l'Agent Engine --- ## v5.10.0 — Éditeur : interactions de bloc ✅ (livré — voir section Completed) ## v5.11.0 — Wiki-links & mentions de page ⬜ (non commencé) > **Objectif** : le graphe de connaissances Notion. Complète les backlinks de v5.4.0 > (section « Lié depuis ») par la création des liens depuis l'éditeur. - [ ] **Wiki-links `[[`** — taper `[[` ouvre un picker de pages (recherche fuzzy, toutes collections), Enter insère un lien interne rendu comme chip de page (icône + titre mis à jour dynamiquement) - [ ] **Mention de page `@`** — dans le menu @ existant (utilisateurs v4.9.0), ajouter l'onglet « Pages » : `@` suivi d'un nom de page crée un lien inline - [ ] **Mention de date `@`** — `@today`, `@tomorrow`, `@2026-10-01` rendus comme chips de date - [ ] **Renommage propagé** — renommer une page met à jour le libellé affiché de tous ses liens internes (résolution au rendu via `page_id`, pas de texte dur) ## v5.12.0 — Templates & verrouillage de page ⬜ (non commencé) > **Objectif** : démarrage rapide productif et protection des pages stabilisées. > Les `page_templates` existent (v2.0.0/v4.2.0) mais uniquement côté collections. - [ ] **Template picker global** — sur « + New page » : galerie de templates (Empty, Meeting notes, Weekly report, To-do list…) + templates custom utilisateur - [ ] **Bouton « Use template »** — duplication du contenu du template dans la nouvelle page - [ ] **Page lock** — toggle 🔒 dans le menu « … » : page en lecture seule (édition désactivée pour tous sauf owner/admin), indicateur visuel en topbar - [ ] **Full-width mode** — toggle pour passer la page en pleine largeur (comme Notion) - [ ] **Small text / typo options** — option de page : taille de police réduite, serif/mono ## v5.13.0 — Collaboration temps réel ✅ (livré — voir section Completed) ## v5.14.0 — Synced blocks ⬜ (non commencé) > **Objectif** : avancer depuis v6.0.0 un bloc Notion très utilisé (même contenu dans > plusieurs pages, édité une fois). - [ ] **Bloc `synced_block`** — table `synced_blocks` (source de vérité) + références par page ; slash command `/synced` - [ ] **Rendu** — ring rouge + badge « Synced » sur le bloc ; édition à un endroit => mise à jour partout (via rooms WS v5.13.0 si actives, sinon au reload) - [ ] **Unsync** — action « Unsync » qui convertit l'instance en copie indépendante - [ ] **Copy & sync across pages** — copier un bloc dans une autre page avec option « Paste and sync » --- ## v6.0.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 - [ ] **API publique complète** — REST API documentée (OpenAPI) *(base existante : `public_api.py`, à étendre + documenter)* — voir [`docs/API_GUIDE_V6.md`](docs/API_GUIDE_V6.md) : référence complète (conventions, CRUD par ressource, webhooks, sécurité, checklist) - [ ] **Realtime editing (production)** — voir **v5.13.0** (curseurs + présence déjà avancés ici) ; reste en v6 : conflits avancés, édition large échelle - [ ] **Synced blocks (production)** — voir **v5.14.0** (bloc de base) ; reste en v6 : syncing côté databases/vues --- ## ✅ Fonctionnalités livrées hors roadmap (bonus détectés dans le code) | Feature | Fichiers | Note | |---------|----------|------| | Webhooks sortants | `services/webhook_outbound.py`, `routers/workspace.py` (`/workspace/webhooks`) | CRUD + dispatch d'événements — base pour automations/API publique | | API publique + tokens | `routers/public.py` / `public_api.py`, test `test_public_api_token` | À formaliser dans v5.2.0 et documenter pour v6.0.0 | --- ## 🎯 Ordre de priorité recommandé (état 2026-09) 1. ~~**v5.2.0 → Migrations versionnées**~~ ✅ livré (`schema_version` + `app/migrations.py`) 2. ~~**v5.0.0 → Command palette + FTS5**~~ ✅ livré (palette Ctrl+K + `GET /api/search`) 3. ~~**v5.3.0 → Inline databases + templates + validation**~~ ✅ livré (slash `/database`, 6 templates, validation propriétés) 1. ~~**v5.13.0 → Realtime (WS + présence)**~~ ✅ livré (`app/services/realtime_server.py` + `WS /ws/pages/{id}`, présence, curseurs live, merge LWW, 12 tests) 2. ~~**v5.10.0 → Interactions de bloc**~~ ✅ livré (drag&drop multi, undo/redo, duplicate, menu ⋮, en-têtes de tableau, 9 tests) --- ## Résumé des phases ``` v0.x–v1.x ✅ v2.x ✅ v3.0.0 ✅ v4.0.0 ✅ v4.0.1 ✅ Base + Kanban Éditeur + Gitea UX Pro MVP Onboarding + DB + Auth + Workspaces + Multi-select Accounts & Polish + UI Notion + Tags + Admin + Sharing COMPLETED + GitHub OAuth + Library v4.0.2 ✅ v4.1–4.9 ✅ v4.10 ✅ v5.0–5.3 ✅ v5.13 ✅ · v5.10 ✅ v5.14 ⬜ v6.0 ⬜ Quality DB views, Agent IA Palette → Realtime + Synced Pro + Agent & Tests Templates & COMPLETED Automations Interactions blocks Collaboration Realtime, de bloc (undo/ DB avancée, redo, drag&drop, Calendrier, AI duplicate) *Dernière mise à jour: 2026-09-08 — v5.13.0 Realtime livré (WebSocket gateway, présence, curseurs live, merge LWW + fallback polling, 12 tests) puis v5.10.0 Interactions de bloc livré (drag&drop multi, undo/redo, duplicate, menu ⋮, en-têtes de tableau, sync realtime, 9 tests, suite 307 verte) ; reste v5.4 → v6.0*