Stayo
Stayo runs 105 homes across 18 properties. We rebranded the company, then built everything it runs on: the guest site, the operations console, the backend, the channel manager integration and the iOS and Android apps.
105homes
across 18 properties, on one system
4surfaces
a guest site, a console, a backend, the mobile apps
498commits
across all four since April
The name came first
The company was renamed and rebranded before there was a product to put the name on. Name, mark, palette and a written set of rules, so that everything built afterwards had something to be consistent with.
That order matters more than it sounds. A brand designed after the software is a coat of paint. Designed before it, it decides what the software looks like.
What we built
The side a guest sees: searching, a property page, booking, paying, and what happens after a booking, including changing one and cancelling one.
The side the company sees: the console their managers run the homes from. Properties and units, calendars and availability, bookings, expenses, documents, dashboards, and who is allowed to see what.
The backend both of those run on, the channel manager integration that keeps every listing in step, and iOS and Android apps in the same design system.
What changed
Before this, the business ran on manual processes. Everything now is part of a custom-built system.
| What | Before | After |
|---|---|---|
| Taking a booking | Messages and a phone call | A guest books and pays on the site |
| Knowing what is free | Asking whoever knew | One calendar the console owns |
| What a property costs to run | Kept separately, if at all | Recorded against the property |
| Who can see what | Everyone saw everything | Set by the role a person has |
Everything is built
The guest site, the operations console and the backend are built. So are the channel manager integration and the iOS and Android apps.
All of it shares one API and one design system, so a change to a home, a rate or a booking shows up everywhere at once.
- Role
- Design & Engineering
- Client
- MyHomeStayz
- Platform
- Web & mobile
- Category
- Hospitality, short stays
- Stack
- Next.js, Node, Postgres, Expo
- Status
- Built: web, console, channel manager, mobile apps
Stayo is a curated homestay brand in Hyderabad. Every property is hand-picked and prepared the night before a guest arrives: fresh linens, stocked kitchen, lamp on, a note from the team. One team runs it end to end. It is anti-marketplace by design, one brand rather than a directory of strangers.
MyHomeStayz came to us with a working business and a name they had outgrown. The operation was good; the brand was holding it back. They wanted a new identity and the product to carry it, built together. We rebranded the company to Stayo and built the platform underneath it: the guest-facing web app, the operations tooling that runs the homes, the backend that ties it together, the channel manager integration and the iOS and Android apps.
Pivot & Anchor don't just build what you ask for. They tell you when what you're asking for won't hold up as you grow. They took us off spreadsheets and onto a system my team actually operates on, they deliver ahead of schedule, they work directly with our other vendors, and they treat our operations as their problem to solve.
The product

01 · Book direct
105 homes, booked on Stayo's own site
Guests search the whole portfolio and book it on Stayo's own site. A stay sold here is Stayo's customer, with no marketplace taking a cut.
02 · The price, up front
The price they see is the price they pay
The reserve panel totals the nightly rate, cleaning and taxes as the guest picks dates. Nothing new appears at checkout.
03 · Run the day
The day's work on one screen
Arrivals, departures, rooms to turn over and guests still missing ID, each with the next action beside it. Managers start the day knowing what to do, not asking around.
04 · One calendar
Every channel on one calendar
All 105 homes across 18 properties on one grid. Bookings from Airbnb and Booking.com arrive through the channel manager, so a night sold anywhere closes everywhere.
05 · Know the numbers
Occupancy and revenue, against last month
Occupancy, average rate and revenue per available night, each compared with the period before. The owners see how the business is doing without building a spreadsheet.
What we built
The guest experience
Browse curated homes, search on a map and a list with filters, open a property page with gallery, amenities, reviews, and map, and book it.
The booking flow
Dates, a ten-minute hold so two guests never grab the same night, a Razorpay payment, an instant confirmation, then trips and reviews.
The operations console
Property managers run their homes: properties, rates, availability calendars, bookings, check-ins, revenue, and replies to reviews.
The super-admin tier
Platform-wide analytics, the property and manager rosters, featured curation, users, content pages, and refund processing.
The channel manager integration
Availability, rates and bookings stay in step with the channel manager, so a night sold on another site is closed here too.
The mobile apps
iOS and Android apps built in Expo for search, booking, and reviews, on the same API as the web.
Stayo is one product across three codebases on a shared API.
The web app is Next.js on the App Router, server-rendered so availability and pricing are always live. Maps are Google, payments are Razorpay, and sign-in is passwordless. The visual shift was full too: a new wordmark in DM Sans, the palette pulled from the homes, the copy voice rewritten. The legacy stack underneath kept its names on purpose so the business never stopped running.
The backend is Node and Express on PostgreSQL with Prisma, with Redis for rate-limiting and locks. The piece everything hangs off is availability. Every booking starts as a ten-minute hold, and a single query checks it against confirmed bookings, other live holds, and blocked dates, so the same night can't be sold twice. A job releases expired holds every minute to free the slot again.
Payments run through Razorpay, with Indian GST split into CGST, SGST, and IGST by the property's location, a cancellation policy snapshotted onto each booking, and refunds verified against the live Razorpay API before they post. Sign-in is multi-channel: magic link, phone OTP, Google, or Apple, with Redis-backed lockout against brute force.
Access is role-based across three tiers, guest, property manager, and super-admin, where a manager only ever sees their own homes. Eight scheduled jobs do the quiet work: hold release, booking and checkout reminders, review requests, a daily manager summary with a PDF invoice, and housekeeping. Email runs on AWS SES, files on S3 behind a CDN, OTPs on MSG91, and push on Firebase.
The hard parts
Availability without overbooking
Ten-minute holds, a three-way conflict check across bookings, holds, and blocked dates, and a per-minute release job.
Payments, GST and refunds
Razorpay orders and webhooks, Indian GST, policy-snapshot cancellations, and refunds verified against the live API before they post.
One product, three roles
Hierarchical access where property managers are scoped to their own homes and super-admins see everything.
Passwordless, four ways
Magic link, phone OTP, Google, and Apple on one account model, with Redis lockout against brute force.
The operation, automated
Eight scheduled jobs and a multi-channel notification system keep guests and managers in sync without anyone watching a queue.
Stayo runs on a single, quiet face. DM Sans does everything, from the wordmark down to the smallest caption, across five weights. One typeface, used with restraint, is the whole system.
- DM SansThe whole system
The palette was pulled from the homes themselves. Clay from the floors, sage from the linen, gold from the warm details, and cream as the breathing room around all of it.
- ClayPrimary. CTAs, links, the signature.#A8452F
- SageSecondary accent and soft surfaces.#7A8E72
- GoldWarm details and highlights.#B8943E
- CreamThe page, and the breathing room.#F7F3EE
- InkHeadings and body text.#252320
- LineHairline borders and dividers.#E8E0D6



