Account Modes

Configure personal, organization, or hybrid account modes for your SaaS.

Choose how users interact with your SaaS: individual accounts only (B2C), team/organization accounts only (B2B), or both (hybrid like GitHub). This single setting cascades through billing, navigation, permissions, and UI.

Account mode determines the fundamental relationship between users and data in your application. It controls whether entities (projects, documents, resources) belong to individuals, organizations, or both.

This page is part of the Configuration documentation.

Quick Decision

If your product is...UseExample
For individuals, no collaborationpersonal-onlyNote-taking app, personal finance
For teams, always sharedorganizations-onlyProject management, team chat
For both individuals and teamshybridGitHub, Notion, Figma

Use personal-only when: your product serves individual users who don't need to share or collaborate. Simpler UX, no team management overhead.

Use organizations-only when: every user belongs to a team. Common for B2B SaaS where you sell seats, not individual subscriptions.

Use hybrid when: users might start solo and later invite teammates, or when you serve both freelancers and enterprises. More complex but most flexible.

If unsure: start with organizations-only for B2B or personal-only for B2C. Migrating to hybrid later is easier than migrating away from it.

Configuration

# apps/web/.env
NEXT_PUBLIC_ACCOUNT_MODE=hybrid # personal-only | organizations-only | hybrid

Personal Only (B2C)

NEXT_PUBLIC_ACCOUNT_MODE=personal-only

What happens:

  • Users sign up and land in their personal workspace
  • No organization creation or invitations
  • Account switcher is hidden
  • Billing attaches to the user directly
  • Data is private to each user

Best for: Consumer apps, personal productivity tools, individual subscriptions.

Automatic feature flags:

enableOrganizations=false
enablePersonalAccountBilling=true
enableOrganizationsBilling=false
showAccountSwitcher=false

Organizations Only (B2B)

NEXT_PUBLIC_ACCOUNT_MODE=organizations-only

What happens:

  • Sign-up automatically creates an organization for the user
  • Users always operate in an organization context
  • Personal account routes are hidden
  • Billing attaches to organizations (seats, team plans)
  • All data belongs to organizations

Best for: Team collaboration tools, enterprise SaaS, seat-based pricing.

Automatic feature flags:

enableOrganizations=true
enablePersonalAccountBilling=false
enableOrganizationsBilling=true
showAccountSwitcher=true # To switch between orgs

Hybrid Mode (Default)

NEXT_PUBLIC_ACCOUNT_MODE=hybrid

What happens:

  • Users have both personal workspaces and can create/join organizations
  • Account switcher shows personal + all organizations
  • Billing can attach to either (but pick one strategy - see pitfalls)
  • Data can belong to personal account or any organization

Best for: Platforms that serve freelancers growing into agencies, developer tools used personally and professionally.

Automatic feature flags:

enableOrganizations=true
enablePersonalAccountBilling=true
enableOrganizationsBilling=true
showAccountSwitcher=true

Feature Flag Overrides

Account mode sets sensible defaults, but you can override specific flags:

# Allow hybrid users to create orgs (default: true)
NEXT_PUBLIC_ALLOW_USER_TO_CREATE_ORGANIZATION=true
# Enable personal billing in hybrid mode (default: true)
NEXT_PUBLIC_ENABLE_PERSONAL_ACCOUNT_BILLING=true
# Enable org billing in hybrid mode (default: true)
NEXT_PUBLIC_ENABLE_ORGANIZATIONS_BILLING=true

See Feature Flags for the complete list.

Common Pitfalls

  • Billing both personal and org accounts in hybrid mode: Confuses users and complicates your pricing. Pick one billing target - usually organizations for B2B, personal for B2C.
  • Changing modes after launch: Existing data associations break. If users created personal data and you switch to organizations-only, that data becomes orphaned. Plan your mode before launch.
  • Forgetting context in queries: In hybrid mode, always filter by the current account context. A user's personal projects shouldn't appear in their organization's dashboard.
  • Navigation doesn't match mode: If you customize navigation, use the context property to show/hide routes appropriately. See Navigation Configuration.
  • Invitations in personal-only mode: The invitation system still exists but routes are hidden. If you expose invite links manually, they'll fail silently.

Database Impact

Account mode affects how you structure your Prisma schema:

// Personal-only: reference user directly
model Note {
id String @id @default(uuid())
userId String
user User @relation(fields: [userId], references: [id])
content String
}
// Organizations-only: reference organization
model Project {
id String @id @default(uuid())
organizationId String
organization Organization @relation(fields: [organizationId], references: [id])
name String
}

In hybrid mode, you'll need to decide per-entity whether it belongs to users, organizations, or both. Most teams pick one model per entity to keep authorization logic simple.

Frequently Asked Questions

Can I switch modes after launching?
Technically yes, but it requires data migration. Personal-only to hybrid is straightforward - existing data stays with personal accounts. Hybrid to organizations-only requires reassigning or deleting personal data.
Do I need different billing providers for each mode?
No. Stripe and other providers work with all modes. The difference is what you attach subscriptions to: users (personal) or organizations.
How does authorization work with account modes?
Authorization checks use the current context. Server actions and API routes validate that the user has access to the requested resource. For organizations, membership is checked; for personal data, ownership is verified.
Can organizations exist in personal-only mode?
No. The organization routes, invitation system, and team management UI are all hidden. The database tables exist but are not used.

Next: Feature Flags →