Skip to content

feat(ui): leaderboard-first landing and home - #357

Merged
FlyM1ss merged 4 commits into
mainfrom
feat/leaderboard-first
Aug 15, 2026
Merged

feat(ui): leaderboard-first landing and home#357
FlyM1ss merged 4 commits into
mainfrom
feat/leaderboard-first

Conversation

@FlyM1ss

@FlyM1ss FlyM1ss commented Aug 15, 2026

Copy link
Copy Markdown
Collaborator

DO NOT MERGE until Felix has looked at the rendered screens — merging deploys the landing page to prod.

Three asks from Felix:

  1. Leaderboard was ~4 screens down on /. It now sits in the hero's right column — equity chart + top-5 standings, fully above the fold at 1440x900. The agent conversation demo that was there moved down to the Talk act. The 03 — Race label is dropped; Talk (01) / Test (02) keep theirs, and the Race section keeps the full standings and the rules.
  2. Signed-in users never saw a board. index.html redirects them to /app, where Home screen 0 was a second copy of the marketing hero + a "Get Started" button. Screen 0 is now the real Competition Leaderboard (moved off the screen-1 grid, not cloned). The CTA reads by sign-in state.
  3. Plain-trader copy, to the register adopted in the 2026-08-04 audience-language pass: technology words out, market words kept, icons on the board rules. The Race body now states outright that one of seven AI models finished ahead of the baselines.

Worth a reviewer's attention

  • js/leaderboard.js is untouched — it cannot be mounted twice (module-level state, ~29 bare-literal ids, chart instance destroyed on every render). Home extends its own existing renderer.
  • Two landing guards were rescoped from one file to every component: the disclaimer-freshness check read Hero.tsx alone and the allowlisted gloss travelled with the demo; the user-agent check read Race.tsx alone and the chart moved. Mutation-tested, 8/8 injected regressions caught.
  • Below 1200px the hero stacks and the pager screen is overflow:hidden, so the board was clipped — rows vanishing with no scrollbar. Fixed; verified 1000x700 → 1920x1080.
  • Busters styles.css 113→114, home-page.js 46→47, checked against origin/main. app.js/js/leaderboard.js unchanged.

Frontend-only: no backend source touched, so no Vercel/Render deploy-skew window. Suite 2879 passed / 78 skipped, unchanged from main.

FlyM1ss and others added 3 commits August 15, 2026 15:10
The board was the page's only piece of evidence and sat roughly four
screens down, so the last thing a visitor saw was the one thing that
would have convinced them. It now occupies the hero's right column —
compact equity chart plus the top five standings, fully above the fold
at 1440x900 — and the agent conversation demo that used to sit there
moved down to the Talk act, which is the beat it illustrates.

The `03 - Race` mono-label is gone; Talk (01) and Test (02) keep theirs.
Numbering the board third described a page that no longer exists.

Copy rewritten to the adopted private-banker register: technology words
out ("runs forward", "the nightly advance ships", "every entry"), market
words kept (backtest, Sharpe ratio, buy-and-hold, the index). The body
now states the unflattering number outright — one of seven AI models
finished ahead of the baselines — and the three board rules carry icons.
"agent" is glossed once, in the hero, because the headline uses the word
before anything else on the page defines it.

Standings rows carry a colour swatch matching their curve: at this card's
width a Recharts <Legend> wraps to two rows and pushes the plot down, and
rank 1 rendered in the accent colour pointed at the wrong line (cyan is
GPT-5.5's curve, DeepSeek's is purple).

Two landing guards rescoped from a single file to every component. The
disclaimer-freshness check read Hero.tsx alone, and the allowlisted
paper-trading gloss travelled with the demo; the user-agent check read
Race.tsx alone, and the chart it was guarding moved to BoardPreview.tsx.
Both are the WhyCare-scoped-ban defect: a guard pinned to the file a
claim used to live in stays green while the claim redraws next door.
Mutation-tested — 4 injected regressions, 4 caught.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017TJ74vZi6PZEi53hzDwRnM
Signed-in users never see the marketing page — index.html redirects them
to /app — and Home's pager screen 0 was a second copy of that hero:
"Talk to Agents / Test Trading Ideas" over a Get Started button, shown
to people who had already got started. onHomePageShow() forces screen 0
on every entry to Home, so that was the app's front page for everyone
with an account.

