Site and SEO work: what is built, how it is generated, what is left

The live site is https://wine-assembly.berrry.app. Everything below index.html (the desktop) is static HTML written by one script, so this page is both the map of that machinery and the running worklog. Pick it up from Remaining when continuing.

How the pages are made

node tools/gen-site-pages.js writes every page (about 160) and sitemap.xml. The generated files are gitignored except story.html; tools/deploy-berrry.js --update regenerates and uploads them, so a deploy is the publish step and nothing needs committing besides the sources below.

Output Source Notes
apps/<id>.html, apps/index.html lib/apps.js desktop set, tools/site-app-blurbs.json (blurb per app, _skip list), tools/site-app-faq.json (controls per app, _sound per app) Screenshot from screenshots/apps/<id>.png; OG card built into screenshots/og/ by tools/gen-og-images.js
articles/<slug>.html articles/*.md, order from articles/README.md Description from the <!-- description: ... --> comment under the H1; mermaid fences become <pre class="mermaid"> and the page loads mermaid only when it has one
design/index.html articles/README.md body + the docs/ and docs/re-notes/ listings The one hub in the nav; /articles/ and /docs/ still serve but declare it canonical
docs/**/*.html docs/**/*.md Listed automatically; this file is one of them
story.html docs/story.md Committed, unlike the rest
sitemap.xml all of the above lastmod from git history

Rules the generator enforces, so new content follows them for free:

What was done (2026-09-04 to 2026-09-09)

Remaining

Ranked by search value per hour. The first two need a machine that is not running other sweeps; the rest are the site owner's.

  1. "What works" badges on /apps/: sound, phone controls, saved state, one small badge each per card, from a repeatable sweep rather than a hand list. The sound sweep is the template. Feed the same facts into featureList on the app pages' JSON-LD.
  2. Short clips per app with VideoObject JSON-LD: 3 to 5 seconds each, recorded headful (headless frame timing is not real), served beside the OG cards. Hold until the apps whose input paths are still rough would not record a still frame.
  3. Deploy and submit: build green, node tools/deploy-berrry.js --update, then /sitemap.xml to Google Search Console and Bing Webmaster Tools, a Rich Results test on one apps/ URL (expect SoftwareApplication and FAQPage), and a link-preview check on the same URL for the OG card.
  4. Outreach: the comparison pages are the hook for Hacker News and the emulation subreddits. Wait for the deploy so the first visitors see the finished pages.

Skipped on purpose: crawlable launch links (the apps index already links every app page, each carrying the launch link), re-shooting the demoscene entries, Core Web Vitals work, cross-links into the toy VM mini-site.

Verifying a change