Conversation
The hero spent its largest type on a logo the nav already carries, said "Energy infrastructure, in plain sight." (which does not say what GridTilt is, or that anything is sourced), and showed four numbers with no date and no provenance. For a product whose whole differentiator is sourced numbers, the front door argued the opposite. - The sentence leads: "The AI power buildout, tracked with sourced numbers." with "sourced numbers" set in the marketing serif italic, which anchor.css already reserves for exactly this emphasis. The scope line underneath names what is covered. The wordmark drops to masthead size. - Every figure in the ledger now prints the date its own dataset was last refreshed, read from the same endpoint that serves the figure. Nothing is hardcoded, and a stat whose API returns no date renders "no date" rather than borrowing today's. This surfaces real staleness immediately: the deals figure reads "as of 20 May 2026", because it is. - Each ledger cell links to the module that shows its working. - Adds the live cluster map behind the hero, using the same projection and the same dot semantics as the social card, so the landing page and the images that go out on X read as one system. It uses geoAlbers rather than geoAlbersUsa, whose composite clip draws stray Alaska and Hawaii inset frames over a lower-48 feature set. - Cuts the reveal delay from 1.5s to 0.12s. The old hero showed a visitor a bare wordmark for a second and a half before saying anything. - Uses .gt-tagline-primary / .gt-tagline-emphasis, which were designed in anchor.css for the landing and then never wired to anything. Also carries the Virginia winding fix from the daily-card branch, because this hero's map reads the same geojson: the ring shipped backwards, d3 read it as the whole sphere minus Virginia, and every geoAlbersUsa fitSize on the site has been fitting to a global extent. tsc clean, 300 tests pass, client build passes, verified in headless Chrome at 1440px and 430px.
The card claimed "Thirty-three tracked facilities" while the map rendered directly beneath it plotted 58. /api/datacenters returns 58 today. The count was never going to hold. The datacenter ingester appends newly discovered facilities every six hours, so any number written into the copy starts drifting the moment it ships. This is the same class of problem as a stat with no as-of date: a claim the page cannot back up. The caption now reads from /api/datacenters, sharing the query key with RealUSMap so react-query serves both from one fetch and the sentence cannot disagree with the dots. While the request is in flight it drops the number rather than guessing one. Checked the neighbouring claim rather than assuming: "One hundred public companies" is correct, /api/stack carries exactly 100 unique tickers across 17 sectors, so it stays as written.
|
Added in Checked the neighbouring claim rather than assuming it was wrong too: "One hundred public companies" is correct ( |
Two defects found by actually scrolling the rendered page rather than reading the source. The landing shipped two footers. App.tsx renders SiteFooter inside <main> for every route, including "/", and Home.tsx rendered HomeFooter on top of it. The front door therefore ended with two brand lockups, two copyright lines and two source lists stacked on each other. SiteFooter is the more complete of the two, so HomeFooter goes. The two links only HomeFooter carried, the GitHub repo and the contact address, move into SiteFooter's Data column, so nothing is lost and every page gains them rather than just "/". Separately, the header and the footer disagreed on the company's own name. The animated Wordmark splits the constant "GridTilt" into "Grid" + "Tilt", while HomeFooter hardcoded its own lockup and rendered the accent half lowercase, as "Grid" + "tilt". Wordmark now exports BRAND_TEXT, BRAND_HEAD and BRAND_TAIL, and the surfaces share one split. The guard test pins the constant and fails on any surface that renders the brand with a lowercase second half, because this is a one-character drift that reads as correct until you put the header and the footer side by side. Also checked and deliberately left alone: the em dash rule. Seven hits in client/src are all JSX comments, null placeholders, or the DemandChart line that strips em dashes out of annotation labels. No product copy violates it. tsc clean, 289 tests pass, client build passes, verified in Chrome.
|
Two more found by scrolling the rendered page rather than reading source ( The landing shipped two footers. The header and footer disagreed on the company's own name. Checked and deliberately left alone: the no-em-dash house rule. All 7 hits in |
The hero rewrite in this branch changed three things that are settled brand decisions, so they are reverted here and the part worth keeping stays. Reverted: - The headline read "The AI power buildout, tracked with sourced numbers." Marquee surfaces stay power and grid first; AI belongs on data labels deep in the product, not on the front door. - "sourced numbers" rendered in Source Serif 4 italic via .gt-tagline-emphasis, which was dead CSS on main. Serif is not part of this brand. - The typed wordmark dropped to 28-40px masthead size so the sentence could lead. It leads instead, at full size, as shipped. - The hero map backdrop went from 0.085 to 0.5 opacity. Background layers stay low opacity, and a map behind the wordmark was already rejected once. The GridPulse backdrop stands on its own, so hero-map.tsx is removed and anchor.css returns to main. Kept, and the reason this branch exists: - Every hero stat prints the date its own dataset was last refreshed, read from the same endpoint that serves the figure. Nothing is hardcoded, and a stat whose API returns no date renders "no date" instead of borrowing today. - Each stat links to the module that shows its working. The dates this puts on screen are the point and they are not flattering: clusters 26 Jun, deals 20 May, GPU 5 Aug from the live sweep. Two of the four datasets are weeks stale and the front page now says so. tsc clean, 289 tests pass, build passes, homepage verified in Chrome.
What
Every figure on the front door now prints the date its own dataset was last refreshed, read from the same endpoint that serves the figure. Nothing is hardcoded, and a stat whose API returns no date renders
no daterather than borrowing today's.The landing itself is unchanged: the typed wordmark leads at full size and the tagline stays "Energy infrastructure, in plain sight."
The dates this puts on screen
They are the point, and they are not flattering:
Two of the four datasets are weeks stale and the front page now says so out loud. That is the argument for mounting the daily cluster-refresh pipeline, not an argument against shipping this.
Also in this branch
/api/datacenters, sharing the query key withRealUSMapso the sentence cannot disagree with the dots. The neighbouring "One hundred public companies" was checked rather than assumed and is correct.App.tsxrendersSiteFooterfor every route including/, andHome.tsxrenderedHomeFooteron top of it.HomeFootergoes; its two unique links move intoSiteFooterso every page gains them.Wordmarknow exports the split as constants and a guard test fails on any surface that renders the accent half lowercase.Reverted from the earlier version of this branch
Three changes here collided with settled brand decisions and were backed out:
.gt-tagline-emphasis, which was dead CSS on main. Serif is not part of this brand.0.085to0.5opacity. Background layers stay low opacity and a map behind the wordmark was already rejected once, sohero-map.tsxis removed andanchor.cssreturns to main.Verification
tscclean, 289 tests pass, build passes, homepage rendered and checked in Chrome. Merged together with #12 and #14 on top of current main: 305 tests pass, tsc clean, build passes. Only conflict across the three is a blank line in.gitignore.Not tested: real touch interaction and hover states on the stat cards.