Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/quarterback/dev-site. dev-site-five-kappa.vercel.app
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247<!doctype html><html lang="en"><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" /><link rel="icon" href="/favicon.svg" type="image/svg+xml" /><link rel="icon" href="/favicon.png" type="image/png" sizes="any" /><title>Occupant Indices | Ron Bronson</title><meta name="description" content="Public measurement infrastructure for the AI economy. Three live indices that turn scattered public data into numbers you can track over time: the price tag, the activity meter, and the labor gauge for AI work." /><link rel="canonical" href="https://ronbronson.dev/projects/occupant.html" /><meta property="og:type" content="website" /><meta property="og:site_name" content="Ron Bronson" /><meta property="og:title" content="Occupant Indices | Ron Bronson" /><meta property="og:description" content="Public measurement infrastructure for the AI economy. Three live indices that turn scattered public data into numbers you can track over time: the price tag, the activity meter, and the labor gauge for AI work." /><meta property="og:url" content="https://ronbronson.dev/projects/occupant.html" /><meta property="og:image" content="https://ronbronson.dev/assets/social-card.png" /><meta property="og:image:width" content="1200" /><meta property="og:image:height" content="630" /><meta property="og:image:alt" content="Ron Bronson beside the words Problems Are Designed, with a workshop photo and a content schema check." /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="Occupant Indices | Ron Bronson" /><meta name="twitter:description" content="Public measurement infrastructure for the AI economy. Three live indices that turn scattered public data into numbers you can track over time: the price tag, the activity meter, and the labor gauge for AI work." /><meta name="twitter:image" content="https://ronbronson.dev/assets/social-card.png" /><link rel="preload" as="font" type="font/woff2" href="../assets/fonts/gallery/PPNeueMontreal-Extrabold.woff2" crossorigin /><!-- standard.site --><link rel="site.standard.document" href="at://did:plc:odgxwakrg5r2zjetnrkxuh5c/site.standard.document/3mpfibvivfm2t" /><!-- /standard.site --><link rel="stylesheet" href="../assets/slabs.css" /><script src="../assets/contact.js" defer></script></head><body class="pg-blue"><div class="s-wrap">
<header class="top"> <p class="top__name"><a href="../index.html">Ron Bronson</a></p> <nav aria-label="Main navigation"><a href="../index.html#work">Work</a><a href="https://ronbronson.design">Design</a><a href="https://blog.ronbronson.dev">Blog</a><a class="nav-gh" href="https://github.com/quarterback" target="_blank" rel="me noopener" aria-label="GitHub" title="GitHub"><svg viewBox="0 0 496 512" width="22" height="22" fill="currentColor" aria-hidden="true"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 26 31.4 26 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 82 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8z"/></svg></a><a class="nav-mail" href="#contact" data-contact aria-label="Email" title="Email"><svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linejoin="round" aria-hidden="true"><rect x="2.5" y="5" width="19" height="14"/><path d="M3 6l9 7 9-7"/></svg></a></nav> </header>
<article class="project">
<h1 class="project__title">Occupant Indices</h1> <p class="project__lede">Public measurement infrastructure I built for the AI economy. Three live indices that turn scattered public data into numbers you can track over time: the price tag, the activity meter, and the labor gauge for AI work.</p> <!-- At a glance (3 November 2026) --> <dl class="glance"><div><dt>Problem</dt><dd>Every major input to the economy has a published price index. AI compute had none.</dd></div><div><dt>System</dt><dd>Three live indices, with calculators and a price worksheet a contracting officer can attach to a solicitation.</dd></div><div><dt>Mechanics</dt><dd>$CPI reprices a fixed basket of AI work every day across 2,188 models. $AIU tracks usage. $LDI compares human and AI cost on nine federal workloads.</dd></div><div><dt>Stack</dt><dd>Python fetchers; flat JSON endpoints; plain HTML, CSS and JavaScript; GitHub Actions on a daily schedule.</dd></div><div><dt>Result</dt><dd>The indices update daily, and every number can be reproduced from the commit log.</dd></div></dl>
<figure class="figure bleed"> <img src="../assets/occupant/dashboard.webp" alt="Occupant dashboard on desktop: a ticker strip of all eight readings, $CPI 62.4 on an orange chart block, $AIU 504.1 and $LDI 3.86% beside it, and the four tier prices below" /> <figcaption>The Occupant home screen, desktop. Every index and tier price on one surface, June 2, 2026.</figcaption> </figure>
<div class="project__body">
<h2>The premise</h2>
<p>Every major input to the economy has a published number you can look up: a spot price for crude, a CPI print for groceries, a wholesale rate for electricity, a capacity factor for a wind farm. Occupant builds the same kind of instrument for AI compute: a standardized, dated, methodology-driven yardstick that anyone (a procurement officer, an investor, a policy researcher, or another model) can read cold and act on.</p>
<p>Everyone gets the same access, the way they do to a public yield curve.</p>
<h2>The indices</h2>
<div class="phones"> <figure class="figure"> <img src="../assets/occupant/cpi.png" alt="Compute Price Index screen: 62.4 on an orange block, down 9.7% in one month, with an all-time chart and tier prices" /> <figcaption>$CPI, May 16, 2026. The basket price, the chart since launch, and the four tiers.</figcaption> </figure> <figure class="figure"> <img src="../assets/occupant/aiu.png" alt="AI Market Index screen: 504.1 on a sky blue block, up 2.2% in two weeks, with the three weighted components below" /> <figcaption>$AIU. Token volume, inferred spend and the energy proxy, weighted 60 / 30 / 10.</figcaption> </figure> <figure class="figure"> <img src="../assets/occupant/ldi.png" alt="Labor Displacement Index screen: substitution rate 3.86% on a yellow block, with nine federal workloads listed by human and AI cost per unit" /> <figcaption>$LDI. Nine federal workloads, human cost against AI cost per unit.</figcaption> </figure> </div>
<h3><span class="ticker">$CPI</span>Compute Price Index<span class="signal">the price signal</span></h3>
<p class="measures"><b>Measures:</b> the price of AI <i>work</i> at the basket level.</p>
<p><code>$CPI</code> defines a fixed basket of standardized workloads and re-prices that basket every day across capability tiers, volume-weighted over 2,188 models and normalized to February 2025 = 100. It’s a deflator, so the basket stays constant while its cost moves.</p>
<ul> <li>Capability tiers: <b><code>$BULK</code></b> (commodity models under $1/MTok), <b><code>$FRONT</code></b> (frontier capability, ranked by Arena ELO), <b><code>$JUDGE</code></b> (reasoning-intensive, o1 / o3 / R1-class), <b><code>$LCTX</code></b> (long-context, 128K+).</li> <li>Build Cost sub-indices apply realistic, fixed workload mixes so a reader lands on the number that matches their own usage: <b><code>$START</code></b> (startup builder), <b><code>$AGENT</code></b> (agentic systems), <b><code>$THRU</code></b> (high-throughput).</li> <li>Published across multiple horizons: since-launch, year-over-year, quarter- and month-to-date, week-over-week.</li> </ul>
<p class="reading"><b>Reading it:</b> at ~62.4, a basket of AI work costs about 38% less than at launch, and fell ~9.7% in the most recent month.</p>
<div class="phones"> <figure class="figure"> <img src="../assets/occupant/workload-tiers.png" alt="Workload tiers screen: $FRONT $11.33, $JUDGE $10.37, $LCTX $1.39, $BULK $0.60, and the all-tier basket at $25.68 per 1,000 workloads" /> <figcaption>The four capability tiers and the volume-weighted basket.</figcaption> </figure> <figure class="figure"> <img src="../assets/occupant/who-pays-what.png" alt="Who pays what screen: three buyer profiles, five basket methods as bars, price deflation by horizon, and the cognition premium of $10.73" /> <figcaption>Build Cost sub-indices by buyer profile, and deflation across five horizons.</figcaption> </figure> </div>
<h3><span class="ticker">$AIU</span>AI Economic Activity Index<span class="signal">the volume signal</span></h3>
<p class="measures"><b>Measures:</b> the volume of AI economic activity, expressed as a synthetic unit (the <b>AIU</b>) modeled on the IMF’s Special Drawing Rights.</p>
<p>The AIU is a weighted composite:</p>
<ul> <li><b>60% token throughput</b>, for usage intensity.</li> <li><b>30% inferred spend</b> (tokens × blended pricing), for economic scale.</li> <li><b>10% energy proxy</b>: a blend of token-derived energy estimate (70%) and global grid-investment growth (30%), so the energy term carries independent information.</li> </ul>
<p>Baseline February 2025 = 100. At ~504 it reflects roughly a 5× expansion in activity over about fifteen months. Weekly volume is on the order of 42.7 trillion tokens and $210M of inferred spend.</p>
<p class="reading"><b>Reading them together:</b> <i>total AI spend ≈ AIU × CPI.</i> This decomposes the headline spending figure into its two drivers, efficiency gains (price) and demand growth (volume), which is the split the bubble debate needs.</p>
<h3><span class="ticker">$LDI</span>Labor Displacement Index<span class="signal">the labor signal</span></h3>
<p class="measures"><b>Measures:</b> the pressure AI puts on real jobs, reported as two distinct numbers that answer two distinct questions.</p>
<ul> <li><b>Cost differential (structural).</b> What AI could displace at today’s pricing. Across nine pilot federal workloads, average human cost runs ~$53.56/unit against ~$0.0062/unit for AI, a cost ratio on the order of 37,000× and a structural displacement potential near $4.2B/year.</li> <li><b>Substitution rate (observable).</b> What procurement records show actually shifting: ~3.86%.</li> <li><b>Absorption dimension.</b> When a workload automates, the index classifies whether the workforce is cut, frozen, or <b>reallocated</b>, because “cheaper” and “fired” are separate events.</li> </ul>
<div class="phones"> <figure class="figure"> <img src="../assets/occupant/snap.png" alt="SNAP eligibility screen: $25.13 per human review against $0.0003 per AI review, a 98,176 times cost ratio, and 16,500 federal staff marked reallocated" /> <figcaption>The SNAP eligibility deep dive. Every number on the screen traces to a named source.</figcaption> </figure> <figure class="figure"> <img src="../assets/occupant/procurement.png" alt="AI procurement screen: Department of Defense obligated $1.18B, up 12%, with nine more agencies ranked by FY2024 spend and change" /> <figcaption>AI procurement by agency, FY2024 against FY2023, from USAspending.</figcaption> </figure> </div>
<p>Built on named public data: BLS OEWS + ECEC wages for human cost, FPDS / USAspending contractor spend as substitution proxy, OPM FedScope FTE counts for headcount, mapped through SOC and PSC crosswalks.</p>
<p class="reading"><b>Worked end-to-end:</b> the SNAP Eligibility deep dive resolves all three pillars to one real program: ~$25.13 per human review vs ~$0.0003 for AI, ~41M reviews/year, a ~2.1% substitution signal, and an “absorption: reallocated” verdict as caseload grows against a flat workforce. Every step is auditable on the page.</p>
<h2>The tools</h2>
<p>The tools let people act on the index readings.</p>
<ul> <li><b>LLM Cost Calculator.</b> Enter a monthly spend or raw token volumes, pick a workload profile, and compare a tiered model mix at live <code>$CPI</code> rates. Answers “lock in now or wait a quarter?”</li> <li><b>LDI Workload Calculator.</b> Run the human-vs-AI cost and substitution math on a workload of your own.</li> <li><b>AI Services Price Reasonableness Worksheet.</b> A print-ready, FAR-style determination sheet a contracting officer can fill in, sign, and attach to an RFP, built on the <code>$CPI</code> basket.</li> <li><b>Market Intelligence.</b> “Sabermetrics for models”: Quality-Adjusted Price, cognitive arbitrage (≈90% of frontier capability at ≈40% of the cost), and tier analysis across the market.</li> </ul>
<div class="phones"> <figure class="figure"> <img src="../assets/occupant/market.png" alt="Market intelligence screen: weekly tokens 41.8T, reasoning share 7.4%, provider share of volume, five value leaders by quality adjusted price, and average price and Elo by tier" /> <figcaption>Market Intelligence. Quality-adjusted price puts Gemini 2.0 Flash at the top of the value table.</figcaption> </figure> <figure class="figure"> <img src="../assets/occupant/model-prices.png" alt="Model prices screen: blended price per million tokens for each model, grouped by Frontier, Reasoning and Budget tier with a bar for each" /> <figcaption>Model prices per million tokens, grouped by tier, with the tier average on each header.</figcaption> </figure> </div>
<h2>How it’s built</h2>
<p>The architecture follows directly from the infrastructure-first mandate.</p>
<dl class="stack-block"> <dt>Frontend</dt> <dd>Vanilla HTML5 / CSS3 / JavaScript. Flat files on any static host.</dd> <dt>Data pipeline</dt> <dd>Python 3 in <code>src/</code>: dedicated fetchers per source (OpenRouter, LiteLLM, BLS, FPDS / USAspending, OPM FedScope, BloombergNEF grid data), calculators (<code>calculate_cpi</code>, <code>calculate_aeai</code>, <code>calculate_ldi</code>), a model-tier registry, signal derivation, and historical backfill.</dd> <dt>Storage</dt> <dd>Flat-file JSON in <code>data/</code>, including machine-readable endpoints another agent can pull as a grounded, dated source.</dd> <dt>Automation</dt> <dd>GitHub Actions on a daily cron recompute the indices and commit fresh JSON. The git history <i>is</i> the data lineage: every published number is reproducible from the commit log.</dd> <dt>Algorithms</dt> <dd>Deterministic, documented formulas with published weights and baselines.</dd> <dt>Privacy</dt> <dd>Client-side localStorage for the theme toggle only.</dd> <dt>License</dt> <dd>Parachute Commons: free for personal, educational, and non-commercial use; tiered terms at commercial scale.</dd> <dt>Cost to operate</dt> <dd>~$50/month.</dd> </dl>
<h2>What it took</h2>
<ul> <li><b>Economic index design.</b> Baskets, volume weighting, normalization, base periods, and a synthetic composite unit (the AIU’s SDR analogy), applied to a new domain. The first energy component mostly repeated the token-volume signal under another name. I revised the model to include an independent grid-investment series, while documenting its annual lag and limits as a proxy for AI energy use. <a href="https://github.com/quarterback/improved-succotash/blob/main/reports/aar-aeai-energy-index-march-2026.md">The decision record</a> shows what changed and why.</li> <li><b>Data engineering on messy public sources.</b> Reconciling price discrepancies across OpenRouter and LiteLLM, building SOC ↔ PSC ↔ FedScope crosswalks, and designing fallback hierarchies.</li> <li><b>Domain range, coherently connected.</b> CPI / macro methodology, federal procurement (FAR, FPDS, FedRAMP), labor economics (BLS, JOLTS, OPM), and energy capital expenditure.</li> <li><b>Product and communication judgment.</b> Designing for a thirty-second read by a procurement officer and holding a deliberate editorial voice.</li> <li><b>Pragmatic systems architecture.</b> Static-site-plus-cron with git as an audit log; three indices that compose, where the LDI consumes the live CPI basket.</li> </ul>
<p class="kicker">The three indices are public, recomputed daily, and auditable.</p>
</div>
</article>
<footer class="foot" id="contact"> <div class="hx-icons" aria-label="Elsewhere"><a class="hx-i" href="https://bsky.app/profile/ronbronson.com" target="_blank" rel="me noopener" aria-label="Bluesky" title="Bluesky"><svg viewBox="0 0 576 512" fill="currentColor" aria-hidden="true"><path d="M407.8 294.7c-3.3-.4-6.7-.8-10-1.3 3.4 .4 6.7 .9 10 1.3zM288 227.1C261.9 176.4 190.9 81.9 124.9 35.3 61.6-9.4 37.5-1.7 21.6 5.5 3.3 13.8 0 41.9 0 58.4S9.1 194 15 213.9c19.5 65.7 89.1 87.9 153.2 80.7 3.3-.5 6.6-.9 10-1.4-3.3 .5-6.6 1-10 1.4-93.9 14-177.3 48.2-67.9 169.9 120.3 124.6 164.8-26.7 187.7-103.4 22.9 76.7 49.2 222.5 185.6 103.4 102.4-103.4 28.1-156-65.8-169.9-3.3-.4-6.7-.8-10-1.3 3.4 .4 6.7 .9 10 1.3 64.1 7.1 133.6-15.1 153.2-80.7 5.9-19.9 15-138.9 15-155.5s-3.3-44.7-21.6-52.9c-15.8-7.1-40-14.9-103.2 29.8-66.1 46.6-137.1 141.1-163.2 191.8z"></path></svg></a><a class="hx-i" href="https://mastodon.social/@ronbronson" target="_blank" rel="me noopener" aria-label="Mastodon" title="Mastodon"><svg viewBox="0 0 448 512" fill="currentColor" aria-hidden="true"><path d="M433 179.1c0-97.2-63.7-125.7-63.7-125.7-62.5-28.7-228.6-28.4-290.5 0 0 0-63.7 28.5-63.7 125.7 0 115.7-6.6 259.4 105.6 289.1 40.5 10.7 75.3 13 103.3 11.4 50.8-2.8 79.3-18.1 79.3-18.1l-1.7-36.9s-36.3 11.4-77.1 10.1c-40.4-1.4-83-4.4-89.6-54-.6-4.6-.9-9.3-.9-13.9 85.6 20.9 158.7 9.1 178.7 6.7 56.1-6.7 105-41.3 111.2-72.9 9.8-49.8 9-121.5 9-121.5zM357.9 304.3l-46.6 0 0-114.2c0-49.7-64-51.6-64 6.9l0 62.5-46.3 0 0-62.5c0-58.5-64-56.6-64-6.9l0 114.2-46.7 0c0-122.1-5.2-147.9 18.4-175 25.9-28.9 79.8-30.8 103.8 6.1l11.6 19.5 11.6-19.5c24.1-37.1 78.1-34.8 103.8-6.1 23.7 27.3 18.4 53 18.4 175l0 0z"></path></svg></a><a class="hx-i" href="https://www.linkedin.com/in/ronbronson/" target="_blank" rel="me noopener" aria-label="LinkedIn" title="LinkedIn"><svg viewBox="0 0 448 512" fill="currentColor" aria-hidden="true"><path d="M100.3 448l-92.9 0 0-299.1 92.9 0 0 299.1zM53.8 108.1C24.1 108.1 0 83.5 0 53.8 0 39.5 5.7 25.9 15.8 15.8s23.8-15.8 38-15.8 27.9 5.7 38 15.8 15.8 23.8 15.8 38c0 29.7-24.1 54.3-53.8 54.3zM447.9 448l-92.7 0 0-145.6c0-34.7-.7-79.2-48.3-79.2-48.3 0-55.7 37.7-55.7 76.7l0 148.1-92.8 0 0-299.1 89.1 0 0 40.8 1.3 0c12.4-23.5 42.7-48.3 87.9-48.3 94 0 111.3 61.9 111.3 142.3l0 164.3-.1 0z"></path></svg></a><a class="hx-i" href="https://github.com/quarterback" target="_blank" rel="me noopener" aria-label="GitHub" title="GitHub"><svg viewBox="0 0 512 512" fill="currentColor" aria-hidden="true"><path d="M216.5 362.5c-66-8-112.5-55.5-112.5-117 0-25 9-52 24-70-6.5-16.5-5.5-51.5 2-66 20-2.5 47 8 63 22.5 19-6 39-9 63.5-9s44.5 3 62.5 8.5c15.5-14 43-24.5 63-22 7 13.5 8 48.5 1.5 65.5 16 19 24.5 44.5 24.5 70.5 0 61.5-46.5 108-113.5 116.5 17 11 28.5 35 28.5 62.5l0 52C323 491.5 335.5 500 350.5 494 441 459.5 512 369 512 257 512 115.5 397 0 255.5 0S0 115.5 0 257c0 111 70.5 203 165.5 237.5 13.5 5 26.5-4 26.5-17.5l0-40c-7 3-16 5-24 5-33 0-52.5-18-66.5-51.5-5.5-13.5-11.5-21.5-23-23-6-.5-8-3-8-6 0-6 10-10.5 20-10.5 14.5 0 27 9 40 27.5 10 14.5 20.5 21 33 21s20.5-4.5 32-16c8.5-8.5 15-16 21-21z"></path></svg></a><a class="hx-i" href="https://www.instagram.com/ronbronson/" target="_blank" rel="me noopener" aria-label="Instagram" title="Instagram"><svg viewBox="0 0 448 512" fill="currentColor" aria-hidden="true"><path d="M224.3 141a115 115 0 1 0 -.6 230 115 115 0 1 0 .6-230zm-.6 40.4a74.6 74.6 0 1 1 .6 149.2 74.6 74.6 0 1 1 -.6-149.2zm93.4-45.1a26.8 26.8 0 1 1 53.6 0 26.8 26.8 0 1 1 -53.6 0zm129.7 27.2c-1.7-35.9-9.9-67.7-36.2-93.9-26.2-26.2-58-34.4-93.9-36.2-37-2.1-147.9-2.1-184.9 0-35.8 1.7-67.6 9.9-93.9 36.1s-34.4 58-36.2 93.9c-2.1 37-2.1 147.9 0 184.9 1.7 35.9 9.9 67.7 36.2 93.9s58 34.4 93.9 36.2c37 2.1 147.9 2.1 184.9 0 35.9-1.7 67.7-9.9 93.9-36.2 26.2-26.2 34.4-58 36.2-93.9 2.1-37 2.1-147.8 0-184.8zM399 388c-7.8 19.6-22.9 34.7-42.6 42.6-29.5 11.7-99.5 9-132.1 9s-102.7 2.6-132.1-9c-19.6-7.8-34.7-22.9-42.6-42.6-11.7-29.5-9-99.5-9-132.1s-2.6-102.7 9-132.1c7.8-19.6 22.9-34.7 42.6-42.6 29.5-11.7 99.5-9 132.1-9s102.7-2.6 132.1 9c19.6 7.8 34.7 22.9 42.6 42.6 11.7 29.5 9 99.5 9 132.1s2.7 102.7-9 132.1z"></path></svg></a><a class="hx-i" href="https://twitter.com/ronbronson" target="_blank" rel="me noopener" aria-label="Twitter" title="Twitter"><svg viewBox="0 0 448 512" fill="currentColor" aria-hidden="true"><path d="M357.2 48L427.8 48 273.6 224.2 455 464 313 464 201.7 318.6 74.5 464 3.8 464 168.7 275.5-5.2 48 140.4 48 240.9 180.9 357.2 48zM332.4 421.8l39.1 0-252.4-333.8-42 0 255.3 333.8z"></path></svg></a><a class="hx-i" href="https://letterboxd.com/ronbronson/" target="_blank" rel="me noopener" aria-label="Letterboxd" title="Letterboxd"><svg viewBox="0 0 640 512" fill="currentColor" aria-hidden="true"><path d="M521.3 128C586.9 128 640 181.1 640 246.6S586.9 365.2 521.3 365.2c-42.5 0-79.7-22.3-100.7-55.8 11.4-18.2 18-39.7 18-62.8s-6.6-44.6-18-62.8l.8-1.2c20.8-32.3 56.8-53.9 97.9-54.6l2 0zM320 128c42.5 0 79.7 22.3 100.7 55.8-11.4 18.2-18 39.7-18 62.8s6.6 44.6 18 62.8l-.8 1.2c-20.8 32.3-56.8 53.9-97.9 54.6l-2 0c-42.5 0-79.7-22.3-100.7-55.8 11.4-18.2 18-39.7 18-62.8s-6.6-44.6-18-62.8l.8-1.2c20.8-32.3 56.8-53.9 97.9-54.6l2 0zm-201.3 0c42.5 0 79.7 22.3 100.7 55.8-11.4 18.2-18 39.7-18 62.8s6.6 44.6 18 62.8l-.8 1.2c-20.8 32.3-56.8 53.9-97.9 54.6l-2 0C53.1 365.1 0 312.1 0 246.6S53.1 128 118.7 128z"></path></svg></a><a class="hx-i" href="https://bookhive.buzz/profile/ronbronson.com" target="_blank" rel="me noopener" aria-label="Bookhive" title="Bookhive"><svg viewBox="0 0 448 512" fill="currentColor" aria-hidden="true"><path d="M384 512L96 512c-53 0-96-43-96-96L0 96C0 43 43 0 96 0L400 0c26.5 0 48 21.5 48 48l0 288c0 20.9-13.4 38.7-32 45.3l0 66.7c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0zM96 384c-17.7 0-32 14.3-32 32s14.3 32 32 32l256 0 0-64-256 0zm32-232c0 13.3 10.7 24 24 24l176 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-176 0c-13.3 0-24 10.7-24 24zm24 72c-13.3 0-24 10.7-24 24s10.7 24 24 24l176 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-176 0z"></path></svg></a><a class="hx-i" href="https://record.club/ron" target="_blank" rel="me noopener" aria-label="Record.club" title="Record.club"><svg viewBox="0 0 512 512" fill="currentColor" aria-hidden="true"><path d="M0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0zm256-96a96 96 0 1 1 0 192 96 96 0 1 1 0-192zm0 240a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-112a32 32 0 1 0 0-64 32 32 0 1 0 0 64z"></path></svg></a><a class="hx-i" href="https://listening.ronbronson.com" target="_blank" rel="me noopener" aria-label="Listening" title="Listening"><svg viewBox="0 0 448 512" fill="currentColor" aria-hidden="true"><path d="M64 224c0-88.4 71.6-160 160-160s160 71.6 160 160l0 37.5c-10-3.5-20.8-5.5-32-5.5l-16 0c-26.5 0-48 21.5-48 48l0 128c0 26.5 21.5 48 48 48l16 0c53 0 96-43 96-96l0-160C448 100.3 347.7 0 224 0S0 100.3 0 224L0 384c0 53 43 96 96 96l16 0c26.5 0 48-21.5 48-48l0-128c0-26.5-21.5-48-48-48l-16 0c-11.2 0-22 1.9-32 5.5L64 224z"></path></svg></a><a class="hx-i" href="https://www.last.fm/user/statechampion" target="_blank" rel="me noopener" aria-label="Last.fm" title="Last.fm"><svg viewBox="0 0 512 512" fill="currentColor" aria-hidden="true"><path d="M225.8 367.1l-18.8-51s-30.5 34-76.2 34c-40.5 0-69.2-35.2-69.2-91.5 0-72.1 36.4-97.9 72.1-97.9 66.5 0 74.8 53.3 100.9 134.9 18.8 56.9 54 102.6 155.4 102.6 72.7 0 122-22.3 122-80.9 0-72.9-62.7-80.6-115-92.1-25.8-5.9-33.4-16.4-33.4-34 0-19.9 15.8-31.7 41.6-31.7 28.2 0 43.4 10.6 45.7 35.8l58.6-7c-4.7-52.8-41.1-74.5-100.9-74.5-52.8 0-104.4 19.9-104.4 83.9 0 39.9 19.4 65.1 68 76.8 44.9 10.6 79.8 13.8 79.8 45.7 0 21.7-21.1 30.5-61 30.5-59.2 0-83.9-31.1-97.9-73.9-32-96.8-43.6-163-161.3-163-86.1 0-131.8 54.5-131.8 147.2 0 89.1 45.7 137.2 127.9 137.2 66.2 0 97.9-31.1 97.9-31.1z"/></svg></a><a class="hx-i" rel="me" href="mailto:ron@ronbronson.com" aria-label="Email" title="Email"><svg viewBox="0 0 512 512" fill="currentColor" aria-hidden="true"><path d="M48 64c-26.5 0-48 21.5-48 48 0 15.1 7.1 29.3 19.2 38.4l208 156c17.1 12.8 40.5 12.8 57.6 0l208-156c12.1-9.1 19.2-23.3 19.2-38.4 0-26.5-21.5-48-48-48L48 64zM0 196L0 384c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-188-198.4 148.8c-34.1 25.6-81.1 25.6-115.2 0L0 196z"></path></svg></a></div> <h2>Colophon, with digressions</h2> <p><b>Type</b> PP Neue Montreal, Hanken Grotesk, IBM Plex Mono</p> <p><b>Built with</b> HTML, CSS, JavaScript, SVG</p> <p><b>Images</b> static screenshots</p> <p><b>Hosting</b> GitHub, Vercel</p> <p class="digression" id="digression">Inexplicably, a Green Bay Packers shareholder.</p>
</footer>
</div> <script> /* Digressions — one aside, picked at random per load (never the same one twice in a row). Add or edit entries in DIGRESSIONS; the footer shows one at a time so the list never has to be spelled out. */ (function () { var DIGRESSIONS = [ "Inexplicably, a Green Bay Packers shareholder.", "Favorite sports teams: Toronto Blue Jays, Vimpelin Veto, New Jersey Devils, Lapuan Virkiä, <s>New York Jets</s>, Portland Timbers, New York Knicks, Portland Thorns, Brighton & Hove Albion, Sassuolo, Toluca, Toronto Tempo, Montreal Expos (RIP)", "<em>Have you seen my fragrance collection?</em> <a href='https://www.oksmelly.xyz/' target='_blank' rel='noopener'>it’s here</a>.", "I’m a longtime tea sommelier. I once curated the tea menu at <a href='https://hopscotchcoffee.com/' target='_blank' rel='noopener'>Hopscotch Coffee</a> in Bloomington. Ask me for loose-leaf recs!", "Favorite wine regions: Slovenia, Georgia or anything that aged in amphorae or an old boot. I’m not picky.", "I’ve coached high school tennis for ten years across 3 states. My career varsity record apparently is 91-33-4. 1 team state championship, 4 District/Regional titles, 5 Conference titles. 4 individual state champions. So far…", "Yes, I have a <a href='https://www.discogs.com/user/quarterback/collection?header=1' target='_blank' rel='noopener'>Discogs</a> 🙄", "I actually grew up watching golf, because my grandfather played. I still like a Par 3 because of him.", "Last time I went fishing? 1994.", "Unsurprisingly, I was once a bar trivia host in Bloomington. One step closer to my true calling: game show host." ]; var el = document.getElementById("digression"); if (!el) return; var last = -1; try { last = parseInt(sessionStorage.getItem("rb-digression"), 10); } catch (e) {} var i = Math.floor(Math.random() * DIGRESSIONS.length); while (DIGRESSIONS.length > 1 && i === last) i = Math.floor(Math.random() * DIGRESSIONS.length); try { sessionStorage.setItem("rb-digression", i); } catch (e) {} el.innerHTML = DIGRESSIONS[i]; })(); </script></body></html>