Difficulté : Avancé
Temps estimé : 3 à 6 mois pour une version complète (frontend + backend)
Résumé exécutif
Ce guide décortique chaque mécanisme visuel et fonctionnel des bases de données Notion, ainsi que l’implémentation native des tâches (sous‑tâches, dépendances, sprints), pour permettre à un développeur de reproduire fidèlement ces briques. Basé sur l’analyse des pages d’aide officielles, il extrait les spécifications précises de l’interface utilisateur, du modèle de données et des interactions clavier/souris. Il couvre les commandes slash, les propriétés configurables (dont les dates avec rappels multicanaux), les vues Table, Board, Gallery et List, les layouts de pages, ainsi que le passage en mode « base de tâches » et les automatisations. Chaque section fournit des détails d’implémentation et des citations vers la documentation source.
Quick Guide (étapes de clonage)
- Construire un éditeur de blocs avec support inline/pleine page et commandes slash.
- Modéliser les propriétés : types variés, édition masse, cellule date interactive avec rappel.
- Créer le moteur de vue : filtres ET/OU imbriqués, tris, groupements, propriétés visibles par vue.
- Développer les vues Table, Board, Gallery et List avec leurs réglages spécifiques.
- Implémenter les layouts de page (en‑tête épinglé, groupe de propriétés, panneau latéral, onglets).
- Activer le mode tâche : auto‑relation pour sous‑tâches, dépendances via glisser de flèches, sprints.
- Intégrer un système d’automatisations déclencheur‑condition‑action et des rappels multicanaux.
- Appliquer partout glisser‑déposer, infobulles et conversion inline ↔ pleine page.
Prérequis

Avant de commencer, vous devez maîtriser : - Un framework frontend réactif (React, Vue, Svelte) avec gestion d’état complexe (stores, contextes). - Le rendu temps réel de blocs (comme Slate, ProseMirror, ou un éditeur maison). - Une API backend ou une base de données temps réel (Firestore, PostgreSQL avec websockets) pour le collaboratif. - Les concepts de propriétés calculées (rollups, formules) et d’auto‑relations (liens bidirectionnels).
Step 1: Les blocs de base de données (création, inline/pleine page)
Dans Notion, une base de données peut être créée de deux manières :
- Pleine page : /page, puis choix d’un type de vue (Table, Board, etc.) dans l’écran « New page » Block basics.
- Inline : via les commandes slash /database, /table, /board, /list, /calendar, /gallery ou /timeline insérées dans le corps d’une page existante.
Tip: Traitez chaque bloc base comme un nœud du document pouvant être converti à la volée. Un bouton ⤢ (expand) apparaît au survol d’une base inline pour la transformer en page pleine, et inversement, l’option « Turn into inline » est disponible dans le menu d’une page pleine glissée dans une autre page List view.
Votre modèle de données doit donc contenir un type block avec une propriété view_type (table, board, etc.) et une propriété inline booléenne. La représentation visuelle bascule entre un composant embarqué (redimensionnable) et une route dédiée. Le menu «...» en haut à droite de la base donne accès à toutes les options globales : verrouillage (saisie autorisée mais structure figée), édition des propriétés, automatisations, activation des sous‑éléments, dépendances, sprints, et conversion en base de tâches Database settings. L’interface doit donc afficher ce menu contextuel uniquement si l’utilisateur a les droits d’édition.
Step 2: Le système de propriétés et le modèle de données

