site-publisher
Site Publisher
Publish and manage password-protected branded websites on Cloudflare.
Prerequisites
Credentials must be configured via one of:
scripts/credentials.jsonwithgateway_domain+admin_token(Claude.ai)- Environment variables
WEB_FACTORY_DOMAIN+WEB_FACTORY_ADMIN_TOKEN(Claude Code)
Operations
Publish a New Site
-
Verify the build directory contains
index.html:ls ./build/index.html -
Collect from the user:
- Brand slug (subdomain): e.g.
bluewaves,mycompany,acme-corp- Must match
^[a-z0-9]([a-z0-9-]*[a-z0-9])?$, 1–63 characters - Suggest options based on context; validate format before proceeding
- Must match
- Site name (URL path): e.g.
q1-proposal,annual-report(lowercase, hyphens) - Title: Human-readable title for the site
- Brand slug (subdomain): e.g.
-
Check availability:
python3 scripts/site_api.py info {brand} {site-name}A 404 means the name is available. Confirm with the user before publishing.
-
Publish (with optional brand kit for login page styling):
# Default brand (no brand kit) python3 scripts/site_api.py publish ./build {brand} {site-name} --title "Title" # With brand kit (optional — styles the login page) python3 scripts/site_api.py publish ./build {brand} {site-name} \ --title "Title" \ --brand-kit plugins/docs-factory/skills/brand-{brand}/assets/manifest.json -
Report to the user:
- Live URL:
https://{brand}.bluewaves-athena.app/{site-name}/ - Generated password (4-word passphrase)
- Number of files uploaded
- Live URL:
Update an Existing Site
Replace the content of an existing site without changing the password:
python3 scripts/site_api.py update ./build {brand} {site-name}
Download Site Files
Download all files from a published site to a local directory:
python3 scripts/site_api.py download {brand} {site-name} [output-dir]
Default output directory is ./build. This creates a build directory that can be modified and re-published via update.
List Sites
List all published sites, optionally filtered by brand:
# All sites
python3 scripts/site_api.py list
# Filter by brand
python3 scripts/site_api.py list {brand}
Get Site Info
View metadata for a specific site:
python3 scripts/site_api.py info {brand} {site-name}
Delete a Site
Remove a site and all its files:
python3 scripts/site_api.py delete {brand} {site-name}
Rotate Password
Generate a new password for a site (invalidates existing sessions):
python3 scripts/site_api.py rotate-password {brand} {site-name}
Reports the new password. Share with authorized users.
URL Pattern
Sites are served at: https://{brand}.bluewaves-athena.app/{site-name}/
- Brand = subdomain (must match a Cloudflare DNS wildcard)
- Site name = first path segment (lowercase, hyphens, no spaces)
Password System
- Passwords are system-generated 4-word passphrases (e.g.
coral-sunset-tide-2026) - Users never choose passwords
- Passwords are shown once on publish and on rotation
- Each site has an independent password and session cookie
Troubleshooting
See references/publish-guide.md for detailed API reference and troubleshooting.
More from bluewaves-creations/bluewaves-skills
photographer-testino
Generate images in Mario Testino's glamorous vibrant style. Use when users ask for Testino style, high fashion glamour, bold saturated colors, warm luxurious photography, dynamic sensual energy.
35photographer-lindbergh
Generate images in Peter Lindbergh's iconic black and white style. Use when users ask for Lindbergh style, raw authentic beauty, emotional B&W portraits, supermodel aesthetic, or unretouched natural photography.
30photographer-lachapelle
Generate images in David LaChapelle's surreal pop art style. Use when users ask for LaChapelle style, pop surrealism, hyper-saturated colors, theatrical staging, baroque maximalism, kitsch aesthetic.
24epub-creator
Create production-quality EPUB 3 ebooks from markdown and images with automated QA, formatting fixes, and validation. Use when creating ebooks, converting markdown to EPUB, or compiling chapters into a publishable book. Handles markdown quirks, generates TOC, adds covers, and validates output automatically.
22photographer-vonunwerth
Generate images in Ellen von Unwerth's playful vintage style. Use when users ask for von Unwerth style, playful sensuality, vintage film noir, whimsical feminine photography, retro glamour, narrative storytelling.
19photographer-ritts
Generate images in Herb Ritts' sculptural black and white style. Use when users ask for Ritts style, classical Greek aesthetic, sculptural body photography, California golden hour, minimalist athletic portraits.
18