feat(ui): leaderboard-first landing and home - #357
Merged
Conversation
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
Contributor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
# Conflicts: # dashboard/backend/tests/test_frontend_fast_boot.py
Collaborator
Author
|
Follow-up filed after merge: #360 — the README hero screenshot ( 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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
DO NOT MERGE until Felix has looked at the rendered screens — merging deploys the landing page to prod.
Three asks from Felix:
/. 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. The03 — Racelabel is dropped; Talk (01) / Test (02) keep theirs, and the Race section keeps the full standings and the rules.index.htmlredirects 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.Worth a reviewer's attention
js/leaderboard.jsis 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.Hero.tsxalone and the allowlisted gloss travelled with the demo; the user-agent check readRace.tsxalone and the chart moved. Mutation-tested, 8/8 injected regressions caught.overflow:hidden, so the board was clipped — rows vanishing with no scrollbar. Fixed; verified 1000x700 → 1920x1080.styles.css113→114,home-page.js46→47, checked againstorigin/main.app.js/js/leaderboard.jsunchanged.Frontend-only: no backend source touched, so no Vercel/Render deploy-skew window. Suite 2879 passed / 78 skipped, unchanged from
main.