Add a Markdown editor for post bodies with a formatting toolbar
(bold/italic/headings/lists/code/link/image) and a live Write/Preview
toggle. The body still submits as a plain field so saving works without
JS.
Add a per-post downloads section: upload files to the blog or attach
external links. Uploads POST to /admin/upload (admin-guarded, sanitized
names, 200MB cap), are stored under data/uploads, and served back via the
/uploads/[name] route. Downloads render on the post page with file vs link
icons and sizes, and are carried through export/import.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Blog can now pull live gaming data and surface a curated gamer profile.
- DB: integrations config table (single JSON row, holds secrets, excluded
from export), integration_cache table (lazy TTL cache), posts.links column
- Platform fetchers: Steam (official Web API), PSN (NPSSO->token->trophies),
Xbox (OpenXBL). All degrade gracefully; cache keeps last-good payload on
fetch failure so pages never blank
- Admin /integrations: profile/bio, social links, consoles, favorites,
per-platform creds (blank keeps stored secret), cache TTL, live status table
with refresh
- Public /bio page: avatar, bio, recent games, achievements, favorites,
consoles. Gated behind hasIntegrations() so a vanilla blog stays clean
- About page bio teaser, Shell "now playing" tray widget + Bio nav link
- Per-post "shared on" social links (editable in PostForm, shown on post page)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Rework console theme stylesheets and add opt-in .rb-bg cube field
(used by PS2 BIOS bobbing-cube background) wired through Shell.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Brings the catalog to nine. Each is a single scoped [data-theme="..."]
CSS file plus a registry entry — no markup changes.
- ps1: charcoal BIOS, gray panels, uppercase letterspacing
- ps3: animated XMB sky gradient + drifting wave, black glass
- wii: white channels, rounded pills, soft blue glow
- nds: silver shell with content framed as the touch screen
- dreamcast: cream BIOS, conic-gradient orange swirl, lowercase blue
- jv2002: dense boxy portal, Verdana 11px, red masthead, blue nav tabs
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Brings the catalog to nine. Each is a single scoped [data-theme="..."]
CSS file plus a registry entry — no markup changes.
- ps1: charcoal BIOS, gray panels, uppercase letterspacing
- ps3: animated XMB sky gradient + drifting wave, black glass
- wii: white channels, rounded pills, soft blue glow
- nds: silver shell with content framed as the touch screen
- dreamcast: cream BIOS, conic-gradient orange swirl, lowercase blue
- jv2002: dense boxy portal, Verdana 11px, red masthead, blue nav tabs
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Next.js 16 (App Router, TS) + SQLite (better-sqlite3) + marked.
Core: a shared semantic HTML skeleton (rb- classes in Shell.tsx) that
each theme reskins via a scoped [data-theme="..."] CSS file. Theme is
persisted in a cookie, resolved server-side in the root layout, and
swapped live by the client switcher (no reload, no FOUC).
- DB auto-migrates and seeds posts on first run (data/blog.db, gitignored)
- Pages: post list, post detail (markdown), about
- Themes shipped: Windows XP (Luna), Windows 9x, PlayStation 2
- Adding a skin = registry entry + one scoped CSS file
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>