The Jokeinator™

The Jokeinator™ is a on-your-hip reminder of your joke-telling responsibilities. This schnazzy device is designed to send you alerts that will make you and others howl at any time — be ready. Don't be caught off guard without a joke to tell.

  • Dec 23, 2025

    Disable random joke on timer wake

    🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude

  • Dec 5, 2025

    Show joke after exiting game

  • Dec 5, 2025

    Fix game entering so that the left arrow is not executed

  • Dec 5, 2025

    Fix NVS persistence, improve wake behavior, add flash erase on reset

    - Fix NVS writes failing by using fresh key names after corruption - Factory reset now erases entire NVS partition and reboots - Timer wake shows new random joke instead of saved position - Always restore to setup page (page 0), never punchline - Add…

  • Dec 5, 2025

    Generate 500 jokes with proper English grammar

    Updated prompt to emphasize grammatically correct sentences over character limits. Script now generates batches until 500 valid jokes are collected rather than a fixed number of batches. 🤖 Generated with [Claude Code](https://claude.com/claude-code)…

  • Dec 5, 2025

    Keep device awake during joke reload

    Set resetActivity while reloading to prevent idle sleep mid-download. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude

  • Dec 5, 2025

    Only load high score from Preferences once per boot

    Keep high score in memory during session to prevent it resetting when exiting and re-entering the game. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude

  • Dec 5, 2025

    Generate 477 jokes with 32-char limit (excl. spaces)

    Update generator to create 500 jokes in batches of 100, with deduplication and length validation excluding spaces. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude

  • Dec 5, 2025

    Add resetActivity to Actions, allow idle sleep during game

    Move activity reset logic to Actions struct so subsystems can explicitly signal user activity. Game now only resets idle timer on button presses, allowing the device to sleep if left unattended during gameplay. 🤖 Generated with [Claude…

  • Dec 4, 2025

    Clear all namespaces on factory reset and improve reload message

    Factory reset now clears jokes and pakupaku namespaces in addition to settings. Changed LCD message from "Connecting" to "Reloading" for clarity during joke reload. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude

  • Dec 4, 2025

    Require all 3 buttons for factory reset

    Changed from Go+Right to Go+Left+Right to prevent accidental resets. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude

  • Dec 4, 2025

    Improve WPS instructions and simplify score display format

    Show clearer WPS instructions ("Press WPS button" / "and wait 30 secs") during WiFi setup and use simpler score format in PakuPaku game. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude

  • Dec 4, 2025

    Add PakuPaku game tests and use pts for score display

    Tests cover game entry, exit, player movement, and direction changes. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude

  • Dec 4, 2025

    Show current level in game HUD

    Display format: L1 HI:0 S:0 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude

  • Dec 4, 2025

    Fix custom character creation by setting IS=0 before CGRAM access

    ST7032 LCD requires normal instruction set mode (IS=0) for CGRAM operations. Added command(0x38) before and after writing custom character data. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude

  • Dec 4, 2025

    Add PakuPaku game with custom sprites and persisted high score

    - Secret Pac-Man game accessible via Left+Go hold - Custom LCD characters for player and ghost sprites - High score persisted to flash storage - Ghost speeds up minimally per level, player speed constant 🤖 Generated with [Claude…

  • Dec 4, 2025

    Add non-blocking download animation and improve navigation

    - Download jokes in background FreeRTOS task to keep animation smooth - Skip empty joke pages when navigating left/right - Turn off screen immediately on hold detection (not on release) - Add lcdOff action for immediate screen control 🤖 Generated with [Claude…

  • Dec 4, 2025

    Fix sleep triggering immediately on long hold

    - Sleep now triggers on button release, not during hold - Prevents ESP32 waking immediately when button still pressed Tests added (16 total): - GoButton sleep-on-release behavior (3 tests) - Idle timeout auto-sleep (2 tests) - Joke position persistence (3…

  • Dec 4, 2025

    Add idle timeout, joke persistence, and validate joke length

    Firmware: - Auto-sleep after 60s of inactivity - Save/restore joke position across sleep cycles - Add jokeIndex/pageIndex to ISettings for persistence Jokes: - Regenerate with strict 40 char validation - Filter out oversized jokes (81 valid from 100…

  • Dec 4, 2025

    Add JokesReloader with persistence and factory reset

    - JokesReloader: fetch jokes from jokeinator.com/jokes.json - Hold Left+Right 1.5s to trigger reload (WPS if no creds) - Hold Go+Right 1.5s to factory reset settings - Jokes persist to NVS via Preferences, loaded on boot - WiFi only connects inside…

  • Dec 4, 2025

    Limit jokes to 40 chars per line, generate 100

    🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude

  • Dec 4, 2025

    Disconnect WiFi before entering sleep

    - Add disconnect() to IWiFi interface - WiFi explicitly disconnects before deep sleep Co-Authored-By: Claude

  • Dec 4, 2025

    Update README and trigger sleep immediately on hold

    - Merge root README into _business/README.md - Update firmware features and pin assignments - Sleep triggers at 1.5s hold, not on release Co-Authored-By: Claude

  • Dec 4, 2025

    Add jokes.json endpoint with Anthropic API regeneration

    - Jekyll page at /jokes.json serving array of [setup, punchline] arrays - npm run generate-jokes to regenerate via Anthropic API - Uses .env for ANTHROPIC_API_KEY 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude

  • Dec 4, 2025

    Add Jokes feature and refactor GoButton to release-trigger

    - Jokes class with 10 jokes, random selection on boot - Multi-page jokes with left/right navigation - GoButton triggers sleep on release after 1.5s hold - Actions pattern extended with sleep field - Separate tests for hold vibration and sleep actions…