Navbar

The fixed pill used on every page in the "landing family" — the landing page itself and, since l20-7, /privacy and /terms. One component, two variants, so the two never drift into looking like different sites.

variant="full"

The default — landing page only, unchanged from before the variant existed. Logo scrolls to top, section anchors (#features, #how-it-works, #faq) are shown from `sm` up, and the CTA fades in only after scrolling past 1.5×viewport.

PropTypeDefaultDescription
variant'full' | 'minimal''full''full' (default) — landing page. 'minimal' — /privacy, /terms, and any future public, unauthenticated page linked from Footer.

variant="minimal"

/privacy and /terms (via LegalDocument). No section anchors — they point at sections that do not exist on these pages. Logo is a Link to `/` instead of a scroll-to-top button, replacing the old back-arrow. The CTA has no scroll gate: per the approved spec override, it is visible immediately rather than hidden, since the 1.5×viewport heuristic only makes sense relative to a hero these pages don't have.

Mobile width (390px)

full hides section links and the language toggle below `sm`, so at 390px only logo, toggle-less login and a possibly-collapsed CTA compete for space. minimal never hides the toggle (see spec §2.4) but now hides the CTA below `sm` (spec override, §7.3) — at 390px UA the pill needs ~420px of ~358px available, so only logo + toggle + login fit, and the CTA reappears from `sm` up. The frame below can't demonstrate this: `sm:` responds to the real viewport, not this 390px box, so it still renders the CTA here.

full — links & toggle collapse below sm
minimal — toggle always shown, CTA hidden below sm (not reproducible in this frame — viewport-driven)

Product Hunt launch day

Navbar reads IS_PH_LAUNCH_DAY/PH_BANNER_HEIGHT_PX itself for both variants — LegalDocument does not recompute the offset, it only pads its <main> generously enough to clear whichever one is active. Schematic below (not the live component, since the flag is a build-time constant, not a prop).

Normal day — top: 16px
PH banner
Launch day — top: 60px (44px banner + 16px)
Sergiy Klymkovych

VoiceMock was built by one designer

I'm Sergiy, a product designer. I built this trainer myself — research, design system, code. On LinkedIn I show how products like this come together, and what it changes in a designer's work.

Product Designer · AI Design Engineer · Designer for Startups

See it on LinkedIn