GoWeBaKnowledge Center

Espace Personnel

Contexte et objectif de l'Addendum

Ce document est le premier addendum à la Bible des Opérations GoWeBa (version 1.0, publiée le 06 mai 2026). Il documente l'ensemble des modifications apportées par le projet « Espace Personnel », déployé en trois phases entre le 06 et le 07 mai 2026. L'Espace Personnel est une fonctionnalité structurante qui introduit la notion d'organisation personnelle dans GoWeBa, permettant à chaque utilisateur de séparer ses activités personnelles de ses activités professionnelles, tout en ayant accès aux deux depuis une seule interface.

Portée de l'Addendum

Cet addendum couvre :

  • La création automatique d'un Espace Personnel pour chaque utilisateur (Phase 1)
  • La composition d'emails cross-organisation et les onglets de filtrage des contacts (Phase 2)
  • L'agrégation des messages Webabox à travers toutes les organisations de l'utilisateur (Phase 3)
  • Les modifications au schéma de données (enum OrgType, champ orgType)
  • Les nouveaux endpoints API introduits
  • Les nouvelles clés de traduction (i18n) en français, anglais et espagnol
  • L'impact sur les modules existants du Guide Opérationnel

Conventions du document

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Vue d'ensemble — Concept d'Espace Personnel

L'Espace Personnel est un espace privé automatiquement créé pour chaque utilisateur de GoWeBa. Il fonctionne comme une organisation à part entière, mais dédiée aux activités personnelles de l'utilisateur.

Pourquoi un Espace Personnel ?

Avant l'introduction de l'Espace Personnel, un utilisateur GoWeBa ne pouvait appartenir qu'à des organisations professionnelles (entreprises, équipes). Cela posait plusieurs problèmes :

  • Mélange des contacts personnels et professionnels
  • Impossibilité de recevoir des emails personnels sans les partager avec l'équipe
  • Pas de séparation entre les données privées et les données d'entreprise
  • Confusion lors du passage entre plusieurs mandats/clients L'Espace Personnel résout ces problèmes en créant un cloisonnement naturel tout en permettant une vue unifiée quand l'utilisateur le souhaite.

Organisation PERSONAL vs STANDARD

💡 L'Espace Personnel est invisible pour les autres membres de tes organisations professionnelles. Tes données personnelles restent strictement privées.

Schéma visuel du concept

Structure multi-organisation d'un utilisateur GoWeBa : ┌─────────────────────────────────────────────────────┐ │ Utilisateur GoWeBa │ │ │ │ 🏠 Espace Personnel (PERSONAL) │ │ ├── Mes contacts personnels │ │ ├── Ma boîte email personnelle │ │ └── Mon Webabox personnel │ │ │ │ 🏢 Organisation A — GoWeBa.com (STANDARD) │ │ ├── Contacts d'équipe │ │ ├── Boîte email partagée │ │ └── Webabox de l'équipe │ │ │ │ 🏢 Organisation B — AlainBessette.com (STANDARD) │ │ ├── Contacts d'équipe │ │ ├── Boîte email partagée │ │ └── Webabox de l'équipe │ │ │ │ ◀═══ Sélecteur d'organisation (switcher) ═══▶ │ └─────────────────────────────────────────────────────┘

Phase 1 — Architecture et création automatique

La Phase 1 pose les fondations de l'Espace Personnel : le type d'organisation (OrgType), la création automatique à l'inscription, et le sélecteur d'organisation mis à jour.

Modification du schéma de données

Un nouvel enum OrgType a été ajouté au schéma Prisma :

Définition de l'enum dans le schéma : enum OrgType { PERSONAL STANDARD } Champ sur le modèle Organization : orgType OrgType @default(STANDARD) ⚠️ La migration est additive et compatible avec les données existantes. Toutes les organisations créées avant la Phase 1 conservent automatiquement le type STANDARD.

Création automatique de l'Espace Personnel

Lors de l'inscription d'un nouvel utilisateur, le système crée automatiquement :

  1. Un compte utilisateur — email, mot de passe, nom
  2. Une organisation personnelle — avec orgType = PERSONAL
  3. Un membership — rôle OWNER, liant l'utilisateur à son espace personnel Règles de nommage de l'organisation personnelle :
