GoWeBaKnowledge Center

Personal Space

Context and Purpose of the Addendum

This document is the first addendum to the GoWeBa Operations Bible (version 1.0, published on May 6, 2026). It documents all changes introduced by the "Personal Space" project, deployed in three phases between May 6 and May 7, 2026. The Personal Space is a foundational feature that introduces the concept of personal organization within GoWeBa, allowing each user to separate their personal activities from their professional ones, while accessing both from a single interface.

Scope of the Addendum

This addendum covers:

  • Automatic creation of a Personal Space for each user (Phase 1)
  • Cross-organization email composition and contact filtering tabs (Phase 2)
  • Webabox message aggregation across all user organizations (Phase 3)
  • Data schema modifications (OrgType enum, orgType field)
  • New API endpoints introduced
  • New translation keys (i18n) in French, English, and Spanish
  • Impact on existing Operations Guide modules

Document Conventions

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

Overview — Personal Space Concept

The Personal Space is a private area automatically created for each GoWeBa user. It functions as a full-fledged organization, but dedicated to the user's personal activities.

Why a Personal Space?

Before the introduction of the Personal Space, a GoWeBa user could only belong to professional organizations (companies, teams). This posed several issues:

  • Mixing personal and professional contacts
  • Inability to receive personal emails without sharing them with the team
  • No separation between private data and company data
  • Confusion when switching between multiple mandates/clients The Personal Space solves these problems by creating a natural partition while allowing a unified view when desired.

PERSONAL vs STANDARD Organization

💡 The Personal Space is invisible to other members of your professional organizations. Your personal data remains strictly private.

Visual Concept Diagram

Multi-organization structure of a GoWeBa user: ┌─────────────────────────────────────────────────────┐ │ GoWeBa User │ │ │ │ 🏠 Personal Space (PERSONAL) │ │ ├── My personal contacts │ │ ├── My personal email inbox │ │ └── My personal Webabox │ │ │ │ 🏢 Organization A — GoWeBa.com (STANDARD) │ │ ├── Team contacts │ │ ├── Shared email inbox │ │ └── Team Webabox │ │ │ │ 🏢 Organization B — AlainBessette.com (STANDARD) │ │ ├── Team contacts │ │ ├── Shared email inbox │ │ └── Team Webabox │ │ │ │ ◀═══ Organization Selector (switcher) ═══▶ │ └─────────────────────────────────────────────────────┘

Phase 1 — Architecture and Automatic Creation

Phase 1 lays the foundations for the Personal Space: the organization type (OrgType), automatic creation upon registration, and the updated organization selector.

Data Schema Modification

A new OrgType enum was added to the Prisma schema:

Enum definition in the schema: enum OrgType { PERSONAL STANDARD } Field on the Organization model: orgType OrgType @default(STANDARD) ⚠️ The migration is additive and compatible with existing data. All organizations created before Phase 1 automatically retain the STANDARD type.

Automatic Personal Space Creation

When a new user registers, the system automatically creates:

  1. A user account — email, password, name
  2. A personal organization — with orgType = PERSONAL
  3. A membership — OWNER role, linking the user to their personal space Personal organization naming rules:
💡 The Personal Space is created within the same transaction as the user account. If account creation fails, the personal space is not created (and vice versa).

Handling Existing Users

For users who existed before Phase 1, a migration script was executed to retroactively create a Personal Space for each of them. Users affected during initial deployment:

Organization Selector (Org Switcher)

The organization selector in the sidebar has been updated to display two distinct sections:

Selector behavior:

  1. Click on the organization selector in the left sidebar
  2. The dropdown displays with two separated sections
  3. The 🏠 (Personal Space) section appears first
  4. The 🏢 (Organizations) section displays your professional organizations
  5. Click on an organization to switch to it
  6. The interface updates instantly to reflect the selected organization 💡 The selector displays a visual separator between the two sections for clear distinction. ✅ The organization selector is functional and deployed in production.

Modified Files — Phase 1

Phase 2 — Cross-Org Composition and Contact Tabs

