# Scaffold

> Create a new Next.js or Astro project on the bundled Cloudflare Workers stack with pnpm, Biome and Tailwind. Use for an empty target directory; skip existing applications and requests for a different stack.

- Skill: `coroboros/scaffold` (Agent Skill, multi-file: 29 files)
- Install (CLI): `npx skillmds@latest add coroboros/scaffold`
- Raw SKILL.md: https://api.skillmd.com/api/skills/coroboros/scaffold/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend
- License: MIT
- Author: coroboros (https://skillmd.com/u/coroboros)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/coroboros/scaffold

---


# Scaffold

Bootstrap the requested project with the opinionated stack.

The deterministic work — environment preflight, template overlay, `package.json` merge, post-scaffold verification — happens in three bundled scripts. Parse the invocation arguments, run the framework CLI, invoke the scripts in order, and turn their `RESULT:` lines into a concise report.

## Available scaffolds

| Scaffold | Framework | Infra | Stack highlights |
|----------|-----------|-------|-----------------|
| `next-cloudflare` | Next.js 16 (App Router) | Cloudflare Workers via OpenNext | Drizzle + Neon, Better-Auth, shadcn/ui, Vitest + Playwright |
| `astro-cloudflare` | Astro 6 (SSG-first, islands) | Cloudflare Workers | Zero JS by default, Content Collections, SEO rules |

**Shared across all scaffolds:** TypeScript strict, pnpm, Biome (no ESLint/Prettier), Tailwind CSS, `.node-version` 22.12.0.

If the user does not specify a scaffold or is ambiguous, show this table and ask which one.

## Workflow

`$SKILL_DIR` = this skill's folder — `${CLAUDE_SKILL_DIR}` in Claude Code, the directory containing this SKILL.md elsewhere.

### 1. Parse arguments

Extract `{scaffold}` and `{project_name}` from the invocation arguments. Aliases: `next-cf` → `next-cloudflare`, `astro-cf` → `astro-cloudflare`. Missing `{scaffold}` → show the *Available scaffolds* table and ask. Missing `{project_name}` → derive from cwd or ask. `{project_dir}` defaults to `.`.

### 2. Preflight

`bash "$SKILL_DIR"/scripts/preflight.sh "{project_dir}" "{project_name}"` → check `RESULT:` lines. Stop on `error=invalid-project-name`, `error=invalid-cloudflare-service-name`, or `error=invalid-target-name` and request the named constraint; on `pnpm=no`, `jq=no`, or `node=no|too-old|unsupported`, provide the official install or version remediation; on `target=occupied`, require an empty target including dotfiles. Continue only on `ok=true`.

### 3. Install

Per-scaffold steps (framework CLI, conflict removal, dependency installs, CSS-token setup): `references/setup-{scaffold}.md`. Then apply the shared overlay:

```bash
bash "$SKILL_DIR"/scripts/overlay_templates.sh "{scaffold}" "{project_name}" "{project_dir}"
```

Writes opinionated configs (`biome.json`, `.worktreeinclude`, canonical `AGENTS.md`, thin `CLAUDE.md`, `.agents/rules/`, `.node-version`, `.dev.vars.example`, `wrangler.jsonc`, framework configs), ensures Tailwind is imported, merges the shared rules into the generator's `.gitignore`, and applies the validated name plus scripts and module settings to `package.json`. Every publication uses a same-directory temporary file and rejects destination or parent symlinks. Idempotent — skips existing files unless `--force`; `ok=partial` → show the skipped list, ask whether to rerun or keep partial.

### 4. Verify and summarize

`bash "$SKILL_DIR"/scripts/verify_scaffold.sh "{project_dir}"` runs `pnpm biome check --write .` and `pnpm typecheck`. On failure, surface the first 60 diagnostic lines + a fix; do not mark the scaffold complete. On success, report files created and next steps: configure `.dev.vars`, optionally hand off to `/award-design <brief>` (award-level direction, then `/design-system audit DESIGN.md`) or `/frontend-dev` (everyday UI) when those skills are installed, then run `pnpm dev`.

## Rules

- Use Biome for linting and formatting.
- Use ES modules (`"type": "module"`).
- Use pnpm.
- Treat `target=occupied` as a hard stop; this skill creates new projects only.
- Preserve framework-generated `README.md`; leave project-specific documentation and Git initialization to the user.
- Read `"$SKILL_DIR"/references/decisions.md` only when the brief requires an application decision beyond scaffolding. Record established choices; ask only for a material unresolved decision. Do not add a mandatory questionnaire after a completed scaffold.

### astro-cloudflare specifics

When scaffolding `astro-cloudflare` or later editing its `astro.config.mjs` / `wrangler.jsonc`, read `"$SKILL_DIR"/references/astro-cloudflare-notes.md` — covers `imageService`, `assets.directory`, the pre-build shim, and the Sharp pitfall.

