{
  "$comment": "Daily Toybox network: the source of truth for every game on the hub. Edit here, then run scripts/build-hub.py (writes index.html, games/<slug>.html and sitemap.xml). Served publicly at https://dailytoybox.com/games.json for cross-promo. icon = SVG inner markup on a 48x48 grid, stroke=currentColor. hidden = true keeps a game off the hub, its pages, the sitemap and network.json (the other games' More dailies) until it is ready. howTo = 3 or 4 short steps for the game's detail page; practiceNote = only while a game's One Page Toys practice edition isn't live yet (practice is One Page Toys only, STANDARD 1b).",
  "updated": "2026-11-12",
  "categories": [
    {
      "id": "words",
      "label": "Words"
    },
    {
      "id": "logic",
      "label": "Logic"
    },
    {
      "id": "skill",
      "label": "Skill"
    },
    {
      "id": "estimation",
      "label": "Estimation"
    },
    {
      "id": "strategy",
      "label": "Strategy"
    }
  ],
  "games": [
    {
      "slug": "eyeball-it",
      "hidden": true,
      "name": "Eyeball It",
      "category": "estimation",
      "color": "#22D3EE",
      "domain": "eyeball-it.com",
      "play": "https://eyeball-it.com",
      "practice": null,
      "blurb": "Guess how many, how full, how wide, how long. Three looks a day, scored on how close you get.",
      "apps": {
        "ios": null,
        "android": null
      },
      "icon": "<path d=\"M4 24 C12 12 36 12 44 24 C36 36 12 36 4 24 Z\"/><circle cx=\"24\" cy=\"24\" r=\"7\"/><circle cx=\"26\" cy=\"22\" r=\"1.5\" fill=\"currentColor\"/>",
      "howTo": [
        "Each day has three pictures to judge by eye: how many things there are, how full something is, how wide or how long.",
        "Make your best guess for each one.",
        "Every guess is scored on how close it lands, and the three add up to a score out of 100.",
        "Share your score and come back tomorrow for three more."
      ],
      "practiceNote": "A practice edition on One Page Toys is on the way. Practice never counts toward your streak."
    },
    {
      "slug": "five-second-game",
      "name": "5 Second Game",
      "category": "skill",
      "color": "#FDE047",
      "domain": "5secondgame.com",
      "play": "https://5secondgame.com/daily",
      "practice": "https://onepagetoys.com/toys/five-second-game/",
      "blurb": "Press start, then stop when you think exactly five seconds have passed. How close can you get?",
      "apps": {
        "ios": null,
        "android": null
      },
      "icon": "<circle cx=\"24\" cy=\"27\" r=\"16\"/><path d=\"M20 5 H28\"/><path d=\"M24 5 V11\"/><path d=\"M24 27 L31 20\"/>",
      "howTo": [
        "Press Start.",
        "Count in your head, and press Stop when you think the target time has passed. There's no clock to watch.",
        "Your result is how far off you were, to the millisecond.",
        "The daily target changes every day, somewhere between 3 and 8 seconds. The classic version is always exactly 5."
      ]
    },
    {
      "slug": "spelling-blocks",
      "name": "Spelling Blocks",
      "category": "words",
      "color": "#FB923C",
      "domain": "spellingblocks.com",
      "play": "https://spellingblocks.com/daily",
      "practice": "https://onepagetoys.com/toys/spelling-blocks/",
      "blurb": "Twelve letter blocks. Build words, stack them on your wall, and use every last one.",
      "apps": {
        "ios": null,
        "android": null
      },
      "icon": "<rect x=\"4\" y=\"26\" width=\"18\" height=\"18\" rx=\"3\"/><rect x=\"26\" y=\"26\" width=\"18\" height=\"18\" rx=\"3\"/><rect x=\"15\" y=\"5\" width=\"18\" height=\"18\" rx=\"3\"/>",
      "howTo": [
        "You get twelve letter blocks.",
        "Spell words with them and stack each word on your wall.",
        "Use every last block to finish the day.",
        "Your result is how many words you used and how long it took, shared as rows of squares with no letters showing."
      ]
    },
    {
      "slug": "the-trail-game",
      "name": "The Trail Game",
      "category": "logic",
      "color": "#4ADE80",
      "domain": "thetrailgame.com",
      "play": "https://thetrailgame.com/daily",
      "practice": "https://onepagetoys.com/toys/trail-game/",
      "blurb": "Draw one trail through every square of the grid, hitting the numbered dots in order.",
      "apps": {
        "ios": null,
        "android": null
      },
      "icon": "<path d=\"M8 40 V8 H24 V24 H40 V40 H24\"/><circle cx=\"8\" cy=\"40\" r=\"3\" fill=\"currentColor\"/><circle cx=\"24\" cy=\"40\" r=\"3\" fill=\"currentColor\"/>",
      "howTo": [
        "Start on dot 1.",
        "Draw one unbroken trail through every square of the grid.",
        "Pass the numbered dots in order as you go.",
        "Finish without backtracking for a clean solve, and share your time."
      ]
    },
    {
      "slug": "last-bend",
      "name": "Last Bend",
      "category": "strategy",
      "color": "#60A5FA",
      "domain": "lastbend.com",
      "play": "https://lastbend.com/daily",
      "practice": "https://onepagetoys.com/toys/last-bend/",
      "blurb": "A daily tower defense puzzle. Same board for everyone, two minutes to hold it, one card to share.",
      "apps": {
        "ios": null,
        "android": null
      },
      "icon": "<path d=\"M4 12 H30 C38 12 38 26 30 26 H18 C10 26 10 40 18 40 H44\"/><path d=\"M38 4 V12\"/><path d=\"M34 4 H42\"/>",
      "howTo": [
        "Look over the board: one path, five waves of little monsters, and a cottage at the end.",
        "Spend your 200 gold placing towers along the path.",
        "Press play and watch the waves walk the path. Keep as many lives as you can.",
        "You get three tries a day, and your share card shows how each wave went without giving away where you built."
      ]
    },
    {
      "slug": "four-tumblers",
      "name": "Four Tumblers",
      "category": "logic",
      "color": "#F5B942",
      "domain": "fourtumblers.com",
      "play": "https://fourtumblers.com/daily",
      "practice": "https://onepagetoys.com/toys/four-tumblers/",
      "blurb": "A daily safecracking puzzle. Same vault for everyone. Open it in as few tries as you can.",
      "apps": {
        "ios": null,
        "android": null
      },
      "icon": "<circle cx=\"24\" cy=\"24\" r=\"18\"/><circle cx=\"24\" cy=\"24\" r=\"5\"/><path d=\"M24 6 V11\"/><path d=\"M42 24 H37\"/><path d=\"M24 42 V37\"/><path d=\"M6 24 H11\"/><path d=\"M24 24 L32 16\"/>",
      "howTo": [
        "The vault has four wheels, each set somewhere from 0 to 39.",
        "Turn the dial to choose four numbers, then try the handle.",
        "Each wheel tells you how close it was: Open, Close (within 3), Warm (within 8) or Cold. It never tells you which direction.",
        "Open the vault in eight tries or fewer."
      ]
    },
    {
      "slug": "word-kraven",
      "name": "Word Kraven",
      "category": "words",
      "color": "#A78BFA",
      "domain": "wordkraven.com",
      "play": "https://wordkraven.com/daily",
      "practice": "https://onepagetoys.com/toys/word-kraven/",
      "blurb": "A new letter grid every day. Trace through touching letters and hunt the words out of the grid.",
      "apps": {
        "ios": null,
        "android": null
      },
      "icon": "<rect x=\"5\" y=\"5\" width=\"38\" height=\"38\" rx=\"5\"/><path d=\"M15 15 L24 24 H33 V33\"/><circle cx=\"15\" cy=\"15\" r=\"2.5\" fill=\"currentColor\"/><circle cx=\"33\" cy=\"33\" r=\"2.5\" fill=\"currentColor\"/>",
      "howTo": [
        "A new 4x4 letter grid every day.",
        "Trace through touching letters, diagonals included, to spell words of four letters or more.",
        "Every word you find moves you up the rank ladder.",
        "Reach the day's completion rank to keep your streak going. Finding every word is a bonus, not the goal."
      ]
    },
    {
      "slug": "tossing-cards",
      "name": "Tossing Cards",
      "category": "skill",
      "color": "#F472B6",
      "domain": "tossingcards.com",
      "play": "https://tossingcards.com/daily",
      "practice": "https://onepagetoys.com/toys/tossing-cards/",
      "blurb": "Flick ten playing cards across a room into a bowl. Same room, same cards for everyone, every day.",
      "apps": {
        "ios": null,
        "android": null
      },
      "icon": "<rect x=\"9\" y=\"5\" width=\"14\" height=\"20\" rx=\"2.5\" transform=\"rotate(-18 16 15)\"/><path d=\"M6 31 H42 C42 39 34 44 24 44 C14 44 6 39 6 31 Z\"/><path d=\"M26 12 C32 10 37 14 38 22\"/>",
      "howTo": [
        "You're in a room with ten playing cards and a bowl across the floor.",
        "Flick each card toward the bowl. A clean flick gives it spin, and you can hook it around the furniture.",
        "Cards that land in the bowl score, and rim shots count for something too.",
        "Everyone gets the same room and the same cards each day, so share your grid and compare."
      ]
    },
    {
      "slug": "tiny-across",
      "name": "Tiny Across",
      "category": "words",
      "color": "#34E5B4",
      "domain": "tinyacross.com",
      "play": "https://tinyacross.com/daily",
      "practice": "https://onepagetoys.com/toys/tiny-across/",
      "blurb": "A new 5x5 crossword every day, done in a few minutes.",
      "apps": {
        "ios": null,
        "android": null
      },
      "icon": "<rect x=\"5\" y=\"5\" width=\"38\" height=\"38\" rx=\"4\"/><path d=\"M17.7 5 V43\"/><path d=\"M30.3 5 V43\"/><path d=\"M5 17.7 H43\"/><path d=\"M5 30.3 H43\"/><rect x=\"30.3\" y=\"5\" width=\"12.7\" height=\"12.7\" fill=\"currentColor\"/>",
      "howTo": [
        "A new 5x5 crossword every day, with ten short clues.",
        "The clock starts when you press Start.",
        "Check and reveal are there if you get stuck. Your streak counts any finished day, even a full reveal.",
        "Share a map of when you filled each square. It shows your rhythm, not the answers."
      ]
    },
    {
      "slug": "symmetry-genius",
      "name": "Symmetry Genius",
      "category": "logic",
      "color": "#F0ABFC",
      "domain": "symmetrygenius.com",
      "play": "https://symmetrygenius.com/daily",
      "practice": "https://onepagetoys.com/toys/symmetry-genius/",
      "blurb": "Drag the missing shapes into the grid to make the pattern whole.",
      "apps": {
        "ios": null,
        "android": null
      },
      "icon": "<path d=\"M24 4 V44\" stroke-dasharray=\"3 5\"/><path d=\"M19 12 L7 24 L19 36 Z\"/><path d=\"M29 12 L41 24 L29 36 Z\"/>",
      "howTo": [
        "Each puzzle is a grid with a pattern that has pieces missing.",
        "Drag the missing shapes into place to make the pattern whole.",
        "Puzzles start easy on Monday and get harder through Sunday.",
        "Finish in as few tries as you can, with or without a hint."
      ]
    },
    {
      "slug": "brick-smasher",
      "name": "Brick Smasher",
      "category": "skill",
      "color": "#FF5A5F",
      "domain": "bricksmasher.com",
      "play": "https://bricksmasher.com/daily",
      "practice": "https://onepagetoys.com/toys/brick-smasher/",
      "blurb": "One wall a day, the same for everyone. Three balls, chain the combo, take the wall apart.",
      "apps": {
        "ios": null,
        "android": null
      },
      "icon": "<rect x=\"4\" y=\"6\" width=\"12\" height=\"7\" rx=\"1.5\"/><rect x=\"18\" y=\"6\" width=\"12\" height=\"7\" rx=\"1.5\"/><rect x=\"32\" y=\"6\" width=\"12\" height=\"7\" rx=\"1.5\"/><rect x=\"11\" y=\"15\" width=\"12\" height=\"7\" rx=\"1.5\"/><rect x=\"25\" y=\"15\" width=\"12\" height=\"7\" rx=\"1.5\"/><circle cx=\"27\" cy=\"31\" r=\"3\" fill=\"currentColor\"/><path d=\"M14 42 H34\"/>",
      "howTo": [
        "One wall of bricks a day, the same for everyone.",
        "You get three balls. Where the ball hits your paddle decides where it goes.",
        "Chain hits into a combo and catch the capsules that drop.",
        "Everyone gets the same wall and the same capsule drops, so the high score is a fair fight."
      ]
    }
  ]
}