Phase 2 introduces two key features: the ability to compose emails from any organization, and contact filtering by organization.

Cross-Organization Composition

Before Phase 2, a user could only send emails with the active organization's email accounts. With Phase 2, the compose modal displays all email accounts from all user organizations, grouped by organization. How it works:

  1. Click "Compose" in the Webabox
  2. The compose modal opens
  3. In the "From" (sender) selector, accounts are grouped by organization
  4. Each group displays the organization name with its icon (🏠 or 🏢)
  5. Select the email account you want to send from
  6. Write your email normally
  7. Click "Send" Example of grouping in the "From" selector:
💡 The default account is the one from the active organization. You can change the sender without changing organizations. ⚠️ The email will be sent from the selected account, not from the active organization. Always verify the sender before sending.

New API Endpoint — Cross-Org Accounts

A new API endpoint was created to retrieve email accounts from all user organizations:

Response structure: { "accounts": [ { "id": "...", "emailAddress": "alain@goweba.com", "displayName": "Alain Bessette", "type": "PERSONAL_EMAIL", "status": "active", "isDefault": true, "organizationId": "...", "organizationName": "Alain Bessette", "orgType": "PERSONAL" } ] }

Filtering Tabs — Contacts Module

The Contacts module has been enriched with tabs to filter contacts by organization:

How tabs work:

  1. Open the Contacts module from the side menu
  2. The filtering tabs appear above the contacts list
  3. By default, the "All organizations" tab is selected
  4. Click "Current organization" to filter by the active organization
  5. The contacts list updates instantly
  6. The contact counter reflects the active filter 💡 Contact tabs are particularly useful when you have many contacts spread across your personal space and professional organizations.

Modified Files — Phase 2

Phase 3 — Cross-Org Webabox Aggregation

Phase 3 is the most impactful: it allows the Webabox (unified inbox) to display messages from all user organizations simultaneously, with a tab system to filter by organization.

Concept — Multi-Organization Unified View

Before Phase 3, the Webabox only displayed messages from the active organization. The user had to switch organizations to see their other messages. With Phase 3, a "scope" system allows displaying:

Webabox Tabs

The Webabox now displays a tab bar above the message list: Example for a user with 3 organizations:

Tab behavior:

  1. By default, the "All" tab is selected (scope=all)
  2. Click a tab to filter messages for that organization
  3. Messages, counters, and statistics update in real time
  4. The scope is passed to all API calls (threads, snapshot, search)
  5. Changing tabs does NOT change the active organization — it only filters the view ⚠️ Changing tabs in the Webabox is NOT the same as switching organizations in the selector. The tab filters the view, while the selector changes the application's global context.

resolveOrgIds Function — Scope Resolution

A new utility function resolveOrgIds was added to Webabox API endpoints. It resolves the scope parameter into a list of organization identifiers: Resolution logic:

💡 The resolveOrgIds function always verifies that the user has access to the requested organization. If access is denied, it silently falls back to the active organization.

Modified API Endpoints — Phase 3

Two existing endpoints were modified to support the scope parameter:

API call example with scope: GET /api/inbox/threads?tab=inbox&scope=all&page=1&limit=20 GET /api/inbox/snapshot?scope=all

Modified UI Components — Phase 3

Several Webabox components were modified to support cross-org aggregation:

Modified Files — Phase 3

✅ Phase 3 is fully deployed and functional in production at goweba.com.

Impact on Existing Modules

The introduction of the Personal Space modifies the behavior of several modules documented in the Operations Bible. Here is the detailed impact per module:

Module 02 — Contacts & CRM

Impact: MODERATE

  • Addition of "All organizations" and "Current organization" filtering tabs
  • Contacts are now siloed by organization
  • A contact created in the Personal Space is private and invisible to professional organizations
  • Contact search can span all organizations ("All" tab) Module 02 sections to update:
  • Section 3 (Interface) — Mention filtering tabs
  • Section 4 (Features) — Add cross-org behavior

Module 03 — Webabox / Inbox

