Skip to content

Intro copy in the HTML, kin.json after first paint, glass art in one file, README and humans.txt, taste and history copy - #122

Merged
cjimti merged 1 commit into
mainfrom
first-paint-readme-taste-lines
Sep 13, 2026
Merged

cjimti merged 1 commit into
mainfrom
first-paint-readme-taste-lines

Conversation

@cjimti

@cjimti cjimti commented Sep 13, 2026

Copy link
Copy Markdown
Owner

#110 First paint

  • The first-visit strip and the rail's three steps are static markup in index.html. app.js shows or hides the strip with syncIntro(), hides it before the data arrives for a visitor with a shelf, a dismissed strip or a shared link (introEarly()), and reads the rail steps from the page, so the words exist once.
  • defer on the app.js tag. The release stamp still lands once.
  • data/kin.json is fetched after the first repaint. Until it arrives the Shapes segment is aria-disabled with no data-method and says "Shapes are loading", or "Shapes did not load" on failure. A kin link opened in the gap lands on Related once the data is in.
  • The 20 glass SVGs are served as assets/glasses/all.json, written by scripts/glasses.py (make glasses). check_assets.py refuses a stale or incomplete copy. The SVGs stay on disk for pages.py and cards.py.
  • CSS keeps the pre-boot state right per width (strip on a phone, steps in the rail on a laptop) and hides the strip in Tonight and print.
  • Step 5 (inline notation.json) not done.

Lighthouse mobile, local, three runs each (not the live figures the ticket asks for; those need a tag):

uncompressed gzip
main 71 / 72 / 71, LCP 6.6 s 88 / 89 / 90, LCP 3.4 to 3.5 s
branch 81 / 81 / 81, LCP 4.8 s 93 / 98 / 99, LCP 1.7 to 2.7 s

The LCP element is now the intro paragraph from the HTML.

#105 README, humans.txt, CLAUDE.md

  • The meta description is the one sentence in README line one, llms.txt (read from index.html by llms.py), humans.txt, and the og, twitter and JSON-LD tags. check_description in check_assets.py refuses a drift, with cases in test_checks.py.
  • README: figure from make stats (11), four JSON files, Shapes and Related instead of Families and Kin, Cloudflare Web Analytics named, the checks section shortened with a pointer to CLAUDE.md, a How it is built section, make glasses and all.json listed.
  • Screenshots in assets/readme/ (phone Bar, phone Menu, laptop Menu, printed page), 43 to 83 KB each. Taken from the branch on localhost, so the version label reads dev. The Bar and laptop shots use the fourteen-bottle shelf the README sentence quotes. stage.py leaves assets/readme/ off the site.
  • humans.txt and the Info tab's This site section name Claude Code. The wording follows the ticket draft closely and is Craig's to edit.
  • No em dash in README.md or CLAUDE.md; check_style.py refuses one in either, with cases. CLAUDE.md also says four JSON files and that the dash rule covers both documents.

#104 Taste and history copy

  • Nine taste lines that defined a pour by what it is not, and the Barbary Coast cacao. The three greps in the ticket print 0.
  • The fourteen pre-1970 manuals sentences and eighteen "keeps X, yet it pours Y" closers rewritten by hand, plus 33 more "This menu" closers in families where every page ended the same way.
  • Histories ending in a "This menu" sentence: 171 before, 109 after. No family's pages all end that way.
  • Only taste and history changed; every other field of the 72 drinks was compared and is identical. No fact, date or source moved. Cards unchanged; drink pages, llms dumps, sitemap and dates.json regenerated.

Checked

  • make verify: 23 unit cases, new test_checks cases for all.json, the description, the docs' dashes and staging.
  • Headless Chrome at 390 and 1280, dark, light and print: no console errors, no horizontal scroll, one glass request per load, pre-boot paint with app.js blocked, kin.json blocked, kin.json held and released, Tonight and print hide the strip, dismiss persists.

Not checked: Safari or iOS, a real device offline across a release, VoiceOver on the disabled Shapes segment, live Lighthouse.

Closes #110. Closes #105. Closes #104.

…file, README and humans.txt, taste and history copy

First paint: the first-visit strip and the rail's three steps are static markup in index.html; app.js toggles the strip with syncIntro(), hides it early for a returning visitor with introEarly(), and reads the rail steps from the page. app.js loads with defer. data/kin.json is fetched after the first repaint; until it lands the Shapes segment is aria-disabled with the reason, and a kin link opens on Related once it can. The 20 glass SVGs are served as assets/glasses/all.json, written by scripts/glasses.py (make glasses) and checked by check_assets.py. Unit cases for the kin gap, a failed kin.json, the single glass request and the early intro check.

README and humans.txt: the meta description is the one sentence in README line one, llms.txt (read from index.html), humans.txt, and the og, twitter and JSON-LD tags, held by check_description in check_assets.py. README figure from make stats, four JSON files, Shapes and Related, a shorter checks section, a How it is built section, and phone, laptop and print screenshots in assets/readme, which stage.py leaves off the site. humans.txt and the Info tab name Claude Code. No em dash in README.md or CLAUDE.md, enforced by check_style.py; CLAUDE.md also says four JSON files.

Copy: nine taste lines that defined a pour by what it is not, and the Barbary Coast cacao. The fourteen pre-1970 manuals sentences and eighteen keeps/yet closers rewritten by hand, and 33 more This menu closers; histories ending in This menu go from 171 to 109. No recipe, code, fact or source changed. Drink pages, llms dumps, sitemap and dates regenerated.

Closes #110. Closes #105. Closes #104.
@cjimti
cjimti merged commit c08590c into main Sep 13, 2026
1 check passed
@cjimti
cjimti deleted the first-paint-readme-taste-lines branch September 13, 2026 04:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment