Skip to content

Add an interactive Bresenham demo to the PennyWise post - #1603

Closed
wteuber wants to merge 39 commits into
daattali:masterfrom
wteuber:pennywise-bresenham-demo
Closed

wteuber wants to merge 39 commits into
daattali:masterfrom
wteuber:pennywise-bresenham-demo

Conversation

@wteuber

@wteuber wteuber commented Sep 10, 2026 •

Copy link
Copy Markdown

What

Adds a second interactive widget to the PennyWise post, in the "Floor, not round, and why that is the honest choice" section, right after the sentence that names Bresenham's line algorithm.

The widget makes that paragraph's claim visible: the floored running tax total is a staircase approximating a straight line, placed exactly the way a screen draws a slanted line on a pixel grid.

  • A 36-atom bill laid out atom by atom along the x-axis; the tax owed rises as a straight line to (36, T), where T = floor(36·r / (100 + r)).
  • One pixel lit per atom, on the tax level the floored staircase occupies there — blue where the atom is net, orange where the line stepped up.
  • Each installment prints its own net + tax split; the tax counts never differ by more than one and sum to exactly T.
  • Sliders: installments (1–12) and tax rate (1%–50%).
  • Toggle: redraw with round instead of floor — the rounded staircase visibly climbs above the true line, the floored one never does.

Self-contained HTML/CSS/JS Liquid include, matching the existing tax-meter widget: theme-aware for the night-mode toggle, fixed-size SVG so axis labels don't scale with the graph, and degenerate cases handled (at 1–2% the tax floors to zero and the grid collapses to a single all-net row).

Post images

Wires up the previously commented-out cover-img / thumbnail-img / share-img from a rendering of the widget:

file size
hero staircase-cover-dark.png 1600×500, darkened + letterboxed
share card staircase-share.png 1200×630, cropped
post-list thumbnail staircase.png 440×327, cropped

Testing

Built locally and checked in the browser across the slider range, both themes, the round/floor toggle, and the degenerate low-rate case; verified the hero renders behind the post title and the thumbnail shows in the home list.

Summary by CodeRabbit

  • New Features

    • Added light/dark mode with saved preferences and synchronized comment themes.
    • Added interactive PennyWise tax tools, SameGame, Connect Four, Breakout, RepClock, Triangulator, and Whack-a-mammal experiences.
    • Added favicon and web app manifest support, calendar scheduling links, and updated social sharing behavior.
    • Added several new blog posts and personalized site content.
  • Updates

    • Refreshed site branding, profile details, analytics, comments, and homepage messaging.
    • Updated the 404 page and social share styling.
    • Updated the runtime environment and gem metadata.
  • Removed

    • Removed former theme documentation, attribution, funding details, templates, and selected legacy content.

wteuber and others added 9 commits January 5, 2026 12:48
* Add blog post on how the bitbeam SameGame solver works

Explains beam search, the bitplane board representation with PEXT
gravity, the expand-once/materialise-survivors restructure,
deterministic parallel output, and the clearing refutations — aimed at
both technical and non-technical readers.

* Add demo GIF and post images, rewrite bitbeam post

Add a recording of the bot playing SameGame in the browser with bitbeam
choosing the moves, optimised from 9.2 MB to 3.5 MB with gifsicle, plus
cover, thumbnail and share images derived from a board screenshot.

Rewrite the prose to drop em dashes, bold runs, hook headings and the
closing recap list. Cut the colour-merging aside and the fast-versus-
reproducible tangent to keep the focus on the three main ideas.

* Replace private repo links with code snippets

The samegame-solver and samegame-bot repos are private, so the links
went nowhere for readers. Drop both and show the approach directly
instead: the bitplane Board struct, the PEXT gravity loop, the six-byte
candidate record, and the tiebreak comparator that makes the parallel
search deterministic.

Also fix the Clickomania citation, which 404'd, and add the companion
paper for the single-column grammar result.

* Address PR review: recording pace, PEXT reference, sgbust numbers

The GIF caption claimed the playback was slow enough to follow. It is a
real-time recording at twenty clicks a second, which is too fast to see
why a group was picked, so say that instead.

Link PEXT to the instruction reference at its first mention rather than
in the closing paragraph, which is where a reader first meets it.

Link the genetic algorithm to the original public implementation, name
the boards the results table was measured on, and replace the prose
speedup claim with the measured per-routine numbers against sgbust.
sgbust gets no row in the results table because it does not build here;
say so under the table rather than leaving the omission unexplained.

* Explain what beam search is, not just what it does

The section jumped straight into the procedure without saying where the
algorithm sits. Add a short paragraph placing it as a pruned best-first
search: best-first ranks every partial solution and holds all of them,
beam search caps the set so memory is chosen up front rather than grown,
and the cost is that it is greedy with no optimality guarantee.

Link the first mention to the Wikipedia article, and drop the trailing
clause about discarding the best line, which the new paragraph now says.

* Attach conditions to the performance numbers

The intro claimed a 30x20 board solves in a couple of seconds. The
README measures 3-10 s at three colours, and at five colours two of
three boards found no clear at all after ~45 s, so the claim was the
best case of the easy colour count stated as the general case. Give the
three-colour figure and the 15x10 one instead.

The 3,718 to 1,306 ms figure carried no board, and following the intro
it read as if it described the 30x20 case. Name it: 15x15 at beam 10000.

* Center the demo GIF, drop duplicate citation, fix sgbust contradiction

The post called sgbust the reference point and then said it does not
build, without explaining how both can be true. Say up front that its
routines were transcribed into bitbeam's benchmark because the program
itself cannot run here, so the later note reads as consistent.

Checking that claim against the session logs from the solver repo, the
build was never actually attempted; the conclusion came from reading its
CMakeLists and its use of std::execution::par, which libc++ does not
implement. State those blockers rather than an untested build outcome,
and add the benchmark conditions (single thread, best of four rounds)
that the run output records.

Also center the GIF, keep only one of the two Clickomania citations, and
reword the Ruby paragraph, which opened with a second "caveat" directly
after the caveats sentence the sgbust table introduced.

* Address review: fix contradictions, cite refutations, re-measure

The opening no longer claims a cleared board is perfect play or that a
move can only be judged by playing it out — both were refuted later in
the post. Idea 2 drops the "fits in a register" overclaim (only one
bitplane of one column does), adds occ() so the second snippet's names
resolve, and covers column collapse and PEXT's x86-only portability.
Idea 3 is renamed "do not record": every child is built and scored,
only the survivors are stored, and the speedup is qualified as
end-to-end.

Corrections: Ruby's cost is interpreter dispatch and a missing
popcount, not an allocation per shift; refutations do not stop the
search hanging, since beam search always terminates; the chessboard
rule now carries its size condition and its source (Takes and Kosters,
Theorem 3), and the one-column grammar cites Biedl et al. The
determinism section claims scaling rather than zero cost, since no
non-deterministic build was raced against it.

Numbers re-measured on this machine: a 30×20 three-colour board solves
in two to four seconds at beam 5000, not three to ten, which is also
the pause visible between boards in the recording. The GIF is 74
seconds for seven 30×20 boards, about fifty moves each at six to seven
clicks a second, matching the bot's 0.1 s inter-click wait — the old
"twenty clicks a second" did not reconcile. Machine, beam widths and
the GA's configuration are now stated, along with the caveat that the
GA is single-threaded Ruby.

* Say memory usage, not memory, in the beam search paragraph

* Rewrite the prose in plain language, drop the em dashes

* Give Ruby a fair hearing in the solver comparison

The bit-packing paragraph blamed Ruby for what is a gap in CRuby: no
Integer#popcount and no way to emit a PEXT, neither of which the
language forbids.

