00OVERVIEW

My Role

Product Designer & Builder

Type

Live product

Period

2-4 weeks

The Stack

Next.js 16 • React 19 • Tailwind CSS 4 • Cursor (AI-IDE)

Living with 21 roommates broke every spreadsheet, so I designed and shipped a shared system of record for rent, utilities, and facilities. It's in daily use.

Outcome

Running in production for a 21-person flat, with rent, utilities, and laundry on one shared system of record.

The Problem — Research by Living It

Co-living at high density is a logistics mess, and I wasn't studying it from the outside. I was living in it: a 21-person shared apartment in Dubai. Rent chased through WhatsApp groups. Cash handoffs with no receipts. One washing machine and no way to book it. Disputes with no paper trail.

Being one of the users meant research wasn't a phase, it was daily life. It also showed me where the arguments actually started. Not the money itself, but the missing shared truth behind it. Nobody could see who had paid, who owed what, or who had the machine.

The core failure was simple: no shared system of record for money, facilities, or accountability.

Designing for Two Roles

One product, two very different users, so I built two interfaces on a single codebase.

  • The admin is the flat lead collecting rent. They need the whole picture: a ledger across 21 tenants, payment confirmation, arrears tracking. Success for them means chasing less.
  • Members need one number, "what do I owe?", plus proof of what they've paid and a fair shot at the laundry.

Members see only their own balance. The admin sees everyone's. That scoping was the core design decision, and it wasn't a technical one. Most trust problems in shared living are really visibility problems.

Roomy admin dashboard: rent ledger with per-tenant payment status

Key Features

Smart Rent Ledger

The ledger works out each tenant's balance from their room type, their share of utilities, and any arrears carried over. The admin confirms a payment in one tap, and the member it belongs to always sees the same status. No more screenshot wars in the group chat.

Live-Status Laundry Scheduler

Real-time machine status with a hard cap of two bookings per tenant per day. Conflicts get prevented in the data layer instead of argued about in the corridor.

Roomy live-status laundry scheduler

The Architecture, Briefly

To make every tap feel instant, I built a pseudo-relational database engine on top of localStorage: entities with foreign-key-style relations, atomic transactions across multiple entities (confirming a payment updates the ledger, the tenant balance, and the admin summary in one go), and live queries that re-render the UI when data changes. No network, no spinner, every tap under 16ms.

What I Learned About AI-Assisted Building

This was my deepest run at AI-assisted development with Cursor. I let the AI handle boilerplate, state sync, and edge-case hunting, and kept the data model, the role system, and the conflict-resolution logic for myself. The lesson that stuck: AI speeds up execution, but it can't do the systems thinking for you. I had to understand why relational databases work before I could fake one convincingly without a backend.

The best research tool I had was a lease. Living with your users beats interviewing them.

00SEE IT LIVE

Don't take the case study's word for it. Go use the product.