Overview

Nalu is a real estate revenue management platform built for multi-family apartment owners and operators across the United States. Implementing machine learning to analyze every square foot of a property and surface the true pricing potential for each unit. For apartment operators, pricing has always been a high-stakes, manual, gut-driven process, and Nalu replaces that with data, models, and what the team calls “Property DNA”: a structured signal layer that tells operators what to charge, when to adjust, and where revenue is being left on the table. When Nalu engaged Bacancy, the platform was already operational on Azure, but the team needed to move the entire stack to Google Cloud, harden the authentication layer, and add operational controls inside the web app for scheduled ML projects. The engagement covered database migration, cloud-native deployment, authentication overhaul, and core feature expansion across the Nalu Web App and the internal Hermosa client and server systems, with the goal of improving security, reducing operational overhead, and preparing the infrastructure for scale.

Technical Stack

  • VueJs
  • NuxtJs
  • Cloud Functions
  • NodeJs
  • MS SQL
  • Firebase
  • Docker
  • GCP Storage
  • Industry

    Real Estate

  • region
  • Region

    United States

  • project-size
  • Project Size

    Non- Disclosable

Challenges & Solutions

Migrating a 2GB+ Database and Codebase from Azure to Google Cloud SQL

The Nalu platform’s production database had grown beyond 2GB, and standard migration scripts kept timing out, breaking on schema mismatches, or hitting memory limits during transfer. A clean lift-and-shift was not an option because the application needed to maintain referential integrity across multiple linked entities during the cutover.

  • Solution: Our team of Vue.js developers wrote a custom migration script using TypeORM, broke the migration into batched, transaction-safe chunks, and validated each table before moving to the next. This approach let us migrate the full dataset without downtime spikes and preserved every foreign-key relationship between projects, properties, ML models, and user records. The tradeoff was a longer engineering investment upfront, but it eliminated the risk of corrupt data, dropped records, or mid-migration rollbacks that would have stalled the broader cloud transition.

Deploying Hermosa Client & Server to Google Cloud

Hermosa is Nalu’s internal ML processing engine, and its client-server architecture needed to talk to the freshly migrated Cloud SQL instance without exposing the database to the public internet. The standard public endpoint approach would have created a serious security exposure, especially for a real estate platform handling proprietary pricing data.

  • Solution: We set up a Virtual Private Network (VPN) connecting the SQL instance to the application layer and used Google Cloud Build to run YAML configurations and Docker builds as part of the CI pipeline. This combination kept all database traffic inside a private network, automated the deployment process for every code push, and gave the Nalu team a reproducible build pipeline they could extend later. Most of the engineering effort here went into R&D for VPN configuration and Cloud Build optimization, since both touch areas have thin documentation for this specific architecture.

Migrating Authentication from Auth0 to Firebase

Auth0 gave Nalu out-of-the-box APIs to manage user sessions and state, which kept the application code clean, added a recurring third-party cost, and an external dependency that the team wanted to remove. Firebase Authentication offered tighter integration with the rest of the Google Cloud stack, but did not provide the same automatic session-state management.

  • Solution: We rebuilt the authentication layer to handle session state manually using cookies, implemented Firebase Auth flows for login, signup, and password recovery, and migrated existing users without forcing a password reset. The application now sits entirely inside the Google Cloud ecosystem, the third-party Auth0 cost is gone, and the team has full control over session timeout, role-based access, and audit logging.

Manual Project Control & Log Streaming Inside the Web App

The Nalu Web App needed a UI for operators to start, stop, and monitor live ML processing jobs running on Hermosa. The default approach of polling the backend every few seconds would have hit API rate limits, increased server load, and given users laggy log feedback that made it hard to debug failing jobs.

  • Solution: We integrated Redis to handle real-time pub/sub for log streaming and project state changes, refactored the backend to push log events instead of waiting for polled requests, and built a clean UI control layer for start, stop, and status actions. Operators now get near-instant feedback when a project fails, log volume scales without straining the API, and Redis acts as a cache layer for project state that the frontend can subscribe to.

Pre-Populated Data Configurations for Automated Project Setup

Operators were spending significant time configuring each new project with the same baseline data: property templates, unit types, market segments, and pricing rule defaults. Manual setup was slowing down onboarding and creating data-entry errors that would later corrupt ML predictions.

  • Solution: We added a dynamic data configuration layer that injects pre-populated baselines whenever a new project is created, with the ability to override any field. This cut the time to spin up a new project from hours to minutes and removed an entire class of human-input errors that had been showing up in ML model outputs downstream.

Generalizing Firebase Connectors & Component Refactoring

The original Nalu Web App had hard-coded Firebase connector fields scattered across multiple components, which meant any schema change required edits in dozens of places and made the codebase fragile.

  • Solution: We learned the Firestore data operation patterns in depth, refactored the connectors into a generalized, dynamic-data component layer, and reduced field references from dozens of touch points down to a single configuration source. Future schema changes now propagate from one place, the components are reusable across new modules, and the overall maintenance burden on the Nalu team dropped significantly.

Core Features

  • Nalu-Project Creation
  • Nalu-Project version, module management
  • Nalu-Project step management
  • Manually control Project
  • Schedule Project
  • Log management of project
  • Snaps management
  • Auto Jobs management
  • Warehouse management
  • Nalu Web App modifications
  • Machine Learning algorithm for accurate predictions
  • Scraping data from different sources
  • Auto-scaling infrastructure
  • Strict security standards

Results & Impact

  • 2GB+ database migrated to Google Cloud SQL with zero data loss and no downtime during cutover
  • Authentication infrastructure cost has been reduced significantly after retiring Auth0 in favor of Firebase Authentication
  • Project setup time dropped from hours to under a few minutes through pre-populated data configurations
  • Log latency reduced from polling-based delays to near real-time after Redis pub/sub integration
  • Deployment pipeline fully automated via Cloud Build and Docker, eliminating manual production deploys
  • Security posture improved with private VPN connectivity, replacing public database endpoints
  • no.-of-resources
  • No. of Developers

    2

  • time-frame
  • Time Frame

    February 2020 - August 2020

Experience With Bacancy

2500+ Projects Experienced Innovation with Bacancy!

Get access to an experienced team of developers and engineers from Bacancy, handpicked to ace your goals. Kickstart within 48 hours, no-risk trial.

Book a 30 min call
14+

Years of Business
Experience

1458+

Happy
Customers

12+

Countries with
Happy Customers

1050+

Agile enabled
employees