Skip to main content
****
smartypant.png
_[]X
SmartyPant
smartypant.readme
_[]X

SmartyPant

A daily puzzle site with seven procedurally generated games, checked by a solver before they go live. It started as an AI-written daily news edition with puzzles mixed in.

metadata.json
_[]X
"date": "March 23, 2026"
"stack": [
"Next.js",
"TypeScript",
"AI Pipeline",
"Automation",
"PWA"
]
links.exe
_[]X
smartypant.md
_[]X

Overview

SmartyPant is a daily puzzle site you swipe through like a deck of cards. Every morning there are seven games: Span, Totile, Sorted, Shortcut, Grid, Flip Side, and Vault. One of them is the day's headliner, and the difficulty climbs from gentle early in the week to sharp by the weekend. The puzzles are generated procedurally overnight, and a solver checks each one before it's published so there's always a fair solution. No accounts, no ads.

It has published every day since March 23, 2026.

How It Started

SmartyPant launched as an AI-written daily news edition with puzzles mixed in between the stories. Every night an agent pipeline running on a mini PC on my desk pulled from 13 RSS feeds across 7 topic zones, researched and wrote 5-7 stories, generated a cover collage and a set of puzzles, and published the finished edition before breakfast. The pipeline worked, but it was finicky and expensive to keep running, so I dropped the news and rebuilt SmartyPant around games that can be generated programmatically and are still fun to play. It's cheaper and far more reliable. The sections below describe that original news edition.

What Made the News Edition Interesting

Two-layer AI quality control. The draft passes through 36+ regex patterns catching mechanical slop (exclamation marks, cliches, em-dash overuse) plus a separate LLM classifier that flags subtler problems like negation-reframes, moralizing, and false profundity. Up to 3 retry cycles before it escalates to a human.

Zero-backend architecture. The website is just JSON files in a Git repo. No CMS, no database, no server. Each edition is a structured JSON file committed by the pipeline, and a GitHub Actions build turns it into static HTML on GitHub's CDN.

Append-only state management. All pipeline mutations write to JSONL files. Pre-computed state files feed each stage deterministic inputs. No race conditions, no shared mutable state, cron-safe by design.

LLM-generated puzzles with automated QA. Two of the four puzzle types (Sorted and Morph) are written by AI agents, not procedural code. Separate QA agents validate each puzzle, walking through the deduction to confirm exactly one solution exists. Up to 3 generation attempts before the puzzle is dropped from the edition. The other two (Picross and Span) are procedurally generated at build time with a date-seeded PRNG.

The Original Pipeline

Seven stages ran sequentially from midnight to 4 AM PT:

  1. Source - Pulls 12-15 candidate topics from 13 RSS feeds, fills gaps with web searches
  2. Research - Builds research cards with up to 3 sources per topic, scores relevance
  3. Draft - Writes the edition: headlines, context, and a "second move" analytical take per story
  4. QA - Reviews against voice guidelines, flags specific passages
  5. Revise - Up to 2 revision passes addressing QA notes, same slop checks
  6. Audit - Read-only integrity check on all JSONL state files
  7. Deliver - Generates cover collage, creates puzzles, publishes to web, posts to Discord

The Original Website

A static-generated, mobile-first news reader built with Next.js 14 + TypeScript.

  • Swipeable card UI - Stories as draggable cards with touch physics instead of infinite scroll. Each story can span multiple cards.
  • Four daily puzzle types - Sorted (logic constraints) and Morph (word chains) are LLM-generated nightly by dedicated OpenClaw agents, each with its own QA pass. Picross (nonograms) and Span (word spotting) are procedurally generated at build time. All solutions are SHA-256 hashed per-letter so you can't cheat by inspecting source.
  • Installable PWA - Offline support, standalone display mode, app shortcuts.
  • Reading streak tracker - localStorage-based consecutive-day counter.
  • Compile-time RSS - Feed generated at build from all data files.
  • Minimal dependencies - Just Next.js, React, and TypeScript. No component libraries, no CSS frameworks.

Original Puzzle Generation

Sorted and Morph run as their own pipeline stages between 3:00 and 3:25 AM, before the delivery lane picks them up.

Sorted is an Einstein's Riddle-style puzzle: 4 positions, 2 categories, 6-8 clues. The generation agent picks a daily difficulty (easy/medium/hard by day of week), invents a theme with characters and objects, and writes clues using varied constraint types (at, before, adjacent, cross-category). The QA agent then walks through the full deduction to prove exactly one valid arrangement exists. Three strikes and the puzzle is cut.

Morph is a word chain where each step swaps a real morphological chunk (prefix, root, or suffix) while keeping another. The agent builds a 7-word chain, writes vague clues for each step, and marks which letters are pre-filled vs. blank. QA validates that consecutive pairs genuinely share a morpheme and that each step is solvable from the clue plus revealed letters.

Both puzzle types are stripped of their solutions at build time. Sorted answers are replaced with a single SHA-256 hash checked on submission. Morph answers are replaced with per-letter salted hashes so the UI can give instant feedback as you type. Puzzles are interleaved between news stories in the reader, rotating position daily.