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
Fig. 01 — SAAS PLATFORM · Platform
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