Rent in India is still mostly tracked across spreadsheets, notebooks and memory, chased over WhatsApp, and receipted by hand. Most of the software that exists was built for US-style property management — dollar-first, single rent field, no idea what a PG is. So we built RentGable: every property, tenant and rupee in one place, India-first, ready for the world.

This post is about the three design decisions that shaped the product — and the unglamorous engineering underneath them.

Why we built it

The people we built for aren't enterprises. They're independent landlords with a handful of units, PG and co-living operators running shared houses, and small property managers keeping books for several owners at once. Their common problem isn't scale — it's sprawl: no clear picture of who owes what, and a month-end that eats a weekend.

The product goal followed directly: one dashboard for every property, unit and tenant; bills and receipts generated for you; live dues, occupancy and revenue at a glance.

The rate cascade

Most tools give you a single rent field per unit. Real portfolios don't work that way — one building has a different due-day, one room has a discounted rate, one contract negotiated its own electricity terms.

RentGable models this as a four-tier rate cascade: System → Property → Unit → Contract. You set a value once at the system level and override it only where it actually differs. The contract always has the final say at billing time, and a colour-coded source badge on every value tells you exactly where it came from.

Every charge on every bill should be explainable in one glance — that rule shaped more of the schema than any feature request.

The cascade covers rent, due-day, grace period, late fee, electricity, water, cleaning and internet — so utilities flow into bills through the same explainable path as rent.

Room sets for PG & co-living

The PG use-case broke every off-the-shelf data model we looked at. A shared house isn't apartments: it's individual rooms that get rented in groups, and the groups change as tenants move in and out.

Our answer is room sets — group two to five rooms into a set rented as one unit, then merge or break sets on demand. The catch that keeps books clean: sets can only be restructured while the rooms are vacant, and the system enforces it. Allocation flows are guided and conflict-free, per-room or per-set.

GST, receipts and auto-pay

India-first means more than a ₹ symbol. Three things had to be right:

  • GST invoices with gap-free numbering. Tax invoices and credit notes are sequential per fiscal year with no gaps — an accounting requirement, which means invoice creation is transactional and concurrency-safe by construction.
  • Receipts on every payment. Online, cash or bank transfer — every payment generates a receipt automatically, and tenants see the landlord's business name, not ours.
  • E-mandate auto-pay. Rent collection through regulated e-mandates, so the monthly WhatsApp chase becomes a notification the tenant already agreed to.

The boring parts

Under the product is a deliberately unexciting stack: a Vue 3 front-end, a Go back-end, PostgreSQL. Every change is transactional and audit-logged; each account's data is fully isolated; updates sync live across tabs and teammates. Dates render dd-MMM-yyyy by default, and the address model ships data for 250 countries so "India-first" never hardens into "India-only".

There's no native app to install — the whole product is responsive in the browser, which for our users' phones was the honest answer, not the cheap one.

Five lessons

  1. Model the domain, not the demo. Room sets and the rate cascade came from watching real operators, not from a feature matrix.
  2. Explainability is a feature. The source badge on every rate has prevented more support tickets than any FAQ.
  3. Accounting constraints are design constraints. Gap-free invoice numbering forced transactional discipline everywhere — and the product is better for it.
  4. Enforce the rules in the system. "You can only break a room set when it's vacant" is a guardrail, not an error message.
  5. Boring infrastructure ships. Vue, Go and Postgres let a small team build the whole thing without a platform detour.

RentGable is live at rentgable.com — free plan, no card required. If you run rentals and it doesn't fit, we'd genuinely like to hear why.