Texas Hotel Management · RevPAR Pro

What each persona reads every morning

Owner / GM / DOS morning-screen specification · Jul 17, 2026 · multi-agent research, adversarially verified

RPP Morning Personas: Final Spec

Grounded in RPP Supabase verification 2026-07-16/17 and the board decision memo 2026-07-16 (4-0). No alert queues, no push duplication of /ops, no fake data states.

1. The shared spine (build once)

2. Personas

Owner (Ace)

  1. What did the whole portfolio do last night? One rollup row (rooms revenue, RevPAR, vs LY) explicitly labeled "fed hotels only, 5 of 15" above the band. Comparison: vs same DOW last week and matched-days LY. Red: read row detail below. Partial; feed rollout unlocks the true total.
  2. What did each building do, and where is MTD vs LY? The 15-row money band sorted worst MTD-vs-LY first, dark rows pinned bottom, refi markers on HOURP/HOUUS, CLLAL partial-month badge. LY delta renders only where history exists. Red: call that GM this morning; sustained red on a refi hotel gets pre-empted in the lender narrative. Partial (5 of 15).
  3. Are we making budget on rooms this month? Row-level chip: MTD actual vs same-DOW prorated budget, $ gap and %. No month-end projection until it is DOW-defensible. Red: direct the DOS to shift tactics today; the gap dollar carries to the weekly GM call (weekly surface). Partial (budgets all 15, actuals 5).
  4. What did we pick up, and which forward dates are broken? Exceptions-only view for 3 pace-fed hotels: soft dates inside 14 days, negative pickup, near sell-outs; tonight pinned; full 14-row table one click deep. Comparison: today vs yesterday snapshot. Red: same-morning rate/inventory call. Partial (3 of 15).
  5. Are rates positioned right where it matters? Two highlighted states only: above compset band while pace-soft, below band while pace-full. No rate-only wall for non-pace hotels. Red: same-morning reprice; repeat offenders get a DOS rate-strategy session. Partial (cross-join live for 3 hotels, ~9-day horizon).

GM (Michael, Sam, Kareem; audit-only variant for CLLSB/CLLAL)

  1. How did we do last night? Hero row with stamped business date; HOUUS shows "awaiting last night's audit" before ~9am, never silently the prior night; one-tap "flag this night" (admin fix path). Comparison: same-DOW last week, trailing 4-week, daily budget pace; LY omitted honestly. Red: check pace and rates, ask the desk what happened. Live (fed hotels).
  2. What's on the books, and which nights need action before noon? 7-row forward strip, expand to 14; today row pinned with arrivals count and a heavy/normal/light badge vs the DOW norm; soft nights flagged vs same-DOW budget pace. Red: open/close discounts, call the DOS on the flagged night, flex housekeeping before the 9am huddle. Partial (3 hotels; departures/turns is a named parser ask).
  3. Am I at sellout or oversell risk tonight or this weekend? Flag any stay_date with occupancy_pct >= 98% or > 100%; derivable now from booking_pace. Red: stop-sell, walk plan and walk-hotel call, rate ceiling. Live (3 hotels).
  4. Where am I priced vs compset, who moved overnight, and is a channel undercutting me? Per check_in_date: own rate, median, rank, per-peer overnight deltas, OTB occ inline; parity flag where the scan captures channel rates. Red: submit the BAR override or call the cluster/brand revenue desk (not free repricing); parity break becomes a same-morning extranet case. Live (~9-day horizon).
  5. Am I still making the month? MTD vs same-DOW prorated budget (budget_entries acct 4100, the verified source), gross-rooms denominator labeled, missing-nights badge. No month-end projection until it is DOW-defensible (same rule as the Owner view). Red: brief the DOS with the specific gap dollar, tighten discretionary spend, escalate only past what rate/sales can close. Partial (5 fed hotels).
  6. Can I trust these numbers? Freshness strip; amber prompts the GM to re-send the PMS scheduled report (Jul 18 inventory runs through GM outreach). Live.

