← PROTOTYPES

The EVENTS tab, rebuilt to your earnings proposal

MONTH is the shape of the season, WEEK is the working view, DAY is the list you already have. Everything on the proposal page is now in the Hub itself, reading your real earnings table, and nothing that was in the section has been dropped. Nothing is deployed: branch hub/events-earnings-20260923, built from production a11b6b7. The ECONOMIC tab and the nudge were not touched.

“I cannot lose any information that I have. I think the best simple way is just a monthly view or the calendar views. Or a weekly view, that kind of situation, but a little bit of polish.”

1 · Your four decisions — I took the proposal's own recommendation on each

Each one is a single word in the page, so you can change any of them in a minute. They all sit together at the top of the calendar's code.

The questionWhat the proposal recommendedWhat I builtTo change it
Month cell: load bar and top names, or pure heat?The bar, with namesLoad bar + the count + the three biggest names + “+N more”ERC_MONTH_CELL = "HEAT" leaves the bar and the count alone
Which names get through on a 38-ticker day?Biggest by market capBiggest first, using the market caps the board has already read — no extra request. A company with no stored size sorts last and is never treated as a zeroERC_NAME_ORDER = "FAV" puts your favourites first, then size
Colour by cohort?OnOn. The dot is the cohort; the result (green beat, yellow in line, red miss) is the chip's edge and its number, so the two can never be read for each other. The legend under the view names only the cohorts actually on screenERC_COHORT_HUE = false leaves result colour only
Dividends: sub-tab or filter chip?Kept exactly as-isUntouched — still the third sub-tab beside ALL and EARNINGS, still saying it has no source wiredSay the word and it becomes a chip

One more choice, which the proposal implies but does not ask: WEEK is what the tab opens on. The proposal calls it “the working view · where you actually live during a reporting season” and calls DAY “the drill-in”. If you would rather land on MONTH or DAY, that is one word too: ernSpan: "WEEK".

2 · WEEK — the working view, and where the tab opens

the current week at 1680
1680 · this week, scrolled to the bottom so the legend shows

What that screenshot says: MON SEP 21 → SUN SEP 27 across the top with ◀ ▶ and TODAY, then one row per day. Monday has NO REPORTS. Tuesday carries CBRS under “TIME NOT SET · 1”. Wednesday — today — is tinted and carries CTAS +3.0% under “BEFORE THE OPEN · 1”, the surprise in green because it beat. Thursday carries COST. Friday, Saturday and Sunday are empty and say so. At the foot, the legend for the two cohorts on screen (BLUE, GROWTH) and the line “3 reports in this week · click a ticker for its card”.

The groups are the four the data actually has: before the open, at a set time (when the supplier gives a clock time), after the close, and time not set — which, as your proposal measured, is almost everything still to come. It is a group with its own heading, not an afterthought.

The same week in the busiest part of the season

the week of 26 October at 1680
1680 · MON OCT 26 → SUN NOV 1 · 100 reports in one week
the same week on a phone
390 · the same week, the day label above its chips

This is the week the month view sends you to. Monday 26th: 6 reporting. Tuesday 27th: 19. Wednesday 28th: 33, one of them (FDX) after the close, the other 32 with no time set — GOOGL, GOOG, MSFT, META, TSLA first because they are the biggest. Thursday 29th: 33, led by AAPL, AMZN, LLY. Friday 30th: 9, led by XOM, ABBV, CVX. The weekend says NO REPORTS. On the phone the same week reads down the screen, four or five chips a row, each one still big enough to hit with a thumb.

A chip opens the card — the same card the DAY view draws

a card opened from a chip at 1680
1680 · CBRS opened under its own day
the same card on a phone
390 · the same card

Clicking CBRS opens the card directly under Tuesday's row, with a × CLOSE at its corner, and the chip lights up so you can see which one is open. The card is not a new thing: it is the Hub's own earnings block, so it says TIME UNKNOWN, UNCONFIRMED, 1d ago, and “estimate · no result stored for this date” above EPS −0.21 and REV $210.2M. Everything that card can show — the release link, the transcript, the call, the summary and its source — comes with it, because the calendar reads the same columns the DAY view reads.

