Skip to content

Concept-first README + dictionary-card explainer page#10

Closed
silviot wants to merge 8 commits into
mainfrom
explainer-page
Closed

Concept-first README + dictionary-card explainer page#10
silviot wants to merge 8 commits into
mainfrom
explainer-page

Conversation

@silviot

@silviot silviot commented May 28, 2026

Copy link
Copy Markdown
Collaborator

Live preview

App: https://silvio-tententoon-preview.pgs.sh/
Explainer (interactive): https://silvio-tententoon-preview.pgs.sh/explain.html

Deployed from this branch (current main + the docs work) to a separate pgs.sh project, so the live tententoon site stays untouched. Drag the log(z − c) panel, flip the source (picture / grid / polar / overlay), and pull the twist slider.

What

Make the project explain itself — concept first, with a hands-on instrument.

1. Concept-first README

Side-by-side Droste vs tententoon ("same picture, two infinities"), a precise one-line definition, the log-polar idea in plain language, and the Escher / de Smit–Lenstra origin. Run/tech in a collapsed footer.

2. explain.html — an interactive explainer

A standalone page: an aged-paper dictionary card (syllabified headword ten·ten·toon, IPA, sense + usage example, bracketed etymology, inline SVG), then the why it never tears explanation built around live panels rendered in-browser by the app's PipelinePanelGLRenderer (reused; no duplicated math):

  • Now bend it — the live tententoon spiral, with a twist-angle (β) slider: pull it and watch the spiral tighten; only at the canonical β = atan(logS/2π) does it close on itself (a "closed ✓" marker shows it).
  • Why doesn't it tear? — a drag experiment: drag the log(z − c) lattice and the original beside it rotates (↕) and zooms (↔), with a live readout. A source toggle (picture / grid / polar / overlay) feeds the same machine different content — the polar circles are individually styled (thick / dashed / plain, ink + red) so you can follow one ring to its vertical line in the log.
  • the rotated-log lattice stands on its own as the "lean it over" illustration (leans with the same β).

Fed by a swappable test image (SOURCE / NEST at the top of src/explain/main.ts); patterns generated in src/explain/patterns.ts. Falls back to prose without WebGL2. explain.html is a Vite entry (rollupOptions.input).

3. In-app modal preserved

Reverted the InfoModal copy to the hand-written original and tagged it .human-written.

Screenshots

Polar source — each circle styled distinctly; in the log every circle is its own vertical line

polar: log panel and the original circles

The experiment (picture) — drag log(z − c) (left); the original (right) rotates and zooms

log panel and the original, side by side

Dictionary card — desktop / mobile

Notes

  • Merged current main (AGPL relicense, CI, the pipeline explorable view + geometry lab, fixes). README licence updated MIT → AGPLv3.
  • public/explain.html → a Vite-built /explain.html + src/explain/{main,patterns}.ts. public/tententoon-demo.gif still backs the README visuals.

🤖 Generated with Claude Code

silviot and others added 2 commits May 29, 2026 00:06
Reframe the README around the tententoon idea (same picture, two infinities) rather than implementation: a side-by-side Droste/tententoon visual, a precise one-line definition, the log-polar idea in plain language, and the Escher / de Smit-Lenstra origin. Run and tech details move to a collapsed footer.

Add public/explain.html: a standalone 'what is a tententoon' deep-dive styled as an aged-paper dictionary card (syllabified headword, IPA, numbered sense + usage example, bracketed etymology, inline nested-squares SVG mark), flowing into a plain-language account of why the spiral closes seamlessly (the logarithm trick), Escher's hand-drawn blank centre, and the 2003 de Smit-Lenstra completion.

Revert the in-app InfoModal copy to the hand-written original and tag it .human-written so it is preserved from future rewrites.

