Skip to content

fix: hero globe, scroll arrow and wordmark shadow from design review - #29

Draft
Atharva0506 wants to merge 3 commits into
StabilityNexus:mainfrom
Atharva0506:fix/hero-visual-and-logo-polish
Draft

Atharva0506 wants to merge 3 commits into
StabilityNexus:mainfrom
Atharva0506:fix/hero-visual-and-logo-polish

Conversation

@Atharva0506

@Atharva0506 Atharva0506 commented Aug 24, 2026 •

Copy link
Copy Markdown
Member

Description

Follow-up to design review of the landing page. Three points were raised; all three are addressed here.

1. components/Navbar.tsx : removed the hard drop shadow from the TECTONIC wordmark.

The wordmark carried drop-shadow-[0_2px_4px_rgba(0,0,0,0.4)] pure black at 40% sitting on a warm bronze gradient, which muddied the gradient and made the wordmark read as pasted onto the bar rather than part of it. The same declaration was duplicated in the footer and has been removed there too.

Worth noting for reviewers: public/Logo.svg is not actually a vector it is a 520×480 PNG base64-encoded inside an SVG wrapper (255 KB for a mark that renders 34 px tall). I decoded the pixel data to check whether a shadow was baked into the asset; it is not, so no re-export was needed here. Converting that file to a true vector is worth a separate issue.

The navbar's own box-shadow in globals.css is deliberately kept: the bar is fixed and translucent, so that shadow is the only thing separating it from the hero once the page scrolls.

2. app/page.tsx : removed the bouncing scroll arrow from the hero.

A hard-coded ↓ glyph in an animate-bounce wrapper. It bypassed en.json unlike the rest of the hero copy, was invisible to screen readers, and was not keyboard reachable. The hero fits within one viewport on desktop, so no replacement cue was added.

3. components/HeroGlobe.tsx + lib/world-land.ts (new), app/page.tsx, app/globals.css — replaced the hero globe.

The previous tectonic-hero.png did not render as a sphere. Three separate causes stacked up:

  • The source file was already a crop. public/tectonic-hero.png is 626×367, and the sphere ran off the left and bottom edges inside the file itself, so no CSS change could recover the missing geometry.
  • It was upscaled roughly 2×. The hero rendered that 626 px image at min(90vw, 1200px), which is where the soft, broken linework came from.
  • It was mirrored and pushed off-canvas. scale-x-[-1] on the image plus right: -4rem; bottom: -5rem on .hero-visual moved the sphere's centre outside the viewport, so only an arc survived. drop-shadow-2xl then added a grey halo along the transparent edge.

Replaced with <HeroGlobe />, a small canvas component that draws a slowly rotating globe. Landmasses are rendered as an even dot field rather than as outlines, which suits the hero better than the previous grey-blue wireframe and matches the amber/bronze brand palette. The circle is exact by construction, and the canvas redraws at device pixel ratio so it stays sharp on high-density displays.

The old .hero-visual absolute positioning has been removed entirely. The globe is now a normal child of the hero grid, so it centres against the headline instead of floating against the section box — which also fixes the misalignment the previous layout had.

Addressed Issues:

Screenshots/Recordings:

Before

image

The globe's curve never closes, the scroll arrow sits under the copy, and the wordmark carries a hard black shadow.

After

Recording.2026-08-25.000441.mp4

Additional Notes:

Deliberately no globe library (cobe, globe.gl, three.js) — the whole thing is plain canvas 2D over pre-computed geometry, so the dependency tree is unchanged.

Rotation speed is a prop (speed, default 2°/s — roughly three minutes per revolution) and easy to tune or set to 0. Alternatives were built and compared before landing on this one, including real coastline outlines and a geodesic triangulated sphere; happy to swap if maintainers prefer a different treatment.

Verified locally: npm run lint reports 0 errors (the 5 remaining warnings are pre-existing on main), and npm run build passes.

AI Usage Disclosure:

We encourage contributors to use AI tools responsibly when creating Pull Requests. While AI can be a valuable aid, it is essential to ensure that your contributions meet the task requirements, build successfully, include relevant tests, and pass all linters. Submissions that do not meet these standards may be closed without warning to maintain the quality and integrity of the project. Please take the time to understand the changes you are proposing and their impact. AI slop is strongly discouraged and may lead to banning and blocking. Do not spam our repos with AI slop.

Check one of the checkboxes below:

  • This PR does not contain AI-generated code at all.
  • This PR contains AI-generated code. I have read the AI Usage Policy and this PR complies with this policy. I have tested the code locally and I am responsible for it.

I have used the following AI models and tools:

  • Claude Code (Anthropic's CLI) — model Claude Opus 5 (claude-opus-5)
    • Used to trace the root cause of each of the three issues, generate the globe geometry from Natural Earth data, and write the HeroGlobe component.
    • I reviewed every change, ran the site locally, and verified npm run lint and npm run build before opening this PR. I understand the changes and take responsibility for them.

Checklist

  • My PR addresses a single issue, fixes a single bug or makes a single improvement.
  • My code follows the project's code style and conventions
  • If applicable, I have made corresponding changes or additions to the documentation
  • If applicable, I have made corresponding changes or additions to tests
  • My changes generate no new warnings or errors
  • I have joined the Discord server and I will share a link to this PR with the project maintainers there
  • I have read the Contribution Guidelines
  • Once I submit my PR, CodeRabbit AI will automatically review it and I will address CodeRabbit's comments.
  • I have filled this PR template completely and carefully, and I understand that my PR may be closed without review otherwise.

Pure black at 40% over the bronze gradient muddied the gradient and made
the wordmark read as pasted onto the bar. The navbar's own box-shadow is
kept: the bar is fixed and translucent, so it is what separates the bar
from the hero on scroll.
A hard-coded arrow glyph in an animate-bounce wrapper. It bypassed
en.json unlike the rest of the hero copy, was invisible to screen
readers and was not keyboard reachable. The hero fits within one
viewport on desktop, so no replacement cue was added.

Also drops the matching wordmark drop shadow in the footer.
tectonic-hero.png never rendered as a sphere. The source file is
626x367 and the globe was already clipped inside the asset, so no CSS
change could recover the geometry. It was then upscaled ~2x, mirrored,
and pushed off-canvas by negative offsets on .hero-visual, leaving only
an arc.

Replaces it with a canvas component that draws a slowly rotating globe,
with landmasses as an even dot field in the brand palette. Land is
sampled from a Fibonacci sphere and tested against Natural Earth 1:110m
land polygons (public domain), giving 1344 dots at 2.1 KB gzipped
against 139 KB for the PNG. No new dependency.

Points are converted to unit vectors once on mount, so each frame is a
rotation and a dot product per point with no trigonometry in the loop.
Honours prefers-reduced-motion, pauses via IntersectionObserver when
off-screen, and redraws at device pixel ratio on resize.

The .hero-visual absolute positioning is removed: the globe is now a
normal child of the hero grid, so it aligns with the headline instead
of floating against the section box.
@coderabbitai

coderabbitai Bot commented Aug 24, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

This branch has not been deployed

No deployments
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