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

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
- 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