--- name: design-mockups description: Build and present HTML/CSS design mockups with a local preview server. Use when prototyping website designs, iterating on visual concepts, or presenting design options. --- # Design Mockups Rapidly prototype and present HTML/CSS design mockups with a local server. ## Design Phases Design work moves through distinct phases. **Know which phase you're in.** ### Phase 1: Style Exploration **Goal:** Find the right visual direction for the entire site. Create multiple concepts with different aesthetics (terminal, minimal, brutalist, etc.). Each mockup is a complete style — colors, typography, effects, vibe. **Location:** `mockups/*.html` (root level) ``` mockups/ ├── retro-terminal.html # Concept A ├── minimal-stark.html # Concept B ├── warm-organic.html # Concept C └── brutalist-chaos.html # Concept D ``` **Outcome:** Pick a winner (e.g., `terminal-minimal-v2`). --- ### Phase 2: Site Templates **Goal:** Build out all page types in the chosen style. Create a subfolder named after the chosen direction. Build every major page template with shared styles. **Location:** `mockups/{chosen-direction}/` ``` mockups/ ├── terminal-v2-site/ # ← Chosen direction │ ├── styles.css # Shared design system │ ├── home.html │ ├── post.html │ ├── about.html │ ├── project.html │ ├── archive.html │ ├── search.html │ └── 404.html ``` **Outcome:** Complete set of page templates. --- ### Phase 3: Section Explorations **Goal:** Iterate on specific components or sections within the chosen style. When a section needs multiple approaches (e.g., "how should projects be listed?"), create explorations inside the chosen direction folder. **Location:** `mockups/{chosen-direction}/` with descriptive names **Naming convention:** `{section}-{variant}.html` ``` mockups/ ├── terminal-v2-site/ │ ├── styles.css │ ├── home.html │ ├── projects-grid.html # Section exploration │ ├── projects-file-tree.html # Section exploration │ ├── projects-file-tree-v2.html # Iteration on exploration │ └── projects-hybrid.html # Section exploration ``` **Outcome:** Pick the best approach for each section, integrate into templates. --- ## Project Structure ``` {project-name}/ ├── mockups/ │ ├── concept-a.html # Phase 1: Style exploration │ ├── concept-b.html │ ├── concept-c.html │ └── {chosen-direction}/ # Phase 2+3: Templates & explorations │ ├── styles.css # Shared design system │ ├── home.html # Page template │ ├── post.html # Page template │ ├── {section}-v1.html # Section exploration │ └── {section}-v2.html # Section iteration ├── docs/ │ └── logs/ # Session notes ├── server.js ├── package.json └── README.md ``` ## Quick Start ```bash # Reserve a port first portman reserve 3000 --name "{project-name}" --desc "Design mockups" # Create project mkdir -p ~/Developer/Projects/{project-name} cd ~/Developer/Projects/{project-name} mkdir -p mockups docs/logs # Initialize npm init -y npm install express # Copy server template (below) npm start ``` ## Server Template Save as `server.js` — serves mockups with a gallery UI: ```javascript const express = require('express'); const fs = require('fs'); const path = require('path'); const os = require('os'); const app = express(); const PORT = 3000; const MOCKUPS_DIR = path.join(__dirname, 'mockups'); app.use('/mockups', express.static(MOCKUPS_DIR)); function getLocalIP() { const interfaces = os.networkInterfaces(); for (const name of Object.keys(interfaces)) { for (const iface of interfaces[name]) { if (iface.family === 'IPv4' && !iface.internal) { return iface.address; } } } return 'localhost'; } const mockupMeta = { // 'filename-without-extension': { colors: ['#hex1', '#hex2'], desc: 'Description' } }; app.get('/', (req, res) => { const mockups = fs.readdirSync(MOCKUPS_DIR) .filter(f => f.endsWith('.html')) .map(f => { const slug = f.replace('.html', ''); const meta = mockupMeta[slug] || { colors: ['#ccc', '#999', '#666', '#333'], desc: '' }; return { name: slug.replace(/-/g, ' '), file: f, path: `/mockups/${f}`, colors: meta.colors, desc: meta.desc }; }); res.send(`