💡 L'Espace Personnel est créé dans la même transaction que le compte utilisateur. Si la création du compte échoue, l'espace personnel n'est pas créé (et vice-versa).

Traitement des utilisateurs existants

Pour les utilisateurs qui existaient avant la Phase 1, un script de migration a été exécuté pour créer rétroactivement un Espace Personnel pour chacun d'entre eux. Utilisateurs concernés lors du déploiement initial :

Sélecteur d'organisation (Org Switcher)

Le sélecteur d'organisation dans la barre latérale a été mis à jour pour afficher deux sections distinctes :

Comportement du sélecteur :

  1. Clique sur le sélecteur d'organisation dans la barre latérale gauche
  2. La liste déroulante s'affiche avec deux sections séparées
  3. La section 🏠 (Espace Personnel) apparaît en premier
  4. La section 🏢 (Organisations) affiche tes organisations professionnelles
  5. Clique sur une organisation pour y basculer
  6. L'interface se met à jour instantanément pour refléter l'organisation sélectionnée 💡 Le sélecteur affiche un séparateur visuel entre les deux sections pour une distinction claire. ✅ Le sélecteur d'organisation est fonctionnel et déployé en production.

Fichiers modifiés — Phase 1

Phase 2 — Composition cross-org et onglets Contacts

La Phase 2 introduit deux fonctionnalités clés : la possibilité de composer des emails depuis n'importe quelle organisation, et le filtrage des contacts par organisation.

Composition cross-organisation

Avant la Phase 2, un utilisateur ne pouvait envoyer des emails qu'avec les comptes email de l'organisation active. Avec la Phase 2, le modal de composition affiche tous les comptes email de toutes les organisations de l'utilisateur, regroupés par organisation. Fonctionnement :

  1. Clique sur « Composer » dans la Webabox
  2. Le modal de composition s'ouvre
  3. Dans le sélecteur « De » (expéditeur), les comptes sont regroupés par organisation
  4. Chaque groupe affiche le nom de l'organisation avec son icône (🏠 ou 🏢)
  5. Sélectionne le compte email depuis lequel tu veux envoyer
  6. Rédige ton email normalement
  7. Clique sur « Envoyer » Exemple de regroupement dans le sélecteur « De » :
💡 Le compte par défaut est celui de l'organisation active. Tu peux changer d'expéditeur sans changer d'organisation. ⚠️ L'email sera envoyé depuis le compte sélectionné, pas depuis l'organisation active. Vérifie bien l'expéditeur avant d'envoyer.

Nouvel endpoint API — Comptes cross-org

Un nouvel endpoint API a été créé pour récupérer les comptes email de toutes les organisations de l'utilisateur :

Structure de la réponse : { "accounts": [ { "id": "...", "emailAddress": "[email protected]", "displayName": "Alain Bessette", "type": "PERSONAL_EMAIL", "status": "active", "isDefault": true, "organizationId": "...", "organizationName": "Alain Bessette", "orgType": "PERSONAL" } ] }

Onglets de filtrage — Module Contacts

Le module Contacts a été enrichi avec des onglets permettant de filtrer les contacts par organisation :

Fonctionnement des onglets :

  1. Ouvre le module Contacts depuis le menu latéral
  2. Les onglets de filtrage apparaissent au-dessus de la liste de contacts
  3. Par défaut, l'onglet « Toutes les organisations » est sélectionné
  4. Clique sur « Organisation courante » pour filtrer par l'organisation active
  5. La liste de contacts se met à jour instantanément
  6. Le compteur de contacts reflète le filtre actif 💡 Les onglets de contacts sont particulièrement utiles quand tu as beaucoup de contacts répartis entre ton espace personnel et tes organisations professionnelles.

Fichiers modifiés — Phase 2

Phase 3 — Agrégation Webabox cross-org

La Phase 3 est la plus impactante : elle permet à la Webabox (boîte de réception unifiée) d'afficher les messages de toutes les organisations de l'utilisateur simultanément, avec un système d'onglets pour filtrer par organisation.

Concept — Vue unifiée multi-organisation

