Skip to content

Build + Deploy justinsforge.com Home Page: Handoff (2026-04-28)

You are an Opus worker spawned to build and deploy a distinctive landing page for justinsforge.com. This is Justin's domain for his self-hosted AI / agent fleet hub, the public face of "Forge" (his workspace, agent infrastructure, and the place where his automations live).

Goal

A clean, distinctive home page at https://justinsforge.com/ that: - Sets the tone: this is Justin's personal command center / AI fleet, not a corporate site. - Links out to the live surfaces of the forge that already exist (see "Existing surfaces" below). - Reflects Justin's design preferences (see his other site at sites/justinkrystal.com/landing/index.html for reference, clean, modern, not generic AI-template). - Uses the shared scaffold: sites/_shared/tokens.css, sites/_shared/header/, sites/_shared/footer/, sites/_shared/forge-include.js for consistency.

Existing site state

Path: sites/justinsforge.com/

sites/justinsforge.com/
├── demo-scaffold/        ← demo, not the home page (leave alone or repurpose)
│   ├── assets/
│   └── index.html
└── games/                ← live mini-games (draw, maze, puzzle) — link from home
    ├── draw.html
    ├── index.html
    ├── maze.html
    └── puzzle.html

There is no landing/ directory yet, that's what you're building.

URL What it is
https://mkdocs.justinsforge.com/ The forge knowledge base (MkDocs over Justin's memory/, system-map/, docs/, etc.)
https://justinsforge.com/games/ The mini-games (draw, maze, puzzle), already live
(placeholder for future) Dashboard, fleet status, anything else Justin wants featured

Ask Justin what else to feature before locking the layout. Don't invent links to surfaces that don't exist.

Tech stack, use the existing scaffold

Read these first: - [sites-playbook](https://mkdocs.justinsforge.com/docs/sites-playbook/) (or docs/sites-playbook.md) - [asset-grabber-playbook](https://mkdocs.justinsforge.com/docs/asset-grabber-playbook/) (or docs/asset-grabber-playbook.md) - sites/_shared/tokens.css, design tokens (colors, fonts, spacing) - sites/_shared/header/ and sites/_shared/footer/, reusable nav + footer - sites/justinkrystal.com/landing/index.html, closest reference for tone

Tooling: - New page scaffold: scripts/sites/new-page.sh justinsforge.com landing --template single - Preview: /preview-site justinsforge.com (gives Tailscale URL so Justin can preview on Venus / phone) - Screenshot: /screenshot <url> for desktop + mobile checks - Deploy: /deploy-site justinsforge.com, rsyncs sites/justinsforge.com/landing/ to media-server CT 102 at /mnt/storage/appdata/justinsforge-media/landing/. Cloudflare tunnel routes the apex domain to that container. - For images / web assets: scripts/assets/run grab|search|optimize|catalog via the Playwright venv at ~/.forge-venvs/assets/.

Optional design helper: the frontend-design skill (invoke via /frontend-design) if you want a creative jumpstart that avoids generic AI-template aesthetics.

Deploy notes

  • Justin's policy: never deploy without showing him a preview first. Run /preview-site justinsforge.com, share the Tailscale URL, get a thumbs-up, then /deploy-site.
  • Once deployed, screenshot the live site at desktop + mobile to confirm.
  • Cloudflare DNS + tunnel for justinsforge.com apex is already wired (zone id 2c415a6672c980b6451718886d12ace0). You shouldn't need to touch DNS, just deploy and the domain points at it. If routing isn't working post-deploy, check python3 scripts/cloudflare/cf.py ingress for the tunnel state and ask Justin before changing tunnel config.

Style guidance (pulled from Justin's broader preferences)

  • No em dashes anywhere in copy.
  • No AI-giveaway phrases ("I'd love to", "wheelhouse", "in your wheelhouse", "exciting opportunity", etc.).
  • Direct, modest tone. Justin is a builder, not a marketer.
  • Tables and structure beat walls of text.
  • Tasteful animation OK, but no "scroll-jacking" or hero-video-autoplay clichés.

What you're NOT doing

  • Not touching MkDocs (mkdocs.justinsforge.com is on its own subdomain and pipeline).
  • Not touching the games (already deployed at /games/).
  • Not creating a CMS or backend, this is a static site.
  • Not adding analytics, tracking pixels, or third-party fonts without asking.

First three actions

  1. Read the playbooks + the shared scaffold + sites/justinkrystal.com/landing/index.html for tone reference.
  2. Ask Justin what surfaces he wants featured on the home page (mkdocs, games, anything else?). Propose a layout / sections list before writing HTML.
  3. Once Justin agrees on sections, scaffold sites/justinsforge.com/landing/ and iterate with /preview-site until it's right.

Logging

Append a ## [Opus — forge-home] Session Checkpoint to memory/daily/2026-04-28.md every 4-5 exchanges. Sign with [Opus — forge-home].

Stop criteria

  • Justin approves the live deployed page at https://justinsforge.com/.
  • Or he says you're done.