Skip to content

Firestore Collections

users/{userId} # User document
├── subscriptions/{subscriptionId} # Stripe subscriptions
├── checkout_sessions/{sessionId} # Stripe checkout sessions
├── dashboards/{dashboardId} # Dashboard widget layouts
├── favorites/{serviceId} # Marketplace favorites
├── blockedUsers/{userId} # Blocked users
├── spammedChats/{userId} # Spam reports
└── mentions/{messageId} # @mention notifications
profiles/{userId} # User profile document
├── testimonials/{id} # Client testimonials
├── skills/{id} # Professional skills
├── workExperience/{id} # Job history
├── education/{id} # Education entries
├── certifications/{id} # Professional certs
├── projects/{id} # Portfolio projects
├── ctas/{id} # Call-to-action buttons
└── socialLinks/{id} # Social platform links
storageUser/{userId} # Storage tracking
└── files/{fileId} # File records
hubs/{hubId} # Hub configuration
├── folders/{folderId} # Doc/page folders
├── documents/{docId} # Documents
├── members/{userId} # Team members
├── invitations/{invitationId} # Team invites
├── apps/
│ ├── services/{serviceId} # Service items
│ ├── store/{productId} # Products
│ ├── portfolio/{itemId} # Portfolio items
│ └── bookings/{configId} # Booking config
└── media/{assetId} # Media files
analytics_events/{eventId} # Hub visitor analytics
chats/{chatId} # Chat conversations
messages[] # Messages (array in document)
marketplace_orders/{orderId} # Purchase orders
marketplace_disputes/{disputeId} # Order disputes
stripeAccounts/{userId} # Stripe Connect accounts
workspaces/{workspaceId} # Workspaces
portfolios/{portfolioId} # Portfolios
projects/{projectId} # Projects
milestones/{milestoneId} # Milestones
tasks/{taskId} # Tasks & subtasks
referralCodes/{code} # Referral codes
referrals/{referralId} # Referral records
config/
├── userRegistry # User registration config
└── hubs # Hub feature limits
mail/{mailId} # Email queue
handles/{handle} # Reserved hub handles
follows/{followerId}_{followingId} # Follow relationships
documents/{docId} # Personal documents
blogs/{blogId} # Blog posts
// User's hubs
where('ownerId', '==', userId)
// User's orders (buyer)
where('buyerId', '==', userId)
// User's orders (seller)
where('sellerId', '==', userId)
// Active items
where('status', '==', 'active')
// User's blogs
where('createdBy', '==', userId)
// Unread notifications
where('unreadBy', 'array-contains', userId)

Used to query across subcollections:

  • Products (across all users’ subscriptions)
  • Prices (across all products)

All stores use firekitDoc / firekitCollection which automatically subscribe to real-time updates via Firestore’s onSnapshot.

  • Timestamps: Use serverTimestamp() for createdAt, updatedAt
  • Soft delete: Set status: 'deleted' rather than removing documents
  • Content storage: Blog content stored as JSON string; doc content in Realtime Database
  • IDs: Auto-generated by Firestore, except referral codes (user-defined)
  • Denormalization: Provider info attached to marketplace services for display