Impact: MAJOR

  • The Webabox now displays organization tabs above the message list
  • The scope (all, current, orgId) is passed to all API calls
  • Email composition uses a sender selector grouped by organization
  • Counters (unread message badges) reflect the active scope Module 03 sections to update:
  • Section 3 (Interface) — Add organization tabs
  • Section 4.1 (Compose an email) — Document cross-org selector
  • Section 5 (Use cases) — Add multi-organization use case

Module 00 — Functional Scope

Impact: MINOR

  • Add Personal Space to the list of modules/features
  • Update the architecture diagram to include the PERSONAL type

Module 20 — System Administration

Impact: MINOR

  • Document the new PERSONAL organization type
  • System administrators see both types in the admin panel
  • Personal organizations cannot be deleted by administrators

Unaffected Modules

The following modules are not affected by the Personal Space:

Complete Technical Reference

Data Schema Modifications

New API Endpoints

Modified Endpoints

Created Files

Modified Files

Added Dependencies

Translation Keys (i18n)

The following translation keys were added to support the Personal Space in GoWeBa's three languages:

Keys — Phase 1 (Personal Space)

Keys — Phase 2 (Cross-org + Contacts)

💡 Translation keys are dynamically loaded based on the user's language configured in their profile settings.

Troubleshooting Guide

Here are the most common issues related to the Personal Space and their solutions:

⚠️ If problems persist, contact the system administrator or refer to Module 20 (System Administration) of the Operations Guide.

Version History

Upcoming updates planned:

  • Advanced telephony features integration
  • Sales pipeline enhancements
  • New AI-based automations

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

GoWeBa — Operations Bible — Addendum 01 Personal Space — Phases 1, 2, and 3

