★ NEW — GAMES HUB · ALL FIVE TITLES IN ONE PLACE /🎵 NEW — MUSIC: POP PUNK + LIVE TOUR DATES /✶ ANIME — TRENDING + COMING SOON /🍴 FOOD: RECIPES · EAT OUT · IN HOUSE · SHOPPING /☼ ORLANDO LIVE WEATHER + PARK NEWS /⚔ QUESTLIST BY KID_GHOST /➕ CRAM · LATE-NIGHT STUDY HALL · GRADES 5–8 /❖ NEW — BOOKS · SCI-FI / FANTASY + PSYCH THRILLERS /✷ NEW — NERD HUB · MARVEL / SW / LEGO / COMIC CON / CROCHET /✦ DEVLOG · WHAT SHIPPED SITE-WIDE /⚡ JOIN THE RIOT /★ NEW — GAMES HUB · ALL FIVE TITLES IN ONE PLACE /🎵 NEW — MUSIC: POP PUNK + LIVE TOUR DATES /✶ ANIME — TRENDING + COMING SOON /🍴 FOOD: RECIPES · EAT OUT · IN HOUSE · SHOPPING /☼ ORLANDO LIVE WEATHER + PARK NEWS /⚔ QUESTLIST BY KID_GHOST /➕ CRAM · LATE-NIGHT STUDY HALL · GRADES 5–8 /❖ NEW — BOOKS · SCI-FI / FANTASY + PSYCH THRILLERS /✷ NEW — NERD HUB · MARVEL / SW / LEGO / COMIC CON / CROCHET /✦ DEVLOG · WHAT SHIPPED SITE-WIDE /⚡ JOIN THE RIOT /

▌ THE BUILD LOG

DEVLOG // WHAT SHIPPED

Build notes for the whole site — every meaningful shipment across every channel, plus when it landed and why it matters. Tap a category below to filter the list to one area.

