Redesign the website on the Voca warm-paper system - #218
Merged
jatinkrmalik merged 2 commits intoAug 16, 2026
Conversation
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.
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`.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Rebuilds
vocamac.comaround 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
web/data/product.toml, so version, model catalogue, requirements and links have one source of truth.node --test,html-validate,stylelint) and wires them into CI.Design system
layouts/partials/icon.html) used across the steps, config cards, privacy boundaries, install paths and every feature page.Colour and accessibility
These were measured, not eyeballed:
.prose aout-specified.btn-primary, painting the feature-page CTA dark green on green:not(.btn).btn-secondary— a near-white slab on warm paper, leaning on a hairline--fainton paper (hero proof, step notes, install details, footer meta)The DMG download also gets the primary treatment it was always the main action for.
Motion
prefers-reduced-motion.Layout bugs fixed
.mobile-nav acaught the trailing.btnand reset it to a left-aligned, unpadded block..model-tablecarried aborder-radiusa collapsed table can never clip.flex-basisas height on phones.Verification
npm run check— 9/9 passingnpx html-validate 'public/**/*.html'— cleannpx stylelint static/style.css— cleangetAnimations(), and reveals confirmed 0/15 → 15/15 on scroll.