← PROTOTYPES

The tape is the header now

The timeline is no longer a view you switch to. It is a strip across the top of the earnings room that never leaves the screen, and the view underneath — MONTH, WEEK or DAY — follows whatever you tap on it. One bar can be a day, a week or a month, so the whole season fits on one screen or a single day can fill it. Nothing is deployed: branch hub/earnings-4-20260923, built from Hub production b6913cb.

“I do like this timeline view, but it's very thin. So how about just having it on top of the other views, more like a header.” · “There's a blue line. I'm trying to click on it and it doesn't say… nothing. On the 23rd. October. I don't get it.” · “It's requiring a lot of scrolling… don't you think it should be a little more dynamic to zoom? I feel like it's empty. I'm going to the week view… no report.” · “What happened to the daily view? … The daily view just has a scrolling downwards.”

1 · What the page shows

The earnings room has three parts now, top to bottom:

The one thing that moves and the one thing that never does. Bar height is scaled to the busiest bar actually on screen and re-scaled as you drag, so a quiet fortnight still has a shape. Colour is never re-scaled: red always means 25 or more reports, in season and out of it.

As it opens — today, out of season

the earnings room as it opens
1680 px · the tape reaches JUL 18 2026 → OCT 26 2026 with ZOOM on DAYS; bars of 1, 2, 9, 4, 8, 6, 4 through late September, orange 14, 12, 18 at the end of October, SEP and OCT written underneath, today's 23 in a cyan chip. The line under it reads “showing ALL names · 413 reports on this tape”. Below: WED SEP 23 2026 · TODAY · 1 report, laid across four headings, with CTAS +3.0% under BEFORE THE OPEN.

Zoomed out — two years in one screen

the tape zoomed to months
1680 px · ZOOM on MONTHS: 25 bars from SEP 1 2025 to SEP 1 2027, the four reporting seasons standing out in red at 173, 181, 168, 175 and 177, the years 2025 · 2026 · 2027 written underneath, and the far future thinning honestly to 29, 14, 2, 1, 1 — because that is how far ahead the calendar actually knows. “1658 reports on this tape”.

In season — a heavy November day

4 November in the day view
1680 px · the tape is on November: 33, 33 and 38 in red, 19, 12, 23, 24 in orange. Underneath, WED NOV 4 2026 · AHEAD · 38 reports, spread across the four headings — 1 before the open (GWW), and 37 with no announced time wrapped into five short columns (GOOGL, CAT, ARM, QCOM, MCD, NOW, HOOD…). The whole day is on one screen. It used to be a single column you scrolled.

2 · The blue line, and everything else that said nothing

The blue line was today. It was drawn as decoration, so it had nothing to say and nothing happened when you clicked it. Now it is a real mark with words on it: “the cyan line is TODAY, WED SEP 23 — everything left of it has happened, everything right of it is still to come”. And every other mark answers too:

What you touchWhat it saysWhat happens when you click
A bar with reportsWED NOV 4 · 38 names you track report · GOOGL, CAT, ARM · click to open the day belowThe day opens underneath
An empty barFRI OCT 23 · nothing for FAV · 14 reports across all names · click to open the day belowThe day opens, and says the same thing in full
A week bar (ZOOM · WEEKS)the week of MON OCT 19 · 14 names you track report · click to open the week belowWEEK opens on that week
A month bar (ZOOM · MONTHS)NOVEMBER 2026 · 120 names you track report · click to open the month belowMONTH opens on that month
The month/year stripSEP · 22 bars—

The bar you are looking at is highlighted on the tape, so you can always see where the view below is standing. Zoom is the three buttons, a pinch, or ⌘/ctrl and the wheel; a plain wheel or a drag still walks the season sideways.

3 · “I feel like it's empty” — it wasn't empty, it was narrowed

It was your FAV strip: three names rarely report in the same week. Nothing on the screen said so. Two changes:

FAV on this week
1680 px · FAV, this week: six days say NO REPORTS and Thursday has COST after the close. But the tape now says “showing FAV · 64 of 413 reports on this tape · SHOW ALL NAMES” — the room is narrow, not broken.
FAV in November
1680 px · the same three-name strip in November has 13 reports across five days (PLTR, CIFR, AMD, ANET, ALAB, GOOGL…). Out of season is out of season.
the same week with all names
1680 px · one tap on SHOW ALL NAMES: the same week goes from 1 report to 3 (CBRS, CTAS +3.0%, COST) and the tape fills out to the whole universe — 413 reports instead of 64.

4 · The daily view, without the fall

DAY keeps everything it had, but the day is read across now: before the open · at a set time · after the close · time not announced. Each heading takes width in proportion to how many names sit under it, and a busy heading wraps its names instead of running off the bottom. The older UPCOMING | PAST · REPORTED list is still there, one click below, under “everything upcoming and everything reported”.

4 November on a phone
390 px · the same 38-name day on a phone: four headings in two rows, the busy one wrapping GOOGL, CAT, ARM, QCOM, MCD, NOW, HOOD, CVS two-up with its own short scroll.
the room as it opens on a phone
390 px · as it opens: tape, zoom strip, the say line, and today's single report — all above the fold.

5 · Where each number comes from

NumberWhere it comes fromHow it is read
Every bar on the tapeearnings_events (ticker + date only), filtered to the names in cohortsOne request per 120 days of tape; a full page is admitted in the line under the tape
The reports in the viewearnings_events, all columns, for that one month, week or dayOne request per view
Which names are in a cohortThe Hub's own cohort map, already loadedThe room never asks for it again
The order of names, and their dotsMarket caps and cohorts the board already readNo extra request; a size that has not arrived is said out loud, never guessed
“before the open” / “after the close”report_time on the row — and only when the row has oneNo time stored means “time not announced”, never a guess

The tape writes nothing, anywhere. Neither does the room.

6 · Report times keep themselves current now

The earnings catcher does exist, and it works. It is the Supabase function fmp-events (v2), run by the schedule fmp-events-2h every two hours: it sweeps FMP's earnings calendar from a week back to three weeks ahead, walks the universe 30 names at a time, and upserts into earnings_events on ticker + date.

Why it carries no times. Its row builder writes exactly seven fields — ticker, date, EPS actual, EPS estimate, revenue actual, revenue estimate, surprise — and report_time is not one of them. It never has been. That is the whole reason Costco, Micron and ASML said “time unknown”: nothing was ever writing that column.

What is added here. A second, small function, earnings-report-time, scheduled by pg_cron for 09:23 New York on weekdays. It is the same fill that was run by hand on 23 September, with the same four rules:

It runs one at a time (a flag in app_config), leaves its last run's counts where anyone can read them, and reads its key from the Supabase environment. No key is on any Mac, and neither file contains one. Rolling it back is one line, written at the top of the migration.

Honest gap: this estate's other schedules live only inside Supabase, so there is no example in git of how they pass their bearer. The migration reads it from Vault by name and says, in its own comment, to use whatever pattern the existing crons use if that differs. The coordinator applies it; nothing was deployed or scheduled from here.

7 · What could be wrong

8 · What was not done

9 · Three decisions for you

1 · The room opens on ALL names, not your strip

Today: enter EVENTS and you see every name, with the strip one tap away; tap a cohort and the room follows until you leave. My recommendation: keep it. A calendar that opens empty teaches you not to trust it. If you would rather it always followed your strip, it is one line back.

2 · DAY is where the room lands

Today: the room opens on the day, under the tape — and if nothing reports today, it moves to the next day that does and says so. My recommendation: keep it. WEEK is one tap, and the tape is always there for the season. The alternative is landing on WEEK, which shows more at once but less of what is happening now.

3 · How far the tape should reach

Today: DAYS reaches about three months, WEEKS about a year, MONTHS two years, each measured from the month you are in. My recommendation: keep it and see how it reads for a week. Reaching further costs another request per 120 days; it is one number to change if you want more.