Files
flowdeck/docs/NOTION_DATABASE_TASKS_GUIDE.md
T
bruno 2ca27d3398
FlowDeck CI / test (push) Failing after 5s
FlowDeck CI / docker (push) Has been skipped
docs: NOTION_DATABASE_TASKS_GUIDE.md v2.0 + ROADMAP Database/Views/Tasks
- NOTION_DATABASE_TASKS_GUIDE.md: réécriture complète (822→~750 lignes)
  - 16 sections: anatomie DB, 22 propriétés, relations/rollups, formules
  - 10 Database Views détaillées, filtres/tris/groupes
  - Data Sources & Linked Databases, Templates, Dashboards
  - Tasks, Sub-items, Dependencies, Sprints, My Tasks
  - Modèle de données complet (tables existantes + 5 nouvelles)
  - Plan d'implémentation en 5 phases (v4.1–v4.5)
- ROADMAP: v4.1–v4.5 redéfini = Database/Views/Tasks
  - v4.1: Data Sources & Linked
  - v4.2: Templates & Dashboards
  - v4.3: 10 Database Views complètes
  - v4.4: Tasks, Sub-items & Dependencies
  - v4.5: Sprints & My Tasks
  - Versions suivantes renumérotées (v4.6→v6.0)
- Sources: Guide_Complet_Notion_database.md + 15 URLs docs officielles Notion
2026-07-20 15:58:52 -04:00

33 KiB
Raw Blame History

Guide Technique — Databases, Views & Tasks Notion → FlowDeck

Version: 2.0 · Date: 2026-07-20 Auteur: Hermes-Deepin · Cible: FlowDeck v4.0.x+ Sources: Notion Help — Databases, Database Views, Tasks & Dependencies, Sprints, Data Sources, docs/Guide_Complet_Notion_database.md


Table des matières

  1. Introduction : les 3 piliers Notion
  2. Anatomy d'une Database Notion
  3. Les propriétés (Database Properties)
  4. Les relations et rollups
  5. Les formules (Formulas)
  6. Templates de database
  7. Les Database Views (10 types)
  8. Filtres, tris & regroupements
  9. Data Sources & Linked Databases
  10. Tasks, Sub-items, Dependencies & Sprints
  11. My Tasks — vue unifiée
  12. Dashboards
  13. Modèle de données FlowDeck
  14. Plan d'implémentation (5 phases)
  15. Limites Notion à respecter
  16. Références

1. Introduction : les 3 piliers Notion

Notion repose sur 3 concepts fondamentaux interconnectés :

┌─────────────────────────────────────────────────────────────────┐
│                         NOTION                                   │
│                                                                  │
│  ┌─────────────────────┐  ┌─────────────────────┐               │
│  │     DATABASES        │  │    DATABASE VIEWS    │               │
│  │                      │  │                      │               │
│  │ • Collections de     │  │ • 10 types de vues   │               │
│  │   pages              │  │ • Filtres/Tris/      │               │
│  │ • Propriétés typées  │  │   Groupes            │               │
│  │ • Relations/Rollups  │  │ • Layouts &          │               │
│  │ • Formules           │  │   Dashboards         │               │
│  │ • Templates          │  │ • Charts/Graphiques   │               │
│  └──────────┬──────────┘  └──────────┬──────────┘               │
│             │                        │                           │
│             └────────┬───────────────┘                           │
│                      ▼                                           │
│  ┌─────────────────────────────────────────────────────────────┐ │
│  │                         TASKS                                 │ │
│  │  • Sub-items (parent_id auto-référencé)                      │ │
│  │  • Dependencies (bloque/bloqué par)                          │ │
│  │  • Sprints (planification agile)                             │ │
│  │  • My Tasks (vue unifiée cross-databases)                    │ │
│  └─────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘

État actuel FlowDeck (v4.0.x)

