About
Koday (pronounced KOH-day) is a static, phone-first daily puzzle site: a few small puzzles a day. A new set appears at the player’s local midnight, every board is generated from the date, and progress lives in the browser with no account or server.
Each game opens with a short how-to, runs a clock from the first move, and has a hint button with a five-second cooldown. Hints are always available, so every puzzle can be finished.
Games
Crowns
Place six crowns on a 6×6 board split into six coloured regions: exactly one in every row, column, and region. No two crowns may touch, not even at a corner.
- Play: tap a square to cycle between clear, blocked, and crowned.
- Puzzle: uniquely solvable, with regions checked for balance and connectivity.
- Hint: removes a misplaced crown, or places the next correct one.
Thread
Draw one unbroken line through every square of a 6×6 grid, starting at 1 and passing the numbered checkpoints in order to the highest number.
- Play: press and drag from square to square. Drag back to retrace, or tap a square on the line to rewind to it.
- Puzzle: the route is a generated Hamiltonian path with checkpoints spread evenly along it. Any path that satisfies the checkpoints counts.
- Hint: a solver extends the line by one correct step. If the line has wandered into a dead end, it first pulls the line back to the last point that can still be completed.
Quilt
Split a 6×6 board into rectangles that cover every square exactly once. Each rectangle holds one number, which is its area, and an outline showing whether the patch is square, wide, or tall.
- Play: drag to draw a patch, grab an edge to resize it, or tap it to remove it.
- Puzzle: uniquely solvable.
- Hint: removes a wrong patch, or places the next correct one.
Braid
Four hidden words of 3, 4, 5, and 6 letters snake through a 5×5 grid of letters. Trace each one through neighbouring letters (up, down, or sideways) so that every open tile is used exactly once. Grey squares are walls.
- Play: drag through the letters and release to keep a word. Drag back to trim a trace, or tap its head to clear it.
- Puzzle: words come from a bundled dictionary, one per length, each laid along a self-avoiding path. Only the intended words on their intended cells are accepted, so the board can never get stuck.
- Hint: reveals one unsolved word.
Orbit
Three nested rings of coloured segments sit in a 7×7 frame. Rotate them until the top, right, bottom, and left spokes all match the target colours around the board. The catch: turning a ring also turns its neighbours the other way, like meshed gears.
- Play: drag around a ring to spin it, or tap to nudge it by one segment.
- Puzzle: each ring has exactly one alignment that matches the targets. The starting scramble is chosen by breadth-first search to sit several linked moves away from solved.
- Hint: a breadth-first search over the linked-ring states gives the first move of a shortest solution.
Tumble
Tip a 6×6 board to roll marbles into pockets. Every marble rolls at once until it hits a wall or drops into a pocket, and marbles that reach a pocket stay there.
- Play: swipe up, down, left, or right, or use the arrow keys.
- Puzzle: six to nine walls, with two or three marbles and the same number of pockets. A board is kept only if its shortest solution takes between 3 and 12 tips.
- Hint: plays the first move of a shortest solution. Marbles already home can block the rest, so the game detects dead ends and offers a way back to the last position that can still be solved.
Hatch
Join the dots of a 5×5 grid into one loop that never branches or crosses itself. A number in a cell says how many of that cell’s four sides the loop uses: 0 means it avoids the cell, and 3 means it wraps around three sides. One line is drawn at the start to get you going.
- Play: drag from dot to dot, and drag back over a line to remove it.
- Puzzle: the loop is the border of a random connected, hole-free blob of cells. Clues are then removed one at a time for as long as the puzzle keeps exactly one solution.
- Hint: removes a wrong line, or adds a missing one.
Ripple
A 6×6 board of four colours, with your puddle in the top-left corner. Tap a colour to repaint the puddle, and every touching square of that colour joins it. Flood the whole board in as few moves as you can.
- Play: tap a colour, watch the puddle grow, and undo a wrong turn.
- Puzzle: par is the move count of a greedy strategy that always picks the colour that grows the puddle most. Boards are kept only when par falls between 8 and 18.
- Hint: plays that greedy move. Finishing shows your moves against par.
How it works
- Seeded generation: each game hashes the date with a rules version into a seeded RNG, so everyone on the same local date gets the same boards without a backend. Bumping the rules version regenerates every puzzle.
- Checked ahead: a script generates 60 days of every game. It verifies that Crowns, Quilt, Orbit, and Hatch have exactly one solution, and that Tumble and Ripple are solvable.
- Share cards: finishing a puzzle renders a square result card on a canvas and hands it to the native share sheet. Where that isn’t available, it downloads the image and copies a text summary.
- Calm motion: animations are short and CSS-only, and they switch off for reduced-motion users.
Technology Stack
- Frontend: React, TypeScript, Vite, Tailwind CSS
- Input: Pointer events, so drawing works with mouse, touch, or pen
- Hosting: Cloudflare Pages, as a static client-routed app
Play
Today’s puzzles are at koday.app.