BeamNG.Earth
BeamNG.drive용 1:1 비율 실시간 지구, 실제 고도·위성 이미지·부동 원점·보조 서버에서 LOD 스트리밍
57개의 무료 논리 퍼즐, 힌트가 다음 수를 설명해 주며 오프라인·터치·마우스·키보드 지원
57 free logic puzzles to play in your browser, with hints that explain the next move instead of just making it. Works offline, with touch, mouse or keyboard.
게임TypeScript · JavaScriptGitHub @hintful-puzzles온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Hintful Puzzles: logic puzzles with hints that explain why. Free, offline, and ad-free.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A progressive web app (PWA) of Simon Tatham's Portable Puzzle
Collection, plus additional puzzles from Lennard Sprong's
puzzles-unreleased, maintained by Yoni Lavi: all 57
games implemented natively in TypeScript, with hints that explain the next
move rather than just showing it.README 전문 보기 ↗A progressive web app (PWA) of Simon Tatham's Portable Puzzle Collection, plus additional puzzles from Lennard Sprong's puzzles-unreleased, maintained by Yoni Lavi: every game implemented natively in TypeScript, with hints that explain the next move rather than just showing it.
It is a fork of Mike Edmunds' puzzles-web, which adapted the upstream C collection to the browser through WebAssembly. This project replaced that engine with its own, rewriting every game in TypeScript, top-down, so that the codebase can grow beyond upstream: fast iteration on the UI and games, cheap addition of new games, and cross-game features upstream doesn't have (quick-save, mistake-checking, explained hints, per-game play aids). Targets Baseline 2023; works with touch, mouse, and keyboard across screen sizes.
Play it at https://hintful.click. To run it locally, npm install and
then npm run dev.
The app works, and the migration is done. Every puzzle is playable, and every one is a native TypeScript implementation running on this project's own engine. The C/WASM engine it grew up alongside — the sources, the Embind adapter, the Emscripten build, the worker's wasm path — was retired on 2026-08-01 once the last game shipped. There is no C left to build and no wasm in the app.
The migration is deliberate divergence, not a faithful port. We are
not tracking upstream and not preserving byte-identical behavior or old
save-game / shared-ID compatibility from before the pivot. Going forward, a
shared game ID names the board itself (params:desc), never a seed, so it
keeps opening that board.
The code is still rough in places. What the project is for is
docs/doctrine.md;
the authoritative migration rules are the ts-migration capability spec
at openspec/specs/ts-migration/spec.md.
For a bug, or a question about a puzzle, open an issue. Helpful to include:
Simon Tatham's How to Report Bugs Effectively is worth a read.
Everything below is for building or contributing.
src/ is the whole thing: the TypeScript web app, the engine
(src/engine/ — midend, Game interface, drawing and color
contracts) and the games (src/games/<id>/).
It went top-down. A TS midend and a clean Game interface first, then
games in order of user-facing value (simplest first to establish the pattern,
then the ones we wanted to enhance, then outward), with leaf libraries pulled
in lazily as idiomatic TS when a game needed them. Each game ran on C until
its port was accepted at parity, then flipped over and its C was deleted.
puzzles/ was a frozen git subtree of the upstream C collection, read as
a reference while porting. It is gone. What outlived it moved to where it
belongs: upstream's per-puzzle help text into this project's own pages under
help/games/, the MIT
notices to licenses/, and the two unbuilt experimental sources
kept for future greenfield games to the openspec changes that read them. The
C itself is in git history.
This replaced an earlier bottom-up, byte-identical-fidelity plan
(preserved on branch legacy/seam-by-seam-fidelity + tag
pre-ts-pivot).
The web app is a Vite multipage app. Entry pages render at build time
(or in the dev server) via the custom
vite-plugins/extra-pages.ts plugin, from
templates under templates/. src/ is organized by role:
src/screens/ — top-level screen components (one per page).src/dialogs/ — modal / popover overlays.src/components/ — reusable leaf Lit components.src/puzzle/ — the puzzle runtime + the Comlink worker boundary.src/engine/ — the Game interface, the Midend, the game registry,
the drawing/color contracts and the in-process test harness.
src/engine/random/ is the bit-identical RNG port, which the fixtures
and seeded tests rest on.src/games/<id>/ — each game.src/store/ — Dexie (IndexedDB) schema for settings and saved games.main.ts, the old-browser preflight.ts gate, the
sw.ts service worker, and cross-cutting modules at src/ root.src/assets/ holds only committed files — nothing under src/ is
generated. src/assets/icons/ is a committed thumbnail snapshot (see
openspec/specs/puzzle-icons/spec.md).src/puzzle/catalog-data.ts is the committed game catalog.The UI uses Lit web components and Web Awesome design
tokens; reactive state via @lit-labs/signals; offline via a Workbox
service worker; telemetry via Sentry. The in-app help all lives under
help/, in one format: site-level pages at the top level and one page
per game in help/games/, all of them this project's own markdown.
src/help-coverage.test.ts holds that directory and the catalog to each other
in both directions.
Vite bundles the TypeScript PWA. That is the whole build — the games are TypeScript, so there is no compilation step ahead of it, and nothing is generated.
npm install
That is the entire setup, on any platform. The repository has no native toolchain dependency of any kind.
npm run dev # Vite dev server (hot-reloads)
npm run build # production build
npm run preview # preview the production build
npm run check # Biome format + lint
npm run test:run # Vitest
A fresh clone runs npm run dev and npm run build with nothing built first
and nothing installed but Node: the game catalog is committed source
(src/puzzle/catalog-data.ts), the icons are a committed snapshot, and the help
pages are committed markdown.
The guides under docs/ say how work is done here, and each is
written to be looked up by section rather than read through: a guide about
writing a game opens with what every game does and a table of its sections.
This table is the one index of them.
| Working on | Guide |
|---|---|
| A new game, or any game: the route through the guides by kind of game, the lifecycle, the definition of done | docs/new-game.md |
| Params, state, moves, capability hooks, affordances | docs/mechanics.md |
| Pointer, keyboard, touch, the keypad | docs/input.md |
| Redraw, tile cache, palette, animation | docs/rendering.md |
Solver, generator, difficulty tiers, findMistakes | docs/solver-and-generator.md |
| A hint: the quality bar, its words, its plan, refusals, the guards | docs/hints.md |
| A hint's marks on the board, how a step is grouped, the facts it may rest on | docs/hints-marks.md |
| The hint of a game with candidate notes | docs/hints-candidates.md |
| The hint of a game solved by search or a heuristic | docs/hints-search.md |
| A test, a render scenario, a cross-game guard |
Each guide names at its top the spec it rests on, and a game's own rules are
openspec/specs/<game>/spec.md.
Work is tracked with openspec (openspec/): a change is proposed,
specced, implemented, then archived. The rules every
session works under are AGENTS.md, and the guides under
docs/ say how work is done.
The rules of record are the capability specs under openspec/specs/; the record
of what was built is openspec/changes/archive/ and the git log.
The web app code (including local modifications/additions to the puzzles code) is MIT — see LICENSE.md. The upstream notices in licenses/ cover the ported games and the upstream help text adopted into help/games/, also MIT. The built app bundles several open source packages; required notices are in the app's About dialog (open an issue if any seem missing).
docs/testing.md |
| A shared engine helper | docs/engine-catalog.md |
| Judging tests, or quoting a measurement | docs/test-strength.md |
| A check, a census, a bulk edit, a number in a proposal | docs/method.md |
| An openspec change, acceptance, pushing, a deploy | docs/work-management.md |
| A help page | docs/help-pages.md |
| A framework or cross-game design decision | docs/doctrine.md |