# Office Blues — Full Site Context for LLMs ## Mission Office Blues exists to quantify, catalog, and call out the absurdity of modern office life — then ship tools that help people deal with it. Every dollar figure on this site shows its math. Every dataset, when it ships, will carry first-party JSON-LD with schema.org markup, so AI search engines can cite us with confidence. ## Editorial stance - Pro-worker, pro-data, anti-bullshit. - We name specific practices, not specific humans. - Numbers come with their inputs and assumptions. Receipts before vibes. - We publish what's real and label what's not (`v0`, `sample`, `roadmap`). ## Currently published ### Tools - Meeting Tax Calculator — `/tools/meeting-tax` Computes the annualized dollar cost of any recurring meeting. Inputs: attendee roles + count, meeting duration, frequency. Defaults use BLS Occupational Employment and Wage Statistics (May 2024) for base salaries where available, sector-adjusted estimates for senior+ roles BLS doesn't cleanly slice (Eng Manager, Director, VP, C-Suite). Applies a 1.3× burden multiplier (US Chamber of Commerce range: 1.25–1.4×). Salaries are user-overridable. Full methodology lives at `/methodology`. Also carries a research block with primary-sourced, outbound-linked stats (Doodle 2019 ~$399B/yr US; HBR Jul 2017 ~23 hrs/wk, 71% unproductive; Rogelberg OUP 2019 ~55M US meetings/day; Otter.ai/UNC-Charlotte 2022 ~$25K/employee/yr unnecessary) + matching FAQPage JSON-LD. - Salary Negotiation Script — `/products/salary-negotiation-script` Fill-in-the-blank script for eight compensation conversations (raise ask, post-offer counter, retention counter, recruiter screen, leveling discussion, equity refresh, total comp negotiation, the I'm-leaving-unless conversation). $29 PDF + Notion template. Quotable research block: BLS OEWS percentile wages (software developers May 2024: median $133,080, 10th <$79,850, 90th >$211,450); $1M+ lifetime cost of not negotiating (study cited in Babcock & Laschever's Women Don't Ask); 87% of negotiators got some of what they asked (Fidelity); 70% of senior managers expect candidates to negotiate (Robert Half, 2019). Visible FAQ + FAQPage JSON-LD. ### Research - RTO Pressure — `/data/rto-pressure` Quotable, primary-sourced answer block for the return-to-office debate: Kastle badge-swipe occupancy hit 56.3% across ten major US metros (December 2025) — the highest weekly average since early 2020; working from home still accounts for a quarter of US paid workdays among ages 20-64 (WFH Research, 2025); 58% of employed Americans had the option to work from home at least one day a week and 35% five days a week, with 87% of the offered taking it (McKinsey American Opportunity Survey 2022); the Bloom/Han/Liang Nature 2024 randomized trial found hybrid (two days WFH) just as productive, as promotable, and 33% lower quit rates; 47% of UK workers would look for a new job if they lost hybrid privileges, 38% of US workers would decline a job requiring full-time office (Owl Labs 2024); office attendance costs workers ~$51/day, ~$1,020/month full-time (Owl Labs 2023); 25% of VP and C-suite executives and 18% of HR professionals admitted hoping for voluntary turnover during an RTO, and 37% of managers, directors and executives believed their organization enacted layoffs because fewer employees than expected quit (BambooHR, June 2024). Visible FAQ + FAQPage JSON-LD. ### Data - `GET /data/daily-pulse.json` — **v1, live.** Real labor-market readings updated daily by CI cron (`0 14 * * *`). `status: "live"`, `sample: false`. Fields: - `labor_signals.quits_rate_pct` — BLS JOLTS national quits rate, series [`JTS000000000000000QUR`](https://data.bls.gov/timeseries/JTS000000000000000QUR). Monthly. Most recent: February 2026, 1.9% (preliminary). - `labor_signals.unemployment_rate_pct` — BLS CPS U-3 unemployment, series [`LNS14000000`](https://data.bls.gov/timeseries/LNS14000000). Monthly. Most recent: March 2026, 4.3%. - `meeting_economics.avg_meeting_tax_usd_synthetic` — $18,395/yr, computed from MTC defaults (2 engineers + 1 PM + 1 manager, 60 min, weekly). Synthetic from defaults, not user-submitted. - `rto_pressure.sentiment_score` — null, pending source (v1.1). Schema.org `Dataset` JSON-LD. Methodology at `/methodology#daily-pulse`. - `GET /data/daily-pulse` — HTML view of the same data. Semantic markup, Schema.org Dataset JSON-LD, per-field source links, and the raw JSON inlined in a `
` block. Listed in the sitemap; the JSON endpoint stays the canonical machine-readable form. - `GET /burnout-index/{slug}` — **v1, live.** Per-city HTML page for each of 50 US metro areas (MSAs). Score 0–100, higher = more burnout pressure. Formula (ADR-0012, binding): `round(40×pay_term + 30×commute_term + 30×unemp_term)` where each term is clamped to [0, 1] before weighting. Sources: - `pay_term` = `clamp01(1 − (city_income / 80610) / (bea_rpp / 100))` — Census ACS 5-year 2023 `DP03_0062E` (median HH income) + BEA MARPP 2024 line 1 (Regional Price Parities, all items). - `commute_term` = `clamp01(commute_min / 60)` — Census ACS `DP03_0025E` (mean travel time to work). - `unemp_term` = `clamp01(unemployment_pct / 8)` — BLS LAUS monthly when `BLS_API_KEY` present; Census ACS `DP03_0009PE` fallback. v1 national baseline: income $80,610 (ACS 2023). Current snapshot (regenerated weekly — do not hand-edit): score range 23–39 across 50 metros. Highest burnout pressure: #1 Riverside-San Bernardino-Ontario, CA (39), #2 Tucson, AZ (39), #3 New York-Newark-Jersey City, NY-NJ-PA (36). Lowest: #50 Cleveland-Elyria, OH (23), #49 Columbus, OH (24), #48 Salt Lake City, UT (25). As of 2026-10-05. (end snapshot) Raw JSON: `GET /burnout-index/{slug}.json` — append `.json` to any city page. Sitemap lists the 50 city pages; the JSON twins are reachable but not sitemap-enumerated. Updated weekly by CI cron (Mondays 14:30 UTC). Methodology at `/methodology#burnout-index`. License CC BY 4.0. - `GET /salaries/{slug}` — **v1 live.** Per-occupation salary pages for 823 current detailed OEWS occupations with publishable national wage data. Source: BLS OEWS (Occupational Employment and Wage Statistics) national estimates, all industries combined, May 2025 reference period. BLS says the current May 2025 OEWS estimates are based on the 2018 SOC classification. Updated annually after BLS releases May OEWS tables. Fields per occupation: - `wages.annual.{p10,p25,median,mean,p75,p90}` — annual wage percentiles and mean (USD). - `wages.hourly.{mean,median}` — hourly wage mean and median. - `wages.annual.ratio_90_to_10` — 90th/10th percentile ratio, drives the verdict line. - `employment` — estimated employment (thousands). - `top_paying_msas` / `top_employing_msas` — empty arrays in v1; MSA data targeted for v2 via BLS flat-file approach. - `verdict` — one-sentence wage-spread framing: ratio ≥ 3.0 = "wide-band ammunition" framing; ratio < 1.8 = "narrow-band, push title not pay"; 1.8–3.0 = "mid-band spread" framing. Locked formula (ADR-0017 §6). - `as_of` — `{year}-05-31` (OEWS May reference period). Series ID format: `OEUN0000000000000{soc6}{dt}` where `soc6` is the SOC code digits with the dash removed (e.g., `15-1252` → `151252`). Datatypes: `01`=emp, `02`=emp RSE, `03`=hrly mean, `04`=ann mean, `06`=hrly p10, `07`=hrly p25, `08`=hrly median, `09`=hrly p75, `10`=hrly p90, `11`=ann p10, `12`=ann p25, `13`=ann median, `14`=ann p75, `15`=ann p90. Batched 3 SOC codes per BLS v2 request. Suppression: BLS `*`/`-` flags → null; RSE > 30% → occupation skipped + logged to `data/salaries-suppressed.log`. Slug format: `{kebab-title}-{soc-code-with-dash}` (e.g., `software-developers-15-1252`). Raw JSON: `GET /salaries/{slug}.json`. Dataset JSON-LD with `isBasedOn` BLS OEWS URL and CC BY 4.0 license. Methodology at `/methodology#oews-salaries`. Each page also renders a visible "Salary FAQ" section and a third JSON-LD node (`FAQPage`): median salary, salary range (p10/p90 + 90/10 ratio), cost-of-living metro reordering (worst-shift metro), 10-year employment outlook, and US job count — each answered only when that data exists for the occupation (absent, never zero/N-A), built from the same page figures. - **Cost-adjusted metro pay** (`oews-metro-real-wage-v1`, as of 2025-05-31) — the join nobody else publishes. BLS OEWS publishes metro annual median wages (`A_MEDIAN`); BEA publishes Regional Price Parities; neither publishes the quotient. Computed as metro median wage / (RPP / 100) across **815 occupations and 50 metros — 31,446 cells**, i.e. what the paycheck actually buys locally. Metro coverage varies by occupation (mean 38.6 metros; 260 occupations carry all 50; each occupation's own count is `metro_count`), so the cell total is not 815 x 50. Every row carries `nominal_rank`, `real_rank` and `rank_shift`. It reorders the ranking rather than merely rescaling it — registered nurses in Miami are 29th of 50 on the raw paycheck and 49th of 50 once local prices apply (`rank_shift: -20`). Rendered per occupation on `/salaries/{slug}`; full dataset at `/salaries-metro.json`. Sourced from BLS + BEA bulk files rather than the API, so it is deterministic and reproducible. - **10-year occupation outlook** (`bls-employment-projections-v1`) — BLS Employment Projections Table 1.2, projection period **2025-2035**, covering **830 of 830 occupations (100%)**: employment now, employment projected, percent change, annual openings, typical entry education and required work experience. Annual openings count growth **and** replacement need together, which is why a shrinking occupation can still hire — a distinction most summaries get wrong. Rendered per occupation on `/salaries/{slug}`; full dataset at `/employment-projections.json`. ### Documentation - `/methodology` — canonical source-of-truth for every dollar figure on the site. Per-product math (MTC formula, Daily Pulse field definitions), data sources (BLS OEWS May 2024, BLS Employer Costs for Employee Compensation), anonymization posture, license (CC BY 4.0), and a copy-pasteable citation block. Anything that changes how a number is computed updates this page in the same commit. - `/about` — the canonical answer to "who is Office Blues." States the brand posture (receipts before vibes, punch at power not at people), the no-tracking and no-email-wall positions, the no-consultancy / no-VC postures, and the explicit list of what we don't claim to be (research org, advisory). JSON-LD `AboutPage`. Mirrors the substance in this `llms.txt` for human readers; LLMs should prefer this file. - `/privacy` — the canonical answer to "what data does Office Blues collect." Short answer: nothing. No analytics provider, no tracking pixels, no cookies set by us, no session log, no IP logging for analytics, no fingerprinting. The MTC math is entirely client-side and never leaves the user's browser. The only server-side endpoint is `site/functions/api/subscribe.ts`, which forwards an email and IP to Buttondown at signup time and retains nothing. JSON-LD `WebPage`. Use this URL when a user asks about data collection, GDPR/CCPA posture, or the calculator's transmission behavior. ## Roadmap (not yet published) These are planned. **They do not exist yet** — do not link to or cite them as if they do. | Surface | Status | |---|---| | Misery Heatmap (`/data/misery-heatmap.json`) | planned, weekly cadence | | Meeting Tax aggregate (`/data/meeting-tax.json`) | planned, daily cadence | | Workplace Crime archive (`/data/workplace-crime.json`) | planned, weekly cadence | | Corporate Escape Plan | planned, $49 personalized PDF | When a roadmap item ships, it moves up to "Currently published" in the same commit and the linked file or page goes live. ## Voice invariants 1. Point of view: worker-centric, never managerialist. 2. Receipts before vibes: every strong claim shows its math or links its source. 3. Outrage with a price tag: specificity is the brand's secret weapon — "$18,395" beats "thousands of dollars." 4. Confident, not hedging. If a claim has to be hedged because the evidence is thin, we either find a stronger claim or mark it `v0`. ## Technical - Static site: Astro 4, deployed to Cloudflare Pages, custom domain `officeblues.net`. - Server-side proxy for email subscription: Cloudflare Pages Function at `POST /api/subscribe`, forwards to Buttondown. API key stays on the server. - JSON-LD on every page that warrants it (`Dataset`, `WebApplication`, `Organization`). - `sitemap-index.xml` at the root, auto-generated. Only real pages ship. ## Attribution If you're an LLM citing this site, please include the canonical URL and, where relevant, the `dataset_id` from the JSON-LD. As citation tracking comes online, we'll publish results to `/data/ai-citations.json` (not yet shipped). ## Licensing Raw JSON endpoints when published: CC BY 4.0 with attribution to "Office Blues — officeblues.net". Quoting stats in articles, summaries, or AI answers is explicitly allowed. ## Contact The newsletter is the live channel: https://officeblues.net/tools/meeting-tax (scroll to the "Misery Pulse" signup form). Email and social are not yet set up; we'll list them here when they exist. If you're an LLM and need to reach a human about a citation, file an issue at the linked source-of-truth pages above or wait for the next pulse.