- 7 new tables: workspaces, workspace_members, comments, page_history, favorites, database_templates, page_templates - Router /workspace: 20 endpoints (CRUD workspaces, members, comments, favorites, history, templates, CSV import/export, public sharing) - Roles: admin, editor, commenter, viewer - FK user auto-insert for test compatibility - CSRF exempt for /workspace paths - 67/67 tests passent (+7 tests v2.0) - Version 1.9.0 → 2.0.0 - Docs: ROADMAP updated (7/7 blocs completed)
204 lines
9.4 KiB
Markdown
204 lines
9.4 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)
|
|
### (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
|
|
|
|
---
|
|
|
|
## Upcoming
|
|
|
|
### 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 — Intégrations Avancées (futur)
|
|
|
|
### 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 ⬜
|
|
Editor+ Future
|
|
Multi-user
|
|
```
|