원클릭으로
add-page
Create new pages with correct routing and MainLayout usage. Use proactively when creating new pages.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Create new pages with correct routing and MainLayout usage. Use proactively when creating new pages.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Create blog posts — from a topic (writes content) or with provided content (scaffolding). Use proactively when creating new blog posts or articles.
Pre-publication audit for blog posts — comprehensive final review of SEO, AEO, accessibility, images, content quality, i18n parity, and project conventions before publishing. Use proactively before publishing any blog post.
Pre-publication audit for blog series — validates series definition, post ordering, cross-post consistency, navigation, and runs individual post audits for all posts in the series. Use proactively before publishing any blog series.
Audit the blog tag taxonomy — frequency analysis, orphan detection, hierarchy validation, and proposals for new subtopic tags. Read-only — proposes, never modifies tags or posts. Use proactively before each release cycle or after a content drop of 5+ posts.
Optional DeepWorkPlan addon that connects an AI-first repo to the developer's Dailybot team — installing (with consent) the Dailybot agent skill (DailybotHQ/agent-skill) and/or the Dailybot CLI (DailybotHQ/cli), wiring the plan lifecycle into best-effort agent updates - kickoff when a plan starts, significant task completions, a blocked report when an unattended run halts, and a milestone on plan completion - with payloads derived from the plan's state layer, and optionally committing the Dailybot skill's deterministic hook enforcement (dailybot hook lifecycle hooks, CLI >= 1.12.0) so the agent harness itself reminds agents about unreported work. Opt-in, never required, never blocks the work, reconciles existing setups instead of clobbering them, and defers all auth to the Dailybot skill's own consent flow. Use when the developer or team already uses Dailybot and wants DWP progress visible to humans.
Optional DeepWorkPlan addon that safely upgrades a repo's dependencies — reasoning about the repo's ACTUAL package manager (npm/pnpm/yarn + ncu, pip/poetry/uv, cargo, go mod, bundler, composer, and more) rather than assuming npm — with a batched, validated, revertible workflow that detects the manager and manifests/lockfiles, classifies upgrades (patch/minor/major), upgrades in safe batches, runs the repo's real validation gate after each batch, reverts a failing batch, and summarizes. Opt-in, never required, reconciles with the repo's existing tooling. Use when the developer wants to bring dependencies up to date without breaking the build.
| name | add-page |
| description | Create new pages with correct routing and MainLayout usage. Use proactively when creating new pages. |
| disable-model-invocation | false |
| allowed-tools | Read, Write, Edit, Glob, Grep, Bash |
| model | haiku |
| tier | 1 |
| intent | create |
| max-files | 4 |
| max-loc | 200 |
Create new pages in the Astro application with correct file-based routing, MainLayout usage, and SEO properties. Creates pages in ALL active language routes to maintain multilingual parity. Uses shared page components (src/components/pages/) with thin per-language wrappers.
Tier: 1 - Light/Cheap
Reasoning: Creating a page follows a clear template, has defined patterns, and is low risk.
$NAME: Page name/route (e.g., projects, about/team)$TITLE: Page title (for SEO)$DESCRIPTION: Page description (for SEO)$LANG: Language code (default: 'en')$DYNAMIC: If true, creates dynamic route with getStaticPaths| File | Route |
|---|---|
pages/about.astro | /about |
pages/projects/index.astro | /projects |
pages/team/[member].astro | /team/{member} (dynamic) |
pages/es/about.astro | /es/about (i18n) |
pages/{name}.astropages/{name}/index.astropages/{name}/[param].astropages/{lang}/{name}.astroMANDATORY: Every page must use the Page wrapper pattern. Create the shared component at src/components/pages/{Name}Page.astro — this component handles MainLayout, translations, and all content internally.
Static Page Component Template:
---
// src/components/pages/{Name}Page.astro
import MainLayout from '@/layouts/MainLayout.astro';
import { getTranslations } from '@/lib/translations';
import { getUrlPrefix } from '@/lib/i18n';
import type { Language } from '@/lib/i18n';
interface Props {
lang: Language;
}
const { lang } = Astro.props;
const t = getTranslations(lang);
const prefix = getUrlPrefix(lang);
---
<MainLayout lang={lang} title={t.{name}Page.title} description={t.{name}Page.description}>
<main class="main-container py-24">
<h1 class="text-4xl font-bold mb-8 text-gray-900 dark:text-white">
{t.{name}Page.title}
</h1>
<div class="prose dark:prose-invert max-w-none">
<!-- Page content using t.* for text and prefix for URLs -->
</div>
</main>
</MainLayout>
Create 3-line wrapper files for each active language (see src/lib/i18n.ts):
English wrapper (src/pages/{name}.astro):
---
import {Name}Page from '@/components/pages/{Name}Page.astro';
---
<{Name}Page lang="en" />
Spanish wrapper (src/pages/es/{name}.astro):
---
import {Name}Page from '@/components/pages/{Name}Page.astro';
---
<{Name}Page lang="es" />
Key rules:
MainLayout — the *Page.astro component handles it internallylang prop is passed as a string literal ("en", "es"), not a variablesrc/lib/translations/en.ts and src/lib/translations/es.tsCreate Markdown source files for the new page's .md endpoint (Markdown for Agents):
src/content/pages/en/{name}.md with frontmatter (title, description, lastUpdated) and full page content as clean Markdownsrc/content/pages/es/{name}.md with translated frontmatter and content (proper diacritical marks)Content requirements:
*Page.astro component (same information, not a summary)/about), ES pages use /es/ prefix (/es/about)These files are automatically served as /{name}.md and /es/{name}.md endpoints — no endpoint code changes needed. Agents can also request them via Accept: text/markdown header.
pnpm run astro:check
pnpm run biome:check
pnpm run build
## ✅ Pages Created (Multilingual)
### Pages
- English: `src/pages/{path}.astro` -> URL: `/{route}`
- Spanish: `src/pages/es/{path}.astro` -> URL: `/es/{route}`
- Type: {Static|Dynamic}
### SEO
- Title: {title} / {title_es}
- Description: {description} / {description_es}
### Layout
- Uses MainLayout ✅
- main-container ✅
### Validation
- Astro check: ✅
- Build: ✅
### Commit Message
feat: add {name} page (en + es)
*Page.astro component handles MainLayout internallylang literal)main-container wrapper<h1>)src/lib/i18n.ts).translations.ts for all active languages.Stop and escalate if:
src/components/pages/src/lib/i18n.ts)lang valueMainLayout with lang prop and getUrlPrefix(lang) for URLstranslations.ts for all active languages (if applicable)pnpm run astro:check passespnpm run build passesInput:
$NAME: projects
$TITLE: My Projects
$DESCRIPTION: A showcase of my development projects
Creates:
src/pages/projects.astro -> /projectssrc/pages/es/projects.astro -> /es/projectsInput:
$NAME: about
$TITLE: About Me
$DESCRIPTION: Information about me
Creates:
src/pages/about.astro (English, lang='en')src/pages/es/about.astro (Spanish, lang='es')Input:
$NAME: projects/[slug]
$TITLE: (dynamic)
$DESCRIPTION: (dynamic)
$DYNAMIC: true
Creates: src/pages/projects/[slug].astro
Route: /projects/{slug}