Add public/tententoon-demo.gif (spiral demo) for the README + page visuals. docs/screenshots/ holds card previews for this PR.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Fold in the math from the feat/pipeline-explorable-view worktree's 4-panel view: source + rect -> log(z-c) lattice (periods logS, 2pi) -> tilt by beta = arctan(logS/2pi) -> roll back up via w(z) = c + (z-c)^alpha. Turns the 'why doesn't it tear' section from intuition into the concrete four frames the maths passes through, with named parameters.

Drops the earlier complex-map aside, now redundant (step 4 carries the exact map).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@silviot

silviot commented May 29, 2026

Copy link
Copy Markdown
Collaborator Author

🚀 Cloudflare preview deployed (from branch HEAD 970d798):

Built dist/ includes explain.html (Pages serves it at the clean URL /explain). Production is untouched.

ℹ️ Note: this branch is based on the pre-pipeline main, so the preview shows the app without the 4-panel pipeline / geometry-lab view that landed in #11/#12. Worth rebasing on current main before merge.

🤖 Generated with Claude Code

silviot and others added 6 commits May 29, 2026 08:39
explain.html moves from public/ (static) to a Vite entry (added to rollupOptions.input) with src/explain/main.ts. It loads a swappable test image (SOURCE + optional NEST consts at the top of main.ts), builds the Droste geometry with fitCropToNest/buildPanelGeometry, and renders source - log(z-c) - rotated-log - tententoon live via the app's PipelinePanelGLRenderer. No duplicated math: the page reuses the same GPU renderer and geometry helpers the in-app pipeline view uses.

Dragging the log panel pans log space: horizontal pan = zoom, vertical pan = rotation, and the tententoon follows with a live readout (verified at 144 deg / x33). Falls back to the four-step prose if WebGL2 is unavailable.

Removes the now-superseded static public/explain.html.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Per feedback, drop the 2x2 grid and the source panel. The tententoon spiral now replaces the animated GIF in 'Now bend it'. In 'Why doesn't it tear?', the log(z-c) panel becomes a hands-on experiment: drag it and the original picture beside it rotates (vertical) and zooms (horizontal), with a live readout. The rotated-log lattice stands on its own as the 'lean it over' illustration.

'The original' is rendered by the same engine with the twist off (kTwist=0), so it zooms cleanly (mipmapped) and seamlessly. Verified: vertical drag -> 144 deg rotation, horizontal -> x33 zoom.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add two controls to the explorable, both feeding the reused GPU pipeline: a source toggle (picture / grid / polar / overlay) and a twist-angle (beta) slider.

src/explain/patterns.ts generates grid + polar sources centred on the limit point c at the photo's pixel size. Polar rings are individually styled (thick / dashed / plain, in ink then red) so you can follow one through the map, and spaced by S^(1/6) so the style cycle is S-periodic = seamless under the Droste fold; in the log panel each ring becomes its own vertical line.

The slider overrides beta = atan(logS/2pi): the tententoon twist is tan(beta) and the rotated-log leans by beta. Only at the canonical beta does the spiral close (a 'closed' marker shows it). Verified live: circles -> vertical lines, grid warps, overlay, and a 20deg twist clearly tightens the spiral.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
It was never a theorem. de Smit and Lenstra worked out the exact map (the structure) hiding in Escher's grid, and the missing centre was then filled by computer. That is analysis plus a method/recipe, not a theorem. Rename the heading 'The theorem that filled the hole' -> 'The map that filled the hole', say 'worked out' (not 'wrote down'), and call the distinction out in the text ('this is not a theorem so much as a recipe').

Voice pass over the prose per the writing profile: drop em-dash connectors throughout (colons / parentheses / periods instead) and remove 'seamlessly' from the UI copy. Code comments left untouched (not published prose).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@silviot

silviot commented May 29, 2026

Copy link
Copy Markdown
Collaborator Author

Superseded by #13, which builds on this branch and turns the explainer into a full live explorable. Continuing there.

@silviot silviot closed this May 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant