changelog.md
A running log of updates to the site, Unity integration, and dev tooling.
Docs/changelog.md
# Changelog
All notable changes to the website are documented here. Dates in YYYY‑MM‑DD.
## 2025-11-17
High‑level: Elevated Griddie Golf as the flagship example on the landing hero, surfaced internal markdown blueprints and Cursor commands via a new Markdown Docs panel and `/docs` section, and updated `blueprintWeb.md` to match the new narrative and file layout.
- Landing hero / README:
- Updated `app/page.tsx` subheadline to “Meet Griddie Golf: a 2D golf roguelite scripted end‑to‑end with Cursor agents, from Markdown specs to shipping builds.”
- Refined `HeroReadme` copy so “Process is Collaboration” appears before “Product is Human,” removed “music” from the product line, and added a Griddie Golf paragraph explaining the agent‑enabled workflow (inline panel and modal now match).
- Markdown Docs surfacing:
- Added a `Markdown Docs` IDE panel to `HeroReadme` with pills linking to the docs index, Griddie Golf/Web blueprints, the changelog, and three Cursor command docs (`NewChat`, `UpdateBlueprint`, `gitPush`).
- Created `/docs` index (`app/docs/page.tsx`) with an IDE‑styled overview of core docs and commands plus a link back to home.
- Added individual docs pages under `/docs/blueprint-game`, `/docs/blueprint-web`, `/docs/changelog`, `/docs/new-chat`, `/docs/update-blueprint`, and `/docs/git-push`, each using `fs.readFileSync` + `IdePanel` to render the corresponding markdown file in a mono `<pre>` block.
- Docs alignment:
- Updated `Docs/blueprintWeb.md` to describe the new Griddie Golf hero copy, the revised README panel/modal content, and the Markdown Docs panel and `/docs/*` routes so new developers can quickly find the relevant files.
## 2025-11-14
High‑level: Updated global site metadata to align with current branding. The browser/tab title now reads “Markdown Games” and the meta description is “From Spec to Play, Faster.” Verified inheritance across routes.
- Metadata:
- Updated `app/layout.tsx` `metadata.title` → `Markdown Games`.
- Updated `app/layout.tsx` `metadata.description` → `From Spec to Play, Faster`.
- Verified no per‑route `head.tsx` overrides. Note: `/mdmcp-unity` defines its own `metadata`.
## 2025-11-14
High‑level: Adopted Git LFS for Unity WebGL artifacts, fixed production WebGL loading by making the manifest API serverless‑safe, hardened Vercel builds to fetch LFS objects, and removed the temporary GitHub Raw fallback. Updated docs and kept only the latest Stable build. Pushed a new Griddie Golf build (adds Aim Info panel).
- Git LFS:
- `.gitattributes` now tracks Unity WebGL outputs (compressed and uncompressed): `*.data(.br|.unityweb)`, `*.wasm(.br|.unityweb)`, `*.loader.js`, `*.framework.js`.
- Migrated history for these patterns via `git lfs migrate import`; force‑pushed with lease.
- `.gitignore` excludes `public/builds/**/Dev/` and `public/builds/**/Archive/`.
- Only the latest Stable build is kept in the repo.
- Vercel:
- Enabled Git LFS in Project Settings → Git → Git LFS.
- Added `vercel.json` and a `vercel-build` script to fetch LFS objects before `next build`.
- Removed optional GitHub Raw rewrites fallback from `next.config.ts`.
- Runtime manifest:
- `GET /api/unity/stable-manifest` now works in serverless: uses filesystem in dev, falls back to parsing `Stable/index.html` via HTTP in prod to discover the four hashed files and emits a cache‑busting version.
- Caching:
- `next.config.ts` sets `Cache-Control: no-store` for `Stable/index.html` and `immutable` long‑cache for hashed assets.
- DX/docs:
- Updated `.cursor/commands/gitPush.md` with LFS workflow and cleanup.
- `README.md` gained a brief “Unity builds and Git LFS” section.
- Content:
- Updated Griddie Golf WebGL Stable build (includes Aim Info panel).
## 2025-11-14
High‑level: Added a dismissible Quick Start hint on the Main Menu, created a condensed quick How‑to‑Play modal (kept for future use), reverted the button back to the original descriptive rules modal, and refined copy to better teach the core loop quickly (including leaderboard qualification and clearer club rules).
- Gameplay help on /play:
- New Quick Start hint overlay (`app/components/quickstart-hint.tsx`), shown only on the Main Menu, dismissible via `localStorage` key `gg.quickstart.dismissed`. Summarizes: leaderboard qualification, distance = die ± terrain, tap→drag→release shot flow, nested club rules (Driver hits over trees; Iron tree bounce; Putter Tap‑In from 1), and Blocks now include Trees.
- Quick modal added (`app/components/how-to-play-quick.tsx`) with the same condensed copy; currently not wired by default.
- The bottom‑left “How to play” button continues to open the descriptive modal (`app/components/how-to-play.tsx`). We updated its Driver line to “hits over trees (can’t land on trees)”.
- Copy structure updates (quick‑start UIs):
- Added: “Complete 18 holes to qualify for the leaderboard.” (first bullet).
- Reworded: “Dice rolls appear on usable clubs for distance.”
- Order: Distance explanation appears above “Tap a club…”.
- Clubs: Kept as a nested list; clarified Driver “hits over trees”; Putter now communicates Tap‑In from 1 tile (removed “distance equals the die”).
- Blocks: Now “Water/OOB/Trees block shots.”
- Files touched:
- `app/components/how-to-play.tsx` (Driver phrasing)
- `app/components/how-to-play-quick.tsx` (new)
- `app/components/quickstart-hint.tsx` (new)
- `app/play/page.tsx` (use descriptive modal; mount QuickStartHint on Main Menu)
## 2025-11-13
High‑level: Enabled privacy‑friendly Vercel Web Analytics across the site. Installed the analytics package and mounted the React `<Analytics />` component in the root layout so page views are tracked on every route. Verified a clean production build.
- Analytics:
- Dependency: added `@vercel/analytics`
- Layout: imported `{ Analytics }` from `@vercel/analytics/next` and rendered it in `app/layout.tsx` (inside `<body>`).
- No UX or UI changes; metrics activate automatically on Vercel deployments.
- Build: `next build` completed successfully after changes.
## 2025-11-13
High‑level: Refreshed landing copy to emphasize speed-to-play and Markdown‑first design, added a global footer with email and X/Twitter links, and improved the primary CTA’s prominence. Also expanded Contact.md to include a direct email.
- Landing hero (`app/page.tsx`):
- Headline updated to “From Spec to Play, Faster.”
- Subheadline updated to “The Future of Game Development Is Designed in Markdown.”
- Primary CTA sizing/hover polish: larger tap target, subtle shadow and scale on hover.
- Contact modal (`app/components/hero-readme.tsx`):
- Added email contact line with `mailto:connor@markdowngames.com` (kept Discord “pogchampion”).
- Global footer:
- New `SiteFooter` component (`app/components/site-footer.tsx`) with:
- Email: `connor@markdowngames.com`
- X/Twitter: `https://x.com/connorleisz`
- Copyright: © Markdown Games
- Mounted in `app/layout.tsx` so it appears on all pages.
## 2025-11-12
High‑level: Improved the MDMCP Unity Getting Started page with a crisp, looping demo video for “Prompting in Cursor”, added WebM (VP9) as preferred source with MP4 fallback, introduced a poster image hook, tightened sizing to prevent blurry upscaling, and documented encoding guidance.
- MDMCP docs page (`/mdmcp-unity`):
- Embedded demo video under “Prompting in Cursor”:
- `autoPlay`, `loop`, `muted`, `playsInline`, no controls, PiP disabled.
- Preferred `video/webm` (VP9) with `video/mp4` fallback.
- Added `poster` attribute for a crisp first frame (PNG).
- Container width clamped to `max-w-[1024px]` to avoid upscaling blur.
- Next.js App Router fix: removed `onContextMenu` from Server Component video (event handlers are client‑only).
- Hover controls overlay:
- Added `HoverVideo` client component with hover/tap‑revealed controls (no native controls).
- Controls: Play/Pause and Fullscreen, circular IDE‑style buttons.
- Fullscreen supports standard API and iOS Safari (`webkitEnterFullscreen`) fallback.
- Icons switched to `lucide-react` (Play, Pause, Maximize, Minimize).
- Media encoding guidance:
- Added recommended `ffmpeg` commands for VP9 WebM and high‑quality H.264 MP4 exports.
- Notes on cache busting and verifying WebM selection in DevTools.
- Dependency:
- Added `lucide-react` for UI icons.
## 2025-11-11
High‑level: Added an IDE‑styled “rules.md” How‑to‑Play modal on /play, introduced a README.md panel on the landing with a modal that toggles between Contact.md and README.md, and refined the landing by removing the philosophy section. Also finalized Google Sign‑In rollout and branding assets.
- Web auth (Google) for WebGL:
- Added GIS popup button and host bridge on `/play` (bottom‑right).
- Unity forwards Google ID token via `WebGLAuthBridge`; UGS signs in/links.
- Host listens to `GG_OnIsGoogleLinked(true/false)` and `GG_OnSceneChanged(sceneName)`:
- Shows Google button only on Main Menu when not linked.
- Shows “Sign out” button on Main Menu when linked.
- Gating tightened:
- Button rendering now waits until the Main Menu is confirmed (`sceneKnown=true` via `GG_OnSceneChanged`).
- Initial GIS render is gated by `onMainMenu` to prevent premature prompts during load.
- Sticky linkage:
- Once linked, host keeps `effectiveLinked=true` across scenes and reloads until explicit sign‑out.
- Persisted in `localStorage` (`ggEverLinked=1`) and cleared on sign‑out.
- Sign‑out UX: brief toast (“Signed out”) and immediate re‑render of the Google button (no refresh).
- Debug overlay: `/play?ui-debug=1` shows scene/auth/link states and recent events.
- Unity embed:
- Removed fullscreen UI controls to preserve the designed portrait aspect.
- Kept Safari context tweaks for stability.
- Build discovery:
- Client now uses `/api/unity/stable-manifest` to auto‑discover the four hashed filenames and a version cache‑buster. No manual file edits required after copying a new Stable build.
- Landing:
- Added inline phone SVG note: “Best experienced on mobile”.
- Introduced IDE‑styled README panel below the hero (`HeroReadme`), using `IdePanel`.
- Added a modal (`IdeModal`) that toggles between:
- Contact.md — “Message pogchampion on Discord” with icon.
- README.md — site motto and philosophy summary.
- Replaced “Read philosophy” behavior with the Contact/README modal toggle.
- Removed the `#philosophy` section from the landing page.
- Featured Open Source: added an “Open Source — MDMCP Server (Unity)” IDE‑style panel with CTAs:
- Get Started → `/mdmcp-unity`
- GitHub → `clokk/mdmcp-unity`
- UI polish: added spacing between landing panels for readability.
- DX:
- `.gitignore` updated to ignore env files; use `.env.local` for `NEXT_PUBLIC_GOOGLE_CLIENT_ID`.
- Production auth setup:
- Set `NEXT_PUBLIC_GOOGLE_CLIENT_ID` in Vercel Environment Variables (Production + Preview).
- Added Authorized JavaScript origins in Google Cloud Console for apex/www and Vercel preview domains.
- Verified `/play?ui-debug=1` in production shows GIS button and debug overlay events.
- Branding (icons):
- Added favicon: `app/icon.svg` (brand gradient with “.md” wordmark).
- Added Apple touch icon generator: `app/apple-icon.tsx` (Next/og → 180×180 PNG).
- Added optional variants: `public/md-favicon-solid.svg`, `public/md-favicon-outline.svg`.
- Palette consistency: gradient `#22d3ee` → `#a3e635` (matches `public/logo.svg`).
- Gameplay Help on /play:
- New “How to play” button (bottom‑left) opens an IDE‑styled `rules.md` modal with concise rules.
- Visibility gated to Main Menu via `GG_OnSceneChanged`; auto‑closes on scene change.
- Clarified Turn flow step 3 to use pull‑and‑release aiming.
- Open source — MDMCP Server (Unity):
- New docs page at `/mdmcp-unity` with Getting Started:
- Install (UPM Git URL), Start the Server, Quickstart (curl), and Extend (IEditorAction).
- Added “Prompting in Cursor” guidance:
- Attach `@Packages/com.clokk.mdmcp-unity/Documentation/MDMCPServer.md` (or local `@MDMCPServer.md`).
- Describe goals in natural language; ensure Unity Editor is open, compiled, and focused.
- Repository link: `https://github.com/clokk/mdmcp-unity`
## 2025-11-10
- Initial landing built with Next.js 16 (App Router) and Tailwind v4.
- Theme and palette:
- Added CSS variables in `app/globals.css` for background, text, muted, and accents.
- Mapped variables into Tailwind via `@theme inline`.
- Metadata:
- Updated `app/layout.tsx` title and description to reflect “Human‑Architected Games” and “AI for Process, Not for Product.”
- Branding:
- Added `public/logo.svg` (games.md badge with cyan→lime gradient).
- Landing hero (`app/page.tsx`):
- Headline “Human‑Architected Games.”
- Primary CTA → `/play`
- Secondary CTA to `#philosophy` added then temporarily hidden (class `hidden`).
- Unity integration (`app/play/page.tsx`, `app/components/unity-canvas.tsx`):
- Installed `react-unity-webgl` and created client component loader.
- Embedded Stable WebGL2 build from `public/builds/griddie/Stable/Build`.
- Sizing: portrait‑first container with aspect ratio 9/19.5; uses 100svh to eliminate scroll; width clamp at `min(100vw, calc(100svh*9/19.5), 720px)`.
- Fullscreen UI: desktop fixed button (top‑right), mobile floating hint that auto‑hides (initially 1.2s, later 3.2s).
- Headers (`next.config.ts`):
- Added Brotli headers for `.data.br`, `.framework.js.br`, `.wasm.br` and long‑cache.
- Cached `.loader.js`.
- WebGPU track (experimental):
- Wired WebGPU build initially; encountered validation errors (invalid bind groups) leading to magenta → black.
- Paused WebGPU on site; documented path to URP‑based fix; Stable WebGL2 used by default.
- DX/UX fixes:
- Removed `next/dynamic { ssr:false }` usage in Server Component; imported client component directly.
- Switched Unity wrapper to iPhone 12 Pro Max aspect; prevented scroll on mobile.
## 2025-11-09 and earlier
- Project scaffolded with Next.js template; baseline files created by Create Next App.