Changelog
Every release, every fix, every new generator. Read what shipped last week or scroll back to see how Chitmunk came together. Versions follow major.minor.patch; dates are when the release went out the door.
v0.20.0 — Chitmunk Cloud, Live Collab & /home Overhaul (2026-04-11)
New: Chitmunk Cloud (R2 + D1 + Durable Objects)
- Cloud save to Cloudflare R2 with content-addressed image storage. Editor state translates between local
idb://img_xxxkeys and cloudblob://{sha256}references viadata/manifest.js. Upload path computes sha256, calls/api/blob/checkfor de-dup, and PUTs only the missing blobs before saving the manifest. - Atomic quota enforcement at 500 MB free / 50 GB Pro via a single
UPDATE users SET used_bytes = used_bytes + ? WHERE ... AND (used_bytes + ?) <= quota_bytesquery — no race conditions, no double-spend. - Soft-delete trash with daily cron sweep that walks expired projects, deletes R2 manifests + orphan image blobs (cross-project refcount-aware), and refunds
used_bytes. - My Games rebuilt as a unified library: cloud projects pinned at the top with a storage bar, pending invites banner, and inline Share / Trash actions; local + Drive projects below.
- New Game flow lists Chitmunk Cloud as the recommended storage option when the cloud bootstrap is ready.
- Real Clerk email addresses are pulled from the Clerk Backend API (
/v1/users/{sub}) instead of the previous@users.chitmunk.localplaceholders — JWTs don't carry email by default.
New: Sharing & invites (Phase 1B)
- Email invites: invite anyone by email. If they're already a Clerk user, the share is granted immediately. If not, a
pending_invitesrow is created with an invite token and promoted to a real share the moment they sign up and sync. - Per-project share view (
/home cloud-share) with role dropdowns, revoke, current shares table, and pending invite list. - New
worker/lib/shares-repo.jsand002_shares_invites.sqlmigration.
New: Link sharing (Phase 1C)
- Short links at
/s/v/:id(view),/s/e/:id(edit), and/s/c/:id(collab) with optional expiry and use-count limits. - Card snapshot endpoint for readonly public views renders cards server-side from the manifest.
- New
worker/lib/links-repo.jsand003_project_links.sqlmigration.
New: Live collaboration (Phase 2)
- CanvasParty Durable Object at
/parties/canvas/:idhandles WebSocket peer presence, op broadcast, and CSV lock arbitration. Built on native Cloudflare DOs withstate.acceptWebSockethibernation. - Op protocol with 4 types:
el-update(whitelisted props only),el-add,el-remove,face-reorder. Schema validated againstALLOWED_EL_PROPSon both client and server. - Coarse-grained CSV lock — one writer at a time, with explicit acquire/release messages.
- Kick on revoke via close code 4003 — when a share is revoked, the Worker actively closes that peer's socket so they can't keep editing.
- Remote cursor + selection overlay rendered by
canvas/collab-overlay.js(pure functions, unit-tested) with stable seat colors that survive peer churn. - Top-right presence pill (
canvas/collab-presence-ui.js) shows count, avatar stack, and a "Who's here" popover. Auto-dismissing join/leave toasts viaui/animate.jspresets. - New
worker/lib/canvas-party.js,worker/lib/collab-ops.js,data/collab-socket.js,canvas/collab-integration.js, and004_project_presence.sqlmigration.
New: Presence-gated collab (no wasted DO time)
- The WebSocket does not auto-open when a cloud project loads.
canvas/editor-cloud-init.jsfirst calls/api/projects/:id/collab-eligible. Solo projects (≤ 1 non-owner share) skip everything — no Durable Object cost, no socket churn. - Eligible projects start a 15 s heartbeat poll. The server reports peer count from
project_presence. When peer count ≥ 2, the client promotes from polling to a real WebSocket and mounts the presence pill. - After 60 s of no pointer/key/visibility activity, the client closes the socket and drops back to polling. The next user interaction re-evaluates and re-opens if peers are still around.
- This is the difference between "shared with 3 people, only you are looking" (lightweight heartbeats) and "shared with 3 people and two of you are looking right now" (open socket).
New: Component Viewer
- Top-level Components link in the
/homesidebar — browses all TheGameCrafter component types across 27 categories (cards, dice, boards, mats, boxes, booklets, tokens, dials, and more). - Two-pane layout: sticky category sidebar + component grid in the main area.
- Clicking a component opens a side drawer with a live rotating 3D preview, specs (dimensions, bleed, safe, face count, corner radius, TGC identity), and a Templates tab when matching templates exist.
- "Start from…" action cards offer three creation paths per component with clear microcopy: Blank (design everything by hand), Generator (auto-fill each face with a parametric element), From template (pick a curated starter design).
- Global search across component names and template names, with Escape-to-clear and keyboard navigation.
- Contextual CTAs: action buttons say "Add to game" when a game is active, "Create new game" otherwise.
Renamed: Analytics → Balance Lab
- The analytics suite is now Balance Lab — more native to board game designers than "Analytics".
- Sidebar label, page headers, and document titles updated throughout
/home. - Route keys unchanged (
analytics-*), so bookmarks and sessionStorage continue to work.
Renamed: Costs → Cost Curve
- The Balance Lab "Costs" sub-page is now Cost Curve — disambiguates it from print pricing and matches standard game-design vocabulary.
- Standalone
/analyticspage label updated to match.
Renamed: Cost Estimator → Print Pricing
- The TGC manufacturing-cost tool is now Print Pricing — removes the word "Cost" collision with the Balance Lab.
- File renamed
home/views/cost-estimator.js→home/views/print-pricing.js. - Old
cost-estimatorroute kept as a legacy alias so existingsessionStorage.chitmunk_lastRoutevalues still resolve.
Sidebar restructure
- Removed the old "Toolkit" collapsible section.
- Added a new Design collapsible section containing Generators, Shapes, Maps, and Templates (same sub-pages, just relocated — route keys unchanged).
- Components sits as a top-level item alongside Dashboard and My Games.
Template system refactor
- Exposed the rich
TEMPLATESregistry frompanels/template-library.js(with per-templatesizeGroup,category,previewColor,fonts,bindingMap,genre) as the single source of truth for/hometemplate browsing. - New
getTemplatesForComponent(componentId)helper maps component IDs to their relevant templates viaSIZE_GROUPS. home/views/templates.jsno longer does fragile string matching on template function names — consumes the registry directly.
Improved: 3D Preview
panels/preview-3d.jsnow renders a warm kraft-cardboard texture on empty faces (instead of ghostly pale gray), so components in the Component Viewer drawer look like physical prototypes even with no design loaded.
Improved: New Game flow
- Component type dropdown now lists all 200+ TGC component types grouped by category, instead of the previous 13 hardcoded card types.
- Pre-seeded cards from the Component Viewer are honored when you create the game.
- Storage picker exposes Chitmunk Cloud as the first (Recommended) option when the cloud bootstrap is ready.
Fixed: Landing page restoration (Architecture 2)
- A half-finished landing rewrite had left
index.htmlreferencing classes that no committed CSS file declared, sochitmunk.comwas rendering with broken layout. - Restored
index.html(1628 lines) from a dangling git blob and reconstructedsite/landing.css(1976 lines) by extracting the inline<style>block frommockup.htmland merging it with the guide-specific sections from the pre-rewritelanding.css. site/landing-shell.js(the shared nav + footer + guide sidebar injector) is now tracked in git instead of living as an untracked working-tree file.
Fixed: /home theme FOUC
/homepreviously rendered with the wrong theme on first paint and snapped to the correct theme after the JS modules loaded.- New
home/theme-bootstrap.jsruns synchronously before the stylesheets and setsdata-themeon<html>so CSS evaluates with the right theme on the very first frame. - Default theme is
dark(matches the deployed appearance); users who explicitly switch to light still get their preference.
Worker infrastructure changes worth knowing about
- CORS
Allow-Methodsexpanded toGET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS— the originalGET, POST, OPTIONSsilently broke cloud save with "TypeError: Failed to fetch" on the first real PUT. Do not narrow it. - Atomic quota refunds via
users-repo.refundBytesso deleted projects free space immediately. - Native CF Durable Objects with
state.acceptWebSockethibernation; the original plan called for partyserver but native DOs ended up cleaner.
Not in this release
- Phase 3 (Resend email) — invite notification emails are explicitly deferred. Invite infrastructure works without it (tokens are returned in the API response for manual copy).
v0.14.0 — Cloud Save, Sync & Progressive Auth (2026-03-28)
New: Progressive OAuth Consent
- Google Drive, Google Sheets, and OneDrive permissions requested only when the user first uses each feature.
- In-app consent dialog explains permissions before redirecting to Google/Microsoft.
- Cumulative scope merging ensures previously granted permissions are never lost.
- Account panel shows only connected services with Disconnect buttons.
New: Google Sheets & Excel Import vs Sync Mode
- Data source menu now shows a mode selection dialog: Import (one-time fetch) or Sync (live updates).
- Import: paste a URL, requires Sheets-only access.
- Sync: browse Drive via picker, requires Drive + Sheets access, polls every 30 s (active) / 5 min (background).
- Adaptive polling with exponential backoff and offline/online recovery.
- Mode persisted per card type, restored on page reload and card tab switch.
- Excel (OneDrive) gets the same Import vs Sync mode selection.
New: Save Project Modal Redesign
- Save Project now offers three destinations: Google Drive, OneDrive, and Local.
- Each handles auth/consent as needed.
New: Download Project File
- New menu item bundles the full project (design, images, CSV data) as a ZIP to disk.
- Round-trip: download and re-upload restores the identical project.
New: Upload Project File
- Upload button in Game Shelf header.
- After selecting a ZIP, choose: Just open, Open & save to Google Drive, or Open & save to OneDrive.
New: Reconnect Button
- Data source bar shows a "Reconnect" button when sync is in error or offline state.
- Handles scope re-granting and reconnection in one click.
Improved: Worker JWT Verification
- Replaced deprecated Clerk
/v1/sessions/verifywith local JWT verification via JWKS. - Networkless after key cache (1-hour TTL).
Improved: Bound Column Indicator
- Replaced green dot with amber tinted checkmark in rounded square.
- Avoids confusion with sync status indicators.
Fixed: Shelf Retry Loop
- Drive and Shared project fetches no longer retry infinitely on 401 errors.
- Matches existing OneDrive failure guard pattern.
Fixed: Session Restore
sheetsLink,excelLink, andcsvFileNamenow restored from autosave on page load.
v0.13.0 — QR Modes, Toolbar UX, Guided Tour (2026-03-24)
New: QR Code Encoding Modes
- 9 encoding modes: URL, text, WiFi, vCard, email, SMS, phone, location, calendar event.
- Mode-specific property panel fields with CSV binding support.
New: Toolbar UX Overhaul
- Labeled clusters (Face, Tools, Add Elements, Panels) with visual grouping.
- View toggles with distinct bordered active state.
- Export button uses brand amber, trial badge styling subdued.
New: Data Mode Redesign
- Opens as resizable side panel alongside canvas (not fullscreen overlay).
- Horizontal scrollbar for wide datasets, real canvas stays interactive.
New: Guided Tour Onboarding
- 8-step interactive tour with spotlight overlay.
- Interactive steps (drag chip, click card) for discovery moments.
- Keyboard navigation, skip with toast, re-accessible from brand menu.
New: Floating Toolbar
- Context-sensitive floating toolbar for selected elements.
New: Brand Identity
- Chitmunk logo SVG across all pages, replacing emoji placeholders.
Improved: Unit Tests
- 248 new tests added (124 to 485 passing, 0 failing).
Improved: Properties Panel
- Section reorder, label clarity, structural cleanup across all element types.
Improved: Animations
- anime.js foundation wired into UI interactions (zoom, tabs, panels, canvas transitions).
v0.12.0 — Specialized Designers, 3D Preview, Print & Play (2026-03-21)
New: Specialized Designers
- Dice Designer: multi-face grid with universal style controls, batch icon picker, 3D dice preview.
- Document Designer: multi-page rulebook/sell sheet editor with dynamic pages, shared headers/footers.
- Booklet Designer: spread view with add/remove pages, 3D preview.
- Dial Designer: two-disc workspace with drag-to-rotate simulator.
New: 3D Product Preview
- WebGL mockups for all 27 component categories using Three.js.
- Cards, dice, boxes, mats, boards, tiles, standees, booklets, dials, screens, and more.
New: Print & Play Export
- Configurable modal with live preview.
- Page size, orientation, margins, cards-per-page, duplex/fold-and-cut modes.
- Crop marks, TOC, row range filtering, multi-component PDF.
New: Game Package View
- Project summary showing all components with previews.
New: Batch Image Import
- Fuzzy filename-to-row matching with interactive mapping UI.
- Upload files, folders, or ZIPs.
Improved: OAuth Migration
- Google Drive and OneDrive auth migrated from GIS/MSAL to Clerk-managed OAuth via Worker proxy.
Improved: Landing Page
- Feature carousel with real screenshots, generator showcase.
Improved: Security
- CSP connect-src tightened, trial date validation, MIME checks, memory cleanup.
v0.11.0 — Advanced Design Tools (2026-03-19)
New: Visual Palette Modal
- Shape and Generator buttons now open a visual grid palette with rendered previews instead of text dropdowns.
- Two tabs: Shapes (22 items) and Generators (26 items) in one unified modal.
- Free items displayed first, Pro items below with lock badges.
- Large preview thumbnails so you can see exactly what you're adding.
New: 22 Shape Types
- Free (8): Rectangle, Ellipse, Polygon, Line, Star, Arrow, Diamond, Cross.
- Pro (14): Shield, Banner, Hexagon, Gear/Cog, Spiral, Progress Clock, Burst/Starburst, Compass Rose, Corner Filigree, Decorative Divider, Speech Bubble, Scroll/Parchment, Ribbon/Sash, Curved Arrow.
- All Pro shapes include configurable properties in the properties panel (tooth count for gears, segment count for progress clocks, filigree styles, bubble tail position, ribbon style, etc.).
New: 26 Generator Types
- Free: Score Track, Dice Face, Progress Bar.
- Grids: Hex Grid, Square Grid.
- Tracks: Race Track (interactive path editor: click to place control points, drag to reshape, 6 presets including Speedway and Spa-inspired layouts).
- Widgets: Spinner Wheel (radial text alignment option), Dice Face (all standard die types D4-D20, custom fonts).
- Card Parts: Resource Cost Pips, Stat Display (badges, bar, and radar chart modes).
- Layout: Card Layout Frame, Player Mat, Tournament Bracket.
- Reference: Ruler, Probability Table, Pie Chart (donut mode supported).
- Maps & Diagrams: Map Compass + Scale Bar, Relationship Map, Point-to-Point Map, Tech Tree, Thermometer, Box Insert.
- Game Mechanics: Action Rondel, Resource Converter, Phase/Turn Reference, Timeline, Token Sheet Layout.
New: Generator Configuration
- Every generator opens a configuration modal with full settings on creation.
- Double-click any generator on canvas to reconfigure it.
- Live preview canvas in the modal updates as you change settings.
- Quick-edit properties in the right panel for fast color/value tweaks.
- "Edit Settings…" button for full configuration access.
- Config summary shown in properties panel (e.g., "6 × 6 pointy", "d6 showing 3").
- Input validation prevents invalid configurations.
- "Convert to Shapes" right-click action to flatten generators into editable shape groups.
New: Interactive Path/Node Editors
- Race Track: Canvas-based control point editor with Catmull-Rom spline smoothing. Click to add points, drag to reshape, right-click to delete. 6 track presets (Oval, Circuit, Figure 8, Monaco, Spa, Speedway). Multi-lane support with proper offset curves.
- Point-to-Point Map: Click to place cities, drag to move, double-click to rename, right-click to delete. Route management with per-route color and length. 4 presets (Star, Loop, Grid, Random).
- Tech Tree: Click to add nodes, drag to position, double-click for full node editor popup (name, color, tier, locked/unlocked state). Curved/elbow/straight edge styles. 4 presets (Binary, Wide, Deep, Diamond).
New: Card Style Panel
- Appears in properties panel when no element is selected.
- Card Frame: 5 presets (Classic, Ornate, Art Deco, Fantasy, Sci-Fi) with configurable colors and width.
- Card Back Pattern: 5 tiling patterns (Geometric, Radial, Celtic, Art Deco, Hexagonal) with 180° symmetry enforcement.
- Rarity Badge: Common/Uncommon/Rare/Mythic with configurable position and colors.
- Renders in all export paths (PNG, PDF, TTS, print-at-home).
New: Enhanced Stroke Styles
- New dash presets: Dotted, Dash-Dot, Dash-Dot-Dot, Long Dash (Pro).
- Stroke line cap: Butt, Round, Square (Pro).
- Stroke line join: Miter, Round, Bevel (Pro).
Improved: Auto-Update Notifications
- Service worker now detects new deployments and shows an unobtrusive banner: "A new version of Chitmunk is available! [Refresh]".
- No more Ctrl+Shift+R needed: user data (saves, images, fonts) is never affected.
- Checks for updates every 5 minutes.
Improved: Toolbar Responsiveness
- View toggles (Bleed/Safe/Snap/TGC) and scale selector collapse on screens under 1400px.
- Fit button collapses under 1200px.
- Ensures element creation buttons remain accessible on smaller displays.
- Assets and Data buttons restyled to match toolbar consistency.
Improved: Slider Value Displays
- All range sliders now update their displayed value live as you drag (tooth count, inner radius, turns, filled segments, etc.).
Technical
- New files:
panels/generator-modal.js,panels/palette-modal.js. renderGenerator()exported fromcanvas/renderer.jsfor use by palette previews and modal previews.- Generator element type added to state model, renderer, interaction handler, context menu, and all export paths.
- Design spec:
docs/superpowers/specs/2026-03-19-advanced-design-tools-design.md.