Powering up
HomeCase Studies

Web Development

Case Study · Web Development

Rebuilding a SaaS Platform on Foundations That Hold.

A B2B property management platform inherited from a previous agency, rebuilt at the application layer: multi-tenant data isolation, a cached data access layer, and a deployment pipeline the team could actually ship through.

Service

Web Development

Location

USA & India

Duration

8 months

Year

2025


Industry

B2B SaaS / PropTech

Project Overview

A PropTech startup came to us with a validated concept: a unified SaaS dashboard for property managers to track income, expenses, occupancy, and unit performance across their entire portfolio. They had a basic spreadsheet-based prototype and 12 committed early customers. They needed a production-grade platform that could launch in weeks and scale to thousands of users without a costly rebuild.

Key Insight: Fix the Query Layer Before the Infrastructure

The inherited build was slow because of how it talked to the database, not because it lacked servers. Dashboard pages issued a separate query per record rather than fetching sets — the classic N+1 pattern — so cost grew with every row on screen. We profiled the access layer first, restructured those reads into aggregation pipelines, added indexes matched to the actual query shapes, and only then put Redis in front of the hot paths. Scaling the infrastructure would have made the same inefficiency more expensive without making it faster. Read the queries before you provision anything.

The Challenge

The Problem

The client had already spent months with a previous agency and been handed a prototype that was slow, hard to extend and carrying significant technical debt. The real problem was not shipping features; it was arriving at an architecture that could take sustained tenant growth without another rebuild.

Previous build had N+1 database queries causing 8-second load times at just 50 concurrent users

No multi-tenancy: each customer's data was not properly isolated

No CI/CD pipeline — deployments took 4 hours and frequently broke production

Zero automated testing: every release was a manual QA nightmare

No analytics — the founding team couldn't see which features users actually used

Our Solution

Our Approach

We conducted a one-week technical discovery sprint, assessed what to salvage (the core database schema), and rebuilt the application layer from scratch on a scalable, multi-tenant architecture.

01

Multi-Tenant Architecture

Built a database-per-tenant model using MongoDB namespacing, with shared infrastructure and isolated data boundaries — enabling both data security and operational simplicity.

02

Performance-First Frontend

Rebuilt the React frontend with code-splitting, lazy loading, React Query for server-state management, and Recharts for interactive analytics. Load time dropped from 8s to under 1.6s.

03

Scalable Backend & API

Designed a RESTful Node.js/Express API with Redis caching for hot data paths, rate limiting, and database indexing strategy — handling concurrent traffic without degradation.

04

CI/CD & Observability

Implemented GitHub Actions for automated testing and zero-downtime deployments to AWS. Added Datadog for APM, error tracking, and usage analytics — giving the team full production visibility.

Execution Timeline

Our Step-by-Step Process

Month 1

Tech Audit & Refactoring

Profiling N+1 database queries, isolating database namespacing, and setting up clean CI/CD.

Months 2-3

Core Frontend Rebuild

Writing React elements with lazy loading, dynamic imports, and React Query.

Months 4-5

Multi-Tenancy & Backend

MongoDB Atlas shard key design, Redis cache layer, and Stripe API integration.

Months 6-8

CI/CD & Final Scale Testing

Deploying AWS pipeline, configuring Datadog, and verifying load capacities.

Tech Stack

  • React 18
  • Vite
  • Node.js
  • Express
  • MongoDB
  • Redis
  • AWS EC2 & S3
  • GitHub Actions
  • Datadog
  • Stripe
  • React Query
  • Recharts

Results

Measurable impact — verified outcomes

8 mo

Discovery to production

One-week technical discovery sprint, then staged rebuild in two-week cycles

DB-per-tenant

Multi-tenancy model

MongoDB namespacing on shared infrastructure — isolated data boundaries without separate clusters

Redis

Caching layer

Hot data paths cached ahead of the database, with rate limiting at the API edge

Aggregation

Data access pattern

Dashboard reads restructured into aggregation pipelines instead of per-record queries

Retrospective

Lessons Learned & Refinements

Database Namespacing

Schema isolation per tenant kept multi-tenancy robust and secure without multiple expensive database clusters.

Client-Side State

React Query dramatically cut duplicate fetch calls, optimizing dashboard loading for heavy data-views.

Frequently Asked

Trending Questions & FAQs


Want similar results?

Let's build your success story.

Book a free 45-minute strategy call. We'll scope your project, recommend the best approach, and give you a clear roadmap — no strings attached.