16 ENTRIES16 MANUAL · 0 AUTO
  1. #202026-06-06
    SITEART

    Channel banners across the four main channels

    Food, Music, Games, and Anime each got a Kid Ghost-themed horizontal banner sitting under the global nav. Generated via ChatGPT/DALL-E with locked character spec so the mascot is consistent across the set. Anime banner gets the cel-shaded shonen-OP treatment.

    All four are served through next/image so the ~3MB source PNGs get auto-resized + WebP-converted per viewport. Mobile visitors download ~30-60KB instead of the full 3MB.

  2. #192026-06-06
    MUSICPERF

    Music page: 15-20s cold render → sub-second

    Three compounding causes traced and fixed. Page was force-dynamic with no ISR, the per-band OG-image scrapes were happening in a serial for-loop across 21 bands/festivals (each 1-3s of external HTML scraping), and the whole panel was inside a single Suspense boundary so the page shell waited for everything to resolve.

    Now: ISR with hourly background revalidation, OG fetches dropped from tile cards (only the hero strip does them), Spotify lookups batched into one Promise.all, and PopPunkPanel has its own Suspense skeleton so the page shell appears instantly on cold renders.

  3. #182026-06-05
    GAMESFEATURE

    Games hub: News / Hot Now / Now Playing tabs

    Three tabbed sections on /games defaulting to News. Video game news from IGN / Polygon / Push Square / Eurogamer, tabletop news from Dicebreaker + BoardGameGeek. Card Games gets its own section with per-TCG news for Magic, Pokémon, Lorcana, One Piece, DBS, Yu-Gi-Oh.

    Hot Now surfaces curated video games (Helldivers 2, Elden Ring, etc.) with Steam Cloudflare CDN thumbnails and the latest news per title, card games with per-TCG brand-colored gradient covers (Magic = burnt red + swamp black, Pokémon = pokeball red + pikachu yellow, etc.), and tabletop from BoardGameGeek's hot list with a curated fallback when BGG's server hiccups.

    Now Playing pulls Creativity Corner posts tagged with anything in the games tag set (games, gaming, videogame, boardgame, cardgame, tabletop, tcg) — no new DB, just a filtered view of the existing forum.

  4. #172026-06-05
    SITEDESIGN

    MiniAppNav rebuilt: square, channel-numbered, neon glow

    Pill-style tabs on /games, /music, /food, /orlando were too small and the active state too subtle to read at a glance. Rebuilt as squared-off rounded-md buttons with channel-numbered prefixes (01 / 02 / 03), 2x bigger padding on desktop, heavy neon glow + blinking dot on the active tab, color-themed hover.

    The strip itself gained scanline overlay + bottom-edge gradient so the row reads as part of the brand. One component change, every mini-app page upgrades.

  5. #162026-06-04
    ANIMEFEATURE

    Anime page goes truly dynamic via AniList GraphQL

    Replaced the hardcoded Top 5 + Characters sections with live AniList data. Trending Now (currently-airing top by AniList's real-time activity signal), Coming Soon (anticipated upcoming season), and Most-Favorited Characters all pull from AniList — free, no API key, hourly revalidation.

    Each fetch wraps in try/catch so a single failed query can't blank the page; a friendly 'couldn't reach AniList for this section' card appears instead.

  6. #152026-06-04
    FOODFEATURE

    Recipe parser gains AI cleanup via Gemini Flash

    The paste-mode heuristic was failing on any recipe with a title line, section headers, or footer metadata — it gave up on the first non-ingredient-shaped line and fell back to splitting everything in half.

    Replaced with a Gemini Flash call using forced function calling (tool_choice: ANY) for reliable structured output. Auto-fallback to the heuristic when AI fails so the button is never a dead-end. Strips titles, ignores 'Ingredients:'/'Directions:' headers, parses cooking time + calories from the footer.

  7. #142026-06-03
    FOODFEATURE

    Shopping list: 1× / 2× / 3× / 4× batch picker for saved recipes

    Adding ingredients from a saved recipe used to land at 1× only. Now each recipe row shows four buttons — pick a batch and the route scales every numeric quantity via the existing transformIngredient helper. '1¾ cups heavy cream' at 3× becomes '5¼ cups heavy cream', fractions and Unicode glyphs handled correctly.

  8. #132026-06-03
    CRAMRENAME

    /math → /cram

    Renamed the math channel to Cram to support a broader future as an educational mini-app hub — vocab, chords, capitals, whatever lands next. /math still works as a redirect.

    Carries the late-night-pop-punk all-nighter energy without being subject-specific. Channel number, color, glow class all preserved.

  9. #122026-06-02
    SITEFEATURE

    Kid Ghost dad joke skull + sponsor easter egg

    Punk skull mascot peeks in from the side of every page every 5-12 minutes, types out a dad joke (70 jokes in the pool, all clean bad puns), switches to a laughing face on the punchline with a body-shake animation.

    Hidden 'word from our sponsor' easter egg lives below the joke dismiss line — opens a glitch-themed 'MESSAGE FROM / OUR SPONSOR' modal with confetti particles and pop sounds. Discoverable but not noisy.

  10. #112026-06-01
    QUESTSINFRA

    QuestList syncs across devices

    The /quest-list iframe was using its own isolated localStorage — tasks didn't follow users between devices even though every other store on the site already did via the user_data sync table.

    Wired the iframe to /api/sync/questlist directly. Same-origin fetch means the Auth.js session cookie rides along without postMessage plumbing. Server-wins-on-newer-timestamp conflict resolution, never auto-overwrites local data on first sync, snapshot of pre-sync state saved to localStorage as belt-and-suspenders insurance.

  11. #102026-05-30
    BUDDIESFEATURE

    AIM-style buddy chat (channel 09)

    Full chat system in the AIM tradition. Search for users by screenname, send mutual buddy requests, see who's online via 3-tier presence (available / away / invisible), DM via popup chat windows that stack alongside a floating buddy list.

    Polling-based realtime (3s for open conversations, 15s for buddy list), debounced typing indicator, away messages + profile text, synthesized door-open chime via Web Audio when a buddy signs on. /buddies page for the full-size view.

  12. #092026-05-28
    CREATEFEATURE

    Creativity Corner forum (channel 08)

    Reddit-style threaded forum at /creativity. Transmissions (posts) with markdown body + tags, AMPLIFY (one-tap upvote), threaded replies via comments table with self-referential parent_id, FRESH / LIVE / SIGNAL sort tabs.

    Live mode uses a Reddit-style hot score formula (log of score with time decay) computed directly in SQL. Admin moderation gated on ADMIN_EMAILS env var so deletes are declarative.

  13. #082026-05-25
    SITEFEATURE

    Username system + /account settings page

    Magic-link auth needed actual usernames to power the forum + chat. Added the username column with case-insensitive uniqueness, reserved-word validation, and a fallback display chain (username → name → email split → 'anonymous').

    Username also mirrors to users.name so every Auth.js consumer (UserMenu chip, profile dropdowns) shows the chosen handle.

  14. #072026-05-20
    ORLANDOFEATURE

    Disney resort deal alerts

    Daily cron checks Disney's resort availability API for the user's configured trip windows, detects price drops vs the last observed price, emails the subscriber if anything dropped. Includes the actual offer ID + savings amount.

    Healthcheck row written on every run so silent API failures are visible. Resort deal RSS scraped from MouseSavers + DisneyTouristBlog as a secondary signal.

  15. #062026-05-10
    INFRAINFRA

    Auth.js v5 + magic-link sign-in via Resend

    No passwords. Email-only sign-in via Resend. Pg adapter for the verification_tokens / users / sessions tables, JWT session tokens (no DB hit per page load), trustHost for Vercel preview deploys.

    All the user-data sync (recipes, restaurants, quests, music artists/cities, questlist state, chat) hangs off this. No sign-in, no sync — the localStorage stays.

  16. #012026-05-06
    GAMESMILESTONE

    RC: Respawn Creatures goes live at /game

    First playable version. Hatch, feed, train, fight. Three species (dino / water / lion) with six evolution stages each. World map has grass, forest, and a red zone with 75% encounter rate plus boss fights.

    Built in Phaser 4 with all art drawn programmatically — no sprite files. Means the look can shift fast as the design changes.

Devlog updates land here. Want them in your inbox? Join the riot.