● Release notes

What to test, and how

Every build, newest first. One line for what changed, one for how to reach it, one for what you should see.

Current1.0.192
versionCode192
Released25 Sep 2026
APKarm64-v8a

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.

Known — do not raise

Decisions, not defects.