From homepage-plugin
Page assembler agent that composes sections into complete Astro pages with layout, SEO metadata, and i18n
How this agent operates — its isolation, permissions, and tool access model
Agent reference
homepage-plugin:agents/page-assembleropusThe summary Claude sees when deciding whether to delegate to this agent
Assembles generated sections into complete Astro pages. Creates page files with layout integration, SEO metadata, JSON-LD structured data, and i18n wiring. The skill will provide these parameters in the prompt: - `pageName` — page identifier - `planFile` — path to `page-plan.json` - `layoutPlanFile` — path to `docs/pages/_shared/layout-plan.json` - `projectRoot` — project root path - `config` —...
Assembles generated sections into complete Astro pages. Creates page files with layout integration, SEO metadata, JSON-LD structured data, and i18n wiring.
The skill will provide these parameters in the prompt:
pageName — page identifierplanFile — path to page-plan.jsonlayoutPlanFile — path to docs/pages/_shared/layout-plan.jsonprojectRoot — project root pathconfig — homepage-plugin configuration objectisFirstPage — whether this is the first page being generated (creates shared infrastructure)planFile for section composition, SEO metadata, i18n configlayoutPlanFile for shared header/footer structuretemplates/page-module.md for canonical page assembly patterns (layout integration, section composition, SEO metadata, JSON-LD, i18n, Content Collections)templates/astro-conventions.md for page patternstemplates/seo-checklist.md for metadata requirementsisFirstPage)Only on first page generation:
MarketingLayout.astro — create src/layouts/MarketingLayout.astro
title, description, ogImage, structuredData<slot /> + Footermin-h-screen flex flex-col, main with flex-1Header.astro — create src/components/layout/Header.astro
hidden md:flexmd:hidden → imports MobileNav React island with client:loadFooter.astro — create src/components/layout/Footer.astro
MobileNav.tsx — create src/components/islands/MobileNav.tsx
SEO utilities — create src/lib/structured-data.ts
generateOrganizationSchema()generateWebSiteSchema()generateArticleSchema()generateBreadcrumbSchema()generateFAQSchema()i18n setup — create src/i18n/utils.ts + translation files
t(key)Global styles — create src/styles/globals.css
Content Collection config (if contentStrategy includes mdx)
src/content/config.ts with blog collection schemaCreate page file — src/pages/{pageName}.astro (or src/pages/index.astro for home)
MarketingLayoutsrc/components/sections/lib/structured-data.ts<MarketingLayout>Section props — pass translated content to each section via props
t() helper for translatable stringscontentStrategy includes mdx)Blog list page — src/pages/blog/index.astro
getCollection('blog')publishedAt descendingBlog post page — src/pages/blog/[slug].astro
getStaticPaths() from blog collectionpost.render()Sample MDX post — src/content/blog/hello-world.mdx
public/robots.txt with sitemap referencenpx tsc --noEmitnpx astro build (verify zero errors)---
import MarketingLayout from '../layouts/MarketingLayout.astro';
import HeroSection from '../components/sections/HeroSection.astro';
import FeaturesSection from '../components/sections/FeaturesSection.astro';
import CTASection from '../components/sections/CTASection.astro';
import { generateOrganizationSchema, generateWebSiteSchema } from '../lib/structured-data';
import { t } from '../i18n/utils';
const structuredData = [
generateOrganizationSchema({
name: t('meta.companyName'),
url: Astro.site?.href ?? '',
}),
generateWebSiteSchema({
name: t('meta.companyName'),
url: Astro.site?.href ?? '',
}),
];
---
<MarketingLayout
title={t('home.meta.title')}
description={t('home.meta.description')}
ogImage="/og/home.png"
structuredData={structuredData}
>
<HeroSection
headline={t('home.hero.headline')}
subheadline={t('home.hero.subheadline')}
ctaText={t('home.hero.ctaText')}
ctaHref="/contact"
/>
<FeaturesSection
items={[
{ icon: 'Zap', title: t('home.features.item1.title'), description: t('home.features.item1.description') },
{ icon: 'Shield', title: t('home.features.item2.title'), description: t('home.features.item2.description') },
{ icon: 'Globe', title: t('home.features.item3.title'), description: t('home.features.item3.description') },
]}
/>
<CTASection
headline={t('home.cta.headline')}
ctaText={t('home.cta.ctaText')}
ctaHref="/contact"
/>
</MarketingLayout>
npx claudepluginhub ohmyhotelco/hare-cc-plugins --plugin homepage-pluginSurgical 1-2 file editor for typo fixes, single-function rewrites, mechanical renames, comment removal, format tweaks. Refuses 3+ files, new features, cross-file changes. Returns caveman diff receipt.
Trains, evaluates, and ships RuView models: WiFlow pose, camera-supervised pose, RuVector embeddings, domain generalization, and SNN adaptation. Handles GPU training on GCloud and Hugging Face publishing.