Property Rental Reports

Workflow Automation Reporting

Replaced spreadsheet-driven monthly client reporting with an automated reporting application. CSV ingestion, report generation, dual delivery as a web page and PDF, Supabase-backed client portal with access control.

3
Hours back per property per month
0
Manual formatting steps
PDF + Web
Multiple assets, one source
How it started

A series of spreadsheets that were, honestly, a mess.

Aire Spaces came to us with a reporting problem. What they showed us was a series of interconnected Excel sheets — duplicated steps to move data between tabs, manual copy-paste between sources, and one sheet essentially acting as a database for eleven months of property revenue. It held together, in the way that hand-built spreadsheets tend to. But it was fragile, hard to hand off, and impossible to scale.

Their existing client report was functional but not pretty. No branding. Column labels that were overly clustered and hard to read. Little room for growth — things had been added over time in ways that left the layout brittle. As it turned out, some of the improvements we delivered later in the engagement would not have been possible in the format they started with.

On top of this, the reporting workflow crossed over with their invoicing process. Not cleanly — invoicing prep sat adjacent to reporting in a way that added time and friction to what was already a slow monthly cycle. That overlap became part of the brief.

Before & After — drag to compare
Before — Excel + manual steps
After — Automated reports

The state of things

  • Interconnected Excel sheets with duplicated data movement
  • A single sheet acting as an 11-month revenue database
  • Client reports with hard-to-read columns
  • No room to extend the report format without breaking it
  • Reporting and invoicing prep intertwined, adding friction to both
Workflow fit

Fitting into their workflow

The first thing we established was a constraint: whatever we built as a first step had to slot into how Aire Spaces already worked. We were not going to ask them to take a great leap from one month to the next — the system had to earn its place gradually. So we made a small but meaningful modification to their existing sheet workflow, producing a CSV template they could drop into a simple upload interface. First step: fill out this slightly modified template and drop it here. That was it. No disruption. No retraining.

The highlight of shaping this stage was realising that whatever we do first NEEDS to fit into their workflow. We modified as little as possible and built around what already existed.

Prototyping

Rapid prototyping the report

Before we wrote a line of application code, we redesigned their client-facing report. We used Figma Make to move fast — not static mocks, not a wired-together prototype, but something that behaved like a real product. This proved unexpectedly valuable.

As the client put it: it allowed us to explore a whole space of interactions that would not have been apparent from static mocks. We could sit down together with something that responded and clicked through, gather high-fidelity feedback at an early stage, and use it as the foundation for the codebase when we moved into build. The facelift also gave Aire Spaces an updated version of the document they were already sharing with clients — an immediate, tangible improvement before the application was anywhere near done.

Persistence

Supabase: auth, history, and a light client portal

For user access, we reached for Supabase. Fast to spin up, a migrations-based schema, and a row-level security layer that meant clients did not need to receive a link in an email each month — they got a login to a portal where their reports lived. The time to ship this was minimal relative to the value it added.

Supabase also became the persistence layer for report history. Month after month, data accumulated without anyone having to manage it. Historical views built themselves. The scope naturally extended into a light client management interface — adding clients, assigning properties, controlling access — but we kept it tight and shipped it without letting it sprawl.

Supabase — fast to wire up, RLS for access control, and a clean persistence layer for historical data. A strong, malleable component. A recurring part of how we build.

System Architecture — Stage 1
Hostaway API CSV Upload Ingest Layer Supabase DB Report Engine PDF Export Client Portal SOURCES CORE DELIVERY
Data flow
Application layer
External / storage
Outcomes

What was delivered. And what we learned.

  • 01

    A report that could grow

    The redesigned format gave Aire Spaces room they did not have before. Additions made in later stages would not have been possible in the original layout. Rapid prototyping made this possible in days, not weeks.

  • 02

    A process that fit

    We did not ask Aire Spaces to change how they worked in order to adopt the system. The system earned its place gradually — modifying as little as possible and building around what already existed.

  • 03

    History that builds itself

    Supabase as the persistence layer means every month of data accumulates without anyone managing it. The historical view is a byproduct of normal operation, not a separate project.

  • 04

    Access without email chains

    Clients log in to a portal. Reports live there, permanently. No more sending links, no more broken attachments, no more chasing the right version.

Related reading

Feeling stuck or unsure how to proceed?

With every project, we follow a fixed-time, variable-scope approach inspired by Basecamp's Shape Up. Book a short 30 minute call with us to help shape and reduce the scope of your problem until a sensible next step emerges. No obligation beyond that. You'll leave with a clearer framing and a concrete next step, whether or not we continue working together.