The head-to-head table is re-measured on six 15x10 three-colour boards,
wall clock, with two more configurations of the Ruby solver. YJIT takes
the evaluation loop 2.7x faster and Ractors cut a population-64 run from
7.9 s to 3.3 s across eight cores, which buys score through a larger
population: 2,031 -> 2,613 -> 2,852. bitbeam still scores 3,676 in
136 ms, so the remaining gap is the algorithm rather than the language,
and the post now says that.

The 12x rewrite figure and the Marshal profile are included to make the
same point: the old Ruby solver was slow because of what it did per
move, not because of what it was written in.
Comments were enabled site-wide but no provider was configured, so posts
rendered no comment section at all. giscus backs threads with GitHub
Discussions, which suits a readership that already has GitHub accounts.

Repository and category IDs come from the GitHub GraphQL API.

giscus cannot see the site theme, so the page has to tell it. The sync
script watches body for class changes rather than listening for clicks
on #change-skin: skin-switch.js binds its handler at jQuery ready, and
an inline listener would register first and read the class before the
toggle flipped it. It also waits for the iframe's first postMessage,
since anything sent before that lands nowhere.
The recording of the bot clearing seven boards sits at roughly 85% depth,
which is past where most readers stop. One clause in the intro gives a
scanner somewhere to go without putting a summary box in front of the
opening paragraphs.
The intro invites readers to see the puzzle rather than read about it,
but the only interactive version lived at /public/samegame and the post
never linked there for hands-on play. A "Try it yourself" section now
embeds a small board right after the rules are stated.

The embed reuses the standalone game verbatim: samegame.js is loaded as
is and the board size is pinned through its own config proxy. samegame.js
gains one seam for this, a gameOver(total) method holding what was inline
in clickBall, so the default still shows the alert and the standalone
page is unchanged while the embed overrides it with an on-board message
and an imperative "Try again!" that restarts the game.

samegame-embed.css is a scoped rebuild of samegame.css: every rule is
confined to .samegame-embed so the standalone's global body styling
cannot leak into the page, the blog's default table borders are reset on
the board, balls shrink on narrow screens, and the scoreboard padding is
trimmed to 4px so it matches the 12-column board width and the rounded
corners meet without a seam.
Walks through the penny-rounding problem that shows up when a
tax-inclusive bill is paid in installments, and the approach PennyWise
takes: count in integer atoms, extract the whole bill's tax once, then
read a floored running total whose per-payment differences telescope to
the exact bill total. Splitting a bill between several payers is the
same partition, so it reconciles for free.

The mathematics is kept language-agnostic and shown as pseudo-code
rather than linking the library, which is private.

Adds an interactive "tax meter" as a Liquid include: enter a total,
rate and installment count, then compare per-installment rounding (what
a receipt line shows) against the running-floor method, with a live
reconciliation table, a "plug the last installment" toggle, and a
cumulative-error strip. Self-contained HTML/CSS/JS, integer maths via
BigInt, theme-aware for the night-mode toggle, and responsive.
Pull upstream beautiful-jekyll updates. Resolved conflict in
assets/css/beautifuljekyll.css by keeping the site's themed
#social-share-section link colors (CSS variables for night mode)
instead of upstream's removal of the hardcoded color.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Mj4E3wsWuNAGEYxFXa3fNX
The "Floor, not round" section argues that the floored running tax
total is a staircase approximating a straight line, and that this is
Bresenham's line algorithm wearing a suit. This adds a widget that
shows it directly, right after that claim.

A 36-atom bill is laid out atom by atom along the x-axis; the tax owed
rises as a straight line to (36, T) where T is the floored tax content
for the chosen rate. One pixel is lit per atom on the tax level the
floored staircase occupies there, coloured blue where the atom is net
and orange where the line stepped up. Below each installment its own
net + tax split is printed, the counts never differ by more than one
and sum to exactly T. Two sliders: installments (1 to 12) and tax rate
(1% to 50%). A toggle redraws the staircase with round instead of
floor, so the rounded path visibly climbs above the true line while
the floored one never does.

