{
  "schema": "tesign-radar/item/1",
  "generated_at": "2026-09-17T01:56:13.055Z",
  "lang": "en",
  "slug": "words-of-hanoi",
  "url": "https://tesign.com/en/item/words-of-hanoi/",
  "alternates": {
    "ko": {
      "html": "https://tesign.com/item/words-of-hanoi/",
      "json": "https://tesign.com/item/words-of-hanoi/index.json",
      "markdown": "https://tesign.com/item/words-of-hanoi/index.md"
    },
    "en": {
      "html": "https://tesign.com/en/item/words-of-hanoi/",
      "json": "https://tesign.com/en/item/words-of-hanoi/index.json",
      "markdown": "https://tesign.com/en/item/words-of-hanoi/index.md"
    }
  },
  "name": "Words of Hanoi",
  "use_label": "Daily word puzzle for puzzle fans",
  "one_liner": "A daily puzzle: move letter tiles between five tubes until every full tube spells a word.",
  "text": {
    "why": "Plenty of daily word games exist, but this one sorts letters instead of guessing them. Twelve letter tiles sit in five test tubes; you may move only the top tile onto a tube with room, and you win when every full tube spells a four-letter word. Boards are generated by walking 28 legal moves away from a solved position, so every board is provably solvable, every move can be undone, and any of the 902 listed words counts — not only the three the setter started from.",
    "take": "Three lines of rules teach it, and the maker even explains why every board can be solved — that honesty is the charm.",
    "build": [
      "A two- or three-minute daily habit next to your morning coffee",
      "A friendly rivalry: copy the result strip and compare move counts on the same board",
      "An experiment: rebuild a board from its seed with the unminified engine (/hanoi-engine.js) and hunt for a route shorter than par"
    ],
    "who": [
      {
        "role": "Word-game fan",
        "situation": "wants one more puzzle in the daily routine"
      },
      {
        "role": "Family or coworkers",
        "situation": "compare move counts on the same board"
      },
      {
        "role": "Aspiring puzzle maker",
        "situation": "reads a real seeded generator and a solvability proof in plain code"
      }
    ],
    "start": [
      {
        "command": false,
        "text": "Open https://crux.quest/hanoi → tap a tube to lift its top tile, then tap where it goes"
      },
      {
        "command": false,
        "text": "Keyboard: 1 to 5 pick up and drop, arrows move focus, Space or Enter acts, Z undoes, R resets, ? opens the help panel"
      },
      {
        "command": false,
        "text": "A new board appears at midnight UTC; the stats panel shows that moment in your time zone"
      }
    ],
    "caveat": [
      "License unconfirmed — the engine (/hanoi-engine.js) and word list (/hanoi-words.js) are served unminified, but no terms of use are stated",
      "Free · no login or tracking; streaks and counts stay in local storage · needs JavaScript",
      "English four-letter words only (902 of them); no Korean edition",
      "The page's 'Play the whole thing in the app' link returns 404 as of 2026-09-15; the web version works",
      "Shown on HN 2026-09-13 (1 point, 0 comments) · the second web game from Crux"
    ]
  },
  "cta": {
    "type": "try",
    "label": "TRY",
    "url": "https://crux.quest/hanoi"
  },
  "ready": "browser",
  "categories": [
    "games"
  ],
  "categories_confirmed": true,
  "tags": [
    "word-game",
    "daily-puzzle",
    "browser-game",
    "no-login"
  ],
  "platform": [
    "web"
  ],
  "license": {
    "spdx": null,
    "scope": "unknown",
    "scope_text": "Unconfirmed — check before use.",
    "url": null,
    "note": null,
    "open_source": null
  },
  "language": null,
  "source_urls": {
    "canonical": "https://crux.quest/hanoi",
    "github": null,
    "huggingface": null,
    "app_store": null,
    "sightings": [
      {
        "source": "showhn",
        "url": "https://crux.quest/hanoi",
        "posted_at": "2026-09-13T04:46:34.000Z",
        "hn_url": "https://news.ycombinator.com/item?id=49680111"
      }
    ]
  },
  "numbers": {
    "as_of": "2026-09-16T21:00:00.000Z",
    "stars": null,
    "stars_unit": "GitHub stars",
    "stars_checked_at": null,
    "stars_observed_since_check": null,
    "star_delta_24h": null,
    "star_delta_7d": null,
    "star_delta_30d": null,
    "star_delta_unit": "GitHub stars gained in the window, GH Archive events summed to as_of",
    "spark_14d": [
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null
    ],
    "hf_likes": null,
    "hf_likes_observed_at": null,
    "hn_points": 1,
    "hn_points_observed_at": "2026-09-16T07:50:08.499Z",
    "store": null,
    "method": "Star total = the value last checked on GitHub (stars_checked_at) + increases observed via GH Archive since. The 24h · 7d · 30d gains are GH Archive hourly events summed to the reference time (as_of). No score of ours."
  },
  "ranks": null,
  "activity": null,
  "signals": [
    {
      "kind": "new",
      "label": "NEW",
      "value": "2h OLD WHEN SEEN"
    }
  ],
  "images": {
    "og": "https://tesign.com/img/words-of-hanoi-8b4fea53d4.png",
    "cover": "https://tesign.com/img/words-of-hanoi-8b4fea53d4.png",
    "cover_width": 2400,
    "cover_height": 1260,
    "gallery": [
      "https://tesign.com/img/words-of-hanoi-8b4fea53d4.png"
    ],
    "alt": "Words of Hanoi play screen: five test tubes of letter tiles with Moves and Par counters above and Undo and Reset buttons below.",
    "tier": 1
  },
  "dates": {
    "first_seen_at": "2026-09-13T07:43:20.294Z",
    "source_created_at": "2026-09-13T04:46:34.000Z",
    "discovery_hours": 2.9461927777777777,
    "launch_signal_at": "2026-09-13T04:46:34.000Z",
    "kept_at": "2026-09-15T14:07:35.277Z",
    "first_published_at": "2026-09-15T14:07:35.397Z",
    "updated_at": "2026-09-15T14:07:35.372Z",
    "ingestion_mode": "live"
  },
  "notes": [
    "This file was produced by the same build, from the same data, as the tesign.com item page. The text is editorial; the numbers are stored observations.",
    "null in the JSON means not observed — never zero. The Markdown writes [unconfirmed] for it.",
    "Star total = the value last checked on GitHub (stars_checked_at) + increases observed via GH Archive since. The 24h · 7d · 30d gains are GH Archive hourly events summed to the reference time (as_of). No score of ours.",
    "A summary, not legal advice."
  ]
}