Screen 0 now carries the real Competition Leaderboard, moved off the
screen-1 dashboard grid rather than cloned: two boards on one page read
as redundant, and duplicate DOM ids would have broken the renderer.
Portfolio takes the freed 2-wide slot, so the top row still shares rails
with Market News below it.

js/leaderboard.js is untouched. It cannot be mounted twice — ~29 ids
looked up by bare literal, all render state in module-level lets, and
the chart instance destroyed and recreated on every render, so a second
mount would kill the Competition page's chart. home-page.js already
carries a from-scratch second renderer; this extends that one.

Also:
- the CTA reads by sign-in state (Create a free account / Test a trading
  idea) instead of offering signup to someone already signed in;
- the backtest window comes off payload.window.label instead of a
  hardcoded date range that went stale silently — above the fold that
  matters more than it did three modules down;
- both sample-standings notes still open with "Sample standings -", the
  only thing separating five invented returns from five real ones;
- below 1200px the hero stacks, and .home-pager-screen is
  height:100%/overflow:hidden, so the board was CLIPPED — rows vanishing
  with no scrollbar and the scroll hint drawn over the table. The copy
  shrinks, the board keeps a 400px floor, and screen 0 scrolls rather
  than swallowing rows. Verified 1000x700 through 1920x1080: all seven
  rows reachable, no overlap, no clipping.

Busters: styles.css 113->114, home-page.js 46->47, both checked against
origin/main. app.js and js/leaderboard.js are unchanged and stay put.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017TJ74vZi6PZEi53hzDwRnM
@vercel

vercel Bot commented Aug 15, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
agentic-trading-lab Ready Ready Preview Aug 15, 2026 7:49am

# Conflicts:
#	dashboard/backend/tests/test_frontend_fast_boot.py
@FlyM1ss
FlyM1ss marked this pull request as ready for review August 15, 2026 08:24
@FlyM1ss
FlyM1ss merged commit 60fa01f into main Aug 15, 2026
7 checks passed
@FlyM1ss
FlyM1ss deleted the feat/leaderboard-first branch August 15, 2026 08:26
@FlyM1ss

FlyM1ss commented Aug 15, 2026

Copy link
Copy Markdown
Collaborator Author

Follow-up filed after merge: #360 — the README hero screenshot (README.md:29) depicts the pre-#357 hero (chat demo in the right column, old nav, no ticker) and now advertises a layout the landing page no longer has.

Not introduced by this PR — the shot was already stale from 2026-07-04 — but this change is what made every element of it wrong, so it is recorded here rather than left in a review note.

FlyM1ss added a commit that referenced this pull request Aug 15, 2026
Written 2026-08-09; PRs #352 and #357 shipped a different two-board
design six days later. Renames Replay/Forward Season to the shipped
Competition/Live Trading, moves the season cadence to two weeks
(SEASON_TRADING_DAYS = 10), and marks each Phase 1 task done,
superseded or still-valid with verified line numbers.

Two premise errors corrected at source:
- a custom instruction REPLACES SAFE_TRADING_PROMPT rather than
  competing with it, so Phase 0's stated reason to expect failure
  was wrong
- #homeGetStartedBtn was already wired on 2026-07-25 (08c85aa)

Records three consequences that are not cosmetic: the instruction
lock doubles to two weeks and is reopened, C8 now gates Season 1 of
an already-shipped board, and Task 7's guard would delete a guard
#357 added on purpose.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014K97GJdZ2yxAwQ3mhDaGBG
FlyM1ss added a commit to Allan-Feng/AgenticTrading that referenced this pull request Aug 15, 2026
The README hero image still showed the pre-Open-Finance-Lab#352 landing: the old
"Agents / Backtesting / Community" nav, a "Get Started" CTA, no ticker,
and the agent-conversation window that Open-Finance-Lab#357 moved out of the hero
entirely. Nothing in the frame still existed.

Recaptured from prod (bundle hash verified identical to main) at
1440x900, supersampled from a 2x frame. Kept true colour rather than
palette-quantising: 256-colour median-cut drops the amber #fbbf24 that
ties the Open-Finance-Lab#4 standings swatch to its curve, and the board ships no chart
legend, so that swatch is the key.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017TJ74vZi6PZEi53hzDwRnM
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant