Bookings, pricing and occupancy
partly built
58.3% of the next 30 nights booked
Watching Occupancy since the first booking, the next thirty nights, bookings by source and by month, cancellations, lead time. hourly
When
- the next thirty nights fall well below the same period last year
- bookings drop from a channel
- a rate looks too cheap for the season
- cancellations rise
Then, in order
- 1show the trend on Performance and Research
- 2tell Management what moved and where
- 3propose a rate or a channel change for approval
- 4check the listings are live and correctly described
Brings in Management in the weekly digest; sooner for a sharp drop.
Rates against demand, weather and local events
partly built
note of 2026-10-19 sent: Next 8 weeks: 0 up, 6 hold, 2 down; this week 43% booked.
Watching The next eight weeks: nights booked of the nights for sale, bookings made in the last seven days for each week, the booked rate Smoobu recorded, the same week a year ago, events nearby (events_cache), the aurora season from the sky watch's dark hours, the sky outlook. on request; the note every Monday from 08:00 local with the guest care rounds
When
- Management asks about rates, pricing or demand ahead
- Monday comes
Then, in order
- 1a direction per week with its reason: up when the week is nearly full or filling, or a festival is nearby; down when a near week is nearly empty (a short-notice offer on the direct channel rather than a channel discount) or far below last year; hold otherwise, and hold with a warning when strong weather is forecast
- 2say what is not tracked: the rate card and the channel rates live in Smoobu and are not mirrored; competitor rates are not read
- 3write the Monday note once (rate_notes), email it to the board address, show it on the Rates page; the board report carries its headline
- 4never change a price: nothing here writes to Smoobu or a channel
Brings in Management decides on the rate card in Smoobu; the note is a suggestion.
Social and press moments
partly built
1 moments drafted ahead, 0 planned, 0 posted
Watching Aurora nights (likely or strong) and strong weather from the sky watch, the research station's records (a species new to the point, a baseline species seen again), first guests (the first stay ever in a Podtel, the first of a season), milestones (stays, nights, the review score) and festivals nearby. daily with the guest care rounds; the Moments page at any time
When
- the sky watch opens an aurora or a storm window
- a sighting is logged for the first time
- a Podtel's first guests or a season's first guests are booked
- a milestone is passed
- a festival within two hours' drive is listed
Then, in order
- 1make a draft per moment with a suggested post in the brand voice and the picture to take, keyed to what made it so a refresh never doubles one
- 2Management plans, posts (where) or drops each on the Moments page, edits the words, adds a moment by hand
- 3the weekly board report lists next week's; Management hears the calendar by voice (moments_ahead)
- 4nothing is posted by the platform: no social account is connected, and none will post without a person
Brings in Management on the Moments page.
0 card disputes open
Watching Card payments, refunds, disputes, deposits, channel payouts as the booking system records them, invoices, expenses. 15 minutes
When
- a card dispute opens
- a payment succeeds for a booking the dashboard does not hold
- a refund is asked for
- a deposit is still held after checkout
Then, in order
- 1raise a critical alert for a dispute with its deadline
- 2raise a reconciliation exception for orphan money
- 3refund only from the right payment, within what is left, with approval
- 4release a held deposit
- 5hand a guest their own invoice link on request
Brings in Management by SMS for disputes, by approval for refunds.
Profitability and the monthly close
live
Watching Revenue by source against expenses by category, margin, cost per available night. hourly, close on the first of the month
When
- a month ends
- expenses run past revenue
- a category jumps
Then, in order
- 1write the close pack and email it to Management, since migration 083 with the month against its budget
- 2show margin and run rate on Performance
- 3flag the categories that moved
- 4keep the registers an accountant or insurer would ask for
Brings in Management by email on the first of the month.
Daily takings and costs against budget
partly built
no budget set for this month (0 months with one)
Watching The month to date (revenue by check-in day as Smoobu records it, costs from the expenses tracker by category, occupied nights over the nights available) against the month's budget pro rata: the days elapsed over the days of the month. on every read of the finance brief, the board report and the Finance page; the daily close note when run
When
- Management sets or changes a budget line (revenue, costs by category or as a whole, target occupancy) for a month
- a cost category runs more than ten percent over its budget to date
- no budget is set for the month
Then, in order
- 1keep one row per month and line (budgets), set on the Finance page, copied forward with one click
- 2compare the month to date with the budget pro rata and say it in one line: ahead or behind on revenue, over or under on costs, occupancy against the target, the categories over
- 3the finance brief's against_budget line, the board report's finance section, the Finance page's table and the close pack's section all read the same figures
- 4when no budget is set for the month, say so plainly and measure nothing against nothing; the daily close (bin/ai-close.php --daily) prints or emails the same line
- 5not yet: no budget has been entered, so every line says no budget is set; no timer runs the daily close note (Priyesh adds it when he wants the morning email)
Brings in Management on the Finance page; the board in the weekly report.
25 items waiting for a person
Watching Tasks in the host dashboard, approvals waiting, orders waiting, who is away. continuous
When
- something needs hands on site
- an action needs a person's approval
- an approval waits past its expiry
Then, in order
- 1create the task where staff already look
- 2ask for approval with the rationale, once a day by SMS unless critical
- 3expire and re-ask when nobody answered
- 4summarise the week every Monday
Brings in Management by email and SMS.
Access levels: Admin, Management, Staff
live
1 active members: 1 Admin, 0 Management, 0 Staff
Watching Every dashboard sign-in and every action a page can take. every request
When
- someone signs in to the dashboard
- a page action, a tool run or an approval is asked for
- a team member is deactivated or changes level
Then, in order
- 1the dashboard root account is always Admin; an active team member on the Team page gets their own level; a host with no team row keeps working as Management; a deactivated member is refused
- 2one map in src/Web/Access.php says the lowest level for every action: Admin for the team, the autonomy dial, connectors and device commissioning; Management for approvals, orders, knowledge, listings, the site plan and money and compliance tools; Staff for doors, lights, power, Wellness Station bookings, alerts, sightings and guest tools
- 3every level sees every page; a refused action answers 403 and names the level it needs
- 4the session reads the member live, so a deactivation ends it at the next page
Brings in Nobody: a refusal is the answer. Changes to the team are events on the Team page.
Grímnir knows the team
partly built
1 with a second check, 1 with voice samples, 0 locked; 3 identifications in 30 days
Watching Every call, web call, room conversation and chat in which someone says they are on the team or asks for something only the team would. live
When
- a team member calls from their mobile
- a team member presses the call button on a signed-in dashboard page
- someone on the public line, the website chat or Intercom says they are on the team
- an identified member asks for a door, power or a task
- the second check is answered wrongly three times in a row
Then, in order
- 1one identification path for every channel (People\TeamIdentity): the channel passes only what the line reports, the caller number (ElevenLabs system__caller_id) or a signed dashboard token, never what was said
- 2a name or an email is only a claim; one factor (the number, the dashboard token, a voice score, a passed second check) identifies, and allows routine requests at their level
- 3sensitive requests (an unlock, a switch-off) need two factors: with the number alone Grímnir asks the second check, two PIN digits at positions the tool picks, or the date of birth; neither is ever stored, spoken back or written into an event or a payload
- 4three wrong answers lock the member's check until an Admin unlocks it, with an alert and an event carrying the member id only
- 5identified requests run through people.team_request, which calls property.device_lock or property.power_switch as that member, with their dry run and event
- 6create_task works for a confirmed member as it does for a guest with a booking
- 7not yet: voice recognition. The samples are recorded with consent on the Team page and kept encrypted, but no speaker model runs: this server has no torch, torchaudio or ffmpeg, and ElevenLabs does not give a webhook the live call audio. Options: SpeechBrain ECAPA-TDNN self-hosted (about 2 GB of Python packages and a small local service, free, CPU is enough), Picovoice Eagle (on-device SDK, commercial licence), or routing the phone line through Twilio media streams so the call audio reaches this server; Azure Speaker Recognition is retired
- 8not yet: people.team_request is at L0, so Grímnir says what he would do and does nothing until the dial is raised
- 9chat: the security screen still quarantines a message that claims to be staff, so on the website chat and Intercom a team request goes to a person until the screen is told about the team tools
Brings in Management by email when a second check locks; anything refused is handed to our Humans as any call would be.
Grímnir briefs the team and runs their tasks
partly built
0 briefings and 0 task updates in 7 days; 0 members without a department
Watching Every call or chat from an identified team member: their department's open tasks and their own, arrivals and departures, who is in which Podtel, weather risks, alerts, what is overdue, orders, Wellness Station bookings, birthdays. every team call
When
- an identified team member calls or writes
- a task they own or their department holds is urgent, overdue or open two days without a date
- a storm or snow is forecast for today or tomorrow
- a guest arrives in or leaves the Podtel they are heading to
Then, in order
- 1identify them (People\TeamIdentity); nobody else hears a guest's name
- 2open with what matters most to them today (people.staff_briefing): an arrival or departure, an urgent task, a risk with what to do in their department
- 3go through their tasks one by one: done, or when and by whom, and record each answer (people.task_update: done ticks the task in the host dashboard; the note, the day and the owner are kept with the task, the note never in the record)
- 4staff work their department's tasks and their own and may take one on; giving someone else's task away or moving it to another department is Management
- 5hold them to the outcomes: no pending tasks, always stocked, uptime, guests delighted
- 6not yet: people.task_update is at L0, so Grímnir says what he would record and they tick it in the dashboard until the dial is raised; the voice tools reach ElevenLabs only when bin/setup-voice-agent.php is run
- 7not yet: stock levels, which the platform does not track; the briefing says so
Brings in Management sees overdue tasks in the briefing and the weekly board report; a refused change is Management's call.
Skills the team asks for
partly built
0 skills proposed, 0 accepted, 35 built; 9 asks from the team
Watching Every request from the team that Grímnir has no tool for. every team call
When
- a team member asks for something Grímnir cannot do yet
- the same skill is asked again
Then, in order
- 1note the skill with what was asked and why it matters (people.propose_skill), counting up a repeat
- 2list it with the general manager's standing duties still to build on this page, most asked first
- 3Management accepts, marks built or declines it
- 4the most asked go into the board report
- 5not yet: people.propose_skill is at L0, so nothing is noted from a call until the dial is raised
Brings in The board in the weekly report.
Weekly board report
partly built
0 board reports sent in 30 days
Watching The whole operation in the order of the GM charter: guests, revenue, brand, operations and maintenance, people, finance, safety, and what the board owes. weekly
When
- Monday morning, once switched on
Then, in order
- 1gather the week from the platform's own figures, aggregates only, no guest names (People\BoardReport)
- 2say plainly what is not tracked yet
- 3list the approvals and exceptions waiting and the most asked skills
- 4email it to the board, Priyesh Patel and Shaina Patel (BOARD_EMAIL_TO)
- 5not yet: no timer sends it; bin/board-report.php prints it, and --send emails it
Brings in The board.
Grímnir phones the board
partly built
2 urgent calls in 30 days: 1 reached, 1 not reached (email and SMS sent)
Watching Every critical alert and every guest emergency. Never a warning. Grímnir's number is +44 7414 110690 (UK; Twilio offers no Iceland numbers): calls to it reach him, and he calls Priyesh from it. live, followed up every minute
When
- a critical alert is raised: the dead man's switch, a broken chain, water or smoke, a door lock fault with live codes, a card dispute, a caller who needs our Humans now
- a guest presses Emergency in the app
- a person tests it by hand: php bin/urgent-call.php "problem" --dry-run, then without --dry-run
Then, in order
- 1call Priyesh first (ALERT_SMS_TO) through ElevenLabs on the main agent, with the problem in one or two sentences, how serious, what is already done and what he needs to decide (origin urgent_call)
- 2at most one call per alert kind per hour; no quiet hours, urgent means urgent; when no call goes out (the hourly limit, not configured, refused) the SMS goes at once, as before
- 3the alert's email record goes at once, as for every alert; the SMS to Priyesh waits on the call
- 4Grímnir says who he is, the problem plainly, what is done and what he needs decided, then confirms and ends; on voicemail he leaves a short message
- 5reached only when he records on the call that Priyesh heard it (urgent_call_ack); the watchdog reads the Twilio call status each minute
- 6failed: not placed, busy, no answer, failed or canceled, or the call ended without that confirmation (voicemail, someone else, cut off), or no outcome in 15 minutes: then the email and the SMS go to Priyesh
- 7each call kept in urgent_calls (erasable); the chain holds the id, the state and a hash, never the words
Brings in Priyesh, by phone first, then email and SMS. The Host and Technical Issues keep their own texts and e-mails as before.
Grímnir in the board's meetings, and his diary
partly built
1 meetings in 30 days, 0 action points open, 0 private notes sent
Watching Meetings a board member (an Admin) takes Grímnir into: everything said, the decisions, the action points, and what the board member should know privately. every meeting
When
- an identified Admin says "Grímnir, join this meeting"
- they address him by name or ask for his input
- they say leave this to me
- he hears something sensitive the board member should know
- the meeting closes
Then, in order
- 1people.meeting_mode start: he answers in a few words and listens; he speaks only when addressed, one or two short sentences, and never contradicts the board member in front of others
- 2leave this to me: people.meeting_mode silent, not a word until called by name again
- 3people.diary_write keeps notes, decisions, action points (owner, day) and his private observations; a team member's action point shows in their briefing; one about a StarHive or Podtel can become a host dashboard task
- 4people.private_note sends a risk, a contradiction, a negotiation point or a number to the board member's own email and mobile instead of saying it; in the room at most "I have sent you a note"
- 5people.meeting_mode end: the summary in the diary and to them privately
- 6the Diary page shows it all, to Admin only; the call button there is the meeting line
- 7limits: the meeting line is the room copy of the agent, 7200 s per call (two hours) and no silence hang-up; a meeting the line cuts carries on when the board member calls again within three hours. The dashboard button elsewhere is the main copy: 600 s and a hang-up after 120 s of silence, so not for meetings. A phone call reaches the main copy unless a number is attached to the room copy in ElevenLabs. ElevenLabs answers every turn it hears unless the agent declines it, so silence rests on the prompt; its skip_turn system tool would make that firmer and is not configured yet. The transcript reaches the archive after the call
- 8not yet: all three tools are at L0, so nothing is kept or sent until the dial is raised, and the voice tools reach ElevenLabs only when bin/setup-voice-agent.php is run
Brings in Only the board member in the meeting; nobody else hears or sees the diary.
The general manager's charter
partly built
Watching The standing duties of running the hotel from A to Z: guests, revenue and pricing, marketing and brand, operations, maintenance, people, finance, safety and compliance, sustainability, the board. continuous
When
- a duty falls due
- a team member calls
- the week ends
Then, in order
- 1Grímnir acts as Co-CEO and General Manager, answering only to the board (docs/GM-CHARTER.md, in his prompt)
- 2raises each duty with the team member it belongs to, and with the board in the weekly report
- 3every duty not built yet is a proposed skill on this page
Brings in The board.
The business brief and the project brief
live
Watching Bookings and occupancy, revenue this month against last, the review score and the latest reviews, wellness sessions with before and after feelings, connector and device health, open tasks and alerts, the rota, weather risks; with scope all also construction and sourcing, stock and finance. on request, on a call
When
- an identified Management or Admin member asks how the business is doing (business_brief)
- the board takes Grímnir into a meeting and asks for the full update (project_brief: every department in one call)
Then, in order
- 1read the general health verdict first: needs attention, steady with what to watch, or healthy
- 2one short sentence per department, numbers rounded as a person says them, nothing else
- 3the detail of a department only when asked
- 4say plainly what is not tracked (no budget, no rates); never fill a gap with a guess
Brings in Nothing to escalate: a read. A department that cannot be read says so in its line.
The construction and sourcing brief
live
Watching The Phase 1 sourcing sheet (construction/source/sourcing/DH - Sourcing, Iceland.csv, written by build_sourcing.py) and the PDFs under construction/phase-1. on request; the sheet is parsed once per request
When
- an identified Management or Admin member asks about construction, sourcing, orders or the drawings
Then, in order
- 1count the lines, the PENDING lines with their names, the FINAL lines to order by Priyesh and by Eva, the ordered (EVA, OOD), shipped and local lines
- 2add up the USD overall, by Who, by status and for the pending lines; say how many lines carry no price
- 3count the Phase 1 drawings
- 4headline lines first, the lists only when asked; never write to the sheet
Brings in Nothing to escalate: a read. Delivery dates and payments are not on the sheet, and the brief says so.
The finance brief
partly built
Watching Booking revenue by check-in day (Smoobu, EUR), card money by payment day (Stripe), the sales ledger and the expenses tracker (spreadsheets mirrored by their connectors), purchase orders, disputes and held deposits. on request, on a call
When
- an identified Management or Admin member asks about money
Then, in order
- 1takings today, this week and this month; card money; costs this month against last with the largest categories
- 2open purchase orders with their amounts, disputes, deposits held
- 3month to date against the same point last month
- 4say plainly what is not tracked: there is no budget, the ledgers carry no paid or unpaid state, and nothing here records an expense (listed as a proposed skill: the host dashboard's API has no expense endpoint and both ledgers are spreadsheets)
Brings in Nothing to escalate: a read.
Stock par levels and counts
live
Watching Every consumable on the stock list: its par level, the count on hand, who counted it and when, the supplier and the lead time. on every count; read on request
When
- a team member gives a count on a call ("twelve rolls of kitchen roll left") or on the Stock page
- a count falls below par
- Management sets a par level, a supplier or a lead time
Then, in order
- 1the list was seeded from the guest consumables of the Phase 1 sourcing sheet; the opening quantities are the first par levels, marked "first guess, to be set" until Management sets them
- 2record the count with who gave it (stock_counts) and update the item
- 3say what is below par and what to reorder, from whom and with what lead time; offer a supplies task or an order
- 4the staff briefing leads its stock section with what is below par and what was never counted
Brings in Management on the Stock page; purchase orders go through the Orders page as before.
Watching Who is on which day, from when to when, covering which department, and what nobody covers. read on request; the briefing says who else is on today
When
- Management adds, changes or cancels a shift (rota_set on a call, or the Rota page)
- a team member asks who is on, or hears their briefing
Then, in order
- 1Management puts a member on a day with hours and the department they cover
- 2every member hears who else is on today in their briefing (first names, hours, what they cover)
- 3the rota says what nobody covers rather than guessing
Brings in Nothing to escalate.
Daily open and close routines, walked through by Grímnir
live
today: open 0 of 10 ticked; close 0 of 10 ticked; 30 days: 0 of 8 daily runs complete, 6 missed
Watching The morning open list (by 10:00 local) and the evening close list (by 23:00): every item, who ticked it and when, the reading an item asks for, and what was found not ok. the day's runs opened hourly from 05:00 local; the walk-through on a call or the Checklists page at any time
When
- a team member opens or closes the day, or asks for the list
- an item is found not ok
- the close list is not complete by its deadline
- a day passes with items unticked
Then, in order
- 1Management keeps the two lists on the Checklists page: items in order, each for one department or for everyone, some asking for a reading
- 2Grímnir reads the next unticked item of the member's department (people.checklist_next) and records each answer: done, skipped or not ok, with the answer and a note (people.checklist_tick); the first tick opens the day's run
- 3a problem found is offered as a task; the briefing says what is still unticked and by when
- 4a close routine past its deadline raises one warning alert (checklist_overdue), cleared when it completes; runs of past days left open are marked missed and kept as the record
- 5not yet: people.checklist_tick is at L0, so Grímnir cannot record a tick by voice until the dial is raised; the Checklists page works now
Brings in The department by briefing; Management by the warning on a missed close and on the Monitoring page.
Suppliers and their lead times
live
24 suppliers, 0 with a confirmed lead time; 14 stock items linked, 0 not
Watching Every supplier on the list: country, what they supply, the lead time (or that it is still to confirm), the contact's role, the terms; which stock items and orders are theirs. read on request; the reorder advice reads the lead time with every count
When
- a team member asks how long something takes or who supplies it (supplier_lead_time)
- a stock item falls below par: the advice says when an order today would arrive
- Management confirms a lead time, adds a supplier or links an item
Then, in order
- 1seeded with the stock list's suppliers and the makers that recur in the Phase 1 sourcing sheet (the notes column), the contact's role only, never a name; every lead time "to confirm" until Management sets it
- 2a stock item takes its supplier's lead time when it has none of its own; Management links items on the Stock or Suppliers page, or by naming the supplier when setting a par level
- 3the stock status and the count answer say the lead time and the arrival day if ordered today, or that the lead time is to confirm
- 4purchase orders carry the supplier id when the name matches one, so the Suppliers page shows the open orders from each
- 5not yet: no lead time is confirmed, so every answer says "to confirm" until Management sets them; late deliveries are chased from the orders (the next card)
Brings in Management on the Suppliers page for the lead times.
Deliveries logged, orders received, late ones chased
live
0 deliveries logged in 30 days (0 closed an order, 0 not in good condition); 0 expected this week, 0 late
Watching Every delivery: what, from whom, how many, in what condition, who received it; every placed order's expected day against today. as deliveries happen; the late check hourly with the operations rounds
When
- a team member says something arrived (delivery_log) or logs it on the Orders page
- an order is marked ordered: the expected day follows from the supplier's lead time
- an expected day passed two days ago with nothing received
- a delivery is damaged, short or wrong
Then, in order
- 1record the delivery with the day and who received it; find the order it closes (the one named, or the one open order from that supplier; several need the number) and mark it received, clearing its alerts
- 2add the quantity to the stock count when the words or the item name match one stock item (never for a wrong item)
- 3a delivery not in good condition goes on the order's note and is offered as a task or a word to Management
- 4the briefing says what is late, expected today and this week, placed without a date, and what came today; the rounds raise one warning per late order (delivery_late), cleared on receipt
- 5not yet: people.delivery_log is at L0, so Grímnir cannot record a delivery by voice until the dial is raised; the Orders page works now, and no supplier lead time is confirmed yet, so expected days are set by hand
Brings in Kitchen and stock by briefing; Management by the late-delivery warning and on the Orders page.
Receipts and invoice numbers chased before the month-end close
live
0 expenses of 2026-10 without a receipt or an invoice number (0 EUR), 0 chased; 0 received and 0 waived this month
Watching Every active row of the expenses tracker in the current and the previous month: has it a file link (the receipt) and an invoice number? hourly with the operations rounds; on every read of the Finance page and the briefing
When
- a tracker row of the month has no receipt or no invoice number
- the row is completed on the tracker (the chase resolves itself)
- five days before the month ends, and on its last day
Then, in order
- 1one chase per row (expense_chases), owned by whoever entered it on the tracker when that name is a team member, else Management; the owner hears their chases in the briefing and may mark them chased
- 2Management sees the month's list on the Finance page, assigns an owner, waives a chase when nothing is coming, reopens one
- 3the rounds email Management the open chases five days before the month ends and on its last day, once each (expense_chase_reminders)
- 4the daily close note, the board report and the close pack carry the same line; the row itself is completed on the tracker, never here
- 5the chase is the platform's own record: the ledgers stay spreadsheets
Brings in The owner by briefing; Management by the two month-end emails and on the Finance page.
An expense or an invoice recorded by voice
partly built
0 entries waiting to be carried into the ledgers; 0 recorded in 30 days, 0 by voice, 0 carried
Watching What a team member tells Grímnir they paid or were invoiced: the amount with its currency, the supplier, what for, the day, who paid, whether a receipt is coming; and what waits to be carried into the ledgers. as it is said; read in the finance brief and on the Finance page
When
- a team member says they paid something or an invoice came (expense_record)
- Management carries an entry into the tracker or the sales ledger and marks it carried
- a receipt arrives for an entry that expected one
Then, in order
- 1record the entry in the platform's own table (expense_entries) with who recorded it; the ledgers are spreadsheets mirrored here with no write path, so nothing is written there
- 2say it back and that it is for Management to carry into the ledger; ask them to keep the receipt
- 3the Finance page lists the entries waiting, exports them as CSV in the tracker's column order, and marks each carried (with the tracker's id) or its receipt received; a carried entry's tracker row then meets the receipt and invoice chase like any other
- 4the finance brief says how many wait and for how much
- 5not yet: money.expense_record is at L0, so Grímnir cannot record by voice until the dial is raised; the Finance page records now
Brings in Management on the Finance page.
Training and recognition for each team member
partly built
0 training records, 0 expired, 0 expiring within 60 days; 0 recognition notes in 30 days, 0 ever
Watching Each member's training, courses, certificates and licences with their expiry; every note of good work Management makes. as it is recorded; read in the briefing and the weekly board report
When
- a training record expires within 60 days, or has expired
- Management says a team member did well (team_note) or notes it on the Team page
- the first board report of a month
Then, in order
- 1keep one row per skill, course, certificate or licence with done and expiry dates, the provider and the evidence (team_training), on the Team page per member; a member always sees their own
- 2the member hears what of theirs is expiring in their briefing; Management hears everyone's, with the week's recognition
- 3a recognition note is kept with the day and who made it (team_recognition); the member hears it warmly in their next briefing
- 4the board report carries the training expiring and the period's notes, and in the first report of each month asks who did well last month, with the tally
- 5not yet: people.team_note is at L0, so Grímnir cannot note recognition by voice until the dial is raised; the Team page works now, and no training is on record until Management enters it
Brings in Management on the Team page; the board once a month.
Energy, water and waste per guest night
partly built
0 meter readings in 30 days from the team, 0 of 4 meters ever read; 0 days of plug estimate (simulated until commissioned)
Watching The site electricity and water meters as the team reads them, the waste weighed at each collection, the metering plugs' watt readings the device monitor keeps, and the guest nights from the bookings. readings as they are given; the plug estimate once a day with the operations rounds; the figures read in the briefs and on the Sustainability page
When
- a team member reads a meter to Grímnir (meter_reading) or on the Sustainability page
- a reading comes in lower than the last (refused unless the meter was replaced)
- a day passes with watt readings from the plugs
- Management or the board asks for the per-night figures
Then, in order
- 1keep every reading with who gave it and when (meter_readings); a cumulative meter's use is the difference between readings, waste is summed per collection
- 2count guest nights from the bookings: every night of every stay in the period, times the party
- 3say the figures per guest night over 30 and 7 days, each with where it comes from; with fewer than two readings of a meter there is no figure, and the brief says so
- 4integrate the metering plugs' watts into a daily kWh estimate for what is plugged into them, labelled simulated until the plugs are commissioned; never presented as the site's use
- 5the business brief has the sustainability line, the board report its section, the close checklist asks for the readings
- 6not yet: no site meter is fitted and no plug is commissioned, so only manual readings exist and the plug estimate is simulated; property.meter_reading is at L0, so readings by voice wait for the dial; the page works now
Brings in Nothing to escalate: a figure to improve, and a story to tell once it is real.
Turnover time per Podtel, from checkout to ready
live
0 turnover checks open, 0 waiting to be passed; 0 passed in 30 days; 0 photos kept
Watching Every passed turnover check: the minutes from the departed booking's checkout time to the pass, per Podtel and per housekeeper, this week against the four weeks before. fixed at each pass; read in the briefs, the board report and the briefing
When
- a turnover check is passed
- a turnover runs past the next arrival's check-in time
- Management or the board asks how the day is lost
Then, in order
- 1the clock starts at the booking's checkout time and stops at the pass of the quality check, so "ready" means checked to the standard, not merely cleaned
- 2the Turnover page shows the table: per Podtel and per housekeeper, turnovers, the average, the longest, this week
- 3the business brief carries the housekeeping line (four weeks, this week, checks open); the board report the figures per Podtel and per housekeeper for the period
- 4the staff briefing names today's turnovers with their clock since checkout and flags one that runs past the next arrival
- 5not yet: with no departure passed through a check there is no figure, and the brief says so rather than guessing; a check opened by hand without a departure has no clock
Brings in Management when a turnover runs past an arrival; the board in the weekly report.
The planned maintenance calendar and uptime
live
Watching Every planned item: what, where, every N days, last done, next due, which department owns it; beside it device uptime from the registry and the device and lock alerts of the last 30 days. read on request; the maintenance department hears its due items in the briefing
When
- an item is overdue or due within 14 days
- a team member says an item is done (maintenance_done on a call, or the Maintenance page)
- Management sets a first due date or an interval
Then, in order
- 1seeded with the obvious items (lock batteries per StarHive, heat pump filters, smoke and CO detector tests, Starlink and router, jacuzzi water tests, sauna stoves, winterisation, storm checks) with no dates: next due is empty until Management sets it, and the tool says so instead of guessing
- 2marking an item done logs who did it and sets the next due date from the interval
- 3the brief gives overdue first, then due in two weeks, then how many wait for a date; uptime in one sentence
Brings in Management on the Maintenance page for the dates; a fault found on the round becomes a task as before.
The team mailbox: read every hour, 30 days kept, drafts only on request
partly built
149 messages in the 30-day window (15 inbox, 38 archive, 96 sent), 149 categorised Grímnir read; 1 unanswered over two days; 0 drafts waiting, 0 sent; 38 facts proposed, 0 accepted; 1 meetings ahead
Watching The inbox, the Archive and Sent Items of the team mailbox on Microsoft 365, the last 30 days only (older mail is deleted here the same hour and never used), and the team calendar 14 days ahead. hourly (the first run back-fills the 30 days); the distillation once a night from 03:00 local
When
- a message arrives, is moved or deleted in one of the three folders (delta queries)
- a message passes 30 days: gone from here, not kept, not used
- Priyesh asks for a draft: in the session, on the Mail page, or on a call after both checks (two PIN digits and the date of birth)
- he says send, and archive or not
- inbox mail waits unanswered over two days
- a meeting is in the calendar today or about to start
Then, in order
- 1read continuously, never reply or send unasked; never mark anything read, move or delete during the read
- 2categorise everything ingested Grímnir read in Outlook (both categories created in the master list when missing)
- 3keep the window: mail.search and mail.read refuse anything older than 30 days and say so ("older than 30 days: not kept")
- 4draft only on request and record it (mail.draft); read it back in full; send only on the word send, and only a recorded draft (mail.send); then the original is categorised Grímnir replied, archived on archive, else flagged
- 5tell Management in the briefing what waits unanswered over two days, by sender, and the meetings of the day; calendar.upcoming tells Grímnir which meeting he is taken into, so the brief is ready
- 6once a night a small model reads the messages not yet distilled for NON-personal facts (supplier terms, prices, lead times, decisions, how things work), each scrubbed of addresses, numbers and the names of its batch and proposed with the date of its mail; Management accepts or declines on the Mail page before anything enters knowledge
- 7hand the supplier mail to the order watcher (the next card, skill 35), which puts what it says on the sourcing sheet
- 8not yet: mail.draft and mail.send are at L0, so drafting and sending by voice wait for the dial (the Mail page does both now, by Management); the knowledge review is by hand on the page; nothing is answered automatically, by design
Brings in Management on the Mail page for drafts, sends and the proposed knowledge; the connector shows red under Sources when Microsoft 365 cannot be read.
Supplier mail updates the sourcing sheet: ordered, shipped, delivered
partly built
23 supplier mails read; 0 updates on the sheet (0 in 30 days), 0 queued, 3 held for the dial, 4 to match by hand; 17 read with nothing to apply
Watching The supplier mail of the 30-day window (inbox and Archive): from a supplier on the Suppliers list or a maker the sheet names, or carrying order words and a tracking number. Each mail is read once. hourly, after the mailbox sync; the sheet follows within the quarter hour once the apply timer is on
When
- a supplier confirms an order, a payment or production (ORDERED)
- a supplier or a carrier says the goods are on their way, with a tracking number, a vessel or an ETA (SHIPPED)
- the goods arrived or were signed for (DELIVERED)
- the mail names goods that fit one sheet line clearly
- two lines fit alike, or the reader is unsure: a person decides
Then, in order
- 1a small model (Haiku, a fixed JSON shape) extracts the supplier company, the order reference, the stage, the carrier, the tracking number, the dates and the goods named; a tracking number or an order reference is kept only when the string is in the mail itself, never invented; people are never output
- 2match to the Phase 1 sheet lines by supplier (the Suppliers list and the maker names in the sheet notes) and product words; one clear line two points above the next, tied by its supplier or the reader's pick, with a clear status
- 3a clear match goes through sourcing.apply_shipment as the AI, so the dial decides: L0 holds it for a person on the Mail page, L2 waits for a one-tap approval, higher queues it at once
- 4an unclear match waits on the Mail page with the best guesses; Management picks the line and the status, or dismisses it; a mail with nothing to apply (a quote, a production update, a service invoice) is recorded so it is not read twice
- 5the apply run (bin/sourcing-apply-shipments.php, a claude-owned timer or cron) writes the queue into construction/source/sourcing/shipments.tsv, runs build_sourcing.py for both tabs (the file applied as the last pass: status forward only, ORDERED, SHIPPED, DELIVERED; order, carrier, tracking and dates under the short note; price, quantity, link and Who never touched), pushes the Google Sheet in place, commits when the tree is otherwise clean, and emails Priyesh one line per update with the review list
- 6Management hears in the briefing what shipped or landed this week and what waits for them
- 7not yet: sourcing.apply_shipment is at L0, so every clear match waits for a click on the Mail page until the dial is raised; the apply timer (ai-sourcing-apply.timer) is installed by the deploy but switched on by the owner, so until then the queue is written by running the apply script by hand
Brings in Management on the Mail page (the review list and the held matches); the connector order_watch shows amber when the mailbox has not been read for three hours or a queued update has waited over a day for the apply run; the email to Priyesh after every apply run.