Case Study

Propta

Role
Solo Design Engineer
Type
0 → 1 product build
Stage
Live in private beta
Stack
React 19 · Supabase · Vercel
Timeline
2025 · ~6 weeks

Propta turns a single revenue number into a full operating mothership for short-term rental hosts.

A solo, end-to-end product: research, brand, UX/UI, and a working web app with live calendar sync, now running real hosts' real numbers.

Overview

Propta is an operating system for short-term rental hosts. Airbnb, Vrbo, and Booking.com show hosts their revenue and almost nothing else. Propta turns those bookings into what a business runs on: real profit after every cost, tax set-aside, seasonality, occupancy, and break-even pricing.

I took it from a kitchen-table conversation to a shipped product with hidden beta accounts, where two hosts are now running their actual numbers and seeing their real profit for the first time.

Role(s)
Research & Interviews
Branding
UX/UI
Front-End Build
Deployment
Landing Page
Socials & Waitlist
Live Demo
Timeline
ResearchBrandBuildPrivate Beta

Now in private beta — testing and refining with real hosts. Shipped solo, end to end.

Tools Used
Figmadesign & prototypes
React 19TypeScript
Tailwind CSSstyling
Framer Motionmotion
Supabaseauth & data
Vercelhosting
Claude Codebuild partner
Status
Live Demo
Landing Page
2 Hosts Beta Testing
Money Automation
The Problem

Hosts only ever see revenue. Most don't know their profit, their costs, or even which KPIs matter.

02

The Problem

Most STR hosting companies give their hosts one number, and it's the wrong one.

Step · 01

It started at the kitchen table

My mom hosts on Airbnb, and she mentioned the app barely gives her any analytics. I asked what it does show.

"Revenue." That was the whole answer.

Money appears in the account, and that's everything a host learns about their business.

A phone on a kitchen table showing only a revenue number
Step · 02

A business nobody taught them to run

The easy diagnosis is that STR sites have weak analytics. The actual problem is deeper: running a short-term rental is running a business, and most hosts have never run one. Many don't know which numbers exist, let alone track them. Profit after the mortgage, cleaners, fees, and utilities. What to hold back for taxes on income nobody withholds. Whether a nightly rate even covers fixed costs in the off-season. The platforms deposit revenue and answer none of it.

A notebook with handwritten questions: profit, taxes, break-even
03

Research

Almost every host I interviewed was running their business blind. Each one was blind about something different.

I interviewed the three hosts I could reach directly.

The Accountant

My mom · 1 property, now hosting privately

Runs the family cabin, first on Airbnb and now booked privately. She's an accountant, so spreadsheets don't scare her. She still couldn't say which KPIs were worth watching or what would actually clarify her income.

The Operator

High school friend · 2 properties

Two properties, both doing well. He knows what to do and when to do it, and admits he has no idea what the numbers are doing behind it. Very blue collar, zero interest in spreadsheets.

The First-Timer

High school friend · 1 property

Brand new to renting and open about not knowing what she's doing yet. Works in HR, sharp, and exactly who the educational side of the product is for.

Finding · 01

They didn't know their numbers, or which ones mattered

Two of the three couldn't tell me their real numbers, and none of them knew what the numbers should be. Nobody could name their profit margin or what they set aside for taxes. So the product couldn't just display KPIs; it had to quietly teach them. That decision shows up all over the final UI: every metric carries a plain-language caption, like "Share of revenue you keep" or "Set aside before you spend the profit."

Finding · 02

Everyone watched a different number

One host watched occupancy, another cash flow, another just wanted to know if she was actually making money. No single dashboard was right for everyone. That killed my first fixed-layout concept and forced the customizable dashboard Propta shipped with.

One more constraint

Any tool that needed recurring manual data entry would be abandoned within a month. Hosts already resent admin work. Whatever I built had to pull bookings in on its own, which later killed the CSV-upload plan and led straight to the iCal architecture covered in Process.

04

Process

Three problems that shaped the product.

Problem · 01

Hosts all needed different numbers, so the dashboard became theirs to build.

My first concept was a fixed dashboard: the "right" KPIs in the "right" order. The interviews broke it. Push occupancy at a host who thinks in cash flow and it reads as noise, and noise is why people stop opening analytics tools.

So I rebuilt it around a customizable Key Metrics row. Hosts pick which metrics sit in it, and the hero stat stays locked on the one number every interview had in common: net profit this month, with revenue always one toggle away.

Early fixed-layout dashboard conceptFirst concept · fixed layout (rejected)
Refined customizable dashboardRefined · customizable Key Metrics
Choosing which metrics fill the Key Metrics row
Problem · 02

My plan was CSV uploads. Watching one host manage his calendar killed it, and handed me something better.

My original plan for getting booking data in was CSV uploads. Hosts export from each platform now and then and drop the files into Propta. It technically worked, and it was quietly fatal. The data is stale the moment it lands, and "remember to export your CSVs" is exactly the admin chore my interviews said hosts abandon. A live product running on dead data undercuts the whole selling point.

