Marketplace + Owner app
Property Plaza
Long-term rentals in Bali, with no commission on the rent.

The problem
Long-term rentals in Bali often run through Facebook groups, WhatsApp and agents. The same villa turns up in several groups, the person who answers is not always the owner, and a fake listing can look just like a real one until the deposit has gone. A renter has a few photos and a price to go on.
What was built
Three sides, one platform. Renters get a bilingual website where a free account shows every photo of every listing. Owners get an app where a property goes online in three steps, and where they take the identity check and answer renters. Behind both sit an API, a back office where staff review the listings owners submit, and an import tool for brokers with many properties.
Property Plaza is a long-term rental marketplace for Bali. Renters browse in English or Bahasa Indonesia and message the person behind a listing. A free account gets one contact a week, and nobody takes a commission on the rent. Owners list their property from a phone app, confirm who they are with an identity check, and wait for the Property Plaza team to approve the listing. It is built by a team, as five codebases. I built the Owner app and worked across the rest.
What makes it notable
A free plan with a limit the server enforces
A free account sees every photo of every listing and can contact one property a week. The paid Achiever plan raises that to fifteen. The count is per property, not per owner, it resets every week, and replying in a conversation you already opened costs nothing. The limit is checked in the API, not just in the page.
A badge that says only what was checked
An ID Verified owner has passed three checks: the document is authentic, a live person is present, and the face matches the document. It is not a registry check, and the copy says so. The API keeps a keyed hash of the national ID number and the document number encrypted with AES-256-GCM. Image and video links, the address and the document's machine-readable zone are stripped before anything is stored, and what remains is wiped after 30 days. The rules that turn a result into approved, rejected or sent to a person live in one file, and the flow has no confidence score.
A listing cannot go up half-checked
Submitting from the app fails on the server until the listing has an ownership document, a live reference photo and a decision on permits. After that it waits for review: draft, ready for approval, online. The reference photo has to be taken live, on site, with a location stamp.
An Owner app that fits in three steps
An owner picks one of nine property types: villa, apartment, room, commercial, café or restaurant, office, shop, shell core or land. Then come photos and verification, then publish. A listing can be paused while the property is taken and resumed later, so nobody deletes it and starts again. Renters write in a built-in chat with quick replies and push notifications. Credits pay for real-world services like photography and on-site verification, and they are bought on the website, not in the app.
AI that is checked, with a person at the end
Brokers with many properties can import them instead of retyping each one. An AI model (Claude) rewrites the listing text from the source data, and the model is treated as the untrusted part of the pipeline. Its output has to pass automatic checks first: no broker name leaking through, no filler phrases, a length limit, and highlights that only come from what the source lists. Those checks cannot prove every sentence is true, so a person approves each language before the text is used.
Built to be found, and honest about its numbers
The public pages are server-rendered in English and Bahasa Indonesia, with structured data, sitemaps and an llms.txt for AI assistants. Location pages and guides come from a CMS (Sanity). The guides date their own numbers: a lease price says which listings it was taken from and on which day, and a rent estimate says when it comes from agency asking prices instead of Property Plaza's own listings.
Tech stack
- NestJS 10
- Next.js 14 and 15
- Expo 55 + React Native
- PostgreSQL
- TypeScript
- React 18
- Tailwind CSS
- next-intl
- Google Maps
- React Native 0.83
- React 19
- Expo Router
- NativeWind
- TanStack Query
- Prisma 6
- Redis
- Socket.IO
- AWS S3
- Didit
- Stripe
- Xendit
- Claude (Anthropic API)
- Sanity
- Vercel
- Railway
- Sentry
- Expo EAS
Gallery
The website


The website on a phone



The Owner app
Example data: a demo owner account, not a live one.




Frequently asked questions
Property Plaza is a long-term rental marketplace for Bali. Renters search the website in English or Bahasa Indonesia and message the person behind a listing. Owners list and manage their property in a phone app. Nobody takes a commission on the rent.