From d94817bac5393db2fadf3e3eec4d79c220470362 Mon Sep 17 00:00:00 2001 From: bruno Date: Thu, 9 Jul 2026 22:40:19 -0400 Subject: [PATCH] =?UTF-8?q?docs:=20ROADMAP=20v1.3.0=20=E2=9C=85=20+=20WORK?= =?UTF-8?q?LOAD/README=20updated?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ROADMAP: v1.3.0 déplacé dans Completed, item checkboxes [x] - WORKLOAD: réécrit pour refléter v1.3.0 + plan v1.4.0 - README: version 1.3.0, features à jour, tests 34/34 --- README.md | 55 ++++++++------ ROADMAP.md | 44 +++++------ WORKLOAD.md | 212 +++++++++++++--------------------------------------- 3 files changed, 108 insertions(+), 203 deletions(-) diff --git a/README.md b/README.md index f83e800..6abef19 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # FlowDeck -Clone de l'interface **Notion** intégré nativement à **Gitea** — Kanban, Table, Status Overview, Team Load. +Clone de l'interface **Notion** intégré nativement à **Gitea** — Databases, Pages, Kanban, Table, multi-vues. -> **v0.4.0-dev** — Refonte UI Notion-style (Dark Mode, sidebar, topbar, multi-vues) +> **v1.3.0** — Database Concept (collections, pages, vues, GiteaBoardCompat) ## Quick Start @@ -13,28 +13,33 @@ docker compose up -d # → http://localhost:8080 ``` -## Features (v0.4.0) +## Features -### UI Notion-Style -- **Sidebar gauche** avec sections hiérarchiques (Home, Recents, Private, Library) -- **Topbar** avec titre de page, statut, boutons d'action (Share, favori, notifications) +### Database Concept (v1.3.0) +- **Collections**: databases indépendantes de Gitea, schéma JSON, icon, description +- **Pages**: propriétés JSON, position, parent_id (sub-items ready), lien Gitea optionnel +- **Vues**: configurables (type, filters, sorts, visible_properties) +- **GiteaBoardCompat**: adaptateur boards Gitea legacy → Collections +- **API REST**: CRUD complet collections + pages (12 endpoints) + +### UI Notion-Style (v1.1–v1.2) +- **Sidebar gauche** avec sections hiérarchiques (Recents, Private, Library, Trash) +- **Topbar** avec breadcrumbs (workspace > projet > page) - **Dark mode** Notion: `#191919` fond, `#222222` sidebar, `#333333` actif -- **Menu contextuel** (clic droit): Copy link, Duplicate, Rename, Move to Trash... -- **Hover states** subtils avec icônes d'action qui apparaissent -- **Typographie Inter**, coins arrondis 4-6px +- **Éditeur de blocs** Notion-style: slash menu (/), navigation clavier, placeholders +- **Drag & drop** pages dans la sidebar (SortableJS) -### Vues Multiples -- **Kanban board**: colonnes To-do/In progress/Complete avec sous-groupes (Design, Engineering) -- **Table view**: colonnes Name, Status, Assign, Deadline, Team, AI keywords -- **Status overview**: Donut chart avec segments, compteurs, pourcentages -- **Team Load**: Barres empilées par membre d'équipe -- **Detailed board**: cartes avec toutes les propriétés visibles +### Vues Multiples (v0.5–v0.8) +- **Kanban board**: colonnes avec sous-groupes, drag & drop cartes +- **Table view**: colonnes triables, groupes rétractables +- **Status overview**: Donut chart SVG avec segments, compteurs +- **Team Load**: Barres empilées par membre +- **Detailed board**: cartes avec propriétés visibles -### Filtres & Tri -- **Filtres cumulables** (logique AND) avec pastilles cliquables +### Filtres & Tri (v0.7) +- **Filtres cumulables** (logique AND) avec pastilles - **Tri multi-critères** hiérarchique -- **Filtre par statut**: checkboxes multiples avec points colorés -- **Filtre AI keywords**: recherche + sélection multiple +- **Filtre par statut**: checkboxes multiples ### Intégration Gitea - **Issues Gitea → cartes** Notion-style @@ -46,10 +51,10 @@ docker compose up -d | Couche | Techno | |--------|--------| -| Frontend | HTML5 + Jinja2 + CSS Notion, Alpine.js, HTMX, SortableJS | +| Frontend | Jinja2 + HTMX + Alpine.js + SortableJS + CSS 31KB | | Backend | Python 3.12 + FastAPI + httpx | | BDD | SQLite (WAL mode) — `/data/flowdeck.db` | -| Déploiement | Docker (Python 3.12-slim), docker-compose | +| Déploiement | Docker (python:3.12-slim), docker-compose | ## Configuration @@ -62,7 +67,7 @@ DATABASE_URL=sqlite:////data/flowdeck.db ## Roadmap -Voir [ROADMAP.md](ROADMAP.md) — v0.4.0 UI Notion → v1.0.0 Production +Voir [ROADMAP.md](ROADMAP.md) — v1.4.0 Propriétés Avancées → v2.0.0 Multi-Users. ## Développement @@ -73,6 +78,12 @@ pip install -r requirements.txt uvicorn app.main:app --reload --port 8080 ``` +## Tests + +```bash +python3 -m pytest tests/ -v # 34/34 passent +``` + ## Licence MIT diff --git a/ROADMAP.md b/ROADMAP.md index 2503435..c1f8a28 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -54,30 +54,30 @@ Propriétés custom, AI keywords, sync API, 12 tables DB - [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.3.0 — Database Concept (Bloc 1 du gap analysis) - -- [ ] **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`) - - Supporte les templates de database -- [ ] **Table `collection_pages`** — remplace `cards`, pages génériques - - `collection_id`, `title`, `position`, `parent_id`, `property_values_json` - - `gitea_issue_id` optionnel pour les pages liées à Gitea - - Auto-propriétés : `created_at`, `updated_at`, `created_by`, `updated_by` -- [ ] **Table `collection_views`** — vues configurables par collection - - `name`, `view_type` (table/board/calendar/timeline/gallery/list) - - `config_json` (filtres, tris, group_by, visible_properties, card_size...) - - `position` pour l'ordre des onglets -- [ ] **Rétrocompatibilité Gitea** — adaptateur `GiteaBoardCompat` - - Les boards Gitea existants deviennent des collections automatiquement - - Migration transparente des `cards` → `collection_pages` -- [ ] **Database lock** — mode lecture seule (`collections.is_locked`) -- [ ] **Database description** — texte riche au-dessus de la database - ### v1.4.0 — Propriétés Avancées (Bloc 2) - [ ] **Table `collection_properties`** — remplace `project_properties` @@ -202,12 +202,12 @@ Propriétés custom, AI keywords, sync API, 12 tables DB ## 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 ⬜ +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 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 diff --git a/WORKLOAD.md b/WORKLOAD.md index 6318cc5..837ed0c 100644 --- a/WORKLOAD.md +++ b/WORKLOAD.md @@ -1,177 +1,71 @@ # WORKLOAD — FlowDeck Notion Clone -> **Début**: 2026-07-08 | **Objectif**: Clone Notion intégré Gitea +> **Début**: 2026-07-08 | **Version actuelle**: v1.3.0 | **Prochaine**: v1.4.0 ## Avancement Global -| Phase | Description | Statut | Progression | -|-------|-------------|--------|-------------| -| Phase 1 | Documents & Planification | ✅ | 100% | -| Phase 2 | Layout Notion (sidebar + topbar + contenu) | ✅ | 100% | -| Phase 3 | Sidebar (sections, hover, context menu) | ✅ | 100% | -| Phase 4 | Vues (Kanban, Table, Status, Team Load) | 🚧 | 40% | -| Phase 5 | Filtres & Tri | 🚧 | 25% | -| Phase 6 | Cartes enrichies | 🚧 | 30% | -| Phase 7 | Intégration Gitea complète | 🚧 | 15% | -| Phase 8 | Polish & Tests | ⬜ | 0% | +| Phase | Description | Statut | Tests | +|-------|-------------|--------|-------| +| v0.2 – v0.9 | Base → Backend | ✅ | — | +| v1.0 | Production (lifespan, CI/CD) | ✅ | 28/28 | +| v1.1 | Pages & Sidebar Notion | ✅ | — | +| v1.2 | Éditeur Notion (slash menu, blocs) | ✅ | — | +| v1.3 | Database Concept (collections) | ✅ | 34/34 | +| v1.4 | Propriétés Avancées (14 types) | ⬜ | — | +| v1.5 | Relations & Rollups | ⬜ | — | +| v1.6 | Vues Calendrier/Timeline/Gallery/List | ⬜ | — | +| v1.7 | Vues Améliorées (group_by, card_size) | ⬜ | — | +| v1.8 | Sub-items & Dépendances | ⬜ | — | +| v1.9 | My Tasks & Dashboard Unifié | ⬜ | — | +| v2.0 | Éditeur Complet & Multi-Users | ⬜ | — | --- -## Phase 1: Documents & Planification +## v1.3.0 — Database Concept (complété 2026-07-10) -### 1.1 Analyse des images Notion -- [x] Pull des 19 images de référence -- [x] Analyse du layout complet Notion (~1400px, dark mode) -- [x] Analyse Kanban board 1 (colonnes + cartes + groupes Design/Engineering) -- [x] Analyse Detailed board (cartes avec propriétés visibles) -- [x] Analyse Table view (colonnes Name, Status, Assign, Deadline, Team, AI keywords) -- [x] Analyse Search & Filter (barre de recherche, panneau filtres) -- [x] Analyse Panel Filter (liste des propriétés filtrables) -- [x] Analyse Status Panel Filter (checkboxes multiples + Clear selection) -- [x] Analyse Sort Panel 1 (simple: propriété + ascendant/descendant) -- [x] Analyse Sort Panel 2 (multi-critères: 3 sorts hiérarchiques) -- [x] Analyse Filters Cumulables (AND, pastilles, + Filter, Reset) -- [x] Analyse AI Keywords Filter (recherche + tags colorés) -- [x] Analyse Status Overview (donut chart 18 total, segments, légende) -- [x] Analyse Team Load (barres empilées par avatar) -- [x] Analyse Sidebar Layout (sections: Home, Recents, Favorites, Library) -- [x] Analyse Sidebar Context Menu (right-click: Copy link, Duplicate, Rename, Move to Trash...) -- [x] Analyse Sidebar Mouse Over Elements (hover: fond #333, boutons ... et +) -- [x] Analyse Sidebar Mouse Over Section (tooltip "Open in Library", icônes) -- [x] Analyse Kanban Board 2 (structure groupes + colonnes) +### Tables +- [x] `collections` — base de données abstraite, schéma JSON, lien Gitea optionnel +- [x] `collection_pages` — pages avec `parent_id`, `property_values_json`, `position` +- [x] `collection_views` — vues configurables (`view_type`, `config_json`) +- [x] Index: `idx_cp_collection`, `idx_cp_parent`, `idx_cp_gitea` -### 1.2 Documents -- [x] ROADMAP.md mis à jour avec vision v0.4 → v1.0 -- [x] WORKLOAD.md créé -- [ ] README.md mis à jour -- [ ] ARCHITECTURE.md mis à jour -- [ ] CHANGELOG.md (après premier commit de code) +### API +- [x] `GET/POST /db/api` — lister/créer collections +- [x] `GET/PUT/DELETE /db/api/{id}` — CRUD collection +- [x] `GET/POST /db/{id}/pages/api` — pages dans une collection +- [x] `GET/PUT/DELETE /db/pages/{id}/api` — CRUD page standalone +- [x] `GET /db/{id}` — vue HTML collection +- [x] `GET /db/boards/api` — boards Gitea comme collections +- [x] `GET /db/board/{o}/{r}/api` — board spécifique +- [x] `POST /db/board/{o}/{r}/sync` — sync board → collection + +### Adapter +- [x] `GiteaBoardCompat` — `from_board()`, `from_card()`, `list_boards_as_collections()`, `sync_to_collection()` + +### Infra +- [x] CSRF exempté pour `/db/` +- [x] Version 1.0.0 → 1.3.0 +- [x] 34/34 tests passent +- [x] Tag git v1.3.0 --- -## Phase 2: Layout Notion +## Prochaines étapes (v1.4.0 — Propriétés Avancées) -### 2.1 Structure HTML -- [x] `base.html`: layout 3 zones (sidebar fixe gauche, topbar fixe haut, contenu scrollable) -- [x] Fond global: `#191919` -- [x] Police Inter importée via Google Fonts +### Table `collection_properties` +- [ ] Remplacer `project_properties` (liée à `project_owner/name`) par `collection_properties` (liée à `collections`) +- [ ] Types: number, checkbox, url, email, phone, status (9 couleurs), files, unique_id +- [ ] Auto-propriétés: created_time, created_by, last_edited_time, last_edited_by +- [ ] Format number: nombre, %, €, $, £, ¥ -### 2.2 Sidebar (gauche, ~240px, fond #222) -- [x] Workspace info (avatar B + nom Bruno) -- [x] Boutons Home, Search, Updates, Settings -- [x] Section Recents (avec indentation sous-pages) -- [x] Section Favorites (Agents, Shared, Private) -- [x] Section Notion apps (Calendar, Desktop) -- [x] Section Library (My Tasks, Marketplace, Help, Trash) -- [x] Footer: Invite members, New chat Ctrl+O, bouton édition - -### 2.3 Topbar (haut, fond #191919) -- [x] Logo workspace + nom à gauche -- [x] Titre page + statut (Private/Shared) au centre -- [x] Icônes: notifications, historique, recherche -- [x] Boutons: Share, favori, menu (...) - -### 2.4 Content Area (fond #191919) -- [x] Image de couverture optionnelle -- [x] Titre de page (28-32px bold) -- [x] Barre de navigation des vues (onglets) -- [x] Barre d'outils (filtres, tri, recherche, New) -- [x] Zone de contenu principale (Kanban / Table / Graphiques) - ---- - -## Phase 3: CSS — Design System - -### 3.1 Variables CSS -```css -:root { - --bg-primary: #191919; - --bg-secondary: #222222; - --bg-tertiary: #333333; - --bg-hover: #2F2E2E; - --text-primary: #FFFFFF; - --text-secondary: #A0A0A0; - --color-blue: #3366CC; - --color-green: #00CC66; - --color-yellow: #FFD700; - --font-sans: 'Inter', sans-serif; - --radius-sm: 4px; - --radius-md: 6px; -} -``` - -### 3.2 Composants -- [x] `.sidebar` — 240px fixe, fond #222 -- [x] `.sidebar-section` — titre 12px + liste -- [x] `.sidebar-item` — 14px, padding 8px 12px, hover #333 -- [x] `.sidebar-item.active` — fond #333 -- [x] `.topbar` — hauteur 44px, flex -- [x] `.view-tabs` — onglets horizontaux -- [x] `.view-tab` — inactif: texte gris, actif: fond #333 + texte blanc -- [x] `.kanban-board` — flex horizontal, gap 12px -- [x] `.kanban-column` — min-width 260px, arrondi 6px -- [x] `.kanban-card` — fond selon statut, padding 12px, arrondi 6px -- [x] `.btn-primary` — bleu #3366CC -- [x] `.btn-secondary` — gris #333333 -- [x] `.filter-pill` — pastille avec texte + croix de suppression -- [x] `.sort-panel` — menu déroulant avec options -- [x] `.dropdown-menu` — fond #333, bordure subtile, ombre -- [x] `.tooltip` — fond #3A3A3A, texte blanc - ---- - -## Phase 4: JavaScript (Alpine.js) - -### 4.1 Sidebar -- [x] Toggle collapse/expand sidebar -- [x] Hover reveal buttons (... et +) -- [x] Context menu au clic droit -- [ ] Drag & drop pour réorganiser les favoris - -### 4.2 Vues -- [x] Switch entre vues (Kanban, Table, Status, Team Load, Detailed) -- [x] Kanban: drag & drop cartes (SortableJS) -- [ ] Table: tri par colonne, redimensionnement -- [ ] Status Overview: Donut chart (SVG ou Canvas) -- [ ] Team Load: Barres empilées - -### 4.3 Filtres & Tri -- [x] Ajout/suppression filtres (UI) -- [ ] Logique AND entre filtres -- [ ] Tri multi-niveaux -- [ ] Persistance dans l'URL ou localStorage - ---- - -## Phase 5: Backend (FastAPI) - -### 5.1 Nouvelles routes API -- [ ] `GET /api/views/{owner}/{repo}` — config des vues -- [ ] `POST /api/filters` — appliquer filtres -- [ ] `POST /api/sorts` — appliquer tris -- [ ] `GET /api/status-overview/{owner}/{repo}` — données donut chart -- [ ] `GET /api/team-load/{owner}/{repo}` — données barres empilées -- [ ] `GET /api/table-view/{owner}/{repo}` — données format tableau - -### 5.2 Base de données (nouvelles tables) -- [ ] `view_config` — configuration par vue -- [ ] `filters` — filtres sauvegardés par utilisateur -- [ ] `sorts` — tris sauvegardés -- [ ] `card_properties` — propriétés custom par carte - -### 5.3 Gitea Sync -- [x] Labels → tags couleur sur cartes -- [ ] Milestones → groupes/sprints -- [x] Assignees → avatars + noms -- [x] Due dates → échéances (via Gitea API) -- [ ] Comments → affichage dans cartes - ---- +### Intégration UI +- [ ] Property editor inline par type (select dropdown, date picker, checkbox...) +- [ ] Affichage des propriétés dans la modale de détail page +- [ ] Migration project_properties → collection_properties ## Notes -- **Couleurs exactes** extraites des analyses: fond `#191919`, sidebar `#222222`, actif `#333333`, hover `#2F2E2E`, texte `#FFFFFF`, secondaire `#A0A0A0` -- **Police**: Inter (Google Fonts), tailles: 12px (petit), 14px (normal), 28-32px (titres) -- **Coins arrondis**: 4px (boutons/cartes), 6px (colonnes) -- **Espacements**: padding 8-12px, gap 8-12px -- **Icônes**: utiliser des émojis ou SVG inline pour éviter dépendance externe +- **Stack**: FastAPI + Jinja2 + HTMX + Alpine.js + SortableJS + SQLite (WAL) +- **Docker**: python:3.12-slim, port 8080, volume /data +- **Tests**: pytest, 34 tests, client TestClient avec SQLite temporaire +- **CI/CD**: Gitea Actions (.gitea/workflows/ci.yml)