The fix came from an interview, not an engineering sprint. While I watched how one host tracked his bookings, he mentioned "some sort of link" he used to move his calendar around. I dug into it after the session. It was an iCal feed, and nearly every booking platform exposes one. Airbnb, Vrbo, and Booking.com all publish a host's bookings as a calendar URL that keeps refreshing. That one comment replaced my entire ingestion plan. Paste a link once and Propta keeps bookings, occupancy, and projections current on its own. It does what an official API integration would do here, except it's free and open to anyone, while Airbnb's real API sits behind partnership programs no indie developer is going to clear.

What changed
CSV exports
Stale snapshots. A manual chore hosts abandon.
iCal feeds
A live calendar URL from every platform. Paste once, stays current on its own.

The tradeoff is real, and I took it on purpose. iCal carries dates, not dollars, so costs and rates still come from the host's own one-time setup, and freshness comes from a daily refresh plus a live sync whenever the host opens the app, rather than instant webhooks. In return, Propta works with every platform on day one, with one manual step ever. For an analytics tool, where the calendar drives occupancy, seasonality, and break-even, that was the right trade. It's the decision I'd defend hardest in the whole build.

Problem · 03

Seeing profit isn't enough. Hosts need to know what they can't spend.

A profit number on its own still leaves a host exposed. Rental income has no withholding, and slow months still have a mortgage. So Propta plans instead of only reporting. It estimates a tax set-aside from the host's rate and location, surfaces quarterly estimated-tax dates and the usual state and local STR taxes, works out break-even occupancy from the host's own fixed costs ("Booked 80% vs 24% needed to cover fixed costs"), and suggests a peak-season reserve so the strong months carry the soft ones. Each one is labeled as planning help, not tax advice, and the estimates say so out loud. Honesty is part of the interface.

05

The Build

Shipped like a product, not a prototype.

Propta isn't a Figma prototype with a URL. It's a working product. React 19 and TypeScript on Vite, Tailwind v4, Framer Motion, Supabase for auth and data, deployed on Vercel with two small serverless functions doing the interesting work.

React 19TypeScriptViteTailwind v4Framer MotionSupabaseVercel
The sync

Two layers, and neither one needs the host.

Booking feeds
Airbnb, Vrbo, Booking, Google Cal
Read-only proxy
Allowlist + 15-min edge cache
iCal parser
Classify, merge, turnovers
Dashboard
Live nights, revenue, projections
Daily 9:00 UTC cron re-runs the whole pipeline, so the numbers stay fresh even when no one is looking.

The sync runs in two layers, and neither one needs the host. Airbnb's and Vrbo's iCal feeds can't be fetched from a browser, because those servers send no CORS headers. So the first layer is a tiny read-only serverless proxy. It only accepts HTTPS links from an allowlist of booking domains, so it can't be turned into an open proxy. It fetches the feed with a timeout, checks that it's actually a calendar, parses it with a roughly 100-line iCal parser I wrote, and returns clean JSON cached at the edge for 15 minutes.

The second layer is a scheduled job. Every day a Vercel cron, locked behind a secret and using a server-only Supabase key, sweeps every property's feeds and refreshes booked nights, reservations, and projected revenue, writing only when the numbers actually changed. That's the quiet promise of the product: a host's dashboard stays current even if they never open the app.

Judgment as code

The parser encodes decisions, not just dates.

Real host calendars are messy, and the rules are domain decisions. "Blocked" and "Not available" events count as blocks, never bookings. A stay cross-posted to two platforms' feeds gets merged so it's never double-counted. A timed event in a synced personal Google Calendar is treated as personal: an all-day event is a booking, but a dentist appointment must never become rental revenue. The calendar layer also works out facts the raw feed doesn't contain, like same-day turnovers, where a checkout with a check-in that afternoon means a tight cleaning window.

src/lib/icalParse.ts
function classify(summary, platform, allDay) {
// "not available" wording always marks an owner block
if (/not available|unavailable|block/i.test(summary))
return "block"
// personal calendar: only all-day events are real stays
if (platform === "other" && !allDay) return "block"
return "reservation"
}

The whole reservation vs block vs personal call, in eight lines.

Ask Propta

Deterministic on purpose.

Ask Propta is deterministic on purpose. The chat isn't an LLM call. It's an answer engine that reads the intent of the question and computes the response from the host's own data. Every answer can carry an honesty note ("estimate, not tax advice"), and nothing leaves the device. For a finance-adjacent tool I chose answers that are always true over answers that are always fluent. An LLM can sit in front of this engine later for open-ended phrasing.

Honesty

Enforced in the metrics engine.

The dashboard's 18-metric library has one hard rule: a metric that needs an input the host hasn't given, like cap rate without a property value, renders locked with a prompt instead of a fake $0. Fixed costs store a billing frequency and normalize to true monthly figures, because treating a $6,000 annual tax bill as a monthly cost makes the profit number garbage. The same honesty extends to the frame. Propta reads numbers, it never moves money, and it says so in the UI.

The demo

The demo is the funnel.

Anyone can open the full product on sample data, no account, with a note that nothing they change is saved and a guided Open House Tour to walk them through it. For a product whose pitch is feeling what it's like to finally see your numbers, a live demo converts better than any screenshot, and it doubles as the proof for this case study.

Explore the live demo
AI

A force multiplier, not a decision-maker.

I used Claude Code to speed up the implementation, so my own time went to the interviews, the cost model, and the judgment calls above. The decisions and tradeoffs in this study are mine. AI just compressed the distance between deciding and shipping.

Details

Craft, in the small stuff.

Dark by default

The theme is applied before first paint, so there's no flash, and the mobile browser chrome color stays in sync.

Break-even bullet graph

Break-even occupancy renders as a real bullet graph, not a bar pretending to be one.

Type what you know, slide what you estimate

Typed inputs for amounts a host knows, sliders for the ones they are estimating.

A live sync status

A status bar shows the last sync and how fresh the numbers are, at a glance.

A greeting that knows the time

Good morning or good evening, keyed to the host's own local time.

06

The Solution

One place where a rental stops being a listing and becomes a business.

Airbnb hands a host one number. Propta hands them the business behind it.

What the platform shows
Revenue
$8,542
ProfitNot shown
Taxes owedNot shown
Break-evenNot shown
OccupancyNot shown
The same month in Propta
Net Profit
$5,120 +12%
Revenue$8,542
All costs-$3,422
Margin60%
Tax set-aside$920
Dashboard

Net profit is the first number a host sees, with costs, margin, and a month of daily bars behind it. The Key Metrics row is theirs to choose.

Net Profit
$8,379
ProfitRevenue
Occupancy
71%
ADR
$214
Margin
60%
Analytics

Profit against last year, seasonality by month, and a plain answer to the scariest question: is your nightly price actually covering you?

Profit vs. last year
This yearLast year
Is your nightly rate covering you?
Comfortable
+58%
Taxes & fees

The next estimated-tax date, a running set-aside, platform fees, and typical state and local STR taxes. The paperwork layer no platform touches.

Next estimated tax
Sept 15
Set aside so far
$2,919
Platform fees3% Airbnb
State + local STR taxabout 8.5%
Federal set-aside25%
Calendar

Every platform's bookings in one view through iCal sync, driving occupancy and projections with no manual entry.

June, every platform
71% booked
AirbnbVrboBookingDirect
Ask Propta

Plain-language questions answered against your own numbers, computed on the spot and kept on your device.

Ask Propta
What's my biggest cost right now?
Your biggest cost right now is Mortgage at $1,100/mo, about 29% of your expenses.
Computed from your own numbers. Nothing leaves your device.
Goals

Set a target and every strong month moves the bar. Propta shows how far off you are and roughly when you'll get there.

Goal, new rental property
$20.7K / $90K
+$2.6K
this month
23% fundedabout 5 months at this pace
What's next

An automation layer on top.

Propta already tells a host what's true. The layer I want to build next acts on it. Move the tax set-aside into its own account without being asked. Flag a nightly rate that's about to slip under break-even before the booking lands, not after. Turn a receipt into a filed expense in the right category. The numbers are already live and trustworthy, which is exactly what makes automation the natural next step: the tool stops being something a host checks and starts being something that quietly keeps them ahead.

07

Outcome

Two hosts put their real numbers in. One found out what he was actually making.

Propta is live: a public demo, a landing page with a waitlist, and hidden beta accounts where two hosts run their real properties through it.

Live
Public demo anyone can try
2
Hosts in private beta
Open
Landing page and waitlist
The aha moment

One host, looking at his month with every cost finally accounted for:

"Wow, I'm really only making $300 in profit this month."

A beta host, seeing his real month for the first time.

He'd never have known that without paying someone to build the spreadsheets for him. That one sentence is the product working exactly as intended.

The product, start to finish, in dark mode
usepropta.com, the landing page and waitlist
Honest scope

This is early, and I'll say so plainly.

Two beta users and qualitative feedback so far, with no conversion or retention data yet. Here's what I'd measure next.

Activation

Demo to account sign-up

Calendar-connect rate

The moment the product actually clicks

Weekly return

Do hosts come back on their own

Acting on the numbers

Rate changes, tax money actually set aside

08

Reflection

Most of what made Propta good came from listening, not from building.

What I'd do differently

I'd talk to hosts before I sketched anything. My first dashboard was a confident guess, and it took real interviews to show me it was the wrong shape. The customizable layout that shipped was sitting in those conversations the whole time. I just reached it the long way around. On the next project, the sketching starts after the listening, not before.

What I learned

The hard part was never the interface. It was figuring out what hosts actually needed when each one needed something different. Interviews kept overruling my assumptions, and the product got better every time I let them. Shipping to real users also beats polishing in private: the $300 moment taught me more than another month of design ever would have.

What's next

Market-rate comps by location and season, which is the half the rate check is still missing. The automation layer that acts on the numbers instead of only showing them. And turning the waitlist into a real beta cohort.

The best way to understand Propta is to use it.

Propta
Designed, built, and shipped solo. 2026.