3 · MONTH — the shape of the season

November at 1680
1680 · NOVEMBER 2026 · 251 reports in the month

This is the picture your proposal was built around, and the number it named is really there: Wed 4 Nov carries 38, in red. Around it, 28 and 29 October carry 33 each, 5 Nov 24, 3 Nov 23, 27 Oct 19, 2 Nov 12. The load bar under each date fills in proportion to the heaviest day in view and changes colour with the load — cyan on a quiet day, orange from 12, red from 25. Then the three biggest names: 4 Nov gives GOOGL, CAT, ARM and +35 more; 29 Oct gives AAPL, AMZN, LLY and +30 more. Days from the neighbouring month are dimmed but kept, so the weeks stay whole, and clicking any day opens its week.

November on a phone
390 · all seven columns kept — a calendar with columns missing stops being a calendar

On the phone the month keeps its seven columns and loses only the report time inside a cell. The counts, the bars and the three names survive at 390px; the span controls wrap onto their own line under the date.

September at 1680
1680 · the month you are in — 30 reports, the quiet end of the season

4 · DAY — untouched

the day view at 1680
1680 · UPCOMING | PAST · REPORTED, exactly as it was
the day view on a phone
390 · the same list

DAY is the list that is already in the Hub, with nothing changed: two independently scrolling columns, COST / NKE / MU upcoming with their estimates, CTAS today with EPS 1.35 → 1.39 +3.0% and REV +1.0%, KR and ADBE behind it with their Release / Transcript / Call / Summary links, and the quiet group at the top holding 27 past dates without stored results. The only new thing on it is the MONTH · WEEK · DAY control above it, which is how you get back out.

5 · Nothing lost — the proposal's own inventory, checked against the build

InformationWhere it lives now
EPS estimate / actual / surpriseThe card, and the surprise is the colour on every chip and every name
Revenue estimate / actual / surpriseThe card, second row of the same block
Report time (BMO / AMC)WEEK groups by it; blank is its own “time not set” group; MONTH prints “open” or “close” beside a name when it is known
Press release linkThe card's action row — dimmed “Release pending”, never hidden, when there is none
Release summary · release metrics · call link · AI call summaryThe card, with the source of the text named (the provenance columns are read by the calendar too, so a card opened from a chip can never mislabel a summary)
TranscriptThe card's button, shown only when a transcript really exists for that company and date
Company website / IR link · company releasesThe extras column at the right, in every span, exactly as before
Dividends sub-tabUntouched
Cohort scoping + ticker searchKept, and now also colours every chip and every name. The same honest gate as the list: if the cohort map has not arrived, the view says so rather than showing an unscoped calendar
Past dates without stored resultsStill their own quiet group in DAY, still counted, still not called “reported”

6 · The band at the bottom and this calendar cannot disagree

The EARNINGS band you asked for this morning already knew how to say all of this, so the calendar uses its functions rather than writing its own: the week (Monday to Sunday), “before the open / after the close”, the order within a day, and the result with its surprise. One consequence you will see: both start the week on Monday, so the band's “WEEK OF SEP 21” and the calendar's “MON SEP 21 → SUN SEP 27” are the same seven days. If they ever disagree it will be because the data changed between two reads, never because they were written twice.

7 · What it reads, and what it never does

8 · What I found while building it

The three honest gaps from the proposal, as they stand here

9 · Tests

366 tests, 362 pass. 15 of them are new and pin these decisions: WEEK lands, the four choices are the proposal's, the calendar reuses the band's functions instead of redefining them, both views start on Monday, a month day hands off to its week, a chip opens the same card, a blank report time is a real group, the read is earnings_events and nothing is written, one read per span with a quiet re-read that does not move you, a missing size is said out loud rather than guessed, the ECONOMIC tab's state is untouched, and there is no white in the new styles.

The 2 failures are the two that already fail on production a11b6b7 — I ran the same suite in a clean worktree at that commit to be sure: xfeed-publish, and one age-formatting assertion on another surface. Neither is mine, and neither is in this tab.

10 · Where it is