What the daily emails actually became, what a hotel management company wants landing in its inbox, and a phased plan to make RPP's email layer a real piece of the secret sauce.
Every approved email is going to every approved recipient. No send was missed: on Jul 19 the team received the 9:00 AM and 3:30 PM property emails and the morning market email (send logs, Mac Mini). A brief same-day hold was reversed on Ace's correction before it blocked anything.
A payroll/labor block was added to the flashes on Jul 16 (commits 60ea500, 4a1c833). It only ever reached you and Alyssa; the team always got the plain version. The market flash half was reverted Jul 17 (commit a9ebc17).
Email content has been evolving commit by commit with no preview step and no sign-off gate. That is a process hole, not a one-off bug. Phase 0 closes it.
One daily ownership email, a leaner GM email, a Friday portfolio projection, a monthly owner pack, exceptions in between. Nearly all of it runs on data RPP already collects.
Reconstructed from git history and the live scheduler on the Mac Mini. There are two daily email systems: the per-property Flash (scripts/hourp-flash-email.mjs, sent 9:00 AM and 3:30 PM CT for HOURP, HOUZN, HOUUS via cron) and the Houston Market Flash ownership rollup (scripts/market-flash.mjs, once per day, gated on night audits with a 10:30 AM CT fallback deadline).
World Cup badges (commit cefc5f6), day-over-day pickup column (be3c5fb), actual room revenue + MTD boxes (46b5cc5), projection-vs-budget forecast cards with the RMAS SMART comparison (f9f607d, 90cd65e). Each shipped straight into the live sends with no preview step.
Commit 3a75744, date-gated to first send Jul 16.
Payroll/labor blocks added to both emails (60ea500, 4a1c833) with a review gate restricting the labor variant to you + Alyssa (6ece2c4, LABOR_REVIEW flag). That same night every flash send was halted: cron lines commented #HOLD-2026-07-16, market-flash launchd unloaded (6ece2c4 commit body). This hold is the "stopped going out to the team" you noticed.
Commit a9ebc17 restores market-flash.mjs byte-for-byte to its pre-labor state ("payroll belongs in the daily hotel flash only"). The property flash kept its labor block, owner variant only.
Live crontab shows the #HOLD markers removed and both market-flash launchd jobs loaded (launchctl list, exit 0). Send logs confirm deliveries to all five Market Flash recipients for business dates Jul 17 and Jul 18, and property-team sends on Jul 19 (/tmp/houston-market-flash.log, /tmp/hourp-flash.log). No sign-off preceded the resume.
A same-day hold on team recipients was reversed within hours on Ace's correction: the approved distribution is never paused; only unapproved CONTENT was ever the problem. No scheduled send was missed (team deliveries confirmed in the logs for both property runs and the morning market email). The rule is now recorded in the code (commit 3d055ef): the approved audience never stops without an explicit instruction. Recipient lists now also live in the email_distributions table (migration 279) with the in-script lists as fallback, so the flash never silently loses its audience.
Two failures stacked. First, a category error: the daily rate email is a SALES tool (rate position, compset grid, sales focus dates), and operational content (payroll/labor) was mixed into it. Second, no change control: content changed in normal commits with no preview step, and sends resumed without approval. The fix is a hard rule (sales emails stay sales, operational reporting gets its own emails) plus change control on the whole surface. The audience is never the lever: approved recipients are untouchable.
Everything RPP or the runtime sends on a schedule today. Source: crontab + launchd on the Mac Mini, verified 2026-07-19.
| Schedule (CT) | Recipients | Content | Status | |
|---|---|---|---|---|
| Property Flash x3 scripts/hourp-flash-email.mjs |
9:00 AM + 3:30 PM (cron) | Owners + property teams HOURP: Michael, Ivan, George · HOUZN: Sam Xie +1 · HOUUS: Kareem +1 (email_distributions table) |
Tonight's occupancy/left-to-sell/ADR, compset rate grid (8h freshness guard), OTB + pickup, projection vs budget vs SMART, sales focus dates, labor (owner variant only) | LIVE |
| Houston Market Flash scripts/market-flash.mjs |
1x daily, by 10:30 AM | Ace, Alyssa, Salim, Rahil, Zabir | Portfolio revenue banner, MTD vs budget, Occ/ADR/RevPAR vs LY + budget, per-property cards, adjustments & refunds, 7-night forward pace strip | LIVE |
| Dallas Market Flash scripts/market-flash.mjs --market dallas |
1x daily | Ace only | Same rollup; 3 of 4 hotels are placeholders awaiting automated OnQ/Opera feeds (market-flash.mjs config) | LIVE |
| Freshness monitor scripts/freshness-monitor.mjs |
9:15 AM + 3:45 PM, only if stale | Ace only | Night-audit / rate / OTB staleness alert | LIVE |
| STR request + reminder scripts/str-request-monthly.mjs |
17th monthly + weekly chase | Zabir, Rahil, Ace | Missing STR file requests, threaded ingest acknowledgements | LIVE |
| GM Market Audit scripts/gm-market-audit-emails.ts |
Monthly (draft only) | Never sends; composes drafts | Per-GM compset market audit built on the compset engine | DRAFT ONLY |
| Morning brief agents-runtime/scripts/morning-brief |
6:10 AM Mon-Fri | Ace only | Private phone ops brief (separate system, not part of this roadmap) | LIVE |
Distilled from an industry sweep (hotel ops and revenue-management publications, HSMAI meeting standards, asset-management practice, practitioner threads). Full source list in the footer.
| Finding | What it means | Source |
|---|---|---|
| The 7 AM daily flash is the one universal artifact | Yesterday's Occ/ADR/RevPAR + revenue, MTD block, today's arrivals/departures/OOO, auto-delivered before anyone arrives. It replaces the night auditor's printed packet. | OnlineHotelier manager-report guide; Cloudbeds night-audit reports |
| Comparisons ARE the report | Every number appears three times: actual, vs budget, vs last year (and often vs same day last week). A number without its comparison is noise. | OnlineHotelier; Hotel Financial Coach; Docyt |
| Pickup is daily for the RM, pace is weekly for everyone else | 1/7/30-day pickup windows are the tactical grain; executives should see pace vs same-time-last-year, not daily pickup volatility. Formal strategy review runs over 7/30/90-day horizons. | Lighthouse pickup-and-pace; Demand Calendar; HSMAI revenue meeting agenda (PDF) |
| RGI is the owner metric | RevPAR index is written into management agreements and can trigger operator termination. Weekly STAR lands Wednesday; monthly around the 18th. "Beating budget with RGI under 100 still reads as leaving money on the table." | RevPARGenius; SiteMinder STAR guide; str.com processing dates |
| Friday weekly flash with month-end projection | Actuals-to-date + forecast-to-finish vs budget, green/red per property, one consolidated portfolio view: four correction windows per month instead of one. | Docyt GM weekly workflows; Global Asset Solutions |
| Monthly owner pack = P&L + flow-through + CPOR + narrative | Flow-through and labor cost per occupied room expose problems GOP hides. Every variance answers: what changed, why, what happens next. Forecast accuracy standard: within 5% (3% for sharp shops). | Hotel Financial Coach; Hospitality Net CPOR; Xotels forecast accuracy |
| Volume kills reports, thresholds kill alerts | At ~50% alert rates people learn to ignore everything. Mobile email viewing averages ~10 seconds: one primary message, exceptions first, hierarchy over detail. | Atlassian alert-fatigue; Mailchimp mobile engagement; Agilence exception reporting |
Scanned: Otelier (DigiAudit/IntelliSight), Actabl (ProfitSword, Hotel Effectiveness), M3 Insight, HotStats, Lighthouse (+ ex-Kriya BI), Duetto ScoreBoard, IDeaS G3, FLYR, Cloudbeds, Mews, STR/CoStar itself.
Table stakes (every serious platform): a daily morning flash after night audit, often portfolio-rolled into one email; self-serve scheduled report subscriptions; threshold/exception alerts (overtime risk, competitor rate moves, parity leaks, missing night audit); and a fixed-calendar benchmark ritual (STR Wednesday weekly, ~18th monthly).
Differentiators (the 2025-26 battleground): AI narrative on top of the numbers. Lighthouse BI sends daily inbox insights where "AI Smart Summaries explain which channels, segments and signals drove the variance." Legacy players still send raw tables or download links.
What operators complain about (review sites): schedulers gated behind vendor support, link-not-content emails that force a login from your phone, stale data behind a fresh-looking morning email, and alert frequency you cannot tune.
A portfolio-rollup morning flash that leads with exceptions, carries an AI variance narrative in the email body (no login, no link-chase), renders per-audience versions (owner digest vs GM detail), and sends missing-data compliance alerts so silence never reads as "all good." RPP already owns the hard parts: the night-audit pipeline, rate scans, tax-receipt market intel, QBO actuals, and an AI narrative engine (alert-narrative). This is the secret sauce framing: competitors sell dashboards; RPP delivers the answer into the inbox.
13 data domains live in RPP today (full inventory from the repo sweep, 2026-07-19). Mapped to the emails they can feed.
| Domain | Freshness | Feeds |
|---|---|---|
| Night audit (Occ/ADR/RevPAR/revenue per property-day) | nightly, on arrival | Daily flash, weekly, monthly |
| Forward booking pace / OTB (booking_pace) | daily | Daily flash, pace views |
| Rate shopping vs compset (DataForSEO scans) | 2x daily, 8h freshness guard | GM rate email, rate-move alerts |
| STR benchmarking (monthly; daily variant supported) | monthly ~mid-month | Monthly owner pack, RGI scoreboard |
| TX hotel tax receipts (SIFT: competitor actual revenue) | daily sync, monthly grain | Monthly market share, fair-share gap |
| QBO financials (P&L by property, daily JE) | daily sync | Weekly projection, monthly owner pack |
| Budget vs actual + AI narratives (alert-narrative) | monthly + on demand | Variance narrative in weekly/monthly |
| Labor (Homebase timecards, CPOR) | near-real-time | Owner flash labor block, monthly CPOR trend |
| Guest reviews (TripAdvisor + Google, classified) | weekly scrape | Weekly digest candidate |
| Pipeline red alerts + freshness (heartbeats, month-close evals) | hourly checks | Compliance/exception alerts |
| Property tax / CAD, dual-brand splits, CC recon | nightly / monthly / manual | Monthly and ad-hoc packs |
Four phases. Each phase is shippable on its own; nothing resumes to the team until Phase 1 is signed off.
| When (CT) | Audience | Leads with | |
|---|---|---|---|
| Daily, by 10:30 AM | Ownership Market Flash | Ace, Alyssa (+corp on approval) | Yesterday + MTD vs budget/LY, exceptions on top |
| Daily, 9:00 AM | GM Property Flash | GM + property team | Rate position, OTB, sales focus dates |
| Daily, 3:30 PM | Rate-move exception | GM, only when triggered | What changed since morning |
| Event-driven | Freshness / red alerts | Ace (Woz ops) | What is broken, what is being done |
| Wednesday | STR / market scoreboard | Ownership + GMs | RGI, rank, fair-share gap |
| Friday | Portfolio weekly | Ownership + corp | Month-end projection vs budget, green/red |
| Monthly, ~18th | Owner pack | Ownership | P&L flow-through, CPOR, RGI, AI narrative |
| Monthly, 17th | STR chase | Zabir, Rahil | Missing files (already live) |
The unapproved additions live only in your and Alyssa's variant: the payroll/labor block, the SMART comparison row, the projection cards. Keep/kill per section.
Recommendation: if payroll is worth a daily look, it becomes its own operational email on your schedule rather than riding inside the sales flash.
Recommendation: exception-only. Two identical daily emails is the fastest route to both being ignored (alert-fatigue research is unambiguous).
The Wednesday RGI scoreboard needs weekly STAR data; today RPP holds monthly (plus a supported daily variant). Weekly STAR is a paid CoStar add-on per property (cost unverified, needs a quote).
Recommendation: get the quote for the 3 fed Houston properties first; monthly RGI + SIFT market share covers the interim.
No email content change ships without a preview to you and an explicit OK, logged in an EMAIL-CHANGELOG. Recipient lists only ever change when you name the change yourself.
Recommendation: yes. This is the fix for "I don't know how it mutated" ever happening again.