Repository navigation
feat: align mctl-web with the MCTL design system - #17
Conversation
…d polish - Hero: add eyebrow badge, secondary 'Read the docs' CTA, and an on-brand terminal mockup showing the push/ask-AI/live loop - Add a fixed ambient blueprint-grid + glow background for depth - BaseCard: universal hover lift, accent border and top sheen - BaseSection: accent underline beneath section titles - Pricing: give the single Free plan an intentional centered layout with a 'custom plan' contact path beneath - i18n: add hero.badge, hero.cta_secondary, pricing.custom.* (en + ru)
Adopt the canonical mctl-design tokens (the dependency-free vendoring pattern mctl-telegram/mctl-instruments use) so mctl-web stops diverging: - Palette: ink #0a0b0d + cyan #00e5ff (was the #050816/#00f5ff fork); neutral hairline borders instead of cyan glass borders - Type: Geist for display/body, Instrument Serif available for ledes, JetBrains Mono retained for chrome (nav, eyebrows, code, terminal) - Replace cyan glow/sheen with the system's restrained hairline language; recolour the ambient grid to a neutral blueprint tone - Load Geist + Instrument Serif fonts alongside JetBrains Mono
|
@claude review |
|
Claude finished @mashkovd's task in 3m 9s —— View job Code Review
Summary2 P1 — none Has P2 findings, changes requested. The design-token migration in P2 — stale hardcoded colours in
|
| &__body { | ||
| padding: 1.5rem 1.5rem 1.75rem; | ||
| font-size: 0.85rem; | ||
| line-height: 1.9; |
There was a problem hiding this comment.
P2 — terminal content will render in Geist, not monospace
base.scss in this same PR switches body { font-family } from var(--font-mono) to var(--font-display). .hero-terminal__body inherits that change and will now render all terminal lines in Geist — a proportional sans-serif — which breaks the visual metaphor entirely.
Add an explicit override:
| line-height: 1.9; | |
| padding: 1.5rem 1.5rem 1.75rem; | |
| font-size: 0.85rem; | |
| font-family: var(--font-mono); | |
| line-height: 1.9; |
| @@ -30,9 +30,30 @@ defineProps<Props>(); | |||
| background-color: var(--card-bg); | |||
| border-radius: 8px; | |||
| border: 1px solid rgba(0, 245, 255, 0.2); | |||
There was a problem hiding this comment.
P2 — base border still uses the old #00f5ff palette value, not the new design token
The PR states "neutral hairline borders instead of cyan glass borders" and defines --color-glass-border: var(--color-line) (#1f242b). This line was not updated, so every un-highlighted card still has a cyan-glowing border — contrary to the stated design goal.
| border: 1px solid rgba(0, 245, 255, 0.2); | |
| border: 1px solid var(--color-glass-border); |
|
|
||
| &--highlighted { | ||
| border-color: var(--color-accent); | ||
| box-shadow: 0 0 30px rgba(0, 245, 255, 0.2); |
There was a problem hiding this comment.
P2 — --highlighted and --dark variants still use old #00f5ff hardcoded values
Three places below this line were not updated to the new palette:
- Line 59:
box-shadow: 0 0 30px rgba(0, 245, 255, 0.2)— old cyan glow - Line 72:
rgba(0, 245, 255, 0.05)in the--darkgradient - Line 79:
rgba(0, 245, 255, 0.1)in the--darkhover shadow
Suggested updates:
| box-shadow: 0 0 30px rgba(0, 245, 255, 0.2); | |
| box-shadow: 0 0 30px var(--color-accent-soft); |
And for the --dark variant's raw rgba values, replace with var(--color-accent-soft) or introduce a dedicated --color-accent-dim token.
| margin: 4rem auto 0; | ||
|
|
||
| text-align: left; | ||
| background: rgba(8, 12, 26, 0.85); |
There was a problem hiding this comment.
P3 — terminal background uses a hardcoded rgba not present in the token set
rgba(8, 12, 26, 0.85) is darker than --color-terminal (rgba(21, 24, 29, 0.85)) and darker than --color-bg (#0a0b0d). If this intentional divergence should persist, define a named token (e.g. --color-terminal-deep) in base.scss. As-is, any future palette adjustment won't reach this element.
|
|
||
| &__line { | ||
| margin: 0; | ||
| white-space: nowrap; |
There was a problem hiding this comment.
P3 — white-space: nowrap + ellipsis will silently clip terminal content on narrow viewports
The longest line — mctl ask "roll my-app back to v1.4.2" — overflows on viewports ≤ ~360px even at 0.72rem. The ellipsis makes it look fine at a glance but hides copy that demonstrates the product. Consider allowing wrapping (white-space: pre-wrap) for the body lines, or shortening the demo strings to fit ~320px.
- BaseCard: replace remaining hardcoded #00f5ff borders/glows with --color-glass-border / --color-accent-soft / --shadow-card-hover (P2) - Hero terminal body: force --font-mono so it doesn't inherit Geist (P2) - Tokenise the terminal background to --color-terminal (P3) - Let terminal lines wrap instead of clipping with an ellipsis on narrow viewports (P3)
|
Claude finished @mashkovd's task in 2m 8s —— View job Re-review (post-synchronize)
Summary0 P1 — none The fix commit (
The previously-noted P3s are also resolved: terminal background now uses Two minor P3s remain (see inline comments):
Neither blocks merge. No P1/P2 findings — good to merge. |
| margin-bottom: 1.75rem; | ||
| padding: 0.4rem 0.9rem; | ||
|
|
||
| font-size: 0.75rem; |
There was a problem hiding this comment.
P3 — badge renders in Geist; design intent says eyebrows should use mono
The PR description states "JetBrains Mono retained for chrome (nav, eyebrows, code, terminal)" and the BaseSection overline already has font-family: var(--font-mono) added in this PR. The hero-block__badge is the same eyebrow-style element; without an override it inherits Geist from body.
| font-size: 0.75rem; | |
| font-size: 0.75rem; | |
| font-family: var(--font-mono); | |
| letter-spacing: 1px; |
| max-width: 900px; | ||
| max-height: 900px; | ||
| // Quiet ambient wash — restrained per the design system's hairline language. | ||
| background: radial-gradient(circle, rgba(0, 229, 255, 0.05) 0%, transparent 65%); |
There was a problem hiding this comment.
P3 — glow uses a raw rgba value that diverges from the token set
rgba(0, 229, 255, 0.05) is half the opacity of --color-accent-soft (rgba(0, 229, 255, 0.1)). If the dimmer value is intentional, introduce a named token (e.g. --color-accent-dim) in base.scss; otherwise reuse the existing one.
| background: radial-gradient(circle, rgba(0, 229, 255, 0.05) 0%, transparent 65%); | |
| background: radial-gradient(circle, var(--color-accent-soft) 0%, transparent 65%); |
|
@claude review |
Summary
Re-skins mctl-web onto the canonical MCTL design tokens so it stops diverging from the design system (it was using a
#050816/#00f5fffork with all-monospace type). Uses the dependency-free token-vendoring pattern that mctl-telegram and mctl-instruments already follow.Changes
#0a0b0d+ cyan#00e5ff(canonical), neutral hairline borders instead of cyan glass bordersEarlier commit (also in this PR)
The first commit added a hero terminal mockup, eyebrow badge, secondary CTA, card hover polish, section-title accents, and a pricing "custom plan" path. The alignment commit re-tones these to the design-system language.
Verification
npm run build✓ (SSR + prerender, exit 0)/docs,/privacy🤖 Generated with Claude Code