Une base Notion est une collection d’items (pages) dotés de propriétés. L’aide officielle liste une vingtaine de types : Texte, Nombre, Sélection, Statut, Case à cocher, Date, Personne, Fichier & média, URL, Email, Téléphone, Formule, Relation, Rollup, etc. Database properties.
Propriétés de type Statut et tâches
Le type Statut est central pour les tâches. Il affiche par défaut les étiquettes To‑do / In Progress / Complete, chacune associée à une couleur configurable. Contrairement à une simple case à cocher (Checkbox), le Statut permet de définir un flux de travail personnalisé (ex. « Backlog, À faire, En cours, Terminé »).
La propriété Date interactive et les rappels
La cellule de type Date est un composant essentiel. En cliquant dessus, un mini‑calendrier s’ouvre et propose : - La sélection d’une date avec ou sans heure (une case « Inclure l’heure » est cochée par défaut pour les types incluant l’heure). - Une option Rappel avec des délais prédéfinis (« Le jour même », « 1 jour avant », « 2 jours avant », « Heure personnalisée ») Rappels Notion Database properties.
Quand un rappel est activé, une icône d’horloge rouge apparaît dans la cellule. Les notifications sont multicanaux : - un badge rouge sur l’icône de la boîte de réception dans la barre latérale, - une notification push desktop dans les 5 minutes, - une notification push mobile, - et un e‑mail si aucun appareil n’est connecté Rappels.
Warning: Les tâches récurrentes ne sont pas supportées nativement ; les utilisateurs doivent les contourner via des formules de date ou des automatisations de duplication. Si vous clonez Notion, prévoyez éventuellement une récurrence en tant que fonctionnalité additionnelle.
Gestion des propriétés
Le bouton « Edit properties » du menu ouvre un gestionnaire où l’on peut rechercher, créer, éditer, dupliquer ou supprimer une propriété, ainsi que réorganiser leur ordre par glisser‑déposer. Chaque vue peut indépendamment masquer ou réorganiser les propriétés via un panneau de réglages Views, filters, sorts & groups. Cela signifie que vous devez stocker pour chaque vue une liste de propriétés visibles avec leur ordre, séparée de la définition globale des propriétés de la base.
Step 3: Le moteur de vues (filtres, tris, groupements)
Une base peut posséder plusieurs vues, matérialisées par des onglets en haut, réorganisables par glisser‑déposer, avec icône et nom personnalisables. Un bouton + ajoute une nouvelle vue Views, filters, sorts & groups.
Chaque vue dispose d’un panneau de réglages accessible via … :
- Layout : choix du type (Table, Board, Timeline, Calendar, List, Gallery, Chart).
- Properties : activation/désactivation et réorganisation des propriétés via des poignées ⋮⋮.
- Filters : support de filtres simples et avancés, ces derniers autorisant des groupes de conditions ET/OU jusqu’à 3 niveaux d’imbrication. Implémentez un éditeur visuel d’arbres de conditions.
- Sorts : un ou plusieurs critères avec ordre ascendant/descendant.
- Groups : regroupement par une propriété (ex. Statut, Assigné) avec la possibilité de sous‑groupes (deux niveaux).
- Open pages in : détermine si l’ouverture se fait en « side peek », « center peek » ou « full page » pour cette vue.
- Freeze column (Table uniquement) : fige la première colonne.
- Search : barre de recherche textuelle toujours visible.
Les filtres rapides (Quick filters) s’affichent à droite des onglets ; ce sont des raccourcis contextuels comme « My tasks », « Assigned to me », modifiables sans ouvrir le panneau complet. Leur configuration est sauvegardée par vue Databases reimagined. Stockez donc, pour chaque vue, un objet quick_filters contenant des identifiants de conditions prédéfinies.
Step 4: Développement des vues spécialisées
Vue Table
C’est l’affichage par défaut. Les fonctionnalités à reproduire incluent : - Redimensionnement des colonnes. - Édition rapide en cliquant sur une cellule (le champ se transforme en input natif ou en composant de type propriété). - Sélection multiple de lignes. - Menu de la vue permettant de geler la première colonne (titre) et d’afficher des calculs en bas de certaines colonnes (somme, moyenne, médiane, etc.) selon le type de propriété. - La colonne de titre (première colonne) contient le nom de l’item et s’ouvre sur la page de l’élément. Implémentez un clic sur la cellule titre avec le comportement d’ouverture paramétré (side peek, etc.).
Vue Board (kanban)
Créez-la avec l’option Add a view > Board ou /board Board view. Elle est basée sur un groupement par propriété de type Sélection, Statut ou Personne. Chaque colonne correspond à une valeur de cette propriété. Les colonnes peuvent être masquées, mais les éléments restent accessibles via d’autres vues.
Les cartes sont hautement configurables : - Prévisualisation : aucune, image de couverture, premier bloc de la page (utile pour des images intégrées), ou image issue d’une propriété Fichier & média. - Taille des cartes réglable. - Affichage/masquage du titre de la carte. - Propriétés visibles : sélection des propriétés à afficher directement sur la carte (ex. Assigné, Date d’échéance, Priorité). Le panneau de réglages de la vue Board permet de cocher ces propriétés.
Le glisser‑déposer d’une carte d’une colonne à l’autre modifie automatiquement la valeur du champ de groupement pour cet élément. C’est une interaction critique qui doit déclencher une mise à jour immédiate de la base de données (ou d’un état local).
Des calculs (nombre d’éléments, somme) peuvent être affichés en haut de chaque colonne.
Vue Gallery
Elle ressemble à une grille de cartes personnalisables Gallery view. Reprenez les options de prévisualisation de la vue Board. Ajoutez : - Un toggle Fit image qui adapte le recadrage et autorise un repositionnement au survol. - Un réglage de taille de carte (Card size). - La possibilité de masquer le nom de la carte pour un effet mood board. - Les mêmes options de filtrage, tri et propriétés visibles que les autres vues.
Vue List
La vue List est minimaliste : les éléments sont affichés verticalement, et les propriétés choisies apparaissent en ligne à droite du titre List view. Dans le panneau de réglages, chaque propriété peut être activée/désactivée et réorganisée via des poignées ⋮⋮. Au survol d’un élément, un bouton ⤢ permet d’ouvrir la page en mode plein écran.
Tip: La conversion inline ↔ pleine page est omniprésente : utilisez le même bouton
⤢en survol d’une base inline, et « Turn into inline » dans le menu de la base pleine page. Cette fonctionnalité doit être un toggle simple qui change la propriétéinlinedu bloc et charge le composant adéquat.
Step 5: Layouts des pages d’une base
Chaque page d’une base possède une structure paramétrable depuis le menu « Customize page layout » Layouts. Cela détermine comment les propriétés et le contenu sont affichés lorsque l’utilisateur ouvre un item de la base.
Éléments du layout
- En‑tête (Heading) : obligatoire, il montre le titre de la page et jusqu’à 15 propriétés épinglées horizontalement (avec un défilement si nécessaire). Les autres propriétés sont reléguées dans le Groupe de propriétés.
- Groupe de propriétés : conteneur unique placé dans la zone principale qui liste les propriétés non épinglées, organisables en sections nommées, avec une recherche en temps réel et une option pour masquer les icônes des propriétés.
- Modules : des blocs personnalisés (comme des vues intégrées d’autres bases) peuvent être ajoutés dans la zone principale.
- Panneau latéral : collapsible, il peut héberger soit des propriétés individuelles, soit le Groupe de propriétés en mode compact.
Structures disponibles
- Simple : zone principale + panneau latéral.
- Tabbed : un onglet « Content » contenant les modules, et des onglets supplémentaires affichant des vues live d’autres bases (par exemple, un onglet « Réunions » intégrant une base liée).
Les paramètres additionnels incluent l’affichage des commentaires en ligne (default ou minimal), l’affichage des discussions de page, et le passage en pleine largeur. Implémentez un système de template par base, avec une configuration JSON décrivant l’épinglage des propriétés, l’ordonnancement des modules et l’état du panneau latéral.
Step 6: Conversion en base de tâches – sous‑tâches, dépendances, sprints

L’option Convert to task database (dans le menu ... > Customize database) enrichit une base existante avec trois extensions Database settings. Elle est réversible. La conversion est purement sémantique : elle active des propriétés spéciales et des mécanismes d’affichage sans changer le stockage sous‑jacent.
Sous‑tâches (Sub‑items)
L’activation crée automatiquement une relation auto‑référencée qui se scinde en deux champs miroirs : Parent tasks et Sub‑items Sub‑tasks and dependencies.
Implémentation : vous ajoutez à la base une propriété de type Relation pointant vers la même base, avec un affichage bidirectionnel. En Table ou Board, le survol d’une ligne fait apparaître un menu permettant d’ajouter une sous‑tâche directement (création inline). Sur la page de l’item, les sous‑tâches peuvent apparaître soit comme une simple pill de relation, soit comme une section dédiée affichant des propriétés configurables (statut, assigné, date d’échéance) et proposant un champ de saisie pour créer de nouvelles sous‑tâches. Cette section est en réalité une vue filtrée de la même base, montrant tous les items dont la propriété Parent task pointe vers l’item courant.
Dépendances
Activez Dependencies dans le menu, ce qui ajoute une autre relation auto‑référencée nommée Dependencies. Dans la vue Timeline (Gantt), lorsque l’option est cochée, des poignées apparaissent sur les barres. L’utilisateur peut alors glisser une flèche d’une barre à l’autre pour créer un lien. Les flèches se redessinent automatiquement si les dates sont modifiées. Pour le cloner, il faut un canevas SVG/Canvas réactif capable de gérer ces interactions de glisser‑création de lien.
Sprints
Disponible uniquement après la conversion en base de tâches. Notion ajoute une propriété « sprint » (probablement de type Sélection) pour organiser les tâches par cycle. Sa gestion est identique à toute autre propriété de sélection.
Step 7: Automatisations et rappels multicanaux
Automatisations de base de données
Une icône éclair (⚡) dans le menu de la base ouvre le panneau des automatisations. Le modèle est déclencheur → condition → action, avec par exemple :
- Déclencheur : « Quand une propriété Date arrive dans 1 jour »
- Action : « Envoyer une notification à [membre] »
Les automatisations s’appliquent à l’échelle de la base entière, sans paramétrage par élément Automatisations (source communautaire, mais confirmée par l’interface Notion). Pour votre clone, vous devez implémenter un moteur de règles évaluées côté serveur (ou via des crons), déclenchant des notifications, modifications de propriétés, ou envois de webhooks.
Système de rappels intégré aux dates
Nous l’avons vu à l’étape 2 : chaque cellule Date peut contenir un rappel. Les notifications générées empruntent le même pipeline multicanaux que les automatisations (badge rouge, push, email). Il vous faudra une file de jobs planifiés (par exemple avec un scheduler type Bull ou un service externe) qui vérifie les rappels arrivant à échéance et envoie les événements aux clients connectés.
Warning: Les notifications push desktop doivent respecter les contraintes des navigateurs ; prévoyez un service worker pour la version web, et des mécanismes natifs pour mobile. L’e‑mail de secours nécessite un service d’envoi transactionnel.
Step 8: Interface cohérente et interactions globales
Au‑delà des fonctionnalités individuelles, Notion s’appuie sur des patterns d’interaction que vous devez reproduire pour une expérience fluide :
- Menus contextuels : ouverture d’un menu ... ou clic droit pour les actions locales.
- Glisser‑déposer omniprésent : réorganisation des propriétés, des vues, des cartes, des colonnes, des liens de dépendance. Utilisez une bibliothèque comme dnd-kit ou react-beautiful-dnd.
- Verrouillage : l’état de verrouillage d’une base bloque toute modification de structure (vues, propriétés) mais autorise la saisie de données. Affichez un cadenas et désactivez les boutons d’édition correspondants.
- Conversion inline ↔ pleine page : le bouton ⤢ doit être présent partout (survol d’une base inline, survol d’un élément de liste, etc.). Son état doit être réversible.
- Recherche : barre permanente dans chaque vue, et recherche en temps réel dans le groupe de propriétés.
- Affichage des permissions : les options de modification ne sont offertes qu’aux utilisateurs ayant des droits d’édition ; les vues et propriétés se masquent ou s’affichent selon les droits de partage.
Erreurs courantes
- Confondre « base de données » et « vue » : une base unique peut avoir plusieurs vues indépendantes. Ne pas stocker les filtres ou le type d’affichage au niveau de la base, mais bien au niveau de la vue.
- Négliger l’imbrication des filtres : les filtres avancés sur 3 niveaux ET/OU nécessitent un éditeur récursif. Une interface trop simpliste sera immédiatement frustrante.
- Oublier la synchronisation bidirectionnelle des relations : quand vous reliez A à B en tant que sous‑tâche, la propriété inversée Parent task doit automatiquement se remplir. Testez soigneusement les cas d’édition concurrente.
- Ignorer le pipeline de notifications : un rappel doit arriver sur le badge, en push et en email. Si vous n’implémentez qu’une seule méthode, l’expérience ne sera pas fidèle.
- Absence de mécanisme de verrouillage : sans cela, un utilisateur peut accidentellement supprimer une vue ou une propriété lors d’un glisser‑déposer maladroit.
- Mauvaise gestion de l’état « inline » : si la conversion d’une base pleine page en bloc inline ne préserve pas l’ensemble des vues et propriétés, les utilisateurs perdent leur configuration.
En suivant ces spécifications, vous reproduirez non seulement l’apparence mais aussi la logique profonde des bases de données Notion, où les tâches ne sont qu’une configuration enrichie du même moteur, agrémentée d’automatisations et de rappels avancés. La clé réside dans la séparation claire entre les données (propriétés), les vues (filtres/tris/groupes) et les interactions (glisser‑déposer, conversion inline), le tout chapeauté par un système de notifications multicanaux.


