Before you start
- Web
- dev.stayone.app — one-tap demo cards are on the sign-in screen there, not on dev.stayone.app anymore. No super-admin card.
- Android
- APK 1.0.192, arm64-v8a only — it will not install on an x86 emulator.
- Referrals
- Off until an owner turns it on. Do the owner check first or the resident screens show nothing.
- Data
- dev.stayone.app has its own database, separate from paying PGs — the demo org no longer lives in production.
1.0.192
Current
versionCode 192 · 25 Sep 2026
Exports, a moved-out resident's card, and Super Admin housekeeping
-
EXPORT
PDF/CSV/document exports now download straight to the device on Android
- How
- Export anything as usual. The app asks once for a folder (defaults to Downloads) the first time, then writes straight into it on every export after.
- Expect
- The file lands in your Downloads folder — no share sheet in the way. Falls back to the old share-sheet behavior on iOS, or if the folder permission is ever denied.
-
MOVEOUT
A moved-out resident's card no longer offers Move out / Reset PIN / Invite link
- How
- Open a resident whose lease has ended, the same one showing the "Moved out" badge.
- Expect
- The card still opens. Those three actions are gone — none of them make sense for someone no longer living there.
-
ADMINS
Super Admins can now add and remove each other, through a real screen
- How
- Super Admin → Manage → Admins.
- Expect
- A list of everyone with platform-wide access, an add-account form behind an explicit confirm, and a Deactivate/Reactivate control on every account but your own. Only the platform's original Super Admin can add a new one — accounts created here can see the list but not grant the access themselves.
1.0.191
versionCode 191 · 25 Sep 2026
Added: a 30-day free trial, with automatic reminders and Super Admin controls
-
TRIAL
New organisations start on a 30-day free trial of Pro, automatically
- How
- Super Admin → Manage → Onboarding, or approve an access request — the plan picker now defaults to "Free trial" instead of "Lite".
- Expect
- A newly onboarded owner's org is TRIAL status, Pro plan, 30 days out. Picking Lite/Pro/Max explicitly still works exactly as before.
-
TRIAL
A reminder banner in the last 7 days of a trial or term
- How
- Owner Portfolio, Manager Today, or Settings → Subscription, on an org within 7 days of its end date.
- Expect
- "Your free trial is ending soon" (or "…subscription is ending soon" on a paid plan), naming the date, with a Renew action that opens Contact Support. This banner existed for grace/expired before; the 7-day-out warning was computed server-side but never shown until now.
-
TRIAL
Both Owner and Manager are notified, not just the Owner
- How
- Any subscription event: the 7-day reminder, the grace notice, expiry, or a Super Admin starting/extending/activating/revoking one.
- Expect
- A notification lands for every Owner AND every Manager on the org, each opening their own correct screen (Owner → Subscription, Manager → Today). Previously Manager heard nothing.
-
TRIAL
Super Admin subscription controls — Start Trial, Activate, Extend, Revoke
- How
- Super Admin → any organisation → Controls → the new Subscription card at the top.
- Expect
- Current status and end date, plus four actions: extend by N days, revoke immediately (asks for confirmation — the org drops to read-only right away, reversibly), start a fresh trial (days + plan), or activate a paid plan (with a term, or blank for never-expiring). These endpoints existed before; this is the first screen that calls them.
-
LOCK
Policy change: an unrenewed subscription now stops the app for Tenants too, not just Owner/Manager
- How
- Sign in as a Tenant on an org whose subscription has passed its grace period.
- Expect
- Everything is still readable (rent status, documents, notices), but submitting a payment proof, raising a ticket, or any other write is refused with "…the property's StayOne subscription has expired. Ask the property owner to renew it." Previously a Tenant could keep working normally while their PG's own account was locked out.
Added: browser push notifications (not yet switched on)
-
PUSH
The web app can now receive push notifications, once configured
- How
- Nothing to check yet — this needs five Firebase web values set as environment variables before it does anything (documented in
.env.example). Native Android push is unaffected and unchanged.
- Expect
- Until configured, this is a complete no-op — no console errors, no behaviour change on web.
Fixed: Manager-role sweep
-
MOVEIN
"Move someone in" rejected valid phone numbers starting with 91, and blocked the whole flow
- How
- Manager → Move someone in → Phone → type a real 10-digit number like 9123456780.
- Expect
- Accepted, and Next enables. Before, the number was mistaken for a "+91" country code glued to an 8-digit number and always rejected — the single most-reported blocker from this sweep.
-
NOTICE
Notice "Take down" was a real, unrecoverable delete
- How
- Notices → take one down → tap Undo, any time afterwards (not just before the toast disappears).
- Expect
- The notice comes back on the same id — you can also just re-edit its "Comes down" date directly if you miss the Undo toast. Before, the toast said "Notice deleted" and once it disappeared the notice was genuinely gone.
-
NOTICE
Notice "Comes down" date pre-fills 30 days out, and now says so
- How
- Notices → Post a notice.
- Expect
- The hint under the date fields now reads "Comes down in 30 days unless you change it" instead of implying both fields start blank.
-
CHECKIN
A move-in could show "Completed" while the agreement was still unsigned on the Documents tab
- How
- Manager → Check-in → Sign agreement (the desk-confirm button, not a resident e-signature).
- Expect
- The Documents tab now shows the agreement as Verified immediately, matching the check-in wizard's own "done" state — the two were previously reading two different records.
-
DIAG
Diagnostics no longer risks writing a password/PIN/OTP value to the on-device log
- How
- No repro needed — a general hardening of
logBreadcrumb.
- Expect
- Any logged value under a password/pin/otp/token/secret-shaped key is now written as
[redacted], so a Diagnostics screenshot sent to support is safe to send.
-
PROFILE
Edit Profile told a Manager to "ask your manager" to change their own number
- How
- Manager/Owner/Admin → Account → phone field, once set.
- Expect
- "Contact support to change it" instead. Tenant/Staff still correctly see "ask your manager" — that one was already right.
-
TXTSIZE
Settings → Text size → "Larger" truncated the neighbouring "Compact" option to "Com…"
- How
- Settings → Appearance → Text size → tap Larger.
- Expect
- Every option stays fully readable — this one control no longer scales its own labels by the setting it's choosing.
-
TICKETS
Tickets subtitle described a "Resolve" button that doesn't exist
- How
- Manager/Owner → Tickets, read the subtitle under the header.
- Expect
- "Set status to Resolved to close a request" — matching the actual status dropdown.
-
TASKS
Completing a task in "Your tasks" gave no confirmation
- How
- Manager Today → Your tasks → tick one off.
- Expect
- A toast confirms it, matching every other action on this screen (Task added, Notice posted, Expense logged).
-
CSV
Residents CSV export only exported whatever page was currently loaded on screen
- How
- Residents list on a property with 100+ residents → Export CSV, without scrolling to the bottom first.
- Expect
- The export now pages through the full filtered result before building the file — every matching resident, not just the ones already scrolled into view. The header above the list also now says "Showing X of Y" while more remain to load, instead of just the total.
Fixed: Super Admin sweep
-
PIPE
An onboarding pipeline card could open a completely different PG than the one it named
- How
- Manage → Onboarding, on an organisation that's mid-way through onboarding an ADDITIONAL PG on top of ones it already has.
- Expect
- The card now shows the in-flight application's own property/contact name — what tapping it actually opens — instead of the organisation's name, which could legitimately be a different PG entirely.
-
PIPE
A pipeline card could say "Ready to go live" while the wizard itself refused, for having no rooms
- How
- Manage → Onboarding, on an application marked READY whose property has zero beds.
- Expect
- The card now reads "Ready, but no rooms configured" instead — it re-checks the actual bed count rather than trusting a status that can go stale.
-
SEARCH
Owners search looked broken for the ~2 seconds before it narrowed
- How
- Super Admin → Owners → type into the search box.
- Expect
- A small spinner shows next to the search box while a search is in flight, instead of silently holding the full unfiltered list on screen with no indication anything is happening.
Fixed: Tenant sweep
-
IDCARD
ID card said the QR code "holds no personal details," then described exactly two
- How
- Tenant → ID card, read the privacy note under the QR.
- Expect
- "Scanning it shows very little" — an accurate, narrow claim — instead of an absolute one the very next sentence contradicted.
-
DOCS
Document requests showed "No requests yet" on the Rejected filter even with issued requests on record
- How
- Tenant → Document requests → filter to a status chip with zero matches (e.g. Rejected, when you've only ever had requests Issued).
- Expect
- "None match this filter" instead of the "ask for an NOC…" copy that reads as if you'd never made a request at all.
Fixed: app-wide
-
PLACEHOLD
Placeholder text in every form field was easy to mistake for a real, already-entered value
- How
- Any empty text field, anywhere — e.g. Manager → Move someone in → Full name, showing "Sneha Iyer".
- Expect
- Placeholder text is now visibly lighter/greyed-out. This was app-wide: 168 fields across 48 screens were using the same high-contrast colour as real entered text.
-
RENTDUE
Dashboard's "Rent due" stat card label was cut off mid-word
- How
- Manager Today, default language and text size — the tile next to Occupancy.
- Expect
- "Rent due" fits fully. Hindi and Telugu, previously truncated worse, are shortened to match.
1.0.190
versionCode 190 · 25 Sep 2026
Added: on-device diagnostics, for the crash reports we had no stack trace for
-
DIAG
A "Diagnostics" screen, reachable from the account menu on every role
- How
- Tap your avatar (top-right, any screen) → Diagnostics.
- Expect
-
A list of recent screen-opens and any caught errors, newest first, each with a
timestamp. Copy and Share buttons at the top turn it into text that's easy to
send us. Navigate around a few screens first, then open Diagnostics — you'll
see a "mount <ScreenName>" line for each one.
-
CRASHNET
A silent crash risk in every "+" create menu is now caught instead of taking the app down
- How
-
No repro needed to verify this one — it's a safety net for the "app crashes on
Move someone in" report, which reaches "OnboardTenant" through this exact menu
on the Owner's Portfolio and Manager's Today screen.
- Expect
-
If a "+" menu action ever fails again, the app now stays open instead of
crashing, and a "<label> threw" entry appears in Diagnostics with the
error — previously this class of failure had no visible trace at all, just the
app closing.
1.0.189
versionCode 189 · 25 Sep 2026
Fixed: payment-proof screenshots that could never load
-
H1
An SVG "screenshot" is refused, not silently broken
- How
- Resident → Pay → I've paid → attach a file that is actually an SVG (a browser's
accept="image/*" lets one through, and it previews fine in a browser).
- Expect
- Refused at pick time on web, and refused again on submit either way (checked on the real bytes, not the file's claimed type): "attach a photo (JPEG, PNG, GIF or WEBP)".
-
H1
Manager can tell a broken file from a network hiccup
- How
- Manager/Owner → Money in → Approvals → open a claim whose screenshot predates this fix and fails to load.
- Expect
- "This file was attached, but it isn't a photo the app can display… ask the resident to resend it" — not "try again".
-
UPI
UPI isn't offered with nowhere to send it
- How
- On a property with Property settings → Where residents pay left "Not set", Resident → Pay → I've paid.
- Expect
- UPI is not in the method chips at all, and the form defaults to Cash. Set a UPI id on the property and UPI reappears, selected by default.
Fixed: deposits and dues
-
H2
A deposit shortfall is no longer labelled "Rent due"
- How
- Resident → Home, with rent fully paid and a deposit still owed.
- Expect
- The headline says "Amount due", not "Rent due". It only ever says "Rent due" when the whole figure really is rent.
-
H3
A brand-new move-in isn't OVERDUE on day one
- How
- Move a resident in a few days after the property's configured rent-due day; Manager → Rent → find their row.
- Expect
- Their prorated first bill carries the same grace window everyone else's bill gets, counted from their own move-in date — not OVERDUE within 48 hours.
-
M4
An unbilled deposit no longer reads "all clear"
- How
- Owner → Residents → a resident whose deposit was agreed at move-in but never raised as a charge.
- Expect
- "Outstanding" reflects the unbilled deposit — it no longer sits at ₹0 beside "Deposit held ₹0 of ₹X agreed".
-
M3
Dues-ageing and the Rent & Dues total are reconciled
- How
- Owner → Reports → Financial, on a property with an unpaid deposit; compare against Owner → Manage → Rent & deposits due.
- Expect
- The Dues page is titled "Rent & deposits due". Under the ageing chart, a line reads "+ ₹X in unpaid deposits, not aged here" — the two totals now visibly reconcile instead of silently disagreeing.
-
PAYOUT
Net payout no longer hides a skipped payroll run
- How
- Owner → Portfolio, on an org where payroll wasn't run for a past month (not just unpaid this month).
- Expect
- A line under the payout reads "₹X of that is from before this month — payroll wasn't run", in addition to the existing "not yet marked paid" note.
Fixed: move-ins and occupancy
-
H4
A cancelled move-in can no longer claim it freed an occupied bed
- How
- Owner → Manage → Move-ins, on any move-in the 48-hour stale-hold sweep would previously have wrongly cancelled after the resident had actually moved in.
- Expect
- No cancelled record survives for a bed a live tenancy occupies — it's filed as the completed move-in it was instead. (A startup repair fixes any existing bad rows the first time this build's server runs.)
-
M1
Vacant-bed count agrees across screens
- How
- Owner → Portfolio vs. Owner → Reports → Occupancy vs. Owner → Manage → Rooms & beds, on a property with a bed reserved for an in-progress check-in.
- Expect
- Portfolio now shows "N free · M reserved" using the same counts the other two screens already used — no more off-by-the-reserved-count gap.
-
M2
"Occupied" means the same bed count everywhere
- How
- Owner/Manager → Rooms & beds room-type view vs. its "Manage rooms" bed grid, on a property with residents on notice.
- Expect
- Both headers now read the same occupied count, with the on-notice part named — no more two different numbers one tap apart.
Fixed: reports
-
M6
Occupancy report's "Compare to previous period" stops faking "no change"
- How
- Owner → Reports → Occupancy tab → Compare to previous period.
- Expect
- Occupancy%, vacant beds and vacancy cost no longer show a delta at all (there's no historical snapshot to compare against honestly). Churn keeps its real up/down, because that one is genuinely window-based.
-
REV
"vs last month" agrees between Portfolio and Reports
- How
- Owner → Portfolio's revenue delta pill vs. Owner → Reports → Financial, left on its default range.
- Expect
- Reports now defaults to a "This month" preset with the same calendar-aligned baseline Portfolio uses — the two percentages no longer disagree on the same morning.
-
CHART
The Financial chart's legend matches its bars
- How
- Owner → Reports → Financial → the monthly bar chart.
- Expect
- Legend describes the bars as collected-by-month split into net income/expenses/platform fee — not "Net income / Expenses" over what are actually collection totals.
-
TODAY
Manager dashboard no longer mixes "today" and "this cycle" in one card
- How
- Manager → Today, top card.
- Expect
- "Collected today" and the cycle-to-date % are now captioned separately — "₹0 collected today" no longer sits directly above "76% collected" with nothing telling them apart.
Fixed: onboarding and Super Admin
-
H5
A PG can't go live with zero beds
- How
- Super admin → Onboard, on an application at "Go live" whose room types were deleted again after Step 2 (so Inventory reads 0 rooms · 0 beds).
- Expect
- The Activate button is replaced by a red card: "No rooms are configured… go back to Step 2." The server refuses the same activation outright even if called directly.
-
M8
Onboarding counts agree across Overview, Pipeline and the wizard
- How
- Super admin → Overview's "Onboarding: N" tile vs. → Onboarding (pipeline list) vs. → Onboard's own "In flight" list, with an org that already has an owner and a property but hasn't pressed Go Live.
- Expect
- All three now count it. The pipeline list shows it with the wizard's own step label and opens straight back into the wizard to resume.
-
INVITE
An old owner invite link stops working once a new one is issued
- How
- Issue an owner invite link, then issue a second one for the same organisation without the first being accepted. Open the first link.
- Expect
- "This invite link is not valid any more" — only the newest link previews or accepts.
-
AUDIT
Audit filters find the actions they claim to
- How
- Super admin → Audit → filter "Payments", after a resident's payment proof was approved (not collected at the desk).
- Expect
- The approval shows up under Payments — filters now match a family of related action codes, not one exact code each.
-
M7
No more phantom "plan changed" entry the app couldn't have produced
- How
- Fresh-seed a demo org and check Super admin → Audit for an "Update subscription" row attributed to an owner.
- Expect
- It's gone — no code path lets an owner change their own plan, so the seed no longer claims one did.
-
REJECT
Rejecting an access request asks for confirmation, like Approve
- How
- Super admin → Access requests → Reject on any pending request.
- Expect
- A confirm dialog appears before it fires, showing the reason and that the applicant isn't notified by StayOne. Approve now offers the same plan picker direct onboarding uses.
-
L7
Audit log shows the app's own role name
- How
- Super admin → Audit, on any row whose actor holds the property-scoped owner-level role.
- Expect
- Reads "… (Property Owner)", not the raw "(ADMIN)" enum.
Fixed: public listing
-
LIST
A gender-policy conflict is surfaced, not silent
- How
- Owner → Listing, on a property whose listing says Men/Women only but whose current residents include the opposite recorded gender.
- Expect
- A warning line names how many residents contradict the policy. Nothing is enforced or changed automatically — a resident's gender stays optional.
-
LIST
The listed "from" price follows real vacant-bed rent
- How
- Raise rent on a property's cheapest room type, then check its public listing price.
- Expect
- The advertised price now follows the cheapest currently-vacant bed live — it no longer sits on a stale typed figure.
-
LIST
Seeded reviews no longer read as residents' own
- How
- Open any demo property's public listing page and its reviews.
- Expect
- Seed-written reviews are hidden from the public page and from the star rating/count; nothing was deleted.
Fixed: polish and a crash
-
CRASH
A move-in/move-out empty state no longer misfires
- How
- Owner/Manager → Move-ins, with no move-ins yet → "Move someone in".
- Expect
- Opens the move-in wizard normally. (Previously the button called
navigation.navigate with no navigation in scope — harmless on web, a crash on the phone app.)
-
MOVE
Move-ins/Move-outs name the property when the list spans several
- How
- Owner with more than one property → Manage → Move-ins / Move-outs, viewing "All properties".
- Expect
- Each row shows which building it belongs to. A single-property owner or a manager sees no change.
-
PICK
The property picker stops defaulting to whichever test PG sorts first
- How
- Sign in fresh (no remembered property) on an org with a near-empty test property and a real, populated one.
- Expect
- Buildings screens open on the property with the most residents, not just "the first one with any beds".
-
DEL
"Delete this property" has its own guarded section
- How
- Owner → Property settings, scroll to the bottom.
- Expect
- Delete sits alone in a red-edged card at the very end of the page, away from Rename — no longer a red link between two ordinary rows.
-
TIX
"N document requests pending" matches the rows under it
- How
- Owner → Tickets, with every document request already Issued.
- Expect
- The header count reads 0 pending, not a stale total of every request ever raised.
-
ICON
A rejected payment notification stops wearing a green tick
- How
- Resident → Home, after a manager rejects a payment-proof claim.
- Expect
- The notification shows a red ✕, matching the rejected badge on the Pay screen — not the green checkmark used for approvals.
1.0.188
versionCode 188 · 24 Sep 2026
Fixed: layout, names and money
-
RENT
The rent-collection row no longer stretches into a wall of blank space
- How
- Manager → Rent, on a resident with an unpaid move-in deposit.
- Expect
- The deposit's method chips and "Take part of the deposit" link sit directly under the label, stacked — not spread across a near-empty card with the row's buttons pushed to the very bottom.
-
REFER
A referred resident's name isn't shown twice
- How
- Owner/Resident → Refer a friend → Who has been referred.
- Expect
- The avatar shows initials (e.g. "TR"), not the full name wrapped into the circle next to the same full name as the title.
-
ADMIN
"Admin" is named "Property Owner" everywhere it's shown
- How
- Owner → Team → Invite staff role picker; the invited person's own account menu.
- Expect
- Reads "Property Owner", not "Admin" — the capability (owner-level access scoped to one property) is unchanged, only the label.
-
TEAM
Invited staff show up on the Team screen
- How
- Owner → Team → Invite staff (not Add staff) for a manager; come back to Team.
- Expect
- They appear under "Invited, no payroll record". Headcount stays payroll-only, so it doesn't change.
-
MOVEOUT
A resident who owes money at move-out can be settled, not just written off
- How
- Manager → Notice period → settle a move-out where the deposit doesn't cover what's owed → "Collected from them?".
- Expect
- Pick Cash/UPI/Bank transfer and an amount; "Settle and move out" then succeeds instead of only offering "Move out anyway" to write the balance off.
-
VACANT
A rent rise reaches vacant beds too
- How
- Owner → Rent → Bill all with a rent increase, on a property with at least one vacant bed.
- Expect
- The confirmation note mentions vacant-bed prices going up too, and the vacant bed's listed rent (what the next move-in will be quoted) reflects the raise — not just active tenants' bills.
1.0.187
versionCode 187 · 24 Sep 2026
New: lock-in period on agreements
-
LOCKIN
Set it per property
- How
- Owner → Property settings → Lock-in period → Edit → 6 → Save.
- Expect
- Shows "6 months". 0 shows "None". 25 or more is refused with "Enter 0 to 24 months".
-
LOCKIN
Printed on the agreement
- How
- Open/download a resident's agreement for that property.
- Expect
- "Lock-in Period: 6 months" (was always "None").
-
LOCKIN
Frozen at signing
- How
- Resident signs the agreement; then the owner changes the lock-in to 12.
- Expect
- The signed agreement still says 6 months. Unsigned agreements show the new value.
1.0.186
versionCode 186 · 24 Sep 2026
New: Waiting on you (owner home)
-
WAIT
One list of what needs you
- How
- Owner → Portfolio, with a pending payment proof, a join request, a letter escalated to you, a resident asking to withdraw notice, or a deposit owed back.
- Expect
- A "Waiting on you" card lists each with its count, e.g. "2 payments to check", "1 resident asking to stay", "1 deposit to refund".
-
WAIT
Each row opens the right screen
- How
- Tap each row.
- Expect
- Payments → Payments to check; letters → Tickets; join requests → Join requests; asking to stay → Notice period; deposits → Residents.
-
WAIT
Gone when empty
- How
- Clear every queue.
- Expect
- The card disappears.
1.0.185
versionCode 185 · 24 Sep 2026
New: photos on requests
-
PHOTO
Add photos when raising a request
- How
- Resident → Requests → describe the problem → + Add photo (up to 3) → Send.
- Expect
- The thumbnails show before sending; tap one to remove it. After sending, the request in the list shows the photos.
-
PHOTO
Staff see them
- How
- Manager → Tickets, and Owner → Tickets → open the request.
- Expect
- The photos show under the description; tap one to enlarge.
-
PHOTO
Limits
- How
- Try a 4th photo.
- Expect
- The Add photo button disappears at 3.
1.0.184
versionCode 184 · 24 Sep 2026
New: reopen or rate a fixed request
-
TICKET
Rate a fixed request
- How
- Resident → Requests. On a Resolved request, tap a star under "How was it handled?".
- Expect
- "You rated it 4/5 — thank you." The stars go; it can't be rated twice.
-
TICKET
A low rating reaches the owner
- How
- Rate a resolved request 1 or 2 stars.
- Expect
- Owner and manager get "Rated 2/5 · <title>". The ticket row shows a red ★ 2/5 badge.
-
TICKET
Still not fixed? Reopen
- How
- On a request resolved in the last 7 days, tap "Still not fixed?", type what's wrong, tap Reopen request.
- Expect
- It goes back to Open. The manager gets "Ticket reopened · <title>" with your words; the row shows a Reopened badge.
-
TICKET
Limits
- How
- Try on a request fixed more than 7 days ago, or reopened twice already.
- Expect
- The link doesn't show (or the server says to raise a new request).
1.0.183
versionCode 183 · 24 Sep 2026
New: automatic rent reminders (switch: Super admin → Controls → Automatic rent reminders)
-
REMIND
Off by default
- How
- With the switch OFF, wait past a due date.
- Expect
- No automatic reminders. Manual Send reminder still works.
-
REMIND
Due today / 3 days / a week
- How
- Switch ON. Have unpaid rent due today, 3 days ago and 7 days ago (within the hour).
- Expect
- Residents get "Rent is due today" / "Rent is 3 days overdue" / "Rent is a week overdue" with the balance and month, e.g. "₹3,500 for September 2026". Tapping opens Pay.
-
REMIND
Never twice
- How
- Wait another hour.
- Expect
- No repeat for the same stage. Paid bills and moved-out residents get nothing.
-
REMIND
Manual reminder names the amount
- How
- Manager → Rent → Send reminder.
- Expect
- The resident's reminder now says "Your rent of ₹6,000 … is pending".
New: Send on WhatsApp
-
WA
Rent reminder on WhatsApp
- How
- Manager → Rent → open an unpaid row → Remind on WhatsApp.
- Expect
- WhatsApp opens on the resident's chat with the amount and a pay link filled in. You press Send.
-
WA
Invite links
- How
- Create a staff/manager/resident invite (Team, Staff, Move someone in) → Send on WhatsApp.
- Expect
- WhatsApp opens on that person's number with the invite link written.
-
WA
One-time PINs
- How
- Reset a resident's / team member's / owner's PIN → Send on WhatsApp.
- Expect
- WhatsApp opens on their number with the temporary PIN.
-
WA
Super admin links
- How
- Onboard an owner, approve an access request, pending-org invite, StayOne employee invite → WhatsApp.
- Expect
- Opens WhatsApp to the owner/applicant's number; Share link still available.
-
WA
No number / no WhatsApp
- How
- Try on a device without WhatsApp.
- Expect
- The share sheet opens instead.
1.0.182
versionCode 182 · 24 Sep 2026
New: fuller setup checklist
-
SETUP
New owner sees all five steps
- How
- Create a fresh owner account; open Portfolio.
- Expect
- "Getting started 0/2" lists: Add your first property, Set up rooms & beds, then Rent day & how residents pay · Optional, Invite a manager · Optional, Add your residents · Optional.
-
SETUP
Only property + rooms are required
- How
- Add a property and one room with a bed.
- Expect
- The Getting started card goes away, as before.
-
SETUP
Optional nudges after setup
- How
- Right after, on Portfolio.
- Expect
- A small "Finish setting up" card lists the remaining optional steps. Each opens its screen (Property settings, Team tab, Import residents).
-
SETUP
They tick from real data
- How
- Add a UPI ID (or choose cash only), invite a manager, move a resident in; come back to Portfolio.
- Expect
- Each step disappears as it is done; the card goes when all are done.
-
SETUP
Hide
- How
- Tap Hide on the "Finish setting up" card.
- Expect
- It stays hidden on this device.
1.0.181
versionCode 181 · 24 Sep 2026
New: plan grace and bed-limit warnings (only when Billing is on)
-
PLAN
Nothing changes while Billing is off
- How
- With Super admin → Controls → Billing OFF, open Portfolio / Today / Settings → Plan.
- Expect
- No plan banners anywhere.
-
PLAN
80% bed warning
- How
- Billing ON. An org on Lite (50 beds) with 40+ beds → owner Portfolio.
- Expect
- Banner "Nearly at your bed limit — 41 of 50 beds on StayOne Lite (82%)" with "Request StayOne Pro". Tapping it files the request; the banner then says it's under review.
-
PLAN
At the limit
- How
- Same org at 50 beds → try adding a bed or room.
- Expect
- Portfolio banner "Bed limit reached". The refusal on the Beds / Room types screen now shows a Request upgrade button under it.
-
PLAN
Week of grace
- How
- Super admin sets the org's plan end date to 3 days ago (status Active). Owner opens Portfolio, then records a payment.
- Expect
- Banner "Your plan has ended — everything keeps working until <date>". Saving still works. Owner gets one "Your plan has ended" notification.
-
PLAN
Read-only after grace
- How
- End date 8 days ago. Owner tries to save anything.
- Expect
- "read-only because its subscription has expired". Banner "Your account is read-only" with Contact StayOne. Contact support and Request upgrade still work.
-
PLAN
Super admin sees who is in grace
- How
- Super admin → Owners.
- Expect
- The org in its grace week shows a "Grace" badge.
1.0.180
versionCode 180 · 24 Sep 2026
New: undo a payment within 10 minutes
-
UNDO
Undo from the toast (Rent tab)
- How
- Manager → Rent → Collect a resident's rent in cash. Tap Undo on the toast.
- Expect
- "Reversed. Receipt … is void and the bill is owed again." The row shows as unpaid again; the resident gets "A payment was corrected".
-
UNDO
Undo from Record payment
- How
- Manager → + → Record payment ₹7,000 against a ₹6,000 bill. Tap Undo on the toast.
- Expect
- Both receipts are reversed: the bill is owed again and no ₹1,000 advance remains.
-
UNDO
Reverse from the resident's file
- How
- Owner → Residents → open the resident → Payment history. Within 10 minutes of recording, tap Reverse → confirm.
- Expect
- The row is struck through with a "Reversed" badge. After 10 minutes the Reverse button is gone.
-
UNDO
Receipt numbers are never reused
- How
- Collect again after reversing.
- Expect
- A new receipt number is issued; the reversed one stays void.
-
UNDO
Staff limits
- How
- Sign in as staff: reverse your own collection (works), then one recorded by someone else.
- Expect
- The second is refused: "Staff can reverse only money they recorded themselves."
-
UNDO
What cannot be reversed
- How
- Try after 10 minutes; a deposit of a resident who has moved in; money approved from a payment proof.
- Expect
- Each is refused with a plain reason.
-
UNDO
Resident's receipts
- How
- As the resident, open Pay → receipts.
- Expect
- The reversed receipt is not listed and cannot be downloaded.
-
UNDO
Status edits can't bypass it
- How
- (API) PATCH a paid payment's status to PENDING.
- Expect
- 409 "Reverse its receipt instead".
-
UNDO
Audit
- How
- Super admin → Audit → filter Reversals.
- Expect
- Each reversal is listed with who did it, the amount and the reason.
1.0.179
versionCode 179 · 24 Sep 2026
Singular and plural (SO-38a)
-
SO-38a
Beds screen header
- How
- Owner/Manager → Beds on a property with exactly one room and one bed.
- Expect
- Reads "1 bed · …" and in Rooms "1 room · 1 bed" — never "1 beds" / "1 rooms".
-
SO-38a
Portfolio subtitle
- How
- Owner with one property → Portfolio.
- Expect
- "1 property · N beds" ("1 bed" if only one).
-
SO-38a
Manager Today
- How
- Leave exactly one payment awaiting approval; open Today.
- Expect
- "1 payment pending".
-
SO-38a
Room settings
- How
- Owner → Property settings with notice period 1 day; one amenity.
- Expect
- "1 day", "1 amenity".
-
SO-38a
Rooms: create one room
- How
- Beds → Add rooms, one room with one bed.
- Expect
- Preview reads "Creates room 101 with 1 bed — 101-A."
-
SO-38a
Dues header
- How
- Manager → Dues with exactly one resident owing.
- Expect
- "1 of N residents owes something".
-
SO-38a
Tickets header
- How
- Owner → Tickets, chip Open, with one document request.
- Expect
- "… · 1 document request".
-
SO-38a
Expenses
- How
- Owner → Expenses (all properties) with one property; one future-dated expense.
- Expect
- "… across 1 property" and "1 expense is dated in the future (…)".
-
SO-38a
Resident notice
- How
- Resident on a property with a 1-day notice period → My PG → Give notice.
- Expect
- "Your PG asks for 1 day's notice".
-
SO-38a
Bulk import
- How
- Import a sheet with one valid row.
- Expect
- "Import 1 resident?" and "1 resident imported".
-
SO-38a
Telugu wording
- How
- Switch to Telugu; check the Beds/Rooms counts.
- Expect
- Telugu singular forms (గది / బెడ్ / ప్రాపర్టీ) — please confirm the wording with a native speaker.
1.0.178
versionCode 178 · 24 Sep 2026
Dates in words (SO-38b)
-
SO-38b
Rent receipt
- How
- Record a rent payment for this month and open its receipt PDF.
- Expect
- "For September 2026" and the line "Rent · September 2026" — no "2026-09".
-
SO-38b
Discounted rent bill line
- How
- Bill a resident who has a referral discount; open the bill/receipt lines.
- Expect
- The rent line reads "Rent — September 2026".
-
SO-38b
Dues and payment history
- How
- Owner → Dues; Owner → Residents → a resident → payments; Resident → Pay → upload proof.
- Expect
- Each row says the month in words (e.g. "Rent · September 2026").
-
SO-38b
Signed agreement
- How
- Sign an agreement as a resident, then open it in Documents.
- Expect
- "Signed At: 24 September 2026". Older signed agreements also show the day in words.
-
SO-38b
Report PDF
- How
- Owner → Reports → Download PDF (any report).
- Expect
- Subtitle reads "… · 1 September 2026 to 24 September 2026"; month columns say "September 2026".
-
SO-38b
Referral reward notice
- How
- Refer a friend who moves in with the reward starting next month.
- Expect
- The notification says "… comes off your rent from 24 October 2026."
-
SO-38b
Salary expense note
- How
- Mark a staff salary paid; open Expenses.
- Expect
- The note reads "Salary for <name> (September 2026)".
1.0.177
versionCode 177 · 24 Sep 2026
Staff invite card (SO-39)
-
SO-39
The card describes staff access truthfully
- How
- Manager → Manage → Show all → Staff. Read the "Invite a staff login" card.
- Expect
- It says staff can take rent and record payments (issuing receipts), see who owes rent and their phones, sign visitors in and handle tickets, and cannot raise the month's bills or manage staff. No "cannot see rent".
-
SO-39
The name field is labelled properly
- How
- Tap the card to open it.
- Expect
- The field reads "Staff member's full name".
-
SO-39
A staff login really has those rights
- How
- Accept a staff invite on a phone and sign in as that staff member.
- Expect
- Rent tab works (can record a payment); Staff management is not available.
1.0.176
versionCode 176 · 24 Sep 2026
Check-in deposit (SO-38h)
-
SO-38h
Bed chips show the real deposit
- How
- Owner → Room types: set one type's deposit to ₹6,000 and another to ₹0. Manager → Check-ins → open one at the bed step.
- Expect
- Each vacant-bed chip reads "101-A · ₹7,000 · Deposit ₹6,000" (or ₹0). Only rooms with no type show 2× rent.
-
SO-38h
The saved deposit matches the chip
- How
- Pick a ₹6,000 bed.
- Expect
- The check-in's Deposit row shows ₹6,000, not 2× rent.
-
SO-38h
₹0 deposit can be finished
- How
- Pick a bed whose room type has ₹0 deposit and sign the agreement.
- Expect
- A "Complete move-in" button appears (no cash-collection step). Tapping it moves the resident in; the bed shows occupied.
-
SO-38h
A deposit owed still has to be collected
- How
- Pick a ₹6,000 bed and sign.
- Expect
- The button is "Collect ₹6,000 deposit in cash & finish" — the check-in can't complete without it.
-
SO-38h
Move-in wizard unchanged
- How
- Manager → Move someone in → pick a bed.
- Expect
- Deposit prefills from the room type (₹0 stays ₹0).
1.0.175
versionCode 175 · 24 Sep 2026
PIN, never "password" (SO-38d)
-
SO-38d
Wrong current PIN
- How
- Settings → Change PIN. Enter a wrong current PIN and a new one; save.
- Expect
- "That is not your current PIN." — no word "password".
-
SO-38d
Same PIN again
- How
- Change PIN with the new PIN equal to the current one.
- Expect
- "Your new PIN must be different from the current one."
-
SO-38d
Forgot PIN
- How
- Sign-in → Forgot your PIN? as a manager. Then open the owner's notifications.
- Expect
- Sign-in says they'll hand over a one-time PIN. Owner sees "PIN reset requested · … forgot their PIN and needs a reset."
-
SO-38d
Empty PIN at sign-in (API/web)
- How
- Try signing in with the PIN left blank.
- Expect
- Any error says PIN, not Password.
-
SO-38d
Hindi / Telugu PIN placeholder
- How
- Switch language to Hindi, then Telugu. Settings → Change PIN.
- Expect
- Placeholder reads "6 अंक" / "6 అంకెలు" (not "at least 8 characters").
-
SO-38d
Super admin audit log
- How
- Super admin → Audit, after resetting an owner's PIN.
- Expect
- The row reads "Reset PIN · …".
1.0.174
versionCode 174 · 24 Sep 2026
Emergency contact must be someone else (SO-38g)
-
SO-38g
Move-in wizard
- How
- Manager → Move someone in. Type the same 10 digits in Phone and in the emergency contact's "Their phone".
- Expect
- Inline error under Their phone: "This is the resident's own number…". You can't continue until it's changed.
-
SO-38g
Editing a resident
- How
- Owner → Residents → open one → Edit. Set the emergency phone to the resident's own mobile; Save.
- Expect
- Refused with "The emergency contact cannot be the resident's own number". A different number saves.
-
SO-38g
Old residents can still be edited
- How
- Open a resident whose emergency number is already their own (from before this fix). Change only their email; Save.
- Expect
- Saves fine — only a new attempt to set their own number is refused.
-
SO-38g
Join page (QR poster)
- How
- Open the property's join link. Enter the same mobile for yourself and the emergency contact; submit.
- Expect
- "The emergency contact needs to be somebody else's number." Nothing is sent.
-
SO-38g
Bulk import
- How
- Import a sheet where a row's emergency mobile equals the resident's mobile.
- Expect
- The row imports with a warning; the emergency number is left blank.
1.0.173
versionCode 173 · 24 Sep 2026
Demo notices (SO-38e)
-
SO-38e
No notice mentions "Community"
- How
- Sign in as the demo owner. Open Notices; check the Live, All and Expired tabs.
- Expect
- The Independence Day dinner notice (if still listed) reads "Tell the front desk if you are coming". No notice says "RSVP in Community".
Demo test data (SO-37) — no app change
-
SO-37
Cleanup script touches only the demo
- How
- Nothing to test in the app. The cleanup script for E2E Test PG / Testfirst rows now only lists the two demo organisations.
- Expect
- A paying owner's data can never be listed or removed by it. Leftover demo test rows are removed by the owner through the app (archive / reject / revoke).
1.0.172
versionCode 172 · 24 Sep 2026
Reports — open tickets (SO-04)
-
SO-04
Operations report loads for both periods
- How
- Owner → Reports → Operations. Switch between this period and the previous one; tap Try again if shown.
- Expect
- Both load. No "A database constraint prevented this operation".
-
SO-04
Open tickets = everything open right now
- How
- Note the Open tickets figure. Compare with Owner → Tickets → Repairs header "N open of M" (no chip).
- Expect
- Same number, including old tickets raised before the report period. The tile shows no up/down % (it's today's backlog, not a period figure).
Manager — Reports address (SO-36)
-
SO-36
Manager opening /app/reports gets a proper 404
- How
- Sign in as a manager on the web. Type dev.stayone.app/app/reports in the address bar.
- Expect
- "That page does not exist" inside the normal app frame (logo, bell, avatar). No "You do not have permission". Go to the home screen returns to Dashboard.
-
SO-36
Same as /app/payouts
- How
- As the manager, open dev.stayone.app/app/payouts.
- Expect
- Looks identical to the /app/reports page above.
1.0.171
versionCode 171 · 24 Sep 2026
Tickets — one severity scale (SO-33)
-
SO-33
Every owner ticket row shows its severity
- How
- Owner → Tickets. Look at a Medium and a Low ticket.
- Expect
- Each row has a badge: Critical (red), High (amber), Medium, Low — the same words as the chips above.
-
SO-33
Manager and owner use the same words
- How
- Open the same ticket as manager (Tickets) and as owner.
- Expect
- Both show the same severity word.
-
SO-33
New-ticket notification names the severity
- How
- As a resident, raise a Medium ticket in Internet. Check the manager's/owner's notifications.
- Expect
- Title reads "New ticket · Medium · Internet".
-
SO-33
Header count matches the chip
- How
- Owner → Tickets → Repairs, tap High (or search a name).
- Expect
- Header "N open of M" counts only High tickets — both numbers from the same list.
-
SO-33
Document count says pending ones only
- How
- Owner → Tickets → All, no chip.
- Expect
- Header ends "… K document requests pending" — only requests still waiting, not issued/rejected ones.
-
SO-33
Reports use the same words
- How
- Owner → Reports → tickets by severity.
- Expect
- Critical / High / Medium / Low, same as the ticket screens (also in Hindi and Telugu).
1.0.170
versionCode 170 · 24 Sep 2026
Money
-
SO-32
Paying more than the month's rent becomes credit
- How
- Record payment → a resident with ₹6,000 rent due → enter ₹7,000.
- Expect
- A confirmation first ('More than one month's rent?'). The toast: '₹6,000 settled … ₹1,000 extra kept as credit for the next bill', each with a receipt. The resident file shows 'Advance credit ₹1,000'.
-
SO-32
Credit comes off the next bill
- How
- Rent → Bill all for the next month.
- Expect
- That resident's bill is ₹5,000, with lines 'Rent ₹6,000' and 'Paid in advance −₹1,000'. If the credit covers a whole month, the bill shows as paid.
-
SO-32
Credit at move-out
- How
- Move out a resident who still has credit.
- Expect
- The panel shows 'Advance rent held'; it pays what is owed before the deposit, and anything left is added to the refund owed.
Tickets
-
SO-35
Old tickets' tasks close
- How
- Manager → Today → Your tasks.
- Expect
- Tasks for tickets that were already resolved (e.g. 'Ticket: Rent amount is very high') are gone. Resolving a ticket closes its task.
1.0.169
versionCode 169 · 24 Sep 2026
Move-in and move-out
-
SO-06/07
Move-out settles on screen first
- How
- Manager → Notice → a resident leaving → Move out. Add a deduction, tick the unserved-notice charge, pick Cash/UPI refund or Record later.
- Expect
- Rent due, deposit held and the refund/still-owed figure update as you type. After moving out: a 'Final settlement · STO-FS-…' card with View final settlement (PDF) and Record refund.
-
SO-06
Refund owed is tracked
- How
- Owner → Portfolio after a move-out with money owed back. Tap 'Deposit refunds owed', then Record refund.
- Expect
- The amount owed drops by each refund; a part refund leaves the rest owed. The resident file says 'Refund owed' instead of 'Deposit held'.
-
SO-05
Backdated move-in bills every month
- How
- Move someone in dated the 1st of last month (monthly), and another on the 10th of last month at a daily rate.
- Expect
- Rent & dues shows last month and this month for both. A date over two years ago is refused at step 1 (unless 'already living here' is chosen).
-
SO-13
Wizard Done/Cancel always work
- How
- Owner: open /app/move-in directly in the browser, then Cancel (and Done after a move-in).
- Expect
- Lands on the Move-ins list, never stuck on the wizard.
-
SO-03
Resident invite link can be revoked or re-sent
- How
- Residents → a resident → More → Invite link. Revoke; then Send new invite link.
- Expect
- The old link stops working; the new link is shown once to copy. A moved-out or archived resident's link no longer opens.
-
SO-24
An invite only works for the number it was sent to
- How
- Open an invite link; try to change the mobile number.
- Expect
- The number is locked. The page names the property and says 'Resident', not 'TENANT'. Staff invites now require a mobile.
Money
-
SO-08
Deposit collected on its own
- How
- Manager → Rent → a resident with a deposit due → Take part of the deposit → ₹5,000 by UPI.
- Expect
- 'Deposit ₹5,000 paid · ₹X due'. The rent row stays Unpaid. The confirmation names the deposit and the amount.
-
SO-31
New receipt numbers
- How
- Collect any payment.
- Expect
- Receipt looks like STO-AB12CD-240926-1001 — this organisation's own book, restarting at 1001 each day. Older numbers are unchanged. A paid due can no longer be deleted.
-
SO-31
Every receipt on the resident file
- How
- Collect a month in two part payments, then open the resident's file → Payment history.
- Expect
- Two lines, each with its own receipt and amount.
-
SO-29
Payouts
- How
- Super admin → Switchboard → turn on 'Automatic payouts'. Owner → Payouts later.
- Expect
- Closed months with money in them appear as statements; the header counts settled and not-yet-settled separately.
-
SO-30
Wages beside the payout
- How
- Owner → Portfolio with staff salaries not yet marked paid.
- Expect
- Net payout tile: 'excl. ₹X wages'. Next payout card: 'Not deducted: ₹X of staff salaries…'.
-
SO-12
Billed vs not raised
- How
- Owner → Portfolio hero card, and Manager → Rent for the same month.
- Expect
- Both use the same month; the portfolio says '₹X of this month's rent not raised yet' when some leases aren't billed.
-
SO-09
Top defaulters
- How
- Owner → Reports → Financial → Top defaulters.
- Expect
- Only overdue money is ranked; nobody shows as '0d overdue'.
-
SO-27
Expenses by month and property
- How
- Owner → Expenses: ‹ › to change month; choose All properties; add an expense dated last month.
- Expect
- It saves into last month and the screen jumps there. A future date is refused. Each row shows a chevron that opens Edit/Delete.
-
SO-28
Report chart part months
- How
- Reports → Custom range starting mid-month.
- Expect
- Part-month bars read 'Aug*' with a note explaining the asterisk.
Counts and dates
-
SO-11
One resident count
- How
- Compare Portfolio occupancy tile, Residents (Living), Reports → Occupancy.
- Expect
- The tile reads '{occupied}/{total} beds · {n} living'; 'living' matches Residents. Occupied + vacant + held = total.
-
SO-10
Indian day just after midnight
- How
- Team screen between 00:00 and 05:30.
- Expect
- 'Present today' is today's roster, not yesterday's.
-
SO-22
On leave
- How
- Owner → Team, and Manager → Staff.
- Expect
- The same people are badged 'On leave' on both, and the owner tile count matches.
Tickets, letters, notices, support
-
SO-18
Staff-only ticket notes
- How
- Manager/Owner → a ticket → tick 'Staff only' → Add note. Then view as the resident.
- Expect
- The resident doesn't see it or get notified. Old notes show a readable date, not 2026-09-19T14:57Z.
-
SO-02
NOC sent to the owner stays with the owner
- How
- Manager → Requests → an NOC → Send to owner. Open it again.
- Expect
- Only 'Revise draft'; the owner is notified to approve. The resident never sees the internal note.
-
SO-19
Letter reference
- How
- Issue a letter; open the resident's Documents.
- Expect
- 'Issued on 24 September 2026 · reference LTR-XXXXXXXX' — the same reference as on the PDF.
-
SO-23
Rental agreement card
- How
- Documents → a rental agreement. Download it.
- Expect
- The card lists rent, deposit, start, notice, lock-in and licensor; the PDF shows the current name and a single city.
-
SO-17
Old notices
- How
- Resident → Notice board.
- Expect
- August's 'No water tomorrow' and the 15 Aug dinner are gone. A new notice without a date expires in 30 days.
-
SO-26
Support is a conversation
- How
- Help → a past request → Add a reply. Super admin → Support → search SUP-XXXXXX.
- Expect
- Replies are kept in order; replying reopens a resolved request; the desk finds it by reference.
Other screens
-
SO-01
Free while billing is off
- How
- Owner → Settings → Plan / Subscription.
- Expect
- 'Free for now — no plan limits apply'; no Expired badge.
-
SO-15
Mess ratings
- How
- Owner with several buildings → Mess → ratings card.
- Expect
- Asks which kitchen instead of an error; the owner can edit the menu.
-
SO-16
Gate
- How
- Gate with a visitor signed in over 12 hours.
- Expect
- 'Still inside?' filter and a headline saying how many to check; Load more beyond 50.
-
SO-25
Access requests
- How
- Super admin → Access requests with a number that already has an account.
- Expect
- 'This number already has a StayOne account (Owner)…' before approving.
1.0.168
versionCode 168 · 23 Sep 2026
Super admin — suspension (SO-40, Critical)
-
SO-40
Suspending an owner locks out their whole organisation
- How
- Super admin → Owners → an owner → Suspend owner → choose Everyone, add a reason → Suspend. Then try to sign in as that org's owner, manager, staff and a resident.
- Expect
- All four are refused. Before this, only the owner was — the manager and residents signed in as normal. The toast says how many people were signed out.
-
SO-40
People already signed in are stopped too
- How
- Sign in as the manager on one device. Suspend the org from another. Tap anything on the manager's device.
- Expect
- Signed out on the next tap — not left working until their session expires.
-
SO-40
"Staff only" leaves residents alone
- How
- Suspend with Staff only. Sign in as the manager, then as a resident.
- Expect
- Manager, staff and owner refused; the resident still gets in and can pay rent.
-
SO-43
A suspended account is told why
- How
- While suspended, sign in with the correct PIN. Then with a wrong one.
- Expect
- Correct PIN: "This account is suspended… Reason: <your reason>". Wrong PIN: the ordinary wrong-PIN message — it must not reveal the suspension.
-
SO-40
Reactivating brings everyone back
- How
- Reactivate the owner, then sign in as each of the four again.
- Expect
- All four get in. A resident who was moved out stays moved out — reactivation does not undo that.
-
Demo
The demo org is open and on the right plan
- How
- Sign in with the demo owner card (Meera), then Settings → Plan.
- Expect
- Meera is no longer suspended. The org is on StayOne Max (it runs ~396 beds), with no "Expired".
Money
-
Bug
Recording a payment no longer says "ReceiptNumber already exists"
- How
- Manager → Record payment → ₹20,000, Rent, Cash → Record. Do it three or four times in a row.
- Expect
- Each one records, with receipt numbers that go up by one. Old gaps from earlier in the day stay — those receipts are already printed.
Owner and manager
-
Referrals
Starting a referral offer is one screen, one button
- How
- Owner → Refer a friend → pick a building with no offer. Type an amount, or tap ₹500 / ₹1,000 / ₹2,000. Pick when it is paid. Tap Start offer.
- Expect
- The button reads "Start offer — ₹X per friend" and switches the offer on in one tap. Typing "1,500" gives 1500, not an error.
-
Referrals
A manager is never shown a button that will fail
- How
- As a manager, open Refer a friend at a building where the owner has not set an amount. Then at one where they have.
- Expect
- No amount: a sentence saying the owner sets it. Amount set: Start / Pause works.
-
UI
Revenue chart labels no longer overlap
- How
- Owner → Portfolio → Revenue · last 6 months. Tap the tallest bar.
- Expect
- The tallest bar's figure sits under the header, and "Sep · ₹…" in the header is fully readable.
1.0.167
versionCode 167 · 23 Sep 2026
Resident
-
UI
The Refer tile fits on screen
- How
- With the offer on, open the resident home on a phone-width screen.
- Expect
- The gift tile Refer wraps to a second row, fully visible. It was cut off the right edge before. Switch the offer off, reload — the tile is gone.
1.0.166
versionCode 166 · 22 Sep 2026 · 1 feature, 27 fixes
New — Refer a friend
-
Owner
Set up the offer
- How
- Owner → Referrals. Set a fixed amount or a percentage with a cap, a yearly limit, and qualifying days. Switch it on.
- Expect
- A manager can switch it on and off but cannot change the amount. Switching on with no amount set is refused.
-
Resident
The referral screen
- How
- Resident home → Refer.
- Expect
- A rupee figure computed from that resident's own rent, how many more this year, share and copy link, their code, and New link. Two residents on different rents see different figures; the cap holds.
-
Resident
When the offer cannot run
- How
- Turn the offer off, or fill every bed, or pause join requests, or use up the yearly limit.
- Expect
- Each of the four gets its own sentence saying why — never a missing button.
-
Public
The shared link
- How
- Open the copied link in a browser. Then strip the
?ref= and reload.
- Expect
- With the ref: "<Name> referred you." Without it: nobody named. A code from another property is ignored.
-
Manager
The friend applies
- How
- Fill the join form from the referral link, then open Join requests.
- Expect
- One queue row, tagged with who referred them. No tenancy, no held bed, no discount — staff still pick the bed and the rent.
-
Manager
Approving freezes the reward
- How
- Approve the request, then change the programme amount.
- Expect
- The earned reward does not move. The referrer is notified. It is payable only after the qualifying days.
-
Money
The credit reaches the rent bill
- How
- After the qualifying days, run Bill all. Then run it a second time.
- Expect
- The bill shows two lines — rent, and the negative credit — adding to what is owed. The second run must not discount again. A reward bigger than one bill carries forward.
-
Manager
Rewards that are not earned
- How
- Decline a referred request. Separately, move a referred friend out inside the qualifying stay. Separately, withdraw a reward with a note.
- Expect
- Decline closes it. A leaver withdraws only the unapplied part — money already discounted is not clawed back. A withdrawal notifies the resident.
Money and rent
-
SO-32
A payment settles the dues that exist
- How
- Find a resident with a ₹6,000 due. Record a payment of ₹7,000.
- Expect
- The ₹6,000 closes; ₹1,000 becomes its own labelled row. Oldest due settles first; a named period beats age. The toast says which happened. The resident picker names the building.
-
SO-31
Receipt numbers have no gaps
- How
- Collect three payments in a row and read the receipt numbers.
- Expect
- Contiguous — it was 1001, 1003, 1005. Old
PAN-/PGD-/STO- prefixes stay as they are.
-
SO-09
Top defaulters
- How
- Open the report with a resident three months behind and another owing one larger month.
- Expect
- Summed per person, so the three-month debt ranks above. Age comes from their oldest unpaid bill.
-
SO-05
A backdated move-in owes every month
- How
- Move a resident in with a start date two months ago. Then try a date four years ago.
- Expect
- Every month billed — first prorated, rest whole, each on the property's due day. Over two years back is refused with a reason. Daily-rate leases bill one cycle.
-
SO-08
Collect deposit asks first
- How
- Tap Collect deposit.
- Expect
- A confirmation naming the amount, and the method is a choice — not cash on one tap.
-
SO-30
Net payout names unpaid salaries
- How
- Owner → Payouts, at a PG with unpaid staff salaries.
- Expect
- "Before ₹X of unpaid staff salaries". It names them; it must not deduct them.
-
SO-12
Expected vs billed
- How
- Open the rent screen before running Bill all, then after.
- Expect
- While they differ: "₹X billed so far · ₹Y not raised yet". Once they agree, no breakdown.
-
SO-11
Bed counts add up
- How
- Start a check-in to put a bed in RESERVED, then read the bed counts.
- Expect
- Occupied + vacant + reserved = total, with reserved named.
-
SO-06
A deposit is not revenue
- How
- Note monthly revenue and net payout. Collect a ₹12,000 deposit. Read both again.
- Expect
- Neither figure moves.
Moving in and out
-
SO-07
A move-out that settles
- How
- End a tenancy with named deductions, choose to charge the unserved notice, and record the refund.
- Expect
- Deductions and notice are taken before the deposit is applied. The refund is a row with method, date and reference. The arithmetic is itemised. The refund does not count as revenue.
-
SO-13
"Done" after a move-in
- How
- Open
/app/move-in directly (reload or deep link), finish it, press Done.
- Expect
- Lands on the move-ins list. Cancel is always shown.
-
SO-38
Deposit comes from the room type
- How
- Move a resident into a room type with a set deposit, then one set to ₹0.
- Expect
- The room type's figure prefills, and ₹0 is honoured. Two months' rent only where no room type is set.
-
SO-38
Emergency contact
- How
- Enter the resident's own number as their emergency contact, on both intake paths.
- Expect
- Refused on both.
-
SO-03
Move-out kills the invite link
- How
- Invite a resident, copy the link, move them out before they accept, then open the link.
- Expect
- Dead. The link is the credential, so this is a security check.
-
SO-24
The invite form knows who it is for
- How
- Open an invite link that carries a name and number.
- Expect
- Both prefilled, number read-only — an invitee must not be able to type someone else's.
Notices, tasks, expenses
-
SO-20
One leaving date, whoever serves notice
- How
- Same day, serve notice once from staff and once from the resident. Best tested after 6pm IST.
- Expect
- Identical leaving date. It used to differ by a day.
-
SO-21
Withdrawing a notice
- How
- Withdraw a resident's notice from the staff side.
- Expect
- A confirmation naming the resident and saying re-serving restarts the period, and the resident is notified.
-
SO-17
Old notices expire
- How
- Read the notice board for months-old rent-chasing notices.
- Expect
- Hidden, not deleted — wording unchanged, and a manager can clear the date. A notice already dated by hand is untouched.
-
SO-27
Future-dated expenses
- How
- Add an expense dated next January.
- Expect
- Refused. One day's grace for a timezone edge.
-
SO-35
Resolved tickets close their task
- How
- As owner, hand a ticket to a manager. Resolve the ticket. Open the manager's Today.
- Expect
- The task is closed, not still open.
Documents
-
SO-02
NOC: send to owner vs issue
- How
- Handle an NOC request. Try both actions.
- Expect
- The label matches what happens — "Send to owner" no longer issues it. Both routes on screen.
-
SO-23
The agreement PDF
- How
- Download and open the rendered PDF, not the preview.
- Expect
- Carries the notice period and the letting party's name. No "Bengaluru, Bengaluru". Dates match the app.
-
SO-19 · 18
No database ids or UTC stamps for residents
- How
- Open a resident's documents and a ticket with staff notes.
- Expect
- A short quotable reference, and Indian time in words.
-
—
Every tenancy has an agreement
- How
- Open a resident who joined by bulk import, not the check-in wizard.
- Expect
- No "agreement not signed" — they were backfilled.
Tickets and support
-
SO-33
One severity scale, one count
- How
- Open a CRITICAL and a HIGH ticket as manager, then the same ones as owner. Compare the portfolio badge with the tickets header.
- Expect
- Badge, filter chips and the owner's view agree. Both counts match.
-
SO-26
Support you can follow up
- How
- Raise a support request, then reopen the support screen.
- Expect
- Your requests listed newest first, status in plain words, the reply where there is one, and a reference like
SUP-4F2A9C on the confirmation.
-
SO-34
Sheets are not clipped
- How
- Open the ticket status menu on a phone.
- Expect
- All four choices visible, clear of the floating nav bar. Worth sweeping other bottom sheets.
Gate, kitchen, team
-
SO-16
Visitor room list, and long stays
- How
- At a building with 3xx–5xx rooms, sign a visitor in. Then look at one who arrived over 12 hours ago.
- Expect
- Every room listed, not the first 24. The long-stay row says so and asks for a sign-out; it never invents a departure time.
-
SO-15
Mess picks a building per meal
- How
- With several PGs, open Mess and change building between meals.
- Expect
- It follows. It used to stick to the first building picked, with every other reading "Not set".
-
SO-39 · 22
A manager can invite staff
- How
- Manager → Team. Also check "On leave today" against the manager's list.
- Expect
- A card for inviting a staff account, separate from Add staff. On-leave counts both attendance and standing status, counting a person with both once.
Screens and platform
-
SO-04
The Operations report loads
- How
- Open it for several periods, including one with no complaints.
- Expect
- It renders. It used to answer 400 for every period.
-
SO-36
Reports is a clean 404 for a manager
- How
- As a manager, type
/app/reports.
- Expect
- 404 straight away — not a page that draws and then refuses.
-
SO-14
A new property opens on itself
- How
- Add a property, then go to Rooms & beds.
- Expect
- The PG you just created is selected, not the one remembered from last time.
-
SO-25
Owner request from an existing number
- How
- Submit an owner request using a number that already has an account, then open the queue.
- Expect
- Flagged before you approve, not refused at the end. The submitter is told the same thing everyone is told.
-
SO-01
Plan badge while billing is off
- How
- Owner → the plan card, at an org over its tier's bed count.
- Expect
- No tier badge, no over-limit banner, and a line saying plans are not charged or enforced yet.
-
SO-29
Owner edits their own bank
- How
- Owner → Payouts → change the bank details.
- Expect
- Bank name and last four digits only. Plan, platform fee and feature grants stay super-admin-only.
-
—
Indian time
- How
- Use the app after 9pm IST: greetings, "today" figures, day boundaries, collection dates.
- Expect
- All on the Indian day. The server greeted "Good afternoon" at 10pm before.
-
—
Tier names and the invite page
- How
- Super admin: the three screens where plans are approved, access granted and tiers changed. Then open
/invite/:token.
- Expect
- Tier names match everywhere else. The invite page is on the product's current design.
1.0.165
versionCode 165 · 21 Sep 2026 · 3 fixes
Super admin
-
Plans
Onboarding an owner from an older build
- How
- Onboard an owner from an app installed before the plan rename.
- Expect
- It works. The old names (BASIC, ENTERPRISE) are understood; it used to refuse with "Plan must be one of: TRIAL, LITE, PRO, MAX".
-
Plans
The plan picker, and downgrades
- How
- Onboard a PG while billing is off. Then move an owner down to Lite.
- Expect
- The picker is always shown and says what "billing off" means. Every tier can be chosen, in both directions.