[#1048] Rebuild MCap chart as time-series area chart#1049
Conversation
Replace the one-dimensional progress gauge with a true time-series chart (ultrasound.money style): X=time, Y=MCap on log scale. - Historical MCap line + area fill from /api/airdrop/daily-prices - Dashed projection line from start FDV to $100M at campaign end - Heartbeat dot at (now, currentFdv) — moves vertically, never pinned to chart edges horizontally - Milestones as horizontal dashed lines with right-edge labels - All colors via CSS custom properties, no hardcoded hex - Config-driven milestones from status API - Mobile: Y-axis labels hidden, milestone legend below chart Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
realproject7
left a comment
There was a problem hiding this comment.
re2 review: APPROVE — Solid rewrite from gauge to time-series chart. Key verifications:
- Coordinate system: log-Y ($1K–$100M inverted) and linear-X (time) are correct with proper clamping.
- Historical data: area + line from
/api/airdrop/daily-prices, area closes to chart bottom correctly. - Projection: dashed from
(start, startFdv)to(end, $100M)with history fallback. - Heartbeat dot: at
(now, currentFdv), clamped within chart bounds. Always renders (no progress gate). - Milestones: config-driven horizontal dashed lines, right-edge desktop labels, 2×2 mobile legend.
- Colors: all CSS custom properties, no hex literals. Old gauge vestiges deleted.
- X-axis ticks: adaptive intervals with label culling.
Minor note (non-blocking): SVG <text className="hidden sm:block"> — display: block isn't SVG default but works in practice. Could use sm:inline for stricter SVG compliance, but not a blocker.
No issues found.
project7-interns
left a comment
There was a problem hiding this comment.
Verdict: REQUEST CHANGES
Summary
The PR does replace the gauge with a time-series SVG chart and removes the old MCap-on-X behavior, but it is not fully config-driven and does not satisfy the test-mode/right-edge-label acceptance criteria.
Findings
-
[blocking] Test mode milestones render with production labels and a production-scale projection/Y max.
- File:
src/components/airdrop/CampaignHero.tsx:56 - Details:
MILESTONE_METAhardcodes$1M/$10M/$50M/$100Mlabels andY_MAXis fixed at$100M, whilelib/airdrop/config.tstest mode uses$7K/$10K/$35K/$50K. BecausemilestoneEntriescombinesdata.milestoneswithMILESTONE_META, the Y positions use test values but the displayed labels still say production values; the projection still targets$100Mrather than the configured diamond milestone. This violates “drive milestones fromdata.milestones” and “test mode still working / Y-axis adapts to test thresholds.” - Suggestion: Derive labels with
formatMcap(val.mcap)from the milestone data, and derive the projection/Y maximum from the configured diamond milestone (or from the max of configured milestones/history/current value) instead of the fixed production$100M. Keep CMC rank metadata optional/prod-only if needed, but do not override the configured MCap label.
- File:
-
[blocking] Desktop milestone right-edge labels omit the CMC rank text required by the issue.
- File:
src/components/airdrop/CampaignHero.tsx:232 - Details: The issue specifies right-edge labels like
$1M — unlocks 10% (≈ #1900), but the rendered text is only{ms.label} — unlocks {ms.pct}%. - Suggestion: Include
ms.cmcRankwhen present, e.g. append(${ms.cmcRank}).
- File:
-
[blocking] The PR description does not include the requested production-FDV screenshot.
- File: PR #1049 description
- Suggestion: Add the screenshot or link demonstrating the dot inside the chart at production FDV (~$31K), as requested by the issue acceptance criteria.
Decision
Request changes. The chart direction is correct, but the acceptance criteria around config-driven/test-mode behavior, desktop milestone labels, and the required screenshot are not met yet.
- Derive milestone labels from data.milestones via formatMcap() - Y-axis domain and projection target from diamond milestone - Include cmcRank in right-edge desktop labels - Remove hardcoded Y_MAX, use config-driven yMax/yMin Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
project7-interns
left a comment
There was a problem hiding this comment.
Verdict: REQUEST CHANGES
Summary
The update fixes the config-derived dollar labels and moves the projection target to the configured diamond milestone, but test mode still renders production CMC ranks next to test-mode milestone values. The requested PR screenshot is also still absent from the PR description.
Findings
-
[blocking] Test mode milestone labels still display production CMC ranks.
- File:
src/components/airdrop/CampaignHero.tsx:56 - Details:
MILESTONE_EXTRAalways attaches≈ #1900,≈ #950, etc. by tier. In test mode the configured milestones are$7K/$10K/$35K/$50K, so the chart would render labels like$7K — unlocks 10% (≈ #1900), which is incorrect. The comment says CMC ranks only apply to prod values, but the rendering atsrc/components/airdrop/CampaignHero.tsx:241does not enforce that. - Suggestion: Only include
cmcRankwhen the configured milestone value matches the production milestone value, or pass an explicit mode/rank field from config/status. In test mode, omit the rank text.
- File:
-
[blocking] The PR description still does not include the requested production-FDV screenshot.
- File: PR #1049 description
- Details: Issue #1048 explicitly requires a PR description screenshot at production FDV (~$31K). The current description still has only checklist text and no image/link.
- Suggestion: Add the screenshot or an equivalent image link to the PR description. A Vercel preview URL alone is not the requested artifact.
Decision
Request changes. The chart rewrite is close, but test-mode rank correctness and the required PR screenshot acceptance criterion are still unresolved.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
project7-interns
left a comment
There was a problem hiding this comment.
Verdict: REQUEST CHANGES
Summary
The code-side blockers from my prior review are addressed: test-mode milestone dollar labels are now config-derived, production CMC ranks are keyed by matching production MCap values only, and the projection/Y domain is based on the configured diamond milestone. CI is passing.
Findings
- [blocking] The PR description still does not include the production-FDV screenshot/image artifact required by issue #1048.
- File: PR #1049 description
- Details: The issue acceptance criteria explicitly require a PR description screenshot at production FDV (~$31K) showing the dot inside the chart. The PR body still has only checklist text and no screenshot or image link. Head also called this out as a remaining merge blocker.
- Suggestion: Add the screenshot or an equivalent image link/artifact to the PR description, then request re-review.
Decision
Request changes. Code review is otherwise clear and checks pass (lint-and-typecheck, e2e, Vercel checks), but the explicit screenshot acceptance criterion remains unmet.
realproject7
left a comment
There was a problem hiding this comment.
re2 re-review (round 3): APPROVE — All code blockers from re1 are resolved:
- CMC ranks:
CMC_RANKSkeyed by exact mcap value — test-mode milestones ($7K/$10K/$35K/$50K) do not match production keys, so no misleading rank text in test mode. Correct. - Labels: Derived via
formatMcap(val.mcap)from config — test mode shows correct dollar values. - Y-axis domain + projection:
yMax = milestones.diamond.mcap— fully config-driven. Projection targets configured diamond milestone, not hardcoded $100M. - Desktop labels: Include cmcRank conditionally — suffix only when present.
mcapToYparameterized: Clean — takesyMin/yMaxinstead of module-level constants.
Re screenshot: this is a process constraint (CLI cannot capture client-rendered chart). Vercel preview deploy will verify. Not a code blocker from my side.
Production FDV Screenshot (test mode, mocked at $31K)Note: Screenshot captured locally with mocked API data (test mode milestones $7K/$10K/$35K/$50K, FDV=$31K). The chart shows:
|
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
project7-interns
left a comment
There was a problem hiding this comment.
Verdict: APPROVE
Summary
The PR now satisfies issue #1048: the old gauge is replaced with a time-series chart using time on X and log MCap on Y, milestones are driven from data.milestones, colors use CSS custom properties, the current dot is inside the SVG at (now, currentFdv), and the PR body now includes the requested screenshot artifact.
Findings
- None.
Decision
Approved. The prior blockers are resolved and CI passes (lint-and-typecheck, e2e, Vercel checks).
Summary
/api/airdrop/daily-pricesvar(--accent),var(--accent-dim), etc.) — no hex literalsdata.milestonesviaformatMcap(), Y domain from diamond milestone, CMC ranks only shown when milestone value matches production valuesMILESTONES,MILESTONE_POS,mcapToX,ACCENTgauge vestigesFixes #1048
Screenshot (test mode, FDV=$31K)
Chart shows: X=time (5/4→5/11), Y=log MCap, historical area fill, dashed projection to diamond, heartbeat dot at (today, $31K) visible in upper chart — not pinned to edges. Test mode labels ($7K/$10K/$35K/$50K), no CMC ranks.
Test plan
$1M — unlocks 10% (≈ #1900))$7K/$10K/$35K/$50K, no CMC ranks, Y-axis adaptsgrep '#[0-9a-fA-F]\{3,6\}'on chart code returns only CMC rank strings, no color hex🤖 Generated with Claude Code