Avant la Phase 3, la Webabox n'affichait que les messages de l'organisation active. L'utilisateur devait changer d'organisation pour voir ses autres messages. Avec la Phase 3, un système de « scope » permet d'afficher :

Onglets de la Webabox

La Webabox affiche maintenant une barre d'onglets au-dessus de la liste des messages : Exemple pour un utilisateur avec 3 organisations :

Comportement des onglets :

  1. Par défaut, l'onglet « Toutes » est sélectionné (scope=all)
  2. Clique sur un onglet pour filtrer les messages de cette organisation
  3. Les messages, les compteurs et les statistiques se mettent à jour en temps réel
  4. Le scope est transmis à tous les appels API (threads, snapshot, recherche)
  5. Le changement d'onglet ne change PAS l'organisation active — il filtre uniquement la vue ⚠️ Le changement d'onglet dans la Webabox n'est PAS la même chose que le changement d'organisation dans le sélecteur. L'onglet filtre la vue, tandis que le sélecteur change le contexte global de l'application.

Fonction resolveOrgIds — Résolution du scope

Une nouvelle fonction utilitaire resolveOrgIds a été ajoutée aux endpoints API de la Webabox. Elle résout le paramètre scope en une liste d'identifiants d'organisation : Logique de résolution :

💡 La fonction resolveOrgIds vérifie toujours que l'utilisateur a accès à l'organisation demandée. Si l'accès est refusé, elle retombe silencieusement sur l'organisation active.

Endpoints API modifiés — Phase 3

Deux endpoints existants ont été modifiés pour supporter le paramètre scope :

Exemple d'appel API avec scope : GET /api/inbox/threads?tab=inbox&scope=all&page=1&limit=20 GET /api/inbox/snapshot?scope=all

Composants UI modifiés — Phase 3

Plusieurs composants de la Webabox ont été modifiés pour supporter l'agrégation cross-org :

Fichiers modifiés — Phase 3

✅ Phase 3 est entièrement déployée et fonctionnelle en production sur goweba.com.

Impact sur les modules existants

L'introduction de l'Espace Personnel modifie le comportement de plusieurs modules documentés dans la Bible des Opérations. Voici le détail des impacts par module :

Module 02 — Contacts & CRM

Impact : MODÉRÉ

  • Ajout d'onglets de filtrage « Toutes les organisations » et « Organisation courante »
  • Les contacts sont maintenant cloisonnés par organisation
  • Un contact créé dans l'Espace Personnel est privé et invisible pour les organisations professionnelles
  • La recherche de contacts peut couvrir toutes les organisations (onglet « Toutes ») Section du module 02 à mettre à jour :
  • Section 3 (Interface) — Mentionner les onglets de filtrage
  • Section 4 (Fonctionnalités) — Ajouter le comportement cross-org

Module 03 — Webabox / Boîte de Réception

