No description
  • Rust 56.8%
  • JavaScript 36.2%
  • Python 3.4%
  • HTML 1.9%
  • CSS 1.7%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Benno Richters 2244b91b7a Show non-daily games started per board size on /stats
Counted from the `new_game` log rows rather than the stored games: "started"
is an event, and a game the games sweep has already reaped was still started.
`COUNT(DISTINCT game_id)` because a two-player game logs one row per player,
and the count is of games; daily puzzles are excluded in the query, since
every one of them is three rings and there are more of them than of
everything else.

Site-wide rather than per date, unlike the rest of the log-derived numbers on
that page: a single day holds a handful of new games, so which sizes players
pick only says anything summed over the window. It rides along with the page's
own fetch — the `logs` scan is already paid for twice there — so unlike the
single/two-player split it needs no button.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 16:33:24 +00:00
.claude State what broke when a contradiction names no tile 2026-09-14 17:59:48 +00:00
.claude-box Move claude-box to the machine-wide launcher 2026-08-17 15:26:43 +02:00
assets screenshot 2026-05-15 13:05:16 +02:00
dev Gate the internal pages and add a real 404 2026-08-11 13:51:33 +00:00
docs State what broke when a contradiction names no tile 2026-09-14 17:59:48 +00:00
fixtures Name the shallowest split that refutes a drilled branch 2026-09-14 17:28:40 +00:00
queries queries 2026-05-08 09:52:13 +02:00
scripts State what broke when a contradiction names no tile 2026-09-14 17:59:48 +00:00
src Show non-daily games started per board size on /stats 2026-09-17 16:33:24 +00:00
static Show non-daily games started per board size on /stats 2026-09-17 16:33:24 +00:00
test State what broke when a contradiction names no tile 2026-09-14 17:59:48 +00:00
tools/gen_tables speed up rules ~12% via generated neighbor bitmasks 2026-06-10 14:33:34 +02:00
.gitignore gitignore: ignore .claude/scheduled_tasks.lock 2026-06-01 13:16:32 +02:00
app.json add /healthz endpoint and Dokku app.json startup healthcheck 2026-05-24 11:13:42 +02:00
Cargo.lock Put the disk reading on the stats page, where the glance is free 2026-08-27 13:21:35 +00:00
Cargo.toml Put the disk reading on the stats page, where the glance is free 2026-08-27 13:21:35 +00:00
CLAUDE.md Show non-daily games started per board size on /stats 2026-09-17 16:33:24 +00:00
Dockerfile bump Rust toolchain to 1.97.0 2026-07-12 09:05:36 +00:00
LICENSE MIT license 2026-05-15 08:13:13 +02:00
package.json phase 4: extract pure renderer into static/js/render.js 2026-05-13 09:28:40 +02:00
Procfile add Procfile for Dokku persistent storage 2026-04-29 18:10:07 +02:00
README.md Stop naming a tile color in the manual's example 2026-08-23 07:47:27 +00:00
rust-toolchain.toml Bump Rust toolchain to 1.97.1 2026-07-19 15:42:36 +00:00

Hexatonic

A logic puzzle played on a hexagonal grid, inspired by Tectonic (also known as Suguru). The twist: you start almost blind and earn clues one guess at a time.

The Rules

The board is divided into groups of tiles, each group distinguished by a color. Two rules govern the solution:

  • Groups: a group of size n contains the digits 1 through n, each exactly once. Groups can have size 1, 2, 3, 4 or 5.
  • Neighbors: no two tiles that touch each other may share the same digit — even if they belong to different groups.

Solved board

What Makes It Different

At the start, a lot of tiles are grey — their color (and therefore their group) is unknown. You have to figure out both the digit and the color of each tile.

Board with clues

In the example above, only one digit has been revealed so far: a 1 near the bottom. The tile immediately to its left has a color. If no neighbor of that tile shares its color, it is the only tile in its group. Then it should have the digit 1. But that violates the rule that no two touching tiles can have the same digit. Therefore, the tile with the digit 1 must have that same color.

After every correct guess the game adds just enough new clues to keep the puzzle solvable. You're never left guessing blindly.

If you get stuck, the ? button can walk you through the reasoning behind a tile — without spoiling the rest of the board.

Two-Player Mode

Each player gets their own copy of the board. After a correct guess, the guesser picks a set of clues to hand to their opponent. All clues come from your partner's choices, never added automatically. Players alternate turns, so there's a small strategic element in what you reveal.

Technical Info

See CLAUDE.md.