✅ Workspaces                       → workspaces, workspace_members
✅ Pages + Arbre                    → pages (parent_id, sort_order)
✅ Block Editor                     → content_format='blocks', JSON blocks
✅ Sidebar Notion                   → Recents, Favorites, Shared, Published, Private
✅ Library multi-onglets            → library.html + /api/library/*
✅ Share / Publish                  → page_shares, share_mode, publish_slug
✅ Recents tracking                 → recents table
✅ Tags                             → tags, page_tags
✅ Gitea / GitHub OAuth             → auth_method, OAuth tokens
⚠️ Collections (ébauche)           → collections, collection_pages
⚠️ Collection Properties (ébauche) → collection_properties (21 types définis)
⚠️ Collection Views (ébauche)      → collection_views (structure partielle)
❌ Database multi-sources           → ABSENT (data_sources concept)
❌ Full-page vs Inline databases   → ABSENT
❌ Charts, Forms, Maps, Feed        → ABSENT
❌ Dashboards                       → ABSENT (combinaison de vues)
❌ Templates de database            → ABSENT (database_templates ébauche)
❌ Tasks / Sub-items                → ABSENT
❌ Dependencies / Sprints           → ABSENT
❌ My Tasks (cross-DB unifié)       → ABSENT (/my-tasks ébauche statique)

2. Anatomy d'une Database Notion

2.1 Concept fondamental

Une Database Notion est une collection de pages, chaque ligne/élément étant une page Notion complète — ouvrable et éditable comme n'importe quelle page (texte, images, sous-pages, embeds…).

Concept Définition
Database Conteneur global : 1+ data sources + 1+ vues
Data source Un ensemble de pages liées. Chaque DB a ≥ 1 source
Page / Item Une ligne = une page Notion complète, éditable
Property Champ de métadonnées (date, statut, personne…)
View Fenêtre d'affichage sur les données (table, board, etc.)

2.2 Full-page vs Inline

Type Comportement
Full-page Apparaît comme une page dans la sidebar, peut être verrouillée
Inline Intégrée dans une page existante, contrôles masqués au survol, peut être étendue

Transformations :

  • Inline → Full-page : cliquer sur ⤡ (étendre) ou glisser vers la sidebar
  • Full-page → Inline : glisser dans une autre page → ⋮⋮ → Turn into inline

2.3 Création d'une database

  1. New page → sous Get started with, sélectionner Table (ou ••• → Database)
  2. Slash command : /database dans une page existante
  3. Options : New empty / Link to existing data / Build with AI / Template

Premières étapes :

  1. Créer une page → bouton New page
  2. Ajouter une propriété → Add property
  3. Ajouter une vue → par défaut Table view, puis autant que souhaité
  4. Éditer la vue → nom, layout, propriétés visibles, filtres, tris, groupes

3. Les propriétés (Database Properties)

3.1 Types disponibles (20 types)

# Propriété Usage Value format
1 Text Texte formaté (notes, descriptions) String
2 Number Nombre, format devise ou barre de progression Float + format
3 Select Une option parmi une liste de tags String
4 Status Progression : To-do, In Progress, Complete String
5 Multi-Select Plusieurs tags/catégories Array[String]
6 Date Date ou plage de dates (heure optionnelle) ISO 8601 / range
7 Formula Calculs basés sur d'autres propriétés Expression → Dynamic
8 Relation Connexion entre databases FK référence
9 Rollup Agrégation d'infos via une relation Dynamic (count/sum/avg…)
10 Person Assigner une personne/groupe User ref
11 File Upload de fichiers et images File metadata
12 Checkbox Booléen Boolean
13 URL Lien web cliquable String (URL)
14 Email Adresse email (ouvre client mail) String (email)
15 Phone Numéro de téléphone String (phone)
16 Created time Auto-généré, non éditable Timestamp
17 Created by Auto-généré, non éditable User ref
18 Last edited time Auto-mis à jour Timestamp
19 Last edited by Auto-mis à jour User ref
20 Button Automatiser des actions (v5.0) Action config
21 ID Identifiant unique, immuable Auto-incrément
22 Place Localisation (services, nom, adresse) Geo + text

⚠️ Limite : 500 propriétés max par database.

3.2 Gestion des propriétés

  • Créer : Add property ou + à droite → nom + type
  • Éditer : menu ⚙️ → Edit properties
  • Masquer : cliquer l'icône 👁️
  • Réordonner : drag & drop
  • Dupliquer : ••• → Duplicate property (ne duplique pas les valeurs)
  • Supprimer : supprime définitivement la propriété et toutes ses valeurs

4. Relations & Rollups

4.1 Relations

Une relation connecte les pages de deux databases (ou d'une database à elle-même).

┌──────────────────────┐         ┌──────────────────────┐
│   Customers          │         │   Deals              │
│                      │────────▶│                      │
│   id, name, email    │ related │   id, amount, stage  │
│                      │◀────────│                      │
└──────────────────────┘         └──────────────────────┘

Config :

  • 1-way (par défaut) ou 2-way (bidirectionnelle)
  • Limit : nombre de pages liées (1 ou illimité)
  • Property visibility : Always show / Hide when empty / Always hide
  • Relation vers soi-même : ex. tâches liées entre elles (dependencies)

4.2 Rollups

Un rollup agrège les données issues d'une relation selon une fonction :

Fonction Description
count Nombre d'éléments liés
count values Nombre de valeurs non vides
count unique values Nombre de valeurs uniques
count empty Nombre de valeurs vides
percent empty % de valeurs vides
percent not empty % de valeurs non vides
sum Somme
average Moyenne
min / max Valeur min / max
range Intervalle (max - min)
earliest date / latest date Date la plus ancienne / récente
show original Affiche la valeur brute

⚠️ Pas de rollup d'un rollup (anti-boucle).


5. Formules (Formulas)

Une propriété Formula exécute des calculs via le langage de formules Notion.

5.1 Éléments du langage

Properties  : prop("Nom")
Math        : + - * / % ^
Booléens    : true, false
Comparaison : ==, !=, <, <=, >, >=
Logiques    : and, or, not
Ternaire    : X ? Y : Z  (équivaut à if(X, Y, Z))

5.2 Fonctions courantes

if(), ifs(), empty(), length(), substring(), contains(), replace(), lower(), upper(), style(), format(), formatDate(), now(), today(), dateAdd(), dateBetween(), .first(), .last(), .every(), .filter(), .map(), .at(), round(), ceil(), floor(), min(), max(), sum(), mean(), median(), join(), toNumber(), toString(), concat(), id(), let()…

5.3 Exemples

// Due date = date de début + 2 semaines
dateAdd(Start Date, 2, "week")

// Marquer "Overdue" en rouge/gras si dépassé et non terminé
if(and(now() > Due Date, Status != "Done"), style("Overdue", "red", "b"), "")

// Nombre de tâches liées
Tasks.length()

// Priorité calculée à partir de l'impact et l'effort
if(and(Impact == "High", Effort == "Low"), "🔥 Quick win", "Normal")

// Calcul du CA journalier
prop("Prix unitaire") * prop("Quantité")

6. Templates de database

Permettent de répliquer une structure de page en un clic.

Créer :

  1. Flèche déroulante à côté de New → + New template
  2. Nommer le template
  3. Prédéfinir propriétés (ex. Priority = P1) et contenu (texte, images, embeds)

Fonctionnalités :

  • Récurrence : quotidienne, hebdomadaire, mensuelle, annuelle
  • Nesting max : 3 niveaux (sauf template quotidien → pas de nesting)

⚠️ Templates propres à chaque database. Ne pas pré-remplir les relations dans un template (sinon toutes les pages pointeront sur la même cible).


7. Les Database Views

Une vue est une fenêtre d'affichage sur les données. Chaque vue possède ses propres filtres, tris, groupes et propriétés visibles — indépendants de la database source.

7.1 Les 10 types de vues

# Vue Idéal pour Caractéristique
1 Table Données structurées, aperçu complet Lignes × colonnes, calculs en bas de colonne
2 Board (Kanban) Workflows, gestion de tâches Colonnes regroupées par propriété, cartes
3 Timeline Planification, dépendances Chronologie horizontale type Gantt
4 Calendar Événements, deadlines Basé sur propriété Date, vues jour/semaine/mois
5 List Notes, docs, lecture simple Minimaliste et épurée
6 Gallery Moodboards, portfolios Cartes visuelles avec aperçu image
7 Chart Analyse, reporting Barres, courbes, camemberts, donuts, scatter
8 Form Collecte de données, sondages Formulaire de saisie → crée pages
9 Map Lieux, adresses Géolocalisation (propriété Place)
10 Feed Mises à jour, annonces Flux de contenu type actualité

7.2 Ajouter une vue

  1. Cliquer + à côté des onglets de vues existants
  2. Choisir le type de layout
  3. Donner un nom
  4. Configurer : propriétés visibles, filtres, tris, groupes, layout

7.3 Layouts personnalisables

Chaque vue possède des options de layout :

  • Card size : small / medium / large (board, gallery)
  • Card preview : page cover / page content / none
  • Properties : choisir lesquelles afficher sur les cartes
  • Open pages in : center peek / side peek / full page

8. Filtres, tris & regroupements

8.1 Filtres

Affichent uniquement les éléments correspondant à des critères.

Structure :

┌─ Filter group (AND)
│  ├─ Status = "In Progress"
│  ├─ Due Date is within this week
│  └─ Filter group (OR)
│     ├─ Priority = "P1"
│     └─ Priority = "P2"

Opérateurs disponibles : is, is not, contains, does not contain, starts with, ends with, is empty, is not empty, is before, is after, is within, is today, is this week

8.2 Tris

Ordonnent les éléments. Multi-niveaux (ex. trier par Status ASC puis Due Date DESC).

8.3 Regroupements (Groups)

Regroupent visuellement les éléments par propriété :

  • Group (principal), Sub-group (secondaire, surtout en board)
  • Exemples : par Status, par Assignee, par Date (mois/semaine)

9. Data Sources & Linked Databases

9.1 Concept

Chaque database a ≥ 1 data source. Une database peut en regrouper plusieurs.

┌──────────────────────────────────────────────────────────┐
│  DATABASE (CRM tout-en-un)                                │
│                                                           │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐ │
│  │ Contacts │  │Entreprises│  │  Deals   │  │Activités │ │
│  │ (source) │  │ (source) │  │ (source) │  │ (linked) │ │
│  └──────────┘  └──────────┘  └──────────┘  └──────────┘ │
└──────────────────────────────────────────────────────────┘

9.2 Databases liées

Une linked database est une copie d'une database existante qui :

  • Peut avoir ses propres vues/filtres/tris/sans affecter l'originale
  • Mais l'édition du contenu/titres/propriétés est répercutée sur la source
  • L'accès respecte celui de la database originale

10. Tasks, Sub-Items, Dependencies & Sprints

10.1 Task Database

Une database standard avec des propriétés obligatoires :

  • Status (To-do, In Progress, Done)
  • Assignee (Person)
  • Due Date (Date)

Activation : ⚙️ → More settings → Turn into Tasks

Effets :

  • Les tâches assignées apparaissent dans My Tasks (widget Home)
  • Propriété ID auto-générée (format TASK-123)
  • URL directe : notion.so/TASK-123
  • Fonctionnalités Sprints débloquées

10.2 Sub-items

Permettent de découper une tâche en sous-tâches, visibles dans toutes les vues.

Activation : ⚙️ → More settings → Sub-items → Turn on

Modes d'affichage :

  • Nested in toggle — arborescence pliable (défaut)
  • Flattened list — liste plate indentée
  • Card property — affichée sur la carte parente

Filtres : Parents only / Parents and sub-items / Sub-items only

10.3 Dependencies

Relient les tâches de façon linéaire (A bloque B).

Calendrier automatique :

  • Shift only when dates overlap
  • Shift & maintain time between items
  • Do not automatically shift

Éviction des week-ends : configurable.

10.4 Sprints

Nécessitent une Task database préalable.

Activation : ⚙️ → More settings → Sprints → Turn on sprints

Éléments :

  • Sprint board : 3 colonnes (Current Sprint / Sprint planning / Backlog)
  • Sprints database : vue globale + Timeline
  • Réglages : durée (1-8 semaines), jour de début, gestion incomplètes, complétion auto
  • Vélocité : suivi de la capacité de l'équipe

11. My Tasks — vue unifiée

11.1 Qu'est-ce que My Tasks ?

My Tasks agrège toutes les tâches assignées à l'utilisateur à travers toutes les databases du workspace, dans une vue unique.

Pas besoin de naviguer dans chaque database pour trouver ses tâches — tout est consolidé.

11.2 Fonctionnement

  1. Une database est marquée comme Task database
  2. L'utilisateur est assigné à certaines pages (propriété Person)
  3. Ces pages apparaissent automatiquement dans My Tasks
  4. Filtrage possible : aujourd'hui, overdue, next 7 days, par collection

11.3 Interface

┌─────────────────────────────────────────────┐
│ 📋 My Tasks                                  │
│                                              │
│ [All] [Today] [Overdue] [Next 7 days]        │
│                                              │
│ ── Collection A (3) ──                       │
│ ┌──────────────────────────────────────────┐ │
│ │ 📋 Tâche 1    ⏳ In Progress  15 juil    │ │
│ │ 📋 Tâche 2    ✅ Done         10 juil    │ │
│ │ 📋 Tâche 3    📝 Todo         —          │ │
│ └──────────────────────────────────────────┘ │
│                                              │
│ ── Collection B (1) ──                       │
│ ┌──────────────────────────────────────────┐ │
│ │ 📋 Tâche 4    🚀 P1           20 juil    │ │
│ └──────────────────────────────────────────┘ │
│                                              │
│ 4 tasks across 2 collections                 │
└─────────────────────────────────────────────┘

11.4 API nécessaire

GET  /my-tasks?view=all|today|overdue|upcoming&days=7
→ Retourne toutes les pages de type tâche assignées à l'utilisateur
→ Groupées par collection
→ Avec statut, due date, priorité

12. Dashboards

Transforment une database en tableau de bord centralisé en combinant plusieurs vues/widgets sur une même page.

┌──────────────────────────────────────────────────────────┐
│  DASHBOARD — Suivi Projet                                 │
│                                                           │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│  │ 📊 Chart     │ │ 📊 Chart     │ │ 📋 Board (Kanban)   │ │
│  │ Burn-down    │ │ Status      │ │ Current Sprint      │ │
│  │             │ │ répartition │ │                     │ │
│  └─────────────┘ └─────────────┘ └─────────────────────┘ │
│                                                           │
│  ┌─────────────────────────────────────────────────────┐ │
│  │ 📅 Calendar — Échéances du mois                     │ │
│  └─────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────┘

13. Modèle de données FlowDeck

13.1 Tables existantes (v4.0) — à conserver

-- Collections (existantes, à enrichir)
CREATE TABLE collections (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    workspace_id INTEGER REFERENCES workspaces(id),
    name TEXT NOT NULL,
    description TEXT DEFAULT '',
    icon TEXT DEFAULT '📋',
    schema_json TEXT NOT NULL DEFAULT '[]',  -- propriétés
    gitea_owner TEXT,
    gitea_repo TEXT,
    is_locked BOOLEAN NOT NULL DEFAULT 0,
    is_inline BOOLEAN NOT NULL DEFAULT 0,
    parent_page_id INTEGER REFERENCES collection_pages(id),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    created_by INTEGER REFERENCES users(id),
    UNIQUE(workspace_id, name)
);

-- Pages dans une collection
CREATE TABLE collection_pages (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    collection_id INTEGER NOT NULL REFERENCES collections(id) ON DELETE CASCADE,
    title TEXT NOT NULL DEFAULT '',
    icon TEXT DEFAULT '📄',
    position INTEGER NOT NULL DEFAULT 0,
    parent_id INTEGER REFERENCES collection_pages(id),  -- sub-items
    gitea_issue_id INTEGER,
    gitea_issue_number INTEGER,
    property_values_json TEXT NOT NULL DEFAULT '{}',  -- valeurs des propriétés
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    created_by INTEGER REFERENCES users(id),
    updated_by INTEGER REFERENCES users(id)
);

-- Vues d'une collection
CREATE TABLE collection_views (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    collection_id INTEGER NOT NULL REFERENCES collections(id) ON DELETE CASCADE,
    name TEXT NOT NULL DEFAULT 'Default View',
    view_type TEXT NOT NULL DEFAULT 'table',
    config_json TEXT NOT NULL DEFAULT '{}',
    position INTEGER NOT NULL DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Propriétés d'une collection
CREATE TABLE collection_properties (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    collection_id INTEGER NOT NULL REFERENCES collections(id) ON DELETE CASCADE,
    name TEXT NOT NULL,
    prop_type TEXT NOT NULL DEFAULT 'text',
    options_json TEXT DEFAULT '[]',
    number_format TEXT DEFAULT 'number',
    related_collection_id INTEGER REFERENCES collections(id),
    reverse_name TEXT,
    relation_property_id INTEGER REFERENCES collection_properties(id),
    target_property_id INTEGER REFERENCES collection_properties(id),
    rollup_function TEXT,
    formula_expression TEXT,
    position INTEGER NOT NULL DEFAULT 0,
    required BOOLEAN NOT NULL DEFAULT 0,
    visible_in_views BOOLEAN NOT NULL DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    UNIQUE(collection_id, name)
);

13.2 Nouvelles tables — Database Views enrichies

-- Dashboard : combinaison de vues/widgets sur une page
CREATE TABLE collection_dashboards (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    collection_id INTEGER NOT NULL REFERENCES collections(id) ON DELETE CASCADE,
    name TEXT NOT NULL DEFAULT 'Dashboard',
    layout_json TEXT NOT NULL DEFAULT '{"columns":1,"widgets":[]}',
    -- [{view_id, x, y, width, height}, ...]
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Templates de collection
CREATE TABLE collection_templates (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    collection_id INTEGER NOT NULL REFERENCES collections(id) ON DELETE CASCADE,
    name TEXT NOT NULL DEFAULT 'Default',
    description TEXT DEFAULT '',
    property_defaults_json TEXT NOT NULL DEFAULT '{}',
    content_json TEXT DEFAULT '[]',
    is_recurring BOOLEAN NOT NULL DEFAULT 0,
    recurrence_rule TEXT,  -- 'daily', 'weekly', 'monthly', 'yearly'
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Data sources multiples par collection
CREATE TABLE collection_data_sources (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    collection_id INTEGER NOT NULL REFERENCES collections(id) ON DELETE CASCADE,
    source_collection_id INTEGER NOT NULL REFERENCES collections(id),
    source_name TEXT,  -- nom d'affichage dans la DB composite
    is_linked BOOLEAN NOT NULL DEFAULT 0,  -- 1 = linked (provient d'ailleurs)
    position INTEGER NOT NULL DEFAULT 0,
    UNIQUE(collection_id, source_collection_id)
);

-- Dependencies entre pages (tâches)
CREATE TABLE page_dependencies (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    page_id INTEGER NOT NULL REFERENCES collection_pages(id) ON DELETE CASCADE,
    dependency_id INTEGER NOT NULL REFERENCES collection_pages(id) ON DELETE CASCADE,
    dependency_type TEXT NOT NULL DEFAULT 'blocks',  -- blocks | blocked_by | related
    auto_shift TEXT DEFAULT 'overlap',  -- overlap | maintain_time | never
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    UNIQUE(page_id, dependency_id)
);

-- Sprints
CREATE TABLE sprints (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    collection_id INTEGER NOT NULL REFERENCES collections(id) ON DELETE CASCADE,
    name TEXT NOT NULL,
    start_date TEXT NOT NULL,
    end_date TEXT NOT NULL,
    goal TEXT DEFAULT '',
    status TEXT NOT NULL DEFAULT 'planning',  -- planning | active | completed
    auto_complete BOOLEAN NOT NULL DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE sprint_pages (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    sprint_id INTEGER NOT NULL REFERENCES sprints(id) ON DELETE CASCADE,
    page_id INTEGER NOT NULL REFERENCES collection_pages(id) ON DELETE CASCADE,
    status_at_start TEXT,  -- snapshot du statut au début du sprint
    velocity_points INTEGER DEFAULT 1,
    UNIQUE(sprint_id, page_id)
);

13.3 Diagramme des relations clés

collections ──1:N── collection_pages ── self-ref ── parent_id (sub-items)
     │                    │
     │1:N                 │N:N
     ▼                    ▼
collection_views    page_dependencies (bloque/bloqué par)
     │
     │1:N
     ▼
collection_properties
     │
     │ self-ref
     ├── related_collection_id (relation)
     ├── relation_property_id (rollup)
     └── target_property_id (rollup)

collections ──1:N── collection_data_sources (multi-sources)
collections ──1:N── collection_templates
collections ──1:N── sprints ──1:N── sprint_pages
collections ──1:N── collection_dashboards

14. Plan d'implémentation (5 phases)

Phase 1 — Data Sources & Linked Databases (v4.1.0)

Objectif : Permettre à une collection d'avoir plusieurs sources de données et des vues liées.

✅ Table collection_data_sources
✅ API: POST /db/{id}/sources (add)
✅ API: DELETE /db/{id}/sources/{sid} (remove)
✅ API: POST /db/{id}/linked (créer une linked DB)
✅ UI: Data source manager dans settings database
✅ Règle: les linked DB héritent des permissions de la source

Phase 2 — Templates & Dashboard (v4.2.0)

Objectif : Templates réutilisables + combinaison de vues en dashboard.

✅ Table collection_templates (avec récurrence)
✅ Table collection_dashboards (layout widgets)
✅ API: templates CRUD
✅ API: POST /db/{id}/templates/{tid}/apply
✅ API: dashboards CRUD
✅ UI: Dashboard view (grille configurable de widgets)
✅ UI: Template picker dans le dropdown New

Phase 3 — Database Views complètes (v4.3.0)

Objectif : Compléter les 10 types de vues avec leurs layouts.

✅ Charts: barres, courbes, camemberts, donuts, scatter (morris.js / chart.js)
✅ Form: formulaire HTML → POST création page
✅ Map: intégration Leaflet pour propriété Place
✅ Feed: vue chronologique type fil d'actualité
✅ Timeline/Gantt: barres horizontales avec dépendances
✅ Layout options: card size, card preview, open in peek/side/full
✅ View tabs: navigation fluide entre vues

Phase 4 — Tasks, Sub-items & Dependencies (v4.4.0)

Objectif : Implémenter le système complet de gestion de tâches Notion-style.

✅ Flag is_task sur collections (Turn into Tasks)
✅ Sub-items: parent_id dans collection_pages (existant, à enrichir)
✅ Propriété ID auto-générée (TASK-XXX)
✅ Table page_dependencies (bloque/bloqué par)
✅ API: POST/GET/DELETE /db/{c}/pages/{p}/dependencies
✅ Auto-shift des dates (overlap / maintain_time / never)
✅ UI: vue dépendances (graphe ou liste), toggle sub-items
✅ Filtres sub-items: parents only / all / sub-items only

Phase 5 — Sprints & My Tasks (v4.5.0)

Objectif : Sprints agiles + vue My Tasks cross-databases.

✅ Tables sprints, sprint_pages
✅ API: sprints CRUD + assignation pages aux sprints
✅ Sprint board: Current Sprint / Planning / Backlog
✅ Vélocité: calcul points/burndown chart
✅ My Tasks: agrégation cross-databases
✅ My Tasks API: /my-tasks?view=all|today|overdue|upcoming
✅ My Tasks UI: groupes par collection, status badges
✅ Assignee property sync avec users FlowDeck

15. Limites Notion à respecter

Limite Valeur
Propriétés max par database 500
Pas de rollup d'un rollup ✅ À respecter
Pages avant indexation non linéaire ~1 000
Nesting templates max 3 niveaux
Nesting template quotidien interdit
Templates propres à chaque database
Database liée : partage nécessite accès à l'originale

16. Références

Documentation Notion officielle :

Documents FlowDeck :