BugBittle
Case study · 08Property Management

360 Living

One web platform for a UAE landlord whose 290 apartments are split between schools housing teachers and private tenants.

Live on the webLive app
Client
360 Living
Industry
Real Estate · Property Management
Platform
Web
Timeline
16 weeks
Outcome
290 apartments, two tenant types, one system of record
360 Living preview
  • 290Apartments run from one platform
  • 2Separate portals sharing one codebase
  • 1Backend serving both portals
01

Overview

360 Living manages a portfolio in which schools lease blocks of apartments for their teaching staff while other units go to individual tenants. We delivered the operator's portfolio console, a separate portal each school uses for its own units, and the leasing, billing, maintenance and community tools behind both.

02

The challenge

The portfolio had two very different customers sharing the same buildings. Schools needed to manage the units and invoices that belong to them, and nothing else. The operator needed the opposite: every building, lease and payment at once. Spreadsheets couldn't answer simple questions like which units were empty or which invoices were late, and they offered no safe way to let schools log in.

03

Our approach

We gave each audience its own portal but kept a single codebase and one Node.js, TypeScript and MongoDB API underneath, with access decided by the server rather than by which buttons are visible.

04

How we built it

4 steps, from architecture to launch.

  1. 01

    Role checks before render

    Next.js App Router middleware runs at the edge and rejects any route a role isn't allowed to open.

  2. 02

    Fresh data without reloads

    TanStack Query caches portfolio data and refreshes it in the background as leases and payments change.

  3. 03

    Payments reconciled by webhook

    Stripe Checkout confirms rent through an idempotent webhook, and staff can record bank transfers by hand when needed.

  4. 04

    Login that survives slow responses

    A single shared token refresh means parallel requests never compete, and backend blips aren't mistaken for expired logins.

05

Technical challenges

Problem → How we solved it
01

Server-side scoping for school admins

Problem

Hiding menu items wouldn't stop a school admin from loading another school's data.

How we solved it

Every request is checked at the edge, and school accounts are limited to their allocated apartments, invoices and staff leave.

02

A review step before leases go live

Problem

Once rent starts flowing, a wrongly converted enquiry is expensive to unwind.

How we solved it

Conversion shows the lease terms and the payment schedule they create, and nothing is saved until staff confirm.

03

Refresh logic that tolerates slow responses

Problem

Concurrent token refreshes and slow responses were logging people out mid-task.

How we solved it

Refresh runs once and is shared, and temporary server errors are handled separately from genuine session expiry.

06

Screens

6 screens
360 Living: Dashboard
01 · Dashboard
360 Living: Apartments
02 · Apartments
360 Living: Edit building
03 · Edit building
360 Living: App users
04 · App users
360 Living: Community
05 · Community
360 Living: Brand & occupancy
06 · Brand & occupancy
07

What we shipped

6 features
  • 01

    Portfolio and units

    Building-level apartment types with their own pricing and rules, individual units and photo uploads.

  • 02

    Leasing

    Allocations, lease terms, renewal dates, occupancy views and a guarded enquiry-to-lease conversion.

  • 03

    Rent and invoices

    Tenants pay online with Stripe, staff can record offline payments, and every invoice has a shareable receipt.

  • 04

    School portal

    Each school's admin sees and manages only its own apartments, invoices and staff requests.

  • 05

    Residents and maintenance

    Photo-backed maintenance tickets plus notices, events and blog posts for residents.

  • 06

    Reporting and compliance

    Dashboards, PDF exports, a GDPR-style data export and a read-only Zoho Books link.

08

Tech stack

Next.js
App Router with edge-enforced route protection
React + TypeScript
Super Admin and School Admin portals
TanStack Query
Data fetching, caching and sync
Stripe
Hosted rent checkout and webhooks
Ant Design + Tailwind CSS
Admin UI components and styling
OneSignal
Notifications
Zoho Books
Read-only accounting and analytics
Node.js + TypeScript + MongoDB
API behind both portals