Broz Stays
A homestay company running on WhatsApp threads and a spreadsheet, given the two halves it was missing: a public site guests can actually browse, and an admin panel the team runs the whole catalogue from. We designed both, built both, and put them on a server the client owns.
- Client
- Broz Stays — handpicked homestays across North Bengal & Sikkim
- Scope
- Design, public website, admin panel, database, hosting and deployment
- Shipped
- Live at brozstays.com, run day to day by the Broz Stays team
- Shape
- One Next.js app serving two sites, split by hostname
Somewhere to send a guest
Broz Stays sells places most people have never heard of, so the site has to do the convincing a marketplace listing never does — the valley first, then the house, then the room.
Property pages that answer everything
Each stay carries a gallery, rooms and rates, amenities, meals, house policies, FAQs, a map and what is nearby — the questions guests used to ask over WhatsApp, answered on the page.
Destinations as places, not filters
Cities live at their own paths and group into the circuits guests actually book — the Dooars, the Old Silk Route — so a valley can sell before a specific house does.
Destination-aware search
The hero search knows the region, the cities inside it and every property in each, so a half-typed place name still lands somewhere useful.
Enquiries, not a checkout
Hosts confirm their own rooms, so the site captures a numbered enquiry and hands off to WhatsApp rather than pretending to hold inventory it cannot see.
Host and career lead capture
“List your property” and the careers form — CV upload included — drop straight into the panel’s inbox instead of an email account nobody owns.
Built to be found
Per-property SEO fields, structured data on every listing, and image handling that serves modern formats at the size the layout actually needs.
That is the design the build was signed off from, embedded here because the production site refuses to be framed by another domain. For the real thing, open brozstays.com.
The half the guests never see
Everything on the public site is editable by the people who run it. No CMS licence, no developer in the loop to change a price, and nothing that only works if you remember which spreadsheet tab it lived in.
A sectioned property editor
A property is not one form. It breaks into thirteen sections the team edits independently, so changing a check-out time never risks the gallery.
Image manager
Upload, reorder and pick the cover photo per property and per room. Originals are resized on the server rather than shipped at 3 MB.
Enquiry threads
Every enquiry gets a reference number and keeps its reply history, so any team member can pick up a conversation someone else started.
Reviews held for approval
Guest reviews sit in a pending queue and only reach a property page once someone publishes them.
The site’s own menus, editable
Navigation and footer are a drag-ordered tree in the panel — a new destination goes into the menu without a developer.
Its own subdomain, gated
The panel answers only on admin.brozstays.com, behind a session check that runs at the edge before any page renders. On the public domain it does not exist at all.
A clickable walkthrough of the panel, with sample data — the real one at admin.brozstays.com is behind the client's sign-in, as it should be.
Everything in the sidebar
Overview
- Dashboard — Greets whoever signed in, and leads with what needs answering today.
Inventory
- Properties — The catalogue, and a sectioned editor per property — see below.
- Calendar — A month grid of available, held and blocked days — the front end for a booking engine that is not wired up yet.
- Destinations — Cities, states and the commercial regions they are sold under.
Guests
- Inquiries — Every enquiry as a numbered thread, with the reply history kept on it.
- Reviews — Guest reviews held for approval before they reach a property page.
- Leads & applications — Host sign-ups and career applications, with the CVs downloadable.
Content
- Stories & blog — Write, schedule and publish the journal.
- Subscribers — The newsletter list, exportable.
Site
- Menu editor — The public site's navigation and footer, edited as a drag-ordered tree.
- Categories — Property types and amenity groups.
- Social links — The handles the footer and share buttons point at.
- Settings & account — Site-wide settings, and the admin's own name, email and password.
One property, thirteen sections
- Photos & cover
- Rooms & rates
- Amenities
- Highlights
- Meals
- Activities
- Policies
- FAQs
- Location & map
- Nearby attractions
- Restaurants
- Experiences
- SEO
Each saves on its own, so a half-finished listing is never a blocked one.
One app, one server, no rented pieces
The site, the panel and the database run on a single VPS the client owns, deployed with one command. Nothing here bills per property, per editor, or per page view.
One app, two sites
Middleware reads the Host header and mounts the panel at the root of the admin subdomain. One build, one process, one deploy — and brozstays.com/admin returns a real 404 rather than a redirect that admits the panel is there.
Self-hosted, end to end
PostgreSQL on the same VPS bound to loopback, the app under PM2, nginx in front with a Let's Encrypt certificate covering all three hostnames. No per-seat SaaS bill sitting under the site.
Sessions that hold up
Passwords hashed with bcrypt, an HS256 token in an httpOnly cookie scoped to the admin host, verified in Edge middleware with Web Crypto — so the check happens before a page renders, not after.
Built with
- Next.js 14 (App Router)
- TypeScript
- Tailwind CSS
- PostgreSQL
- Edge middleware
- JWT + bcrypt auth
- sharp image pipeline
- nginx + PM2
- Let's Encrypt
Every page we shipped
Paths are on brozstays.com. Each one is a live link — open it and you are on the running site.
| Page | Path | What it does |
|---|---|---|
| Home | / | Destination-aware search, featured stays and the current season's pick. |
| All stays | /stays | The full catalogue, filterable by destination, property type and guests. |
| Property page | /stays/sisamara-river-view-forest-villa | Gallery, rooms and rates, amenities, meals, policies, FAQs, map and what is nearby. |
| Destinations | /destinations | Cities grouped into the circuits guests actually book — the Dooars, the Old Silk Route. |
| Destination page | /destination/sikkim/phadamchen | One valley: what it is like, when to go, and every stay we have there. |
| Experiences | /experiences | Safaris, treks and village walks the hosts run themselves. |
| Gallery | /gallery | Photography from across the properties, in one grid. |
| Journal | /journal | Travel stories and route guides, written and published from the panel. |
| List your property | /list-your-property | Host lead form — new properties arrive in the panel's inbox. |
| Careers | /careers | Openings, and an application form that takes a CV upload. |
| Wishlist | /wishlist | Stays a guest has saved, kept in their own browser. |
| About | /about | Who Broz Stays are and how the properties are chosen. |
| Contact | /contact | Enquiry form, plus a WhatsApp tap-through to the team. |
Ready to reclaim your time?
Audit your business and discover exactly where you can automate, save hours, and scale without adding headcount.
No spam. Unsubscribe anytime. We typically respond within 24 hours.
