
An Endless
Puzzle Book
A themed word search app for Android tablets. It generates puzzles on demand from a curated 11,281-word corpus across 42 themes, keeps one puzzle in progress across sessions, and never runs out of material. The grid is a centered square sized to the window, so it plays at any width — including split-screen, resized mid-puzzle. Word to your mother.
42
Themes
11,281
Unique Words
226
Levels
41
Trophies
3
Difficulties
3
Gradle Modules
0
Ads
0
Trackers
Never the Same Puzzle Twice
Freshness is a draw-policy problem, not a content-volume problem. Combinatorially nobody repeats a puzzle set — what players actually notice is repeated words. So three things work together.
A bag draw, without replacement
Each category keeps a shuffled deck per length band, consumed without replacement. That turns roughly one repeat per puzzle forever into a guarantee of zero repeats for ⌊N/k⌋ consecutive puzzles.
A 200-word global recency window
Rolling, and shared across every category. It kills the GOAT-in-Farm-then-GOAT-in-Animals effect that a per-category deck alone cannot see.
Filler drawn from the theme's own letters
Filler letters are sampled from the category's letter frequencies, never uniform random. Uniform filler is the classic tell that makes theme words pop out of the noise.
The corpus has depth to spare. 42 authored categories hold 14,592 category memberships, but a word that belongs to three themes is still one word — 2,502 words appear in more than one category, so the collection counts 11,281 unique words. That unique count is computed from the corpus at import rather than hardcoded, and it is the denominator the player sees.
What It Does
Single-player, offline, and built to be lived in.
Puzzles are generated on demand from a 42-theme corpus and stored as ~50-byte seeds rather than grids. Even a 60-word category yields on the order of 10¹² distinct 12-word puzzles — nobody repeats a set, ever.
11×11, 13×13 and 15×15 grids with 8, 12 and 16 words. Difficulty comes from the grid — size, word count, allowed directions — never from vocabulary rarity. Every word stays reachable at every level.
No countdown, no penalty for a wrong drag, no way to lose a puzzle in progress. Challenge you choose is fun; difficulty imposed mid-puzzle is not. Every progression mechanic lives between puzzles.
The spine of progression: a lifetime count of unique words discovered out of 11,281, with per-theme rings. Intrinsic to the content rather than a generic XP grind, and it pairs exactly with the no-repeat bag draw.
Four streaks, per-theme mastery, personal bests, and 41 trophies across seven families. Every one is forgiving by construction — streaks get a grace day and a broken one never erases its longest-ever record.
No accounts, no cloud sync, no leaderboards, no analytics, and no notification permission at all. The app never nags the player to come back. Everything lives in one Room database on the tablet.
The App
Landscape on a tablet, edge to edge, with the progression layer living in the top bar rather than interrupting anything.

First run
The corpus imports from the bundled asset into Room, and re-imports only when the asset's version stamp changes.

Home
Level and collection ring in the top bar, streak beside it, and puzzles solved and time played as the two counters worth keeping.
The governing principle
Nothing is ever gated.
No level, rank, milestone, streak, or record unlocks, restricts, or changes anything. Every theme and every difficulty is available from first launch, forever. Progression is decoration — trophies, animations, a ring filling in.
The only thing ever dimmed is a difficulty whose grid does not physically fit the window.
The Design System
The palette is sampled from the app's own art — k-means over the icon, wordmark and mascot — rather than invented. The art is navy-native, so the interface is too.
Palette
Page and panel are held to genuinely different values, so cards and progress tracks read as distinct surfaces rather than smudges.
| Role | Light | Dark |
|---|---|---|
| Page ground | #F2F6FD | #05103A |
| Panel | #FFFFFF | #0A1B4F |
| Letters / body | #0B1A3F | #F7F9FD |
| Hairline, panel edge | #D7E3F5 | #1B2E63 |
| Primary accent | #0E5FB8 | #5FC8F0 |
| Muted text | #5A6B8C | #8AA0C8 |
| Reward (tertiary) | #8A5A00 | #FCBE44 |
Found-word bands
Six colours cycling, separated in lightness as well as hue so they stay distinguishable under all common colour vision deficiencies.
Drawn near-opaque at 0.92. A band is the found word's surface: the letters over it flip to ink and gain weight, so a solved word scans as solved from across the board, and the later band simply wins a crossing cell — which is how two highlighter passes actually look. The cycling order interleaves light and dark on purpose, because words take their band from their index in the bank and neighbouring indices are the pair most likely to appear together.
Inter, and only Inter
A variable font (wght 100–900, opsz 14–32), so every weight is requested through FontVariation settings and optical sizing is pinned per role. Grid letters are SemiBold at ~0.54 × cell size with +3% tracking — legibility in isolation is the only criterion, and letterforms must not confuse I/l/1 or O/0. Display type is Black, tracked tight, so titles rhyme with the wordmark rather than arguing with it.
An open letter field, not tiles
The beveled tile is the brand's identity mark — icon, trophies, category cards — and it is deliberately not the reading surface. A tile is opaque, so a selection stroke has nowhere to go but on top of it, and a diagonal word becomes a staircase rather than a clean band.
Material You is declined on purpose
minSdk 31 makes dynamic colour available, but it derives the palette from the device wallpaper and would override the designed colours — including the six band colours chosen to stay distinguishable under colour vision deficiency.
Dive Deeper
Gameplay
The three difficulty presets, why maxLen is geometric, the no-fail-state rule, selection, hints, and completion.
Progression
The word collection, 226 levels, four streaks with a grace day, per-theme mastery, and all 41 trophies.
Architecture
Three Gradle modules, puzzles as seeds, a hand-rolled PCG RNG, 14 Room tables, and targeting API 36.