Self-contained HTML/CSS/JS as a Liquid include, matching the existing
tax-meter widget: theme-aware for the night-mode toggle, fixed-size
SVG so axis labels do not scale with the graph, degenerate cases
handled (T = 0 at low rates collapses to a single all-net row).

Also wires up the post's cover, share and thumbnail images from a
rendering of the widget: a darkened, letterboxed staircase for the
hero and cropped versions for the share card and post-list thumbnail.
@coderabbitai

coderabbitai Bot commented Sep 10, 2026 •

Copy link
Copy Markdown

Review Change StackReview Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 446e6e0c-62a5-4869-a26f-c8dc182d5880

📥 Commits

Reviewing files that changed from the base of the PR and between d1eb82a and 5f4cb2f.

⛔ Files ignored due to path filters (75)
  • Gemfile.lock is excluded by !**/*.lock
  • assets/img/2025-10-15-from-corporate-comfort-to-entrepreneurial-uncertainty-what-i-ve-learned-so-far/emotional-cycle-of-change.png is excluded by !**/*.png
  • assets/img/2025-10-15-from-corporate-comfort-to-entrepreneurial-uncertainty-what-i-ve-learned-so-far/emotional-cycle-of-change.svg is excluded by !**/*.svg
  • assets/img/2025-10-15-from-corporate-comfort-to-entrepreneurial-uncertainty-what-i-ve-learned-so-far/path.jpg is excluded by !**/*.jpg
  • assets/img/2025-10-15-from-corporate-comfort-to-entrepreneurial-uncertainty-what-i-ve-learned-so-far/seedling.png is excluded by !**/*.png
  • assets/img/2025-10-22-my-calendar-is-public-here-s-why-i-traded-endless-typing-for-real-conversations/30-min-with-wolfgang.png is excluded by !**/*.png
  • assets/img/2025-10-22-my-calendar-is-public-here-s-why-i-traded-endless-typing-for-real-conversations/video-call-dark.png is excluded by !**/*.png
  • assets/img/2025-10-22-my-calendar-is-public-here-s-why-i-traded-endless-typing-for-real-conversations/video-call.png is excluded by !**/*.png
  • assets/img/2026-08-29-how-bitbeam-plays-samegame-thinking-in-bits/bitbeam-bot-playing-samegame.gif is excluded by !**/*.gif
  • assets/img/2026-08-29-how-bitbeam-plays-samegame-thinking-in-bits/samegame-board-cover-dark.png is excluded by !**/*.png
  • assets/img/2026-08-29-how-bitbeam-plays-samegame-thinking-in-bits/samegame-board-share.png is excluded by !**/*.png
  • assets/img/2026-08-29-how-bitbeam-plays-samegame-thinking-in-bits/samegame-board.png is excluded by !**/*.png
  • assets/img/2026-09-10-pennywise-how-much-of-a-part-payment-is-tax/staircase-cover-dark.png is excluded by !**/*.png
  • assets/img/2026-09-10-pennywise-how-much-of-a-part-payment-is-tax/staircase-share.png is excluded by !**/*.png
  • assets/img/2026-09-10-pennywise-how-much-of-a-part-payment-is-tax/staircase.png is excluded by !**/*.png
  • assets/img/404-gold.png is excluded by !**/*.png
  • assets/img/404-southpark.jpg is excluded by !**/*.jpg
  • assets/img/avatar-icon.png is excluded by !**/*.png
  • assets/img/crepe.jpg is excluded by !**/*.jpg
  • assets/img/favicons/android-chrome-192x192.png is excluded by !**/*.png
  • assets/img/favicons/android-chrome-384x384.png is excluded by !**/*.png
  • assets/img/favicons/apple-touch-icon.png is excluded by !**/*.png
  • assets/img/favicons/favicon-16x16.png is excluded by !**/*.png
  • assets/img/favicons/favicon-32x32.png is excluded by !**/*.png
  • assets/img/favicons/favicon.ico is excluded by !**/*.ico
  • assets/img/favicons/favicon.png is excluded by !**/*.png
  • assets/img/favicons/mstile-150x150.png is excluded by !**/*.png
  • assets/img/favicons/safari-pinned-tab.png is excluded by !**/*.png
  • assets/img/favicons/safari-pinned-tab.svg is excluded by !**/*.svg
  • assets/img/profile.jpg is excluded by !**/*.jpg
  • public/connect4/favicon-16.png is excluded by !**/*.png
  • public/connect4/favicon-32.png is excluded by !**/*.png
  • public/connect4/favicon.ico is excluded by !**/*.ico
  • public/connect4/pwa/apple-touch-icon/apple-touch-icon-180.png is excluded by !**/*.png
  • public/connect4/pwa/apple-touch-startup-image/apple-touch-startup-image-1125x2436.png is excluded by !**/*.png
  • public/connect4/pwa/apple-touch-startup-image/apple-touch-startup-image-1242x2208.png is excluded by !**/*.png
  • public/connect4/pwa/apple-touch-startup-image/apple-touch-startup-image-1242x2688.png is excluded by !**/*.png
  • public/connect4/pwa/apple-touch-startup-image/apple-touch-startup-image-1536x2048.png is excluded by !**/*.png
  • public/connect4/pwa/apple-touch-startup-image/apple-touch-startup-image-1668x2224.png is excluded by !**/*.png
  • public/connect4/pwa/apple-touch-startup-image/apple-touch-startup-image-1668x2388.png is excluded by !**/*.png
  • public/connect4/pwa/apple-touch-startup-image/apple-touch-startup-image-2048x2732.png is excluded by !**/*.png
  • public/connect4/pwa/apple-touch-startup-image/apple-touch-startup-image-640x1136.png is excluded by !**/*.png
  • public/connect4/pwa/apple-touch-startup-image/apple-touch-startup-image-750x1334.png is excluded by !**/*.png
  • public/connect4/pwa/apple-touch-startup-image/apple-touch-startup-image-828x1792.png is excluded by !**/*.png
  • public/connect4/static/js/488.9709d50b.js.map is excluded by !**/*.map
  • public/connect4/static/js/main.140339f6.js.map is excluded by !**/*.map
  • public/connect4/static/js/main.6bfe9b7f.js.map is excluded by !**/*.map
  • public/scratch/Whack-a-mammal/Figur2/costumes/Kostüm1.svg is excluded by !**/*.svg
  • public/scratch/Whack-a-mammal/Figur2/sounds/Plopp.wav is excluded by !**/*.wav
  • public/scratch/Whack-a-mammal/Figur3/costumes/Kostüm1.svg is excluded by !**/*.svg
  • public/scratch/Whack-a-mammal/Figur3/sounds/Plopp.wav is excluded by !**/*.wav
  • public/scratch/Whack-a-mammal/Figur4/costumes/Kostüm1.svg is excluded by !**/*.svg
  • public/scratch/Whack-a-mammal/Figur4/sounds/Plopp.wav is excluded by !**/*.wav
  • public/scratch/Whack-a-mammal/Figur5/costumes/Kostüm1.svg is excluded by !**/*.svg
  • public/scratch/Whack-a-mammal/Figur5/sounds/Plopp.wav is excluded by !**/*.wav
  • public/scratch/Whack-a-mammal/Figur6/costumes/Kostüm1.svg is excluded by !**/*.svg
  • public/scratch/Whack-a-mammal/Figur6/sounds/Boing.wav is excluded by !**/*.wav
  • public/scratch/Whack-a-mammal/Figur6/sounds/Plopp.wav is excluded by !**/*.wav
  • public/scratch/Whack-a-mammal/Monkey/costumes/happy.svg is excluded by !**/*.svg
  • public/scratch/Whack-a-mammal/Monkey/costumes/hit.svg is excluded by !**/*.svg
  • public/scratch/Whack-a-mammal/Monkey/sounds/Boing.wav is excluded by !**/*.wav
  • public/scratch/Whack-a-mammal/Monkey/sounds/Bonk.wav is excluded by !**/*.wav
  • public/scratch/Whack-a-mammal/Monkey/sounds/konrad_ah.wav is excluded by !**/*.wav
  • public/scratch/Whack-a-mammal/Sprite1/costumes/happy.svg is excluded by !**/*.svg
  • public/scratch/Whack-a-mammal/Sprite1/costumes/hit.svg is excluded by !**/*.svg
  • public/scratch/Whack-a-mammal/Sprite1/sounds/Boing.wav is excluded by !**/*.wav
  • public/scratch/Whack-a-mammal/Sprite1/sounds/Bonk.wav is excluded by !**/*.wav
  • public/scratch/Whack-a-mammal/Sprite1/sounds/karl_au.wav is excluded by !**/*.wav
  • public/scratch/Whack-a-mammal/Stage/costumes/Galaxy.png is excluded by !**/*.png
  • public/scratch/Whack-a-mammal/Stage/costumes/Galaxy2.png is excluded by !**/*.png
  • public/scratch/Whack-a-mammal/Stage/costumes/Hay Field.png is excluded by !**/*.png
  • public/scratch/Whack-a-mammal/Stage/costumes/Hintergrund1.svg is excluded by !**/*.svg
  • public/scratch/Whack-a-mammal/Stage/costumes/Hintergrund2.svg is excluded by !**/*.svg
  • public/scratch/Whack-a-mammal/Stage/sounds/pop.wav is excluded by !**/*.wav
  • screenshot.png is excluded by !**/*.png
📒 Files selected for processing (67)
  • .github/FUNDING.yml
  • .github/issue_template.md
  • .github/pull_request_template.md
  • .gitignore
  • .ruby-version
  • 404.html
  • LICENSE
  • README.md
  • _config.yml
  • _includes/footer.html
  • _includes/giscus-comment.html
  • _includes/google_analytics.html
  • _includes/head.html
  • _includes/nav.html
  • _includes/pennywise-bresenham.html
  • _includes/pennywise-tax-meter.html
  • _includes/samegame-mini.html
  • _includes/social-networks-links.html
  • _includes/social-share.html
  • _layouts/base.html
  • _posts/2020-02-26-flake-it-till-you-make-it.md
  • _posts/2025-10-15-from-corporate-comfort-to-entrepreneurial-uncertainty-what-i-ve-learned-so-far.md
  • _posts/2025-10-22-my-calendar-is-public-here-s-why-i-traded-endless-typing-for-real-conversations.md
  • _posts/2026-08-29-how-bitbeam-plays-samegame-thinking-in-bits.md
  • _posts/2026-09-10-pennywise-how-much-of-a-part-payment-is-tax.md
  • aboutme.md
  • assets/css/beautifuljekyll.css
  • assets/css/pygment_highlights.css
  • assets/css/skin-switch.css
  • assets/img/favicons/browserconfig.xml
  • assets/img/favicons/manifest.json
  • assets/js/skin-switch.js
  • doc/2020-02-28-sample-markdown.md
  • index.html
  • public/connect4/asset-manifest.json
  • public/connect4/index.html
  • public/connect4/manifest.json
  • public/connect4/serve.json
  • public/connect4/static/js/488.9709d50b.js
  • public/connect4/static/js/488.9709d50b.js.LICENSE.txt
  • public/connect4/static/js/main.140339f6.js
  • public/connect4/static/js/main.6bfe9b7f.js
  • public/index.html
  • public/karl/breakout.html
  • public/karl/breakout.js
  • public/karl/index.html
  • public/karl/sort.html
  • public/rep-clock/index.html
  • public/samegame/index.html
  • public/samegame/samegame-embed.css
  • public/samegame/samegame.css
  • public/samegame/samegame.js
  • public/scratch/Whack-a-mammal/Figur2/Figur2.js
  • public/scratch/Whack-a-mammal/Figur3/Figur3.js
  • public/scratch/Whack-a-mammal/Figur4/Figur4.js
  • public/scratch/Whack-a-mammal/Figur5/Figur5.js
  • public/scratch/Whack-a-mammal/Figur6/Figur6.js
  • public/scratch/Whack-a-mammal/Monkey/Monkey.js
  • public/scratch/Whack-a-mammal/Sprite1/Sprite1.js
  • public/scratch/Whack-a-mammal/Stage/Stage.js
  • public/scratch/Whack-a-mammal/index.html
  • public/scratch/Whack-a-mammal/index.js
  • public/scratch/index.html
  • public/triangulator/index.html
  • public/triangulator/script.js
  • public/triangulator/style.css
  • wteuber.gemspec

📝 Walkthrough

Walkthrough

The repository was converted into a personal Jekyll blog with custom branding, dark mode, comments, new posts, interactive tax and game widgets, public browser applications, and a triangle-mesh editor.

Changes

Site personalization and theme

Layer / File(s) Summary
Repository and site configuration
.github/*, .gitignore, .ruby-version, README.md, _config.yml, LICENSE, wteuber.gemspec
Repository metadata, Ruby version, site identity, social links, comments, documentation, and gem metadata were updated.
Theme and navigation
_includes/*, _layouts/base.html, assets/css/*, assets/js/*, assets/img/favicons/*
Dark mode, favicon metadata, social links, sharing links, and footer behavior were changed.
Site pages
404.html, index.html, aboutme.md, _posts/2020-02-26-*
The home and 404 pages were personalized. The About Me page and one older post were removed.

Embedded interactive widgets

Layer / File(s) Summary
PennyWise demonstrations
_includes/pennywise-*.html
The new widgets calculate tax allocations and render interactive tables and SVG visualizations.
SameGame embed
_includes/samegame-mini.html, public/samegame/*
SameGame gained configurable boards, responsive embed styling, scoring, group clearing, gravity, and restart handling.

Public browser applications

Layer / File(s) Summary
Browser games
public/connect4/*, public/karl/*
Connect Four, Breakout, bucket sort, directory indexes, and supporting build assets were added.
RepClock
public/rep-clock/index.html
A React timer tracks duration, repetitions, audio cues, completion state, and average repetitions per minute.
Whack-a-mammal
public/scratch/Whack-a-mammal/*
A Leopard-based Scratch project defines the stage, sprites, interactions, and browser loader.
Triangulator
public/triangulator/*
A canvas editor supports triangle creation, validation, vertex dragging, history, pan and zoom, mesh import/export, SVG/PNG export, and help controls.

Blog content

Layer / File(s) Summary
New blog posts
_posts/2025-10-15-*, _posts/2025-10-22-*, _posts/2026-08-29-*, _posts/2026-09-10-*
New posts cover entrepreneurship, live communication, the bitbeam SameGame solver, and PennyWise tax allocation.

Estimated code review effort: 5 (Critical) | ~120 minutes

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Warning

Some tools did not complete. Review the errors below.

🔧 Biome (2.5.10)
assets/css/beautifuljekyll.css
assets/css/skin-switch.css
assets/img/favicons/manifest.json
  • 21 others

Warning

⚠️ This pull request has been flagged as potential spam (vandalism) by CodeRabbit slop detection and should be reviewed carefully.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

A rabbit hops through pages bright,
With moonlit switches for the night.
Tax stairs climb and game boards play,
Triangles dance in neat array.
New posts bloom along the way.

Comment @coderabbitai help to get the list of available commands.

@wteuber

wteuber commented Sep 10, 2026

Copy link
Copy Markdown
Author

Opened against the wrong repo by mistake (fork of beautiful-jekyll). Closing. Apologies for the noise.

@wteuber wteuber closed this Sep 10, 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