Multi-tenant SaaS Platform
Built the core multi-tenant platform behind Aardvark Labs, unifying organization onboarding, Beds24 PMS integrations, Stripe billing, reporting, and internal documentation across a shared SaaS architecture.
- Client
- Aardvark Partners
- Role
- Full-stack
- Scope
- Platform architecture, integrations, payments, internal tools
- Year
- 2026
- 400+
- Properties supported
- 5+
- Product surfaces unified
- Multi-tenant
- Shared platform architecture
- Background jobs
- Syncs, reports
Context
Aardvark Labs grew out of standalone hospitality apps that gained traction with operators who wanted a single place to access them. The platform became the shared SaaS surface where organizations onboard, connect their PMS, activate services from a marketplace, handle billing, and launch connected products.
-
Multi-tenant SaaS
Shared platform with tenant-aware workflows
-
Hospitality operations
Onboarding, reporting, payments, and admin tools
-
Production systems
Integrations, workers, storage, and observability
Problem
As more organizations wanted to use Aardvark's products, the surface expanded across onboarding, PMS connectivity, payments, service activation, and analytics, creating the need for a reliable multi-tenant foundation rather than a patchwork of isolated apps.
Architecture
Application
-
Beds24 PMS synchronization
Token capture and refresh flow keeping properties and bookings in sync, reused across downstream tasks.
-
Stripe Connect workflows
Connected account onboarding, payouts, and platform fees per tenant.
-
Internal automation tools
Backfill jobs, connection health checks, and admin operations running on GCP.
Platform
-
Tenant isolation
Row-level security and tenant-aware data access across a shared schema.
-
Role-based access
Permissions across organizations, properties, and internal users.
Data
-
Shared data model
Common entities for organizations, properties, bookings, and guests.
Tech stack
-
Next.js
Dashboard, marketplace, and connected product surfaces in a shared monorepo.
-
Supabase
Postgres database, auth, and row-level security backing tenant isolation.
-
Authentication
Supabase Auth with Google OAuth for user sign-in across the platform.
-
PostgreSQL
Shared schema for organizations, users, roles, services, and connections.
-
Stripe Connect
Connected accounts, charges, and payouts for tenant-collected payments.
-
Beds24 API
PMS integration with token capture and refresh flow for property and booking syncs.
-
Node.js
Background workers for PMS syncs, backfills, and connection health jobs.
-
Google Cloud Platform
Cloud runtime hosting the Node.js jobs and scheduled tasks.
Product surface
- 01
Organization onboarding
Tenant signup, workspace setup, billing, and initial configuration.
- 02
Organization admin
Tenant settings, team access, and configuration across properties.
- 03
Payments and payouts
Connected account setup, charges, refunds, and payout reporting per tenant.
- 04
Service marketplace
Catalog of Aardvark apps and services that organizations can demo and activate per tenant.
- 05
Reporting and analytics
Connected products like Meerkat for portfolio performance, benchmarking, and growth across bookings and revenue.
- 06
Internal documentation
Embedded knowledge surfaces for operators and support staff.
Outcome
The result was a cohesive platform layer that made it easier to ship tenant-aware features across onboarding, billing, reporting, and internal workflows.
- Built multi-tenant onboarding so organizations could sign up, configure their workspace, and access Aardvark's apps from one place
- Integrated Beds24 with a token and refresh flow keeping properties in sync, plus Stripe Connect for tenant-collected payments
- Shipped a service marketplace and connected analytics products (Meerkat) on top of a shared, tenant-isolated foundation