Skip to content

Redesign the website on the Voca warm-paper system - #218

Merged
jatinkrmalik merged 2 commits into
VocaHQ:mainfrom
Mr-Sunglasses:ui/website-redesign-polish
Aug 16, 2026
Merged

Redesign the website on the Voca warm-paper system#218
jatinkrmalik merged 2 commits into
VocaHQ:mainfrom
Mr-Sunglasses:ui/website-redesign-polish

Conversation

@Mr-Sunglasses

Copy link
Copy Markdown
Member

Rebuilds vocamac.com around the shared Voca design language — warm paper, deep ink, one green accent, flat fills — and tells a VocaMac-specific, release-accurate story.

Structure and content

  • Every product fact now lives in web/data/product.toml, so version, model catalogue, requirements and links have one source of truth.
  • The homepage reads as a narrative: how it works → model choice → real product states → the privacy path → configuration → install → FAQ.
  • Claims are scoped to the shipped stable release, and nightly-only work is labelled as such.
  • Adds automated checks (node --test, html-validate, stylelint) and wires them into CI.

Design system

  • An inline SVG icon set (layouts/partials/icon.html) used across the steps, config cards, privacy boundaries, install paths and every feature page.
  • The privacy section's plain-text chips become a real flow diagram — microphone → in-memory audio → WhisperKit/CoreML → transcript at cursor — with animated connectors and an explicit "no extra stop" callout.
  • Feature pages get a sticky table of contents, so the 44rem measure no longer sits alone against a third of a page of empty paper.
  • The social card is redrawn in the new style and rasterised from SVG.

Colour and accessibility

These were measured, not eyeballed:

Problem Was Now
.prose a out-specified .btn-primary, painting the feature-page CTA dark green on green unreadable scoped to :not(.btn)
.btn-secondary — a near-white slab on warm paper, leaning on a hairline 2.48:1 border takes its surface, brand-tinted border ≥3:1
--faint on paper (hero proof, step notes, install details, footer meta) 3.41:1 ≥4.5:1 on every surface
Focus ring on paper 1.62:1 9.14:1, and 9.8:1 on dark surfaces

The DMG download also gets the primary treatment it was always the main action for.

Motion

  • Scroll reveals now actually play. The 800ms blanket fallback un-hid everything below the fold, so it is cleared once the observer reports — and restored for print, which never scrolls.
  • Hero audio meter, staggered word arrival, recording halos, nav underline, hamburger-to-X, plus-to-minus FAQ marker, card lift, TOC scroll-spy.
  • All of it collapses under prefers-reduced-motion.

Layout bugs fixed

  • .mobile-nav a caught the trailing .btn and reset it to a left-aligned, unpadded block.
  • In-page anchors scrolled section titles under the sticky header.
  • .model-table carried a border-radius a collapsed table can never clip.
  • The copy button scrolled out of view with long commands.
  • Back links shared a line with the section tag.
  • The hero caret parked at the end of the first line once the transcript wrapped.
  • The stacked privacy route inherited a flex-basis as height on phones.
  • The route connector is rotated rather than hidden on phones, so its pulse keeps travelling.

Verification

  • npm run check — 9/9 passing
  • npx html-validate 'public/**/*.html' — clean
  • npx stylelint static/style.css — clean
  • Rendered and inspected at 390 / 640 / 760 / 1440px; animations confirmed running at each breakpoint via getAnimations(), and reveals confirmed 0/15 → 15/15 on scroll.

Rebuild vocamac.com around the shared Voca design language — warm paper,
deep ink, one green accent, flat fills — and tell a VocaMac-specific,
release-accurate story.

Structure and content
- Centralise every product fact in web/data/product.toml so version, model
  catalogue, requirements and links have one source of truth.
- Rewrite the homepage as a narrative: how it works, model choice, real
  product states, the privacy path, configuration, install, FAQ.
- Scope claims to the shipped stable release and label nightly-only work.
- Add automated Hugo/HTML/CSS checks (node --test, html-validate, stylelint)
  and wire them into CI.

Design system
- Inline SVG icon set (layouts/partials/icon.html) used across steps, config
  cards, privacy boundaries, install paths and every feature page.
- Replace the plain-text privacy chips with a real flow diagram: microphone,
  in-memory audio, WhisperKit/CoreML, transcript at cursor, with animated
  connectors and an explicit "no extra stop" callout.
- Give feature pages a sticky table of contents so the measure no longer sits
  alone against a third of a page of empty paper.
- Redraw the social card in the new style and rasterise it from SVG.

Colour and accessibility fixes
- .prose a out-specified .btn-primary, painting the feature-page call to
  action dark green on green. Scope it to :not(.btn).
- .btn-secondary was a near-white slab outlined at 2.48:1. It now takes the
  surface it sits on and outlines in a brand tint that clears 3:1.
- --faint was 3.41:1 on paper, under AA, across hero proof, step notes,
  install details and footer meta. Darkened to clear 4.5:1 everywhere.
- The focus ring was yellow at 1.62:1 on paper. --focus is now brand-dark,
  and dark surfaces redefine it to the yellow where it reaches 9.8:1.
- Give the DMG download the primary treatment it was always the main action for.

Motion
- Scroll reveals now actually play: the 800ms blanket fallback un-hid
  everything below the fold, so it is cleared once the observer reports and
  restored for print.
- Hero audio meter, staggered word arrival, recording halos, nav underline,
  hamburger-to-X, plus-to-minus FAQ marker, card lift, TOC scroll-spy.
- All of it collapses under prefers-reduced-motion.

Layout bugs
- .mobile-nav a caught the trailing .btn and reset it to a left-aligned,
  unpadded block.
- In-page anchors scrolled section titles under the sticky header.
- .model-table carried a border-radius a collapsed table can never clip.
- The copy button scrolled away with long commands.
- Back links shared a line with the section tag; the hero caret parked at the
  end of the first line once the transcript wrapped; the stacked privacy route
  inherited a flex-basis as height.
- Keep the rotated route connector on phones so its pulse keeps travelling.
@github-actions github-actions Bot added app ci enhancement New feature or request web labels Aug 15, 2026
hugo.toml pinned ogImage to the literal string
"https://vocamac.com/og-image.png". .Permalink already resolves against
whatever baseURL a given build uses, but a hardcoded absolute string can't
follow the same override — so a Netlify preview built with a different
--baseURL still advertised production's card to link scrapers, and a team
preview link pasted into Slack showed the old site's og:image instead of
the one this build actually ships.

Store the image as a path (ogImagePath) and resolve it with absURL in
head.html, the same way .Permalink already resolves. Production output is
unchanged; a --baseURL override now produces a self-referential preview.

Also ignore .netlify/, the machine-specific site link the CLI writes on
`netlify deploy`.
@github-actions github-actions Bot removed the app label Aug 15, 2026
@jatinkrmalik jatinkrmalik added this to the v0.8.0 milestone Aug 16, 2026
@jatinkrmalik
jatinkrmalik merged commit 4a907a5 into VocaHQ:main Aug 16, 2026
5 checks passed
@Mr-Sunglasses
Mr-Sunglasses deleted the ui/website-redesign-polish branch August 19, 2026 17:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci enhancement New feature or request web

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants