Skip to main content
Fabien Fouassier

Case Study

GetGround

Multi-tenant, white-label building management platform used by multiple enterprise operators. I owned core architecture and features across mobile, web, and backend over 5+ years — shipping, scaling, and maintaining a long-lived production system as its sole platform engineer since 2025.

Role

Senior Product Engineer

Timeline

5+ years

Year

2020

Category

B2B/B2C SaaS

GetGround hero image

Context & Constraints

GetGround is a multi-tenant, white-label building management platform used by multiple enterprise operators to manage daily operations across large office portfolios.

The platform needed to support multiple operators on a shared core, strict tenant isolation, deep customization (branding, features, integrations), and long-term maintainability over years.

Over time, the scope expanded into a full ecosystem: back-office, backend, mobile app, web app, and a backend-for-frontend layer — all expected to evolve without breaking existing clients.

The Core Problem

The challenge was not feature delivery, but scaling complexity without fragmentation.

As new operators, services, and integrations were added, the system had to remain reliable in production, flexible across tenants, understandable by multiple teams, and safe to extend without regressions.

This required architectural decisions that favored clarity and isolation over short-term speed.

My Role & Ownership

I joined as a Frontend Developer, initially focused on mobile (React Native) and web (React, Next.js) applications.

As the platform grew and backend needs expanded, I progressively took on more responsibility — supporting API development, BFF architecture, and infrastructure decisions — until my role consolidated as a full-stack engineer across the entire stack.

Since 2025, I have been the sole platform engineer: maintaining web, mobile, backend, and infrastructure across 11 enterprise tenants, while continuing to deliver net-new platforms for operator clients.

My responsibilities include:

  • Designing and evolving the multi-tenant architecture and white-label theming system
  • Designing and evolving authentication flows (credentials + SSO)
  • Building and maintaining backend APIs and a dedicated BFF
  • Delivering core modules across back-office, mobile, and web
  • Integrating and maintaining critical third-party SDKs
  • Owning infrastructure across environments
  • Collaborating closely with product, commercial, and client stakeholders

Key Engineering Decisions

1. Multi-tenant & white-label architecture

Designed a theming and configuration system that allowed multiple operators to share a single platform while maintaining strict isolation in branding, features, and integrations.

Every entity in the data model carries an operatorId. APIs require operator context to function. Access controls respect operator boundaries at every layer of the stack. Isolation is a property of the system, not a runtime check.

This enabled faster onboarding of new clients without duplicating codebases.

2. Backend-for-Frontend (BFF)

Introduced a NestJS-based BFF layer to decouple frontend needs from backend services.

This allowed mobile and web clients to evolve independently while keeping backend contracts stable.

3. Authentication & enterprise integrations

Implemented credential-based and SSO authentication (Microsoft, Google) across mobile and web, ensuring enterprise compatibility without fragmenting auth logic.

4. SDK and hardware integrations

Integrated complex third-party systems including Firebase (telemetry, crash reporting, distribution), STid (badge access), and Vecos (locker management).

These integrations required careful lifecycle management to avoid coupling core logic to vendor-specific behavior. The STid integration — bridging a native-only SDK into React Native — made GetGround the first STid client to ship virtual card badging in a React Native app.

5. Kiosk platform — building outside the tenant model

When an operator needed an unattended visitor check-in terminal, the right answer was to build it outside the authenticated platform entirely — with its own infrastructure topology, its own deployment pipeline, and a config-driven tenancy model that required no Cognito pools, no IAM roles, and no per-operator provisioning.

The result: onboarding a new operator to the kiosk surface costs one JSON config file and one DNS CNAME. No code changes.

This decision, and the engineering behind it, is covered in detail in Building a Kiosk on a Multi-Tenant Platform.

Outcomes & Impact

Over more than 5 years in production, these decisions enabled:

  • A shared platform used by 11 enterprise operators
  • Safe rollout of new features without breaking existing tenants
  • Scalable onboarding of new clients with minimal rework
  • Stable mobile and web applications used daily in real office environments
  • Sustained maintainability as a sole platform engineer across the full stack

The platform has remained reliable and extensible despite increasing scope, a growing tenant roster, and a shrinking engineering team.

Tech Stack

React NativeNext.jsAWSReactTailwindNestJSGraphQLPostgreSQLFirebaseStripeTerraform
  • Frontend: React (Back-Office), React Native (Mobile), Next.js (Web), Vite + React 19 (Kiosk)
  • Backend: NestJS (APIs & BFF), AWS (Cognito, DynamoDB, AppSync, S3)
  • Infrastructure: Terraform, CloudFront, Route53, ACM, IAM
  • Integrations: Firebase, Stripe, Vecos, STid

Related Links