Enterprise organization management for property managers, HOAs, real estate firms, and developers. Multi-member teams with role-based access, regional coverage, portfolio grouping, data imports, and full audit trails.
name: string
type: "property_management" | "real_estate" | "hoa" | "developer" | "other"
tier: "basic" | "pro" | "enterprise"
doorCount: number
states: string[]
isActive: boolean
onboardingComplete: boolean
logoUrl?: string
primaryColor?: string
posterId: Id<"posterUsers">
organizationId: Id<"posterOrganizations">
role: "owner" | "admin" | "regional_manager" | "coordinator" | "viewer"
status: "pending" | "active" | "suspended" | "removed"
regionScope: Id<"posterRegions">[]
portfolioScope: Id<"posterPortfolios">[]
organizationId: Id<"posterOrganizations">
name: string
code: string
states: string[]
managerId?: Id<"posterUsers">
propertyCount?: number
colorCode?: string
isActive: boolean
organizationId: Id<"posterOrganizations">
regionId?: Id<"posterRegions">
name: string
description?: string
iconName?: string
tags?: string[]
propertyCount?: number
isActive: boolean
organizationId: Id<"posterOrganizations">
source: "csv" | "api" | "yardi" | "appfolio" | "buildium" | "rentmanager" | "manual"
status: "pending" | "validating" | "processing" | "completed" | "failed" | "rolled_back"
totalRows: number
successCount: number
errorCount: number
duplicateCount: number
organizationId: Id<"posterOrganizations">
action: AuditAction (25 types)
targetType: "organization" | "member" | "region" | "portfolio" | "import" | "property"
targetName?: string
actorId: Id<"posterUsers">
details?: Record<string, unknown>
useMyOrganizations() → OrganizationWithRole[]
useOrganization(id) → Organization
useOrganizationStats(id) → Stats
useMyMembership(id) → Membership
useOrganizationMembers(id, opts) → { items, hasMore }
useOrganizationRegions(id, opts) → Region[]
useOrganizationPortfolios(id, opts) → Portfolio[]
useOrganizationImports(id, opts) → { items, hasMore }
useAuditLog(id, opts) → { items, hasMore }
OrganizationCard / OrganizationListItem
OrganizationStatsCard / TierBadge
OrgMemberCard / OrgMemberListItem
MemberInviteCard / MemberStatusIndicator
MemberRoleBadge / MemberScopeBadges
RegionCard / RegionListItem
PortfolioCard / PortfolioListItem
ImportBatchCard / ImportProgressBar
AuditLogTimeline / AuditLogEntry
app/(poster)/organizations/index.tsx
app/(poster)/organizations/[id].tsx
app/(poster)/organizations/[id]/members.tsx
app/(poster)/organizations/[id]/regions.tsx
app/(poster)/organizations/[id]/portfolios.tsx
app/(poster)/organizations/[id]/imports.tsx
app/(poster)/organizations/[id]/audit.tsx
owner/admin: All 5 nav items visible
regional_manager: Members, Regions, Portfolios
coordinator: Members, Regions, Portfolios
viewer: Members, Regions, Portfolios
Imports + Audit: requiresAdmin: true
Poster Settings → Organizations
Route: /(poster)/organizations
Org Detail: /(poster)/organizations/[id]
Sub-screens: /[id]/members, /[id]/regions, /[id]/portfolios, /[id]/imports, /[id]/audit
Layer 3: Queries (#2505)
Layer 4: UI Components (#2510)
Layer 5: Screens (#2516)
Layer 6: Navigation (#2517)
Layer 7: Hooks (#2518)