# HostStackHQ for admins and managers

Run your properties from one screen: bookings from every site on one calendar, guest messages on WhatsApp, cleaners on Telegram, owners in their own portal.

- Door codes, guest WiFi, occupancy report and noise alerts are [add-ons](#add-ons), off until switched on.
- Other guides: [supervisors](supervisor.md), [property owners](property-owner.md), [cleaners](cleaner.md), [guests](guest.md).

## Finding your way around

Top bar: **Today**, **Portfolio**, **Calendar**, **Reports**, **Owners**, **Team**, **Setup**, **Help**.

- **Owners** shows only if you manage for other owners. **Reports** shows once a property has the occupancy add-on.
- On a phone: the first four sit at the bottom; **More** has the rest and **Sign out**.
- Your company's name is top right on every page, above your name and the server's version (e.g. `v0.6.13`). On a phone it is at the top of the page.

## First-time setup

### Create your account

Ask for a trial at [hoststackhq.com/trial](https://hoststackhq.com/trial/) (business, name, email, phone, how many properties and where). HostStackHQ creates your company and emails you a link to choose a password. Free for 90 days.

Or, where sign-up is open:

1. On the sign-in page, choose **New to HostStackHQ? Create an account**.
2. Enter business name, your name and email.
3. Answer **Do you manage properties for other owners?** (changeable later).
4. Choose **Email me a link**, open it and choose a password (link works once, for 7 days).

> **No email?** Check spam, or sign up again for a new link.

### Sign in and open Setup

1. First sign-in: set up [two-step sign-in](#two-step-sign-in) (required for admins).
2. Open **Setup**. Tabs: **Properties**, **Company**, **Website**, **Owners and societies**, **Connections** (red number = broken), **Billing**.
3. Follow steps 1–11 below.

**Still to set up** (top of **Properties**) lists what's missing, with links. Each property also shows what it **Still needs** (rooms, a listing, an asset, stock, society fee, arrival instructions). It disappears when done.

### Step 1 — Your company

1. **Company** tab: enter usual check-in/checkout times, and **GSTIN** + registered name if GST-registered.
2. Choose **Save company**.
3. Tick **We manage properties for other owners** if you do.

- New properties copy these times and GSTIN. Changing them later doesn't touch existing properties.
- Unticking hides owner screens; nothing is deleted.

### Step 2 — Connections

**Connections** tab:

1. Check **Connection status**: each calendar link, WhatsApp, email, lock, edge agent and Telegram bot shows "Working" or "Failing since …".
2. Check nothing says **Simulated** (it only pretends). Ask your installer to fix it.
3. **Edge agent** (WiFi, occupancy or noise add-ons) should be seen in the last few minutes.

- **Down** = a calendar link failing for a day, or anything else for an hour. HostStackHQ is told too.
- A failing calendar link usually needs re-copying from the booking site.
- **Company → What's included** lists what your company has. Ask HostStackHQ to add or remove items.

### Step 3 — Owners

Skip if every property is your own.

1. **Owners and societies** → add each owner: name, phone (e.g. `+919876543210`), email.
2. To let one sign in: add their email, choose **Invite link** and send it with the [owner's guide](property-owner.md).

- Owners see reports, assets, upkeep, contracts and improvements, and can raise requests. Never guests, door codes or bookings.
- They get a monthly email with last month's report.
- **Password reset link** sends a new link; **Remove login** stops sign-in.

**Many owners? Use a spreadsheet**

1. **Add owners from a spreadsheet** → **Download the sample file** (`name`, `phone`, `email`).
2. Replace the example rows.
3. Save as CSV (Excel: **CSV UTF-8**; Sheets: **Download → Comma-separated values**).
4. Choose it under **CSV file**.

One bad row (including a duplicate name) adds nothing; the message lists the rows to fix.

### Step 4 — Societies

1. Same tab: add each housing society by name (address optional).

- Names must be unique. A society can be removed once no property is in it.

### Step 5 — Property

1. **Properties** → **Add your property**.
2. Fill in:

| Field | Enter |
| --- | --- |
| Name, Address | |
| **Owner**, **Society** | Or leave "No owner" / "Not in a society" |
| Check-in / checkout | Defaults from step 1 |
| **Arrival instructions** | Keys, gate, parking. Sent to guests the day before |
| **Google Maps link** | Maps → **Share → Copy link** |
| **UPI ID** | e.g. `villaasha@okhdfcbank`, for direct-booking payments |
| **GSTIN**, registered name | If different from the company's |

3. Choose **Add property**. Its page opens; edit later under **Details**.

**Many properties? Use a spreadsheet**

1. **Add properties from a spreadsheet** → download the sample (one row per room).
2. Every row needs `name` and `room`. The property's first row also takes `address_line`, `city`, `state`, `postal_code`, `maps_url`, `arrival_instructions`, `owner`, `society`, `stock_store`.
3. Optional per room: `adults`, `children`, `infants`, `pets`, and `airbnb_ical_url`, `booking_com_ical_url`, `makemytrip_ical_url` (each becomes a listing).
4. Upload the CSV.

- `owner` must already exist. New societies and stock stores are created for you.
- One bad row (or a duplicate property name) adds nothing.

**Assets from a spreadsheet**

1. **Add assets from a spreadsheet** → download the sample.
2. Needed: `property`, `name`, `category` (`air_conditioner`, `appliance`, `electronics`, `furniture`, `kitchen`, `bathroom`, `water`, `electrical`, `other`).
3. Optional: `room`, `make`, `model`, `serial`, `purchased_on`, `warranty_until` (as 2025-04-12), `vendor`, `cost` (with GST; needs `purchased_on`, goes to Spending).
4. Upload the CSV. Add photos afterwards under **Assets**.

### Step 6 — Add-ons

Tick door codes, guest WiFi, occupancy report or noise in the property's form. See [Add-ons](#add-ons).

### Step 7 — Cleaning checklist

1. Property page → **Checklist**.
2. One item per line → **Save checklist**.

Changes apply from the next booking.

### Step 8 — Rooms and listings

**Add a room**

1. Property page → **Rooms**.
2. Add the room and how many it sleeps: **Adults**, **Children**, **Infants** (blank = no limit), **Pets** (blank or 0 = none).

**Add a booking-site listing**

1. Under the room's **Listings**, choose **Site** (Airbnb, Booking.com, MakeMyTrip).
2. Name it, paste its calendar link, choose **Add listing**.

Its bookings then arrive by themselves. A room can have several listings.

| Site | Where to find the calendar link |
| --- | --- |
| Airbnb | **Listings** → listing → **Availability** → **Connect calendars** → **Connect to another website**. Link contains `/calendar/ical/` |
| Booking.com | **Rates & Availability → Sync calendars → Export calendar** |
| MakeMyTrip | Calendar export link in InGo-MMT |

> **Keep calendar links private.** Anyone with one sees your booked dates.

- **Remove** a listing once it has no upcoming stays.

**Sell the whole place too** (e.g. "Whole villa" plus each room)

1. Add the whole-place listing under any one room.
2. Tick the other rooms under **Also sells**.

- A whole-place stay takes every room (one door code, a cleaning task per room).
- Can't be changed later: remove and re-add.

**Sell on your booking website**

1. Add a listing with site **Booking website** (no calendar link needed).
2. Fill in **Name on the website**, **Sleeps**, **Type**, **Bedrooms**, **Bathrooms**, **nightly rate** (with GST), **Amenities**, **Accessibility** (tick only what you've checked), description.
3. Tick **Show on the website** (needs a nightly rate).

**Set prices for some nights**

1. Under the listing, **Prices** → **Show**.
2. Add rules: weekend days, a season, a festival week, or days within dates.
3. Pick a month below to check each night's price.

Dates beat weekdays; the shortest date range wins.

**Add photos**

1. **Photos** → choose up to 20.
2. Add captions (optional).
3. Order with **Earlier** / **Later**. The first is the main photo.

> **Photos are public** once shown on the website.

### Step 9 — Locks

Door codes add-on only: see [Door codes](#door-codes).

### Step 10 — Cleaners

Add them in **Team**: see [Cleaners](#cleaners).

### Step 11 — Website

If your company has the booking website: **Setup → Website**.

1. Fill in name, about text, contact phone and email, cancellation/refund policy, house rules → **Save**.
2. Optional: add a logo (PNG/JPEG, up to 512 KB) and **Brand colour** (dark enough for white text).
3. Tick **Published**.

- Publishing needs a phone, email, cancellation policy and at least one listing shown on the website. The page says what's missing.
- Untick **Published** to take it down.
- **Formatting**: blank line = new paragraph; `- ` or `1. ` = list; `**bold**`, `*italic*`; `[words](https://…)` = link.
- **Your best photo first**: the first photo of your first room (by name) leads the page and link previews.
- **Your own domain**: enter it under **Your own domain** and follow [the DNS steps](../runbooks/company-domain.md).
- **Online payment**: see [Payment on your website](#payment-on-your-website).
- **Share one room**: tap its name on your page and copy the address.
- **What guests say** shows your average rating and up to three comments guests allowed you to quote.

### Payment on your website

If your company has online payment, guests can pay when they book, through **your own Razorpay account**. The money goes straight to you; HostStackHQ never holds it, and Razorpay's fees are yours. Open the Razorpay account and finish its checks with Razorpay first ([how](../runbooks/razorpay-payments.md)).

1. **Setup → Website → Online payment**: paste the **Key id** and **Key secret** from Razorpay (Account & Settings → API keys).
2. Under **Razorpay webhook**, **Copy** the address and add it in Razorpay's **Webhooks**, with the event `payment_link.paid` and a secret of your choosing. Type that secret in **Webhook secret**.
3. **Save keys**, then **Test keys**.
4. Tick **Guests pay when they book**.

- **Book** then holds the room for 20 minutes while the guest pays on Razorpay's page. Once paid, the booking is confirmed and marked paid by itself, and the guest is messaged. Unpaid after 20 minutes, the dates are freed, unless Razorpay shows the guest paid (the webhook didn't arrive) or can't be asked: then it becomes a request on **Today**, with an alert, for you to check Razorpay and confirm or decline.
- A hold being paid shows **Awaiting payment** on its booking page, not on **Today**.
- A payment that arrives after its dates were taken, or after the booking was cancelled, is kept, and **Needs a look** asks you to refund it with **Refund** on the cancelled booking, so the reports don't count it as revenue.
- Saved secrets are never shown again; type a new one to replace it.
- **Is it working?** Setup's connection status lists **Razorpay payments (webhook)** once Razorpay has called it: failing means the webhook secret in Razorpay differs from the one here.
- **Test keys** (`rzp_test_…`) show a warning: no real money moves, so switch to live keys and the live-mode webhook before guests book.
- **Advance**: once payment is on, tick **Let guests pay an advance, and the rest before check-in**, set the **Advance, %** (30 to start) and how many days before check-in the rest is due (3 to start), and **Save**. Guests booking far enough ahead then choose to pay in full or the advance. The advance confirms the booking; its page shows what was received and when the rest is due. The guest gets a WhatsApp reminder on that day (with automatic messages on) and pays from their stay page. Unpaid after it, **Needs a look** tells you; nothing is cancelled. If they pay the rest in cash or by UPI at check-in, tick **Paid** on the booking.
- Untick it, or if Razorpay can't be reached, and **Book** sends requests for you to confirm again.

## Bookings

### Airbnb, Booking.com and MakeMyTrip bookings

They reach the **Calendar** within about 15 minutes, as "Airbnb guest" etc. with "guest details missing".

**Add the guest to every site booking** (or nobody gets arrival messages):

1. Open the booking → **Add guest**.
2. Enter name and WhatsApp number (e.g. `+91 98200 12345`) or email.

- Change dates on the site, not here.
- **Booking.com/MakeMyTrip closed dates** arrive as bookings. Open one → **Cancel booking**.

**Block your dates on the sites** (stops double selling):

1. Property page → **Rooms** → copy the listing's **Import on …** link.
2. Import it on the site:
   - Airbnb: **Calendar → Availability → Connect another calendar**
   - Booking.com: **Rates & Availability → Sync calendars → Import**
   - MakeMyTrip: extranet calendar sync

- Links show dates only, never guest details. Keep them private.
- Other sites: use **For any other site or calendar**.
- Sites read them every few hours, so a double booking is still possible in between.
- A site booking that clashes isn't imported; you get a "Possible double booking" alert. Move or cancel one.

### Direct bookings

1. **Calendar** → tap an empty day in a room's row, or **New booking**.
2. Set room, check-in, checkout, number of guests.
3. Add the main guest (now or later).
4. For a room also sold as a whole place, choose **Only** this room or the whole listing.

**Add a site booking's amount** (so owner revenue is right):

1. Open the booking.
2. Under **Change the booking**, enter **What the guest paid on …** (with GST) → save.

**Take payment by UPI**

1. Under **Change the booking**, enter the **Amount** (with GST) → save.
2. The guest's page shows **Pay ₹… by UPI** (needs a property UPI ID).
3. When money arrives, tick **Paid** → save.

**Issue a GST invoice** (direct bookings with an amount)

1. **GST invoice** → **Issue invoice** (optionally bill a business by name and GSTIN).
2. Confirm. Invoices are final.
3. **Open to print or save as PDF**.

| Rate per room per night | GST |
| --- | --- |
| Up to ₹1,000 | Nothing |
| Up to ₹7,500 | 5% |
| Above ₹7,500 | 18% |

- Numbered per financial year, e.g. `2026-27/0001`. Split equally as CGST and SGST.
- A stay in several rooms (say a whole villa) is rated by its amount per room per night. A website request gets its invoice once confirmed.

> **Check the first invoice with your accountant.**

#### Credit notes

When a booking with an invoice is cancelled, the invoice still shows the full stay. Its **GST invoice** section then says how much of the invoice you didn't keep, with **Issue credit note**.

- It credits the invoice down to what you kept, at the invoice's own rate, split as CGST and SGST.
- Numbered per financial year in their own series, e.g. `CN/2026-27/0001`, and printed with the invoice number and date they go against.
- A later refund leaves more to credit: issue another note.
- Final, like invoices. Issue it within the time GST allows (by 30 November after the financial year ends) and check the first one with your accountant.

### Requests from your website

Without [online payment](#payment-on-your-website), a website request holds the dates at once. It appears on **Today → Booking requests** and you're emailed.

1. Open the request.
2. **Confirm** (becomes a normal booking at the website price) or **Decline** (frees the dates).
3. Tell the guest how to pay.

- The guest is told either way by WhatsApp or email.
- Unanswered after 4 hours: raised again on **Needs a look**. Never auto-declined.
- Requests show striped on the Calendar. Max two waiting per room, three per guest address; a request whose dates have passed no longer counts.
- Declined guests' details are deleted after 3 days. A request never answered loses its guest's details 180 days after its checkout date.

### What happens automatically

Each booking creates a cleaning turnover. Then the main guest gets:

| When | Message |
| --- | --- |
| ~24 h before check-in | Times, arrival instructions, map, door code and WiFi (if add-ons on), link for privacy choices and ID |
| 5 h after check-in | "Is everything all right?" |
| 3 h before checkout | Checkout reminder |
| 2 h after checkout | Rate the stay 1–5 |

- A rating of 3 or less alerts you on **Today**. Airbnb guests rating 4–5 are asked to review on Airbnb.
- **Cancel booking** cancels cleaning and removes door code and WiFi straight away.
- **Refunds**: cancelling a direct booking that has been paid asks how much to refund (all of it to start; 0 for none). What the guest paid by Razorpay goes back through your Razorpay account, newest payment first; anything paid by hand is recorded as refunded, and you give it back yourself. A website guest is told by WhatsApp or email, with the amount. If Razorpay refuses part way, the booking is still cancelled and the message says how much is still to refund. The cancelled booking then says what is paid and not refunded, with **Refund** to try again once Razorpay allows (a refund needs enough balance in your Razorpay account). If a guest pays more than the stay costs (say, twice from two tabs), **Needs a look** tells you, and the booking's amount shows what was paid over with **Refund the extra**: it gives back up to that much the same way and keeps the booking. An issued GST invoice stays as it is; a [credit note](#credit-notes) takes it down to what you kept.

### The booking page

Click any booking on Today or Calendar.

**Needs a look** lists what to fix (each links to the fix): no guest, no contact, missing ID, unpaid, message not delivered, low rating.

**Do this from the booking page**

- **Add guests** / choose the main guest / remove one (deletes their ID).
- **Copy guest link**: send it yourself if they didn't get the message.
- **View ID**: every view is logged.
- **Messages to the guest**: **Not delivered** usually means no WhatsApp; send the link or call.
- **Change the booking**: dates, amount, **Paid**.
- **Confirm** / **Decline** (requests only).

**Report damage**

1. **Report damage** → **What was damaged** + **Notes** → **Raise repair job**.
2. On the job, set a person, due date and payments.

### When a guest writes

1. The guest's WhatsApp reply shows on **Today → Needs a look** (and email).
2. Choose **Reply**, type, **Send**. It goes from the property's WhatsApp number.

- Once answered, it leaves **Needs a look** for everyone.
- Text only: ask guests to send photos or voice notes to you directly.
- Messages from numbers not on a current stay are ignored. Email replies go to the sending mailbox.

## Guest IDs and privacy

- The guest link asks for ID (Indian law) and Form C details for foreign guests. Read them with **View ID**.
- Guests answer privacy choices for ID, plus door code, camera and WiFi where present. They must agree to ID before uploading.
- No answer yet? Send their link again.

HostStackHQ deletes old data automatically:

| Data | Deleted after |
| --- | --- |
| Guests' names, contact details and IDs, ratings | 180 days after checkout |
| Alerts, guest messages, your reply text, door and WiFi records | 90 days |
| Cleaning photos | 30 days |
| Camera clips | 7 days |

To keep a cleaning photo longer, **Download** it before it goes, on Today or on the stay's page (**Cleaning after the stay**); the date it goes shows under the photos. Each download is recorded with who took it.

## Today

Your morning screen. Refreshes every 30 seconds.

- **The week ahead**: arrivals, departures and rooms booked for 7 days. Tap a day to open the calendar.
- **Property** menu (top): show one property only. **Show all** clears it.
- **Needs a look**: guest messages, report flags, noise, low ratings, owner requests, stays that didn't finish setting up. Tap to open; **Dismiss** to clear. Also emailed.
- **Maintenance**: overdue jobs, warranties and contracts ending in 30 days.
- **Stock low**: items to buy.
- **Staying now**: a bar per stay (door use and WiFi devices where add-ons are on).
- **Arriving today** / **Leaving today**: "Add guest details" means no main guest yet.
- **Cleaning**: turnovers from yesterday to tomorrow. Pick a cleaner from the list. **Ready** turnovers have **Show photos**, each with **Download**.

**Calendar** shows three weeks on a computer, one on a phone. Each bar takes its source's colour: blue for direct and website bookings, then Airbnb, Booking.com and MakeMyTrip in their own colours (the legend under the calendar names them). A booking still missing the guest's details is yellow with a dashed edge.

## Portfolio

All properties, one row each: staying now, arriving, leaving, alerts, occupancy last 30 days, booked next 30 days. **Find a property** filters.

### A property's own page

| Tab | Use it to |
| --- | --- |
| **Overview** | See today, upcoming stays and **Sales by listing** |
| **Owner report** | See the month exactly as the owner does |
| **Rooms** | Manage rooms, listings, calendar links and locks |
| **Checklist** | Edit the cleaning checklist |
| **Details** | Edit name, owner, address, times, UPI, GSTIN, instructions, add-ons |

- Managers see Overview and Checklist only.
- **Sales by listing**: stays, nights and revenue per listing for a month. Nights are room nights: a stay in three rooms of a villa for two nights is six. Site stays without an amount are listed. A cancelled direct booking that kept money (say a cancellation fee, after a part refund) adds what it kept to its check-in month, with no stay or nights.

### Profit and loss

Below the list: revenue, spent, profit, occupancy and average a night per property, for a month or the whole year. Site stays count only once their amount is entered. Money cancelled bookings kept is in revenue but not in the average a night. Occupancy and the average a night are per room night, so a whole-villa stay counts every room.

## Spending

Record every payment right after paying:

1. **Photo of the bill**: take or choose a photo.
2. Enter **Amount** (with GST) and **Of which GST** if shown.
3. Choose **What for** (repair, maintenance, consumables, utilities, society, replacement, improvement, purchase, other).
4. Choose **Property**. Change **Paid on** for an older bill (up to a year back). Add **Paid** and **Note** if useful.
5. Choose **Save payment**.

- **Paid** → pick a month to see payments and the total.
- **Remove** deletes a mistake (a record is kept).
- **Download for your accountant**: CSV of payments between two dates (starts 1 April).

> **The owner sees payments and bill photos.** Photograph only the bill.

## Maintenance

Tabs: **Jobs**, **Schedules**, **Assets**, **Stock**, **Contracts**. Supervisors use these too.

### Jobs

**Raise a job**

1. **Raise a job** → **What needs doing** ("AC not cooling").
2. Choose **Kind** (repair, service, replacement, improvement, visit delivered, complaint) and **Where** (a property, or a whole society).
3. Optional: **Asset**, **Under** (contract), **Already done on**, **Due by**, **Who does it**, **Notes**.
4. Choose **Save job**.

- Staff on Telegram get it there and close it with a photo.
- Never put guest names in the title or notes.

**On a job's page**

- **Mark done** / **Open again** / **Change** / **Remove**.
- **Add a photo of the work** (no people; the owner may see it).
- **Add a payment**: bill photo, amount, who was paid. It goes to **Spending**. For a society job, pick the flat.

The list shows **To do** (soonest first, **Overdue** marked). Switch **Show** to **Done** for finished jobs.

### Schedules

Repeating work ("AC service every 6 months"). A job is raised a week before each due date.

**Add a schedule**

1. **Add a schedule** → **What is done**.
2. Choose **Property** and optional **Asset**.
3. Set **Every, in months** and **Next due**.
4. Choose **Who does it** and write a **Checklist** (one item a line).
5. Choose **Save schedule**.

**Add suggested ones**

1. Under **Suggested schedules**, choose the **Property**.
2. Untick what you don't want → **Add ticked schedules**.
3. Open each to adjust the date or **Who does it**.

- Change **Next due** to move the next job. **Stop it** ends a schedule.
- A long-overdue schedule raises one job, not one per missed date.

### Assets

The register of what's at each property (ACs, fridge, geyser, furniture).

**From a template**

1. **Start from a template** → choose **Property** and **Type** (1BHK, 2BHK, Villa).
2. Untick what isn't there → **Add ticked assets**.
3. Open each to add photo, date and cost.

**Add one**

1. **Add an asset** → take a **Photo** (the thing, not people).
2. Enter **Name** and **Kind**.
3. Choose **Property** and **Room** (or **The whole property**).
4. Optional: **Make**, **Model**, **Serial number**, **Bought on**, **Cost** (with GST; needs **Bought on**), **Bought from**, **Warranty until**.
5. Choose **Save asset**. The cost goes to **Spending**.

**On an asset's page** (its **History** lists everything spent and done on it):

- **Change**: edit it.
- **Replace**: record the new one; the old goes out of use.
- **Out of use** / **Back in use**.
- **Remove**: delete a mistake.

- Tick **Show ones out of use** to see retired assets.
- **Download CSV**: the full register for your accountant (no depreciation).

### Stock

Consumables (toiletries, linen, cleaning supplies, tea). Each property draws from one store. Owners never see stock.

**Share stores** (admins): **Stores**

- **Add a store**.
- Choose a store → **Move a property to** it → **Move here**.
- **Remove this store** once it has no properties or items.

**Set up a store**

1. **Add from the usual kit** → untick what it doesn't keep → **Add ticked items**.
2. Or **Add an item**: name, **Used each turnover**, **Low at**.
3. Count each item so the store shows what's on hand.

**Open an item to**

- **Record a purchase**: bill photo, how many, amount, GST, date, paid to. Goes to **Spending** (a shared store's purchase isn't in any owner report).
- **Record a count**: set the number you counted.
- **Move to another store**: the only way stock moves between stores. You can move at most what the store has.
- **History** / **Change item** / **Remove**.

- Each turnover marked ready subtracts its usage automatically.
- **Low** or **Reported low** shows when it's time to buy. Cleaners count on Telegram too ([how](cleaner.md#stock-soap-toilet-rolls-tea)).

### Contracts

Society fees and service contracts (AC, water purifier, pest control). Admins and managers add them; supervisors pay and log visits.

**Add a contract**

1. **Add a contract**.
2. Enter **Who provides it**, **Property**, **It is the society's own fee** (if so), **What it covers**, **From** / **Until**, **Each payment** and how often it's **Paid**.
3. Choose **Save contract**.

**Pay a contract**

1. Open the contract → **Payments** → **Add a payment**.
2. Add the bill photo and amount. It goes to **Spending**.

**Log a visit or complaint**

1. **Log a visit or complaint**.
2. Enter **What happened** and **Kind**. For a society fee, choose **For** this flat or the whole society.
3. Add **Done on** (blank if still open) and **Notes**.

- Open one to add photos, or mark a complaint done.
- **Report for its period** (top of the page) shows paid, services, complaints and time to resolve. **Print** to show the owner.
- **Change** / **Remove** (payments stay in Spending).

## Cleaners

1. **Team → Cleaners** → add name and phone.
2. Send the invite link with the [cleaner's guide](cleaner.md) (works once, for 7 days).
3. When they tap **Start**, they show **Connected to Telegram**.
4. On **Today**, pick a cleaner per turnover → **Save** (one cleaner gets all).

- Cleaners see room, times and checklist; never guest names or door codes.
- **New phone?** **New invite link**.
- **Agency cleaners**: a cleaner who also works for another company on HostStackHQ can use the same Telegram chat for both. Each company sees only its own tasks, photos and stock.
- **Remove** takes them off open tasks; reassign on Today.
- **Cleaning checklists** tab: choose a property, edit, **Save checklist**.

## Owners

Owners' requests (suggestion, question, problem) appear here and on **Today**.

1. Open a request.
2. Type a **Reply** (the owner is emailed).
3. Set **Status** (**Open**, **Planned**, **Done**, **Declined**) → **Save**. Say why when you decline.

> **Never put a guest's name, phone or ID in a reply.**

## Your team

| Role | Can |
| --- | --- |
| **Admin** | Everything, including **Setup** and logins |
| **Manager** | At ticked properties: bookings, guests, IDs, door codes, messages, invoices, cleaning, reports. No Setup or logins |
| **Supervisor** | At ticked properties: turnovers, cleaners, checklists, Spending, Maintenance. No guests or reports. Send the [supervisor's guide](supervisor.md) |

**Add someone**

1. **Team → People** → name, email, role.
2. Send the link (or **Email invite**). It works once, for 7 days.
3. For a manager or supervisor, open **Properties** under their name and tick theirs. They see nothing until you do.

- Change a role: pick it → **Save**.
- New properties aren't ticked for anyone; tick them.
- A red number on **People** counts people who can't work yet.
- **Password reset link** / **Email reset link** for forgotten passwords.
- **Remove** signs them out everywhere.

> **Add a second admin as a backup.**

### Two-step sign-in

Required for admins; optional for others (**Team → Your sign-in**).

1. Install an authenticator app (Google or Microsoft Authenticator).
2. Choose **Set up** and scan the QR code (or type the setup key).
3. Enter the 6-digit code → **Turn on**.

- **Lost the phone?** A **Password reset link** turns it off; set it up again.
- 10 wrong codes in a row locks sign-in until a password reset.

### AI agent access

If HostStackHQ has switched it on for your company, **Team → Your sign-in** has **AI agent access**: connect Claude, ChatGPT or another agent that supports MCP, and ask it about your bookings, cleaning, occupancy and spending.

1. Type a name for the agent (e.g. *Claude on my laptop*) → **Make a token**.
2. Copy the token. It is shown only once.
3. In the agent's settings, add an MCP server with the **Server address** shown on the page, and send the token as `Authorization: Bearer <token>`.

- It acts as you: your role, and only the properties you work at.
- It can read units, bookings, cleaning tasks, cleaners, the occupancy report and spending, and add a direct booking, give a cleaning task to a cleaner, or record an expense. Agents ask you before they change anything; those changes show as made by you, through an agent.
- It never gets guests' phone numbers, emails, IDs, door codes or WiFi passwords.
- **Revoke** stops a token at once. Removing a person, or resetting their access, deletes all of theirs: adding them back doesn't bring them back.
- An agent can make about 5 requests a second; beyond that it is told to wait (429).

## Billing

**Setup → Billing** (admins only).

- **… so far**: this month's bill if it ended now (per property, add-ons, extra WhatsApp messages, GST).
- **Bills**: each month's bill, due date or paid date.
- Free trial: 90 days from when your company was created, unless agreed otherwise; nothing billed until the date shown.
- To pay or query a bill, contact HostStackHQ. Unpaid accounts can be suspended (guests arriving within 7 days still served).

## When something goes wrong

| Problem | Do this |
| --- | --- |
| **Saving… keep this page open** | Keep the tab open until it goes |
| Guest didn't get the arrival message | Check main guest has phone or email; see **Messages to the guest**; send **Copy guest link** |
| "Link not available" for a guest | Copy a fresh link from the booking page |
| Site booking missing | Check the listing's calendar link under **Rooms**; wait 15 minutes |
| A site sold nights already booked | Import the listing's **Import on …** link on that site |
| Booking.com/MakeMyTrip "booking" is closed dates | Open it → **Cancel booking** |
| Cleaner isn't getting tasks | Check **Connected to Telegram**; send a new invite; pick them on Today |
| "Account is suspended" | Contact HostStackHQ. Nothing is deleted |
| Can't sign in, or lost authenticator phone | Another admin sends a **Password reset link**; with none, ask your installer |
| Connections show **Simulated** or **Not set up** | Ask your installer |
| Calendar link failing or **Down** | Re-copy it from the site and paste under **Rooms** |
| "Setting up this stay didn't finish" | Check the stay's door code, WiFi and cleaning; send the guest details yourself if due soon |
| "Not available" page | Not in your plan: see **Setup → Company → What's included** |
| "Something went wrong" | Choose **Reload** |
| "Error 500, reference …" | Retry in a minute; if it repeats, send the reference to your installer |

## Add-ons

Door codes, guest WiFi, occupancy report and noise need equipment, so each is off until ticked.

1. Property page → **Details**.
2. Tick the add-on → save.

- Off means none of its work happens for that property.
- Switching off mid-stay lets current codes and logins run to checkout.
- Not bought? It shows **Not included for your company**; ask HostStackHQ.
- Refused on save? The server isn't connected to locks or a router.
- Installing equipment: [property setup](../runbooks/property-setup.md). Check it under **Setup → Connections**.

### Door codes

Each booking gets its own code, valid check-in to checkout, sent before arrival.

**Add a lock**

1. Property page → **Rooms** → below the rooms, add the lock's TTLock ID and its door.
2. Choose a room's door (its guests only) or a shared door (every guest).

- **Show door code and WiFi** (booking page): when a guest calls. Logged.
- **Door** (booking page): every opening around the stay.
- **Today → Lock batteries**: change any showing low.
- Code says "None yet"? The room has no lock; add one.

### Guest WiFi

Each booking gets its own WiFi login, valid check-in to checkout, sent before arrival.

- Today's stay bars show devices on WiFi. A stay whose guest said no to WiFi in their privacy choices shows none.
- The edge agent counts devices; check it in **Setup → Connections**.

### Occupancy report

**Reports** compares door and WiFi activity with bookings, every 5 minutes.

1. Check **the trust check** at the top. Near 100% = reliable. If it drops, check **Connections** and lock batteries first.
2. Review each stay's arrival, nights occupied, devices and camera clips.
3. Look into flagged stays.

| Flag | When |
| --- | --- |
| Arrived late | First sign 3+ hours after check-in |
| No sign of the guest | Nothing 12 hours after check-in |
| Many devices at once | More than 3 per guest |
| Busy door | More than 6 openings per guest per day |

- Fill in the number of guests on bookings; the last two flags need it.
- Each new flag alerts once on **Today**.
- **Show camera clips** (booking page): clips from 6 h before check-in to 6 h after checkout. Logged; hidden if a guest refused the camera.

> **Flags are not proof.** Talk to the guest before assuming anything. HostStackHQ never acts on guests.

### Noise

A sound-level sensor (no audio). Put up the sign saying so.

- Above 70 dB for 10 minutes between 10 pm and 7 am: you're alerted on **Today**.
- The guest gets one polite reminder per stay. Any further action is yours.
- At most one alert an hour.