Impact : MAJEUR

  • La Webabox affiche maintenant des onglets d'organisation au-dessus de la liste des messages
  • Le scope (all, current, orgId) est transmis à tous les appels API
  • La composition d'email utilise un sélecteur d'expéditeur regroupé par organisation
  • Les compteurs (badge de messages non lus) reflètent le scope actif Sections du module 03 à mettre à jour :
  • Section 3 (Interface) — Ajouter les onglets d'organisation
  • Section 4.1 (Composer un email) — Documenter le sélecteur cross-org
  • Section 5 (Cas d'utilisation) — Ajouter le cas multi-organisation

Module 00 — Périmètre fonctionnel

Impact : MINEUR

  • Ajouter l'Espace Personnel à la liste des modules/fonctionnalités
  • Mettre à jour le schéma d'architecture pour inclure le type PERSONAL

Module 20 — Administration système

Impact : MINEUR

  • Documenter le nouveau type d'organisation PERSONAL
  • Les administrateurs système voient les deux types dans le panneau d'administration
  • Les organisations personnelles ne peuvent pas être supprimées par l'administrateur

Modules NON impactés

Les modules suivants ne sont pas impactés par l'Espace Personnel :

Référence technique complète

Modifications du schéma de données

Nouveaux endpoints API

Endpoints modifiés

Fichiers créés

Fichiers modifiés

Dépendances ajoutées

Clés de traduction (i18n)

Les clés de traduction suivantes ont été ajoutées pour supporter l'Espace Personnel dans les trois langues de GoWeBa :

Clés — Phase 1 (Espace Personnel)

Clés — Phase 2 (Cross-org + Contacts)

💡 Les clés de traduction sont chargées dynamiquement selon la langue de l'utilisateur configurée dans les paramètres de son profil.

Guide de dépannage

Voici les problèmes les plus fréquents liés à l'Espace Personnel et leurs solutions :

⚠️ En cas de problème persistant, contacter l'administrateur système ou consulter le Module 20 (Administration système) du Guide Opérationnel.

Historique des versions

Prochaines mises à jour prévues :

  • Intégration des fonctionnalités de téléphonie avancée
  • Améliorations du pipeline de ventes
  • Nouvelles automatisations basées sur l'IA

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

GoWeBa — Bible des Opérations — Addendum 01 Espace Personnel — Phases 1, 2 et 3

#SectionPage
1Contexte et objectif de l'Addendum3
2Vue d'ensemble — Concept d'Espace Personnel3
3Phase 1 — Architecture et création automatique4
4Phase 2 — Composition cross-org et onglets Contacts6
5Phase 3 — Agrégation Webabox cross-org8
6Impact sur les modules existants10
7Référence technique complète11
8Clés de traduction (i18n)13
9Guide de dépannage14
10Historique des versions15
ConventionSignification
💡Conseil ou astuce pour une meilleure utilisation
⚠️Avertissement — point d'attention important
Confirmation — fonctionnalité opérationnelle
🏠Icône identifiant l'Espace Personnel dans l'interface
🏢Icône identifiant une organisation professionnelle
Texte en cyanNumérotation des étapes et éléments techniques
CaractéristiquePERSONAL (Espace Personnel)STANDARD (Organisation classique)
CréationAutomatique à l'inscriptionManuelle par un administrateur
NomPrénom Nom (de l'utilisateur)Nom de l'entreprise/équipe
Slugprenom-nom-personalslug-de-l-entreprise
PropriétaireL'utilisateur (seul membre)Un ou plusieurs administrateurs
MembresUn seul (le propriétaire)Plusieurs membres possibles
ContactsContacts personnels privésContacts partagés de l'équipe
EmailsBoîte personnelle privéeBoîte partagée de l'équipe
Icône🏠 Maison🏢 Immeuble
SuppressionNon supprimableSupprimable par l'admin
Champ orgTypePERSONALSTANDARD
ÉlémentDétailImpact
Enum OrgTypePERSONALSTANDARD
Champ orgTypeSur le modèle OrganizationValeur par défaut : STANDARD
MigrationAdditive (compatible)Aucune perte de données
PropriétéValeurExemple
NomPrénom Nom (de l'utilisateur)Alain Bessette
Slugprenom-nom-personalalain-bessette-personal
OrgTypePERSONAL
PropriétaireL'utilisateur lui-même
UtilisateurEmailEspace Personnel créé
Alain Bessette[email protected]✅ alain-bessette-personal
Mathieu Villeneuve[email protected]✅ mathieu-villeneuve-personal
Mariève Émond[email protected]✅ marieve-emond-personal
John Smith[email protected]✅ john-smith-personal
SectionIcôneContenuPosition
Espace Personnel🏠L'organisation personnelle de l'utilisateurEn haut
Organisations🏢Les organisations professionnellesEn dessous
FichierType de modification
prisma/schema.prismaAjout enum OrgType, champ orgType sur Organization
app/api/auth/signup/route.tsCréation auto de l'org personnelle à l'inscription
components/layouts/org-switcher.tsxSections 🏠/🏢, filtrage par OrgType
scripts/seed.tsCréation des espaces personnels pour les utilisateurs existants
lib/i18n/locales/fr.jsonClés de traduction pour l'Espace Personnel
lib/i18n/locales/en.jsonClés de traduction (anglais)
lib/i18n/locales/es.jsonClés de traduction (espagnol)
OrganisationIcôneComptes disponibles
Alain Bessette (Personnel)🏠[email protected]
GoWeBa.com🏢[email protected], [email protected]
AlainBessette.com🏢[email protected]
PropriétéDétail
MéthodeGET
URL/api/inbox/accounts/all
AuthentificationRequise (session utilisateur)
DescriptionRetourne tous les comptes email de toutes les organisations de l'utilisateur
ParamètresAucun — les organisations sont résolues à partir de la session
OngletComportementUtilisation
Toutes les organisationsAffiche les contacts de toutes tes organisationsVue globale
Organisation couranteAffiche uniquement les contacts de l'organisation activeVue filtrée
FichierType de modification
app/api/inbox/accounts/all/route.tsNOUVEAU — Endpoint cross-org accounts
app/(app)/inbox/compose-modal.tsxSélecteur « De » groupé par organisation
app/(app)/contacts/page.tsxSupport des onglets de filtrage par org
app/(app)/contacts/contacts-table.tsxBarre d'onglets UI dans le tableau
lib/i18n/locales/fr.jsonClés contacts.allOrgs, contacts.currentOrg, inbox.compose.defaultOrg
lib/i18n/locales/en.jsonMêmes clés (anglais)
lib/i18n/locales/es.jsonMêmes clés (espagnol)
ScopeComportementCas d'utilisation
allAffiche les messages de toutes les organisationsVue panoramique de tous tes messages
currentAffiche uniquement les messages de l'org activeTravail focalisé sur une organisation
<orgId>Affiche les messages d'une organisation spécifiqueConsultation ciblée d'une org
OngletIcôneScope envoyé à l'API
Toutesscope=all
Alain Bessette (Personnel)🏠scope=<orgId_personnel>
GoWeBa.com🏢scope=<orgId_goweba>
AlainBessette.com🏢scope=<orgId_alain>
Scope reçuRésolutionOrganisations retournées
null / "current"Organisation active de l'utilisateur[currentOrgId]
"all"Toutes les organisations de l'utilisateur[orgId1, orgId2, ...]
"<orgId>"Vérifie l'accès, retourne l'org spécifique[orgId] ou [currentOrgId] si pas d'accès
EndpointParamètre ajoutéComportement
GET /api/inbox/threadsscope=allcurrent
GET /api/inbox/snapshotscope=allcurrent
ComposantModificationRôle
inbox/page.tsxCharge les organisations de l'utilisateur au chargementInjection des données d'org
inbox/inbox-shell.tsxAccepte les props userOrgs et activeOrgIdTransmission aux composants enfants
inbox/webabox-client.tsxGestion du state orgScope, barre d'onglets, scope dans les appels APIInterface utilisateur principale
FichierType de modification
app/api/inbox/threads/route.tsAjout param scope + fonction resolveOrgIds
app/api/inbox/snapshot/route.tsAjout param scope + fonction resolveOrgIds
app/(app)/inbox/page.tsxChargement des orgs utilisateur (server-side)
app/(app)/inbox/inbox-shell.tsxProps userOrgs + activeOrgId
app/(app)/inbox/webabox-client.tsxState orgScope, onglets, scope dans API calls
ModuleRaison
OG_01 — Premiers pasAucun changement dans le processus d'inscription visible
OG_04 — WEBA Assistant IAL'IA fonctionne indépendamment de l'organisation
OG_05 — Pipeline de ventesLe pipeline reste lié à l'organisation active
OG_06 — FormulairesLes formulaires restent liés à l'organisation active
OG_07 — AutomatisationsLes automatisations restent liées à l'organisation active
OG_08 — TéléphonieLa téléphonie reste liée au compte SIP actif
OG_09 — RapportsLes rapports sont générés par organisation active
OG_10 — FacturationLa facturation est par organisation
OG_11 — WEBA CommCommunication indépendante de l'org type
OG_12 — IntégrationsLes intégrations sont par organisation
OG_13 — SMS MarketingLe marketing SMS est par organisation
OG_14 — TemplatesLes templates sont par organisation
OG_15 — CalendrierLe calendrier est par organisation
OG_16 — TâchesLes tâches sont par organisation
OG_17 — Sites WebLes sites sont par organisation
OG_18 — RéputationLa réputation est par organisation
OG_19 — Réseaux SociauxLes réseaux sociaux sont par organisation
ÉlémentTypeValeursModèleMigration
enum OrgTypeEnumPERSONALSTANDARD
orgTypeChampOrgType @default(STANDARD)OrganizationAdditive
EndpointMéthodeDescriptionPhase
/api/inbox/accounts/allGETComptes email de toutes les orgs de l'utilisateurPhase 2
EndpointParamètre ajoutéValeursPhase
GET /api/inbox/threadsscopeallcurrent
GET /api/inbox/snapshotscopeallcurrent
FichierDescriptionPhase
app/api/inbox/accounts/all/route.tsEndpoint cross-org accountsPhase 2
FichierDescriptionPhase
prisma/schema.prismaEnum OrgType + champ orgTypePhase 1
app/api/auth/signup/route.tsCréation auto org personnellePhase 1
components/layouts/org-switcher.tsxSections 🏠/🏢Phase 1
scripts/seed.tsEspaces personnels existantsPhase 1
app/(app)/inbox/compose-modal.tsxSélecteur cross-orgPhase 2
app/(app)/contacts/page.tsxOnglets de filtragePhase 2
app/(app)/contacts/contacts-table.tsxBarre d'onglets UIPhase 2
app/api/inbox/threads/route.tsParam scope + resolveOrgIdsPhase 3
app/api/inbox/snapshot/route.tsParam scope + resolveOrgIdsPhase 3
app/(app)/inbox/page.tsxChargement orgs utilisateurPhase 3
app/(app)/inbox/inbox-shell.tsxProps userOrgs/activeOrgIdPhase 3
app/(app)/inbox/webabox-client.tsxState orgScope, onglets, API scopePhase 3
lib/i18n/locales/fr.jsonClés i18n (FR)Phases 1-2
lib/i18n/locales/en.jsonClés i18n (EN)Phases 1-2
lib/i18n/locales/es.jsonClés i18n (ES)Phases 1-2
PackageVersionRaisonPhase
@dnd-kit/utilities^3.2.2Dépendance manquante (drag & drop inbox)Phase 3
pdfjs-dist^4.4.168Dépendance manquante (PDF preview)Phase 3
react-markdown^9.0.1Dépendance manquante (markdown rendering)Phase 3
CléFRENES
org.personalSpaceEspace PersonnelPersonal SpaceEspacio Personal
org.organizationsOrganisationsOrganizationsOrganizaciones
org.personalOrgMon Espace PersonnelMy Personal SpaceMi Espacio Personal
CléFRENES
contacts.allOrgsToutes les organisationsAll organizationsTodas las organizaciones
contacts.currentOrgOrganisation couranteCurrent organizationOrganización actual
inbox.compose.defaultOrgOrganisation par défautDefault organizationOrganización predeterminada
ProblèmeCause probableSolution
Mon Espace Personnel n'apparaît pas dans le sélecteurBug lors de la création du compteContacter l'administrateur pour vérifier la présence de l'org PERSONAL dans la base de données
Je ne vois pas les comptes email de mes autres organisations dans le compositeurLes comptes email ne sont pas configurés dans les autres organisationsVérifier la configuration des comptes email dans chaque organisation via Paramètres > Email
L'onglet « Toutes » dans la Webabox est lentGrand nombre de messages à travers plusieurs organisationsUtiliser les onglets par organisation pour une vue plus ciblée et rapide
Les contacts de mon Espace Personnel apparaissent dans mon organisation professionnelleL'onglet « Toutes les organisations » est sélectionnéBasculer vers l'onglet « Organisation courante » pour filtrer par org active
Je ne peux pas supprimer mon Espace PersonnelComportement normal — par designL'Espace Personnel est permanent et ne peut pas être supprimé. Contacter l'administrateur si nécessaire
Le badge de messages non lus ne reflète pas tous mes messagesLe badge affiche le scope actif (pas forcément « Toutes »)Changer l'onglet vers « Toutes » pour voir le compteur global
VersionDateDescriptionAuteur
1.006 mai 2026Publication initiale de la Bible des Opérations (20 modules)GoWeBa
1.107 mai 2026Addendum 01 — Espace Personnel (Phases 1, 2 et 3)GoWeBa

© 2026 GoWeBa Inc. — Make it Simple, Make it Possible, Make it Real.