automation
Create, publish, and manage Notion-backed websites with SEO, CMS, widgets, and lightweight deployments.
A full website operations skill for creating, recreating, redesigning, publishing, and managing websites over time, including Notion CMS setup, listing/search interactions, SEO/AEO/GEO improvements, and lightweight deployment workflows.
This walkthrough shows how I use the Website Manager skill to design, publish, and keep a website operating over time, with Notion-backed content, SEO structure, and lightweight deployment workflows.
Walkthrough
Watch the skill in action
This walkthrough shows how I use the Website Manager skill to design, publish, and keep a website operating over time, with Notion-backed content, SEO structure, and lightweight deployment workflows.
How it works
Website Manager
How to use it
Download the skill package
Hit the Download button in the sidebar (desktop) or the button pinned at the bottom (mobile). You'll get a ZIP.
Add it to your agent
Extract and drop the folder into your agent's plugins directory. For Claude Code / OpenClaw, that's .claude/plugins/ in your project root.
Start prompting
Your agent now knows the skill. Describe the task in plain English — it handles the rest.
Developer & Source DetailsRaw SKILL.md and repository files
Skill Definition (SKILL.md)
The raw instruction document consumed by your AI agent.
Website Manager
Overview
Use this skill when the user wants one workflow that covers both website creation and ongoing website management.
This skill is for:
- rebuilding or redesigning an existing website
- creating a new website starter
- adding or refining pages, widgets, and blog/CMS features
- managing content from Notion
- improving SEO, schema, internal linking, filtering, and discoverability
- setting up lightweight publishing and recurring upkeep
Keep the output portable. The site should not become locked to one host or one agent platform unless the user explicitly asks for that.
Credentials
Core website planning, content modeling, blueprint generation, and validation do not require secrets.
Automated Notion CMS creation and sync do require:
NOTION_ACCESS_TOKENorNOTION_TOKENNOTION_PARENT_PAGE_IDfor the shared parent page where the CMS will be created
Automated Netlify deploys do require:
NETLIFY_AUTH_TOKEN- optional
NETLIFY_SITE_IDwhen deploying to an existing site
Credential rule:
- only request these values when the user wants automated CMS creation, CMS sync, or automated deploys
- prefer
NOTION_ACCESS_TOKENas the canonical variable name and treatNOTION_TOKENas a compatible fallback - for Notion, share a single parent page with the integration and create the CMS as child databases/pages beneath it
- prefer the least-privileged Netlify token that can create deploys for the target site
- do not assume these env vars exist just because the skill is installed
- if
NETLIFY_SITE_IDis missing, the deploy helper may create a new Netlify site automatically and persist the returned non-secret site identifiers - never store secrets in Notion or repo files; only store non-secret IDs and URLs
- if the user only wants planning, blueprinting, content modeling, or validation, do not request any secrets
Persisted Files
The helper scripts may write non-secret runtime metadata to local JSON files.
Default locations:
.website-manager/notion.json.website-manager/deploy.json
Storage rule:
- review these files before committing or syncing them anywhere
- they should contain IDs and URLs, not secrets
- keep them local by default unless you intentionally want them in your project workflow
Read as needed:
references/default-stack.mdfirst for the opinionated baseline this skill should assumereferences/site-types/*.mdfor visual direction and default token choices; usegeneric.mdas the fallback when no specialized type clearly fitsreferences/seo-aeo-geo.mdfor metadata, schema, FAQ, and local SEO rulesreferences/widgets-and-interactions.mdfor widgets, filtering, search, pagination, and collection UXreferences/notion-cms-model.mdfor the Notion database structurereferences/deployment-shapes.mdfor site architecture choicesreferences/hosting-decision.mdwhen choosing where and how to deployreferences/openclaw-automation.mdwhen recurring upkeep is needed in OpenClaw
Use the helper scripts when useful:
scripts/generate_blueprint.pyto generate the default site/CMS/publish blueprintscripts/create_notion_cms.pyto create the default Notion CMS under a shared parent pagescripts/netlify_zip_deploy.pyto deploy a finished site to Netlify with the opinionated zip workflow
When To Use It
Use this skill when the user asks to:
- recreate, clone, redesign, or migrate a website
- create or improve a blog or CMS-driven site
- manage website content in Notion
- add widgets, filters, searchable listings, or other light interactivity
- publish changes or set up a low-friction hosting flow
- run recurring SEO or content-maintenance tasks
Workflow
Default assumptions
Unless the user explicitly says otherwise, assume this stack:
- plain HTML/CSS/JS or a very light static templating setup
- Notion as the CMS
- one shared page shell and one shared token system
- Netlify as the default host
- GitHub optional, not required
- one blog or collection listing pattern with category chips, search, featured items, and pagination
If the user is vague, do not ask them to choose among many architectures. Start from the default stack and only deviate when the site clearly needs it.
1) Understand the site and operating model
Start by identifying:
- whether the site is new or based on an existing live site
- the key page types
- the conversion paths
- what should be static versus CMS-driven
- whether the user is solo/non-technical or working with developers
If rebuilding an existing site:
- extract the route map from
sitemap.xmlfirst - if no sitemap exists, crawl homepage links up to two levels deep
- classify URLs as
core,blog,collection,embed,utility,external, orskip
2) Choose the implementation shape
Default implementation:
- plain HTML/CSS/JS for small to medium brochure and editorial sites
Use a lightweight static generator or templating layer when there are:
- repeated page layouts
- CMS-backed collections
- listing pages with tags, categories, or filters
- shared article or service templates
Avoid unnecessary framework weight when the user mainly needs:
- easy editing
- low-friction deployment
- simple maintenance
If there is no strong reason to do otherwise, keep:
- one listing template for posts or collection items
- one detail template for posts or collection items
- one site settings source from Notion
- one deployment target
3) Lock the shared system once
Define one shared system before generating pages:
- design tokens
- typography
- nav/footer
- responsive grid rules
- card/listing system
- interaction patterns for filters, search, and widgets
Do not redesign each page from scratch.
4) Build the core site
Generate in this order:
- shared shell and tokens
- homepage
- service/category hub pages
- individual detail pages
- about/contact/trust pages
- blog or collection listing pages
- article/detail templates
- booking/form wrapper pages
- utility pages such as
404
5) Add widgets and interaction deliberately
Use widgets only when they help the user complete a real task.
Examples:
- booking CTA bars
- opening hours widgets
- maps
- testimonial rails
- newsletter signup blocks
- blog/category filters
- searchable content lists
- pagination or load-more patterns
When building listings, always account for:
- filtering
- empty states
- no-results states
- mobile behavior
- deep-linking or URL-based filter state when useful
Default listing behavior:
- featured section first when featured items exist
- category chips directly under the listing intro
- search input matching title, excerpt, category, and tags
- pagination at 9 items per page by default
- URL query params for search and category when the site has more than a trivial number of posts/items
- reset control whenever filters are active
6) Model content in Notion
Use Notion as the editorial source of truth when the user wants a CMS without a custom admin panel.
Typical Notion databases:
- Pages
- Services or Collections
- Blog Posts
- Site Settings
Default database names:
PagesCollectionsBlog PostsSite Settings
Keep code responsible for layout and rendering. Keep Notion responsible for content and configuration.
7) Choose live versus rebuild behavior
Use rebuild mode for:
- homepage sections
- footer details
- navigation
- site settings
- service pages baked into templates
Use live CMS-backed mode for:
- blog/article listings
- article detail pages
- lightweight collections where server-side fetches are worthwhile
8) Bake in SEO / AEO / GEO
Every page should have:
- unique title
- unique meta description
- canonical URL
- valid schema
- clear answer-first content
- internal-link support to nearby pages and related content
Service and editorial pages should include:
- FAQ or answer blocks where appropriate
- local signals when the business is location-aware
- related-content links to improve crawl paths and usability
9) Validate before handoff or deploy
Run:
python3 scripts/validate_links.py ./site-output original-domain.com
python3 scripts/validate_links.py ./site-output original-domain.com --fix
The site is not complete until it passes with zero errors.
10) Deploy with the lightest workable path
Default hosting recommendation:
- Netlify for non-technical operators and sites that may later need serverless helpers
Optional:
- GitHub when the user wants previews, reviews, or collaboration
- another host when the user already has a strong platform preference
Default deploy workflow:
- build or prepare the site locally
- validate links and metadata
- zip deploy to Netlify
- only add GitHub later if collaboration demands it
11) Automate recurring upkeep
Good recurring jobs:
- broken-link scans
- metadata checks
- sitemap refreshes
- weekly publish queues
- monthly content health reviews
- recurring SEO and internal-link audits
If OpenClaw is available, prefer native cron jobs. If not, use another scheduler without changing the content workflow.
Hard Rules
- Never leave recreated internal pages pointing back to the original domain.
- Never hardcode secrets into HTML, scripts, or Notion content.
- Never recreate payment, auth, checkout, or regulated intake flows unless explicitly asked.
- Never force GitHub on a non-technical solo operator.
- Never treat hosting as the CMS.
- Always design listing pages with filtering, empty states, and mobile behavior in mind.
- Keep the site portable first, then adapt it for the chosen host.
- Default to the opinionated stack unless the user gives a concrete reason to diverge.
Output Contract
Return:
- the site map or content model
- what is static versus CMS-driven
- the implementation shape and hosting recommendation
- the rebuilt or updated pages/components
- the widget and interaction behavior
- the validation result
- any follow-up publish or automation steps