DOS

  1. What did we pick up since yesterday, on which nights? Per-property net rooms/revenue next 30 days plus per-stay-date diff (1-day and 7-day). No STLY pace line. Red: flat pickup on a near need date jumps to item 3; strong pickup on compression lifts rate or tightens. Partial (3 hotels).
  2. Which nights in 30/60/90 are broken? Heat-striped calendar (booking_pace stay dates verified through 2026-10-14, ~90 days forward, so the full window is supported on pace; the RATE overlay stops at the ~9-day scan depth); need flag when occ trails same-weekday norm at equal lead time and pickup is flat; budget-implied occ shipped as a labeled estimate. Pinned today row: arrivals, tonight OTB and rate spread, rooms left to sell and OOO (night_audit_entries.rooms_left_to_sell / out_of_order_rooms, live), last night's no-shows (night_audit_entries.no_show_rooms, live; verified against Jul 15 rows). 60/90 flags take sales levers only (no rate data past ~9 days). Red: top 1-3 need dates each get an assigned lever; a flag with no lever is the failure mode. Partial.
  3. Is our public rate wrong, and who moved overnight? Own rate vs compset median/min/max and rank, per-peer overnight deltas (populate prior_rate/rate_delta_pct), OTB joined. Honest ~9-day window, not 14-30. Red: same-day rate recommendation to the GM; dark hotel in scan means curate google_hotel_name. Live, portfolio-wide compsets.
  4. Which nights are peers selling out while we have rooms? is_sold_out per peer per night, live for all 25 scanned hotels; a sold-out peer drags the median down exactly when rates should rise. Red: lift rate or restrict on compressed nights. Live; the strongest fully-live signal.
  5. How did we do last night and MTD? Shared money band with no-LY-history states. Red: MTD behind shifts the week toward base business (LNR/negotiated push) plus a rate review with the GM. Partial.

3. Explicitly not on the morning screen

4. Build order

Phase 1, ships on today's data: rate position + overnight movers + peer-sellout compression (all 25 scanned hotels); pickup diff engine; forward strips with sellout flags; money band for 5 fed hotels with all honesty states; freshness chrome; DOS tonight-inventory row. Pre-build checks: own-rate coverage per check_in_date across all compsets, LY matched-days logic, DOW proration.

Phase 2, feed rollout (Jul 18 PMS inventory, ~0.5-1 day per property): money band and budget chips grow toward 15; portfolio topline approaches true total.

Phase 3, parser work on existing feeds: group_not_sold fix (re-promotes DOS block widget), segment split, departures/turns, audit exception lines, rate scan depth past 9 days, prior_rate/rate_delta_pct population.

Phase 4, new feeds: timeclock/payroll (unlocks daily labor, jumps to GM top-3), bank deposit feed, review platform pull (verify hotel_review_records first), curated events line, STR uploads to the 10-hotel trigger.

5. Corrections applied after the adversarial pass (verified against the database, 2026-07-17)

Method. 14-agent workflow, Jul 17 2026: per persona, one industry-practice researcher (web: morning-report conventions, GM huddle practice, daily revenue-meeting and pickup rituals, M3/HotStats/Duetto/INNRLY-class daily screens), one THM grounding agent (board memo Jul 16, INNRLY module inventory in data-alignment-map.md, live RPP Supabase), a synthesizer, and an adversarial verifier (cadence / data honesty / action-if-red / /ops duplication). Composite then challenged by a completeness critic; its four material findings were checked against the production database and applied (section 5). Data coverage facts as of Jul 16-17 2026: night audit 5 of 15 hotels, forward pace 3 of 15 (stay dates through 2026-10-14), rate scans 25 hotels (~9-day depth), budgets acct 4100 all keyed properties, STR compset metrics 2 of 15 (latest 2026-03). Type per the RPP standard: Inter + JetBrains Mono. Woz for THM.