#SectionPage
1Context and Purpose of the Addendum3
2Overview — Personal Space Concept3
3Phase 1 — Architecture and Automatic Creation4
4Phase 2 — Cross-Org Composition and Contact Tabs6
5Phase 3 — Cross-Org Webabox Aggregation8
6Impact on Existing Modules10
7Complete Technical Reference11
8Translation Keys (i18n)13
9Troubleshooting Guide14
10Version History15
ConventionMeaning
💡Tip or trick for better usage
⚠️Warning — important point of attention
Confirmation — operational feature
🏠Icon identifying the Personal Space in the interface
🏢Icon identifying a professional organization
Cyan textStep numbering and technical elements
CharacteristicPERSONAL (Personal Space)STANDARD (Standard Organization)
CreationAutomatic upon registrationManual by an administrator
NameFirst Name Last Name (of the user)Company/team name
Slugfirstname-lastname-personalcompany-slug
OwnerThe user (sole member)One or more administrators
MembersOne only (the owner)Multiple members possible
ContactsPrivate personal contactsShared team contacts
EmailsPrivate personal inboxShared team inbox
Icon🏠 House🏢 Building
DeletionCannot be deletedDeletable by admin
orgType fieldPERSONALSTANDARD
ElementDetailImpact
OrgType EnumPERSONAL | STANDARDNew data type
orgType fieldOn the Organization modelDefault value: STANDARD
MigrationAdditive (compatible)No data loss
PropertyValueExample
NameFirst Name Last Name (of the user)Alain Bessette
Slugfirstname-lastname-personalalain-bessette-personal
OrgTypePERSONAL
OwnerThe user themselves
UserEmailPersonal Space Created
Alain Bessettealain@goweba.com✅ alain-bessette-personal
Mathieu Villeneuvemathieu@goweba.com✅ mathieu-villeneuve-personal
Mariève Émondmarieve@goweba.com✅ marieve-emond-personal
John Smithjohn@goweba.com✅ john-smith-personal
SectionIconContentPosition
Personal Space🏠The user's personal organizationTop
Organizations🏢Professional organizationsBelow
FileModification Type
prisma/schema.prismaAdded OrgType enum, orgType field on Organization
app/api/auth/signup/route.tsAuto-creation of personal org on signup
components/layouts/org-switcher.tsx🏠/🏢 sections, OrgType filtering
scripts/seed.tsPersonal spaces for existing users
lib/i18n/locales/fr.jsonTranslation keys for Personal Space
lib/i18n/locales/en.jsonTranslation keys (English)
lib/i18n/locales/es.jsonTranslation keys (Spanish)
OrganizationIconAvailable Accounts
Alain Bessette (Personal)🏠alain@goweba.com
GoWeBa.com🏢support@goweba.com, info@goweba.com
AlainBessette.com🏢alain@alainbessette.com
PropertyDetail
MethodGET
URL/api/inbox/accounts/all
AuthenticationRequired (user session)
DescriptionReturns all email accounts from all user organizations
ParametersNone — organizations are resolved from the session
TabBehaviorUsage
All organizationsDisplays contacts from all your organizationsGlobal view
Current organizationDisplays only contacts from the active organizationFiltered view
FileModification Type
app/api/inbox/accounts/all/route.tsNEW — Cross-org accounts endpoint
app/(app)/inbox/compose-modal.tsx"From" selector grouped by organization
app/(app)/contacts/page.tsxOrganization filtering tab support
app/(app)/contacts/contacts-table.tsxTab bar UI in table
lib/i18n/locales/fr.jsonKeys: contacts.allOrgs, contacts.currentOrg, inbox.compose.defaultOrg
lib/i18n/locales/en.jsonSame keys (English)
lib/i18n/locales/es.jsonSame keys (Spanish)
ScopeBehaviorUse Case
allDisplays messages from all organizationsPanoramic view of all your messages
currentDisplays only messages from the active orgFocused work on one organization
<orgId>Displays messages from a specific organizationTargeted consultation of one org
TabIconScope Sent to API
Allscope=all
Alain Bessette (Personal)🏠scope=<personal_orgId>
GoWeBa.com🏢scope=<goweba_orgId>
AlainBessette.com🏢scope=<alain_orgId>
Scope ReceivedResolutionOrganizations Returned
null / "current"User's active organization[currentOrgId]
"all"All user organizations[orgId1, orgId2, ...]
"<orgId>"Verifies access, returns specific org[orgId] or [currentOrgId] if no access
EndpointAdded ParameterBehavior
GET /api/inbox/threadsscope=all|current|<orgId>Filters threads by scope
GET /api/inbox/snapshotscope=all|current|<orgId>Filters counters by scope
ComponentModificationRole
inbox/page.tsxLoads user organizations on page loadOrg data injection
inbox/inbox-shell.tsxAccepts userOrgs and activeOrgId propsPass-through to child components
inbox/webabox-client.tsxorgScope state management, tab bar, scope in API callsMain user interface
FileDescriptionPhase
app/api/inbox/threads/route.tsAdded scope param + resolveOrgIds functionPhase 3
app/api/inbox/snapshot/route.tsAdded scope param + resolveOrgIds functionPhase 3
app/(app)/inbox/page.tsxUser org loading (server-side)Phase 3
app/(app)/inbox/inbox-shell.tsxuserOrgs + activeOrgId propsPhase 3
app/(app)/inbox/webabox-client.tsxorgScope state, tabs, scope in API callsPhase 3
ModuleReason
OG_01 — Getting StartedNo change in the visible registration process
OG_04 — WEBA AI AssistantAI functions independently of the organization
OG_05 — Sales PipelinePipeline remains tied to the active organization
OG_06 — FormsForms remain tied to the active organization
OG_07 — AutomationsAutomations remain tied to the active organization
OG_08 — TelephonyTelephony remains tied to the active SIP account
OG_09 — ReportsReports are generated per active organization
OG_10 — BillingBilling is per organization
OG_11 — WEBA CommCommunication is independent of org type
OG_12 — IntegrationsIntegrations are per organization
OG_13 — SMS MarketingSMS marketing is per organization
OG_14 — TemplatesTemplates are per organization
OG_15 — CalendarCalendar is per organization
OG_16 — TasksTasks are per organization
OG_17 — WebsitesWebsites are per organization
OG_18 — ReputationReputation is per organization
OG_19 — Social MediaSocial media is per organization
ElementTypeValuesModelMigration
enum OrgTypeEnumPERSONAL | STANDARDAdditive
orgTypeFieldOrgType @default(STANDARD)OrganizationAdditive
EndpointMethodDescriptionPhase
/api/inbox/accounts/allGETEmail accounts from all user organizationsPhase 2
EndpointAdded ParameterValuesPhase
GET /api/inbox/threadsscopeall | current | <orgId>Phase 3
GET /api/inbox/snapshotscopeall | current | <orgId>Phase 3
FileDescriptionPhase
app/api/inbox/accounts/all/route.tsCross-org accounts endpointPhase 2
FileDescriptionPhase
prisma/schema.prismaOrgType enum + orgType fieldPhase 1
app/api/auth/signup/route.tsAuto-creation of personal orgPhase 1
components/layouts/org-switcher.tsx🏠/🏢 sectionsPhase 1
scripts/seed.tsExisting users' personal spacesPhase 1
app/(app)/inbox/compose-modal.tsxCross-org selectorPhase 2
app/(app)/contacts/page.tsxFiltering tabsPhase 2
app/(app)/contacts/contacts-table.tsxTab bar UIPhase 2
app/api/inbox/threads/route.tsscope param + resolveOrgIdsPhase 3
app/api/inbox/snapshot/route.tsscope param + resolveOrgIdsPhase 3
app/(app)/inbox/page.tsxUser org loadingPhase 3
app/(app)/inbox/inbox-shell.tsxuserOrgs/activeOrgId propsPhase 3
app/(app)/inbox/webabox-client.tsxorgScope state, tabs, API scopePhase 3
lib/i18n/locales/fr.jsoni18n keys (FR)Phases 1-2
lib/i18n/locales/en.jsoni18n keys (EN)Phases 1-2
lib/i18n/locales/es.jsoni18n keys (ES)Phases 1-2
PackageVersionReasonPhase
@dnd-kit/utilities^3.2.2Missing dependency (drag & drop inbox)Phase 3
pdfjs-dist^4.4.168Missing dependency (PDF preview)Phase 3
react-markdown^9.0.1Missing dependency (markdown rendering)Phase 3
KeyFRENES
org.personalSpaceEspace PersonnelPersonal SpaceEspacio Personal
org.organizationsOrganisationsOrganizationsOrganizaciones
org.personalOrgMon Espace PersonnelMy Personal SpaceMi Espacio Personal
KeyFRENES
contacts.allOrgsToutes les organisationsAll organizationsTodas las organizaciones
contacts.currentOrgOrganisation couranteCurrent organizationOrganización actual
inbox.compose.defaultOrgOrganisation par défautDefault organizationOrganización predeterminada
IssueLikely CauseSolution
My Personal Space doesn't appear in the selectorBug during account creationContact the system administrator to verify the presence of the PERSONAL org in the database
I don't see email accounts from my other organizations in the composerEmail accounts are not configured in the other organizationsCheck email account configuration in each organization via Settings > Email
The "All" tab in the Webabox is slowLarge number of messages across multiple organizationsUse per-organization tabs for a more targeted and faster view
My Personal Space contacts appear in my professional organizationThe "All organizations" tab is selectedSwitch to the "Current organization" tab to filter by active org
I can't delete my Personal SpaceNormal behavior — by designThe Personal Space is permanent and cannot be deleted. Contact the administrator if needed
The unread message badge doesn't reflect all my messagesThe badge shows the active scope (not necessarily "All")Switch the tab to "All" to see the global counter
VersionDateDescriptionAuthor
1.0May 6, 2026Initial publication of the Operations Bible (20 modules)GoWeBa
1.1May 7, 2026Addendum 01 — Personal Space (Phases 1, 2, and 3)GoWeBa

© 2024–2026 GOWEBA INC. — Make it Simple, Make it Possible, Make it Real.