Prepare Cloudflare Production Deployment
LubomirGeorgiev/cloudflare-workers-nextjs-saas-template
Source-of-truth runbook for preparing this Vinext Cloudflare Workers SaaS template for production deployment.
Versioned site deploys to GitHub/Cloudflare/Netlify Pages. An agent skill from Luciole-Studio/Misaka-Agent.
$ npx skills add Luciole-Studio/Misaka-Agent --skill publish-site -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Luciole-Studio/Misaka-Agent publish-site --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/Luciole-Studio/Misaka-Agent.git skills-src && mkdir -p .claude/skills && cp -r skills-src/misaka/core/skills/assets/optional/web-development/publish-site .claude/skills/publish-site && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "publish-site" agent skill from https://github.com/Luciole-Studio/Misaka-Agent/tree/main/misaka/core/skills/assets/optional/web-development/publish-site into .claude/skills/publish-site/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "publish-site", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/Luciole-Studio/Misaka-Agent/tree/main/misaka/core/skills/assets/optional/web-development/publish-siteType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add Luciole-Studio/Misaka-Agent --skill publish-site -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Luciole-Studio/Misaka-Agent publish-site --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Luciole-Studio/Misaka-Agent.git skills-src && mkdir -p .agents/skills && cp -r skills-src/misaka/core/skills/assets/optional/web-development/publish-site .agents/skills/publish-site && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "publish-site" agent skill from https://github.com/Luciole-Studio/Misaka-Agent/tree/main/misaka/core/skills/assets/optional/web-development/publish-site into .agents/skills/publish-site/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "publish-site", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Luciole-Studio/Misaka-Agent --skill publish-site -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Luciole-Studio/Misaka-Agent publish-site --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Luciole-Studio/Misaka-Agent.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/misaka/core/skills/assets/optional/web-development/publish-site .cursor/skills/publish-site && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "publish-site" agent skill from https://github.com/Luciole-Studio/Misaka-Agent/tree/main/misaka/core/skills/assets/optional/web-development/publish-site into .cursor/skills/publish-site/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "publish-site", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/Luciole-Studio/Misaka-Agent.git --path misaka/core/skills/assets/optional/web-development/publish-site--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add Luciole-Studio/Misaka-Agent --skill publish-site -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Luciole-Studio/Misaka-Agent publish-site --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Luciole-Studio/Misaka-Agent.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/misaka/core/skills/assets/optional/web-development/publish-site .gemini/skills/publish-site && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "publish-site" agent skill from https://github.com/Luciole-Studio/Misaka-Agent/tree/main/misaka/core/skills/assets/optional/web-development/publish-site into .gemini/skills/publish-site/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "publish-site", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install Luciole-Studio/Misaka-Agent publish-siteInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add Luciole-Studio/Misaka-Agent --skill publish-site -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Luciole-Studio/Misaka-Agent.git skills-src && mkdir -p .github/skills && cp -r skills-src/misaka/core/skills/assets/optional/web-development/publish-site .github/skills/publish-site && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "publish-site" agent skill from https://github.com/Luciole-Studio/Misaka-Agent/tree/main/misaka/core/skills/assets/optional/web-development/publish-site into .github/skills/publish-site/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "publish-site", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Luciole-Studio/Misaka-Agent --skill publish-site -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Luciole-Studio/Misaka-Agent publish-site --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Luciole-Studio/Misaka-Agent.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/misaka/core/skills/assets/optional/web-development/publish-site .opencode/skills/publish-site && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "publish-site" agent skill from https://github.com/Luciole-Studio/Misaka-Agent/tree/main/misaka/core/skills/assets/optional/web-development/publish-site into .opencode/skills/publish-site/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "publish-site", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
publish-siteVersioned site deploys to GitHub/Cloudflare/Netlify Pages. An agent skill from Luciole-Studio/Misaka-Agent.
Publish Site is an agent skill from Luciole-Studio/Misaka-Agent. Versioned site deploys to GitHub/Cloudflare/Netlify Pages.
Its SKILL.md is about 2.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in DevOps & Cloud. It works with Netlify, Cloudflare, GitHub and Cloudflare Workers. The repository describes itself as: A multi-agent research system for the humanities and social sciences. The licence is MIT.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 3bcf7a3. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitghnetlifypython3npxnpmcurlcloudflaredwranglerFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, gh, netlify, npx, npm, curl and wrangler, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
CLOUDFLARE_API_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Publish Site loads about 2.1k tokens when it runs. Until then it costs about 18 tokens; SKILL.md has 1,066 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
- **NEVER commit secrets, API keys, or `.env` files** — they'd be public on Pages hosting. Check with `git status` beforAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from Luciole-Studio/Misaka-Agent at commit 3bcf7a3, republished under its MIT licence (© Luciole-Studio). 1,066 words, ~2,146 tokens.
.claude/skills/publish-site/SKILL.md (or your agent's skills folder).Take a website, dashboard, or web app the user built (or you built for them) and put it online on infrastructure the user owns — GitHub Pages by default, Cloudflare Pages or Netlify when they need more. The discipline: preview locally for sign-off, version every deploy with a git tag, deploy through a provider ladder, verify the live URL with a real HTTP check, and keep rollback one command away.
This skill covers static sites and SPA build output (plain HTML/CSS/JS, or the dist//build/ folder from Vite/Next-export/Astro/etc.). It does not cover server-side runtimes — for throwaway serverless deploys with zero account setup, use the cloudflare-temporary-deploy optional skill instead.
Load this skill when the user asks to:
At least ONE authenticated provider CLI (check in this order):
gh auth status succeeds. Needs git too.wrangler whoami succeeds (or CLOUDFLARE_API_TOKEN is set). Install: npm i -g wrangler or use npx wrangler@latest.netlify status succeeds. Install: npm i -g netlify-cli.Plus:
dist//build/ folder). If the project needs a build step, run it first and publish the output directory, never the source.cloudflared (optional — python3 -m http.server covers local-only preview).All commands below run via the terminal tool from the site's project directory. The pipeline is always the same five moves:
curl and report it.| Step | Command |
|---|---|
| Local preview | python3 -m http.server 8080 --directory dist |
| Shareable preview | cloudflared tunnel --url http://localhost:8080 |
| Version a deploy | git add -A && git commit -m "deploy: <what>" && git tag deploy-YYYYMMDD-HHMM |
| GitHub Pages (branch mode) | git subtree push --prefix dist origin gh-pages |
| Enable Pages on repo | gh api repos/{owner}/{repo}/pages -X POST -f 'source[branch]=gh-pages' -f 'source[path]=/' |
| Cloudflare Pages | npx wrangler@latest pages deploy dist --project-name <name> |
| Netlify | netlify deploy --prod --dir dist |
| Rollback | git checkout <previous-tag> -- . && redeploy (or provider dashboard) |
| Verify live | curl -sS -o /dev/null -w '%{http_code}' <url> → expect 200 |
Build if needed (npm run build, etc.) and identify the output directory. Serve it:
python3 -m http.server 8080 --directory distFor a shareable preview link (user on another machine, or you want their sign-off before going live), open a quick tunnel in a background terminal session:
cloudflared tunnel --url http://localhost:8080Give the user the https://*.trycloudflare.com URL and get sign-off before deploying. Kill the tunnel afterwards.
Every deploy must come from a git commit, so every deploy is reproducible and rollback is trivial.
git init 2>/dev/null; git add -A
git commit -m "deploy: <short description>"
git tag "deploy-$(date +%Y%m%d-%H%M)"If the project already has a repo, just commit + tag. Never deploy uncommitted files.
Rung 1 — GitHub Pages (default: free, zero extra accounts if gh is authed):
gh repo create <name> --public --source . --push # skip if repo exists
git subtree push --prefix dist origin gh-pages # publish build output
gh api "repos/{owner}/<name>/pages" -X POST \
-f 'source[branch]=gh-pages' -f 'source[path]=/' # first time onlySite appears at https://<owner>.github.io/<name>/. If the site is the repo root (no build dir), push main and set Pages source to main instead of using subtree. For build-step projects that will redeploy often, prefer the official actions/deploy-pages workflow so pushes auto-publish.
Rung 2 — Cloudflare Pages (when the user wants a custom domain, redirects/headers, or Functions):
npx wrangler@latest pages deploy dist --project-name <name>First run creates the project and prints the https://<name>.pages.dev URL. Custom domains attach via the Cloudflare dashboard (Pages → project → Custom domains).
Rung 3 — Netlify (fallback, or when the user already lives there):
netlify deploy --prod --dir distnetlify deploy --dir dist (no --prod) gives a draft URL — useful as a second preview stage.
Rollback = redeploy a previous tag. Never hand-edit live output.
git checkout deploy-<previous> -- . # or: git checkout deploy-<previous>; rebuild
# then rerun the same deploy command from step 3Cloudflare Pages and Netlify also keep per-deploy history in their dashboards ("Rollback to this deploy"), which is faster when the CLI isn't handy.
.env files — they'd be public on Pages hosting. Check with git status before the first commit and keep .env* in .gitignore.index.html to 404.html in the output dir (cp dist/index.html dist/404.html) so client-side routing recovers. Cloudflare Pages and Netlify handle SPAs via _redirects (/* /index.html 200).curl a few times before investigating.Logo.PNG but committed as logo.png. Grep the HTML for mismatched casing when an asset 404s.https://<owner>.github.io/<name>/ serves under /<name>/ — absolute asset URLs like /app.js break. Use relative paths or set the build tool's base (vite build --base=/<name>/).wrangler auth flow needs a browser. wrangler login opens OAuth; in a headless session prefer CLOUDFLARE_API_TOKEN (user creates it at dash.cloudflare.com → API Tokens) and never echo the token into logs.*.pages.dev, *.netlify.app, *.github.io) first, then check the custom domain separately — don't conflate the two failures.dist/ yields a directory listing or raw JSX. Always confirm the output dir contains an index.html.Do NOT report success from the deploy log alone. Before telling the user anything:
curl -sS -o /dev/null -w '%{http_code}' <live-url> returns 200 (retry over ~2 minutes for a first GitHub Pages deploy).curl -sS <live-url> | head -30 shows the expected index.html content — optionally confirm markup with web_extract on the live URL./about) and confirm it returns 200, not 404.git tag --list 'deploy-*' shows the tag for this deploy.Then report the live URL to the user, along with the deploy tag they can roll back to.
© Luciole-Studio, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in misaka/core/skills/assets/optional/web-development/publish-site of Luciole-Studio/Misaka-Agent.
Open the folder on GitHubat commit 3bcf7a3
We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in Luciole-Studio/Misaka-Agent, which our catalogue first saw on October 7, 2026.
Publish Site next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Publish Site this skillLuciole-Studio/Misaka-Agent | 171 | 1 repos | ~2.1k | Automated safety check: Notes | MIT | |
| Prepare Cloudflare Production DeploymentLubomirGeorgiev/cloudflare-workers-nextjs-saas-template | 786 | — | ~5.9k | Automated safety check: Notes | MIT | |
| Codflow Updatebighadj22/codflow | 354 | — | ~6.2k | Automated safety check: Notes | Apache-2.0 | |
| Cloudflare Pagessickn33/agentic-awesome-skills | 47k | 2 repos | ~2.4k | Automated safety check: Pass | MIT | |
| Cloudflare Workers CD Rollbackmizchi/skills | 360 | — | ~1.2k | Automated safety check: Notes | None | |
| Vercel Migration Deep Divejeremylongshore/tons-of-skills-marketplace | 2.8k | — | ~2k | Automated safety check: Notes | MIT |
LubomirGeorgiev/cloudflare-workers-nextjs-saas-template
Source-of-truth runbook for preparing this Vinext Cloudflare Workers SaaS template for production deployment.
bighadj22/codflow
Update runbook for a self-hosted CodFlow install — an AI agent following it fetches the latest code from the CodFlow GitHub repo, merges it into an EXISTING checkout, syncs the gitignored…
sickn33/agentic-awesome-skills
Deploy static sites and full-stack apps on Cloudflare Pages with previews, functions, and custom domains.
mizchi/skills
GitHub Actions CD for Cloudflare Workers through cf with automatic traffic rollback on smoke failure, including JSON deployment snapshots, D1 migrations and prebuilt artifacts.
jeremylongshore/tons-of-skills-marketplace
Migrate to Vercel from other platforms or re-architecture existing Vercel deployments.
sundial-org/awesome-openclaw-skills
Multi-step deployment agent for full-stack apps. An agent skill from sundial-org/awesome-openclaw-skills.
Luciole-Studio/Misaka-Agent
Plan and run multi-agent video production pipelines. An agent skill from Luciole-Studio/Misaka-Agent.
Luciole-Studio/Misaka-Agent
AST-aware structural code search and rewrite via ast-grep. An agent skill from Luciole-Studio/Misaka-Agent.
Luciole-Studio/Misaka-Agent
Drug discovery: ChEMBL search, drug-likeness, interactions. An agent skill from Luciole-Studio/Misaka-Agent.
Luciole-Studio/Misaka-Agent
Workout planning, macros, and body metrics via wger/USDA. An agent skill from Luciole-Studio/Misaka-Agent.
Luciole-Studio/Misaka-Agent
Render MP4/WebM videos from HTML compositions. An agent skill from Luciole-Studio/Misaka-Agent.
Luciole-Studio/Misaka-Agent
Follow the money via public records and sanctions data. An agent skill from Luciole-Studio/Misaka-Agent.
Categories
Versioned site deploys to GitHub/Cloudflare/Netlify Pages. An agent skill from Luciole-Studio/Misaka-Agent. Publish Site is an agent skill from Luciole-Studio/Misaka-Agent. Versioned site deploys to GitHub/Cloudflare/Netlify Pages.
Publish Site fits situations like: devOps & Cloud work in your project.
Run `npx skills add Luciole-Studio/Misaka-Agent --skill publish-site -a claude-code`. Or copy the skill folder (misaka/core/skills/assets/optional/web-development/publish-site in Luciole-Studio/Misaka-Agent) into .claude/skills/publish-site in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Luciole-Studio/Misaka-Agent --skill publish-site -a codex`. Or copy the skill folder (misaka/core/skills/assets/optional/web-development/publish-site in Luciole-Studio/Misaka-Agent) into .agents/skills/publish-site in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Luciole-Studio/Misaka-Agent --skill publish-site -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/publish-site, .gemini/skills/publish-site, .github/skills/publish-site and .opencode/skills/publish-site in your project.
Going by SKILL.md and its folder, Publish Site needs the command-line tools its instructions call (git, gh, netlify, python3, npx and npm) and credentials named CLOUDFLARE_API_TOKEN. Our summary lists: Python 3; Node.js; A credential in CLOUDFLARE_API_TOKEN.
SKILL.md contains no URLs. Its commands use git, gh, npx, npm and curl, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Publish Site is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.1k tokens (SKILL.md is roughly 8.6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Publish Site: Prepare Cloudflare Production Deployment (LubomirGeorgiev/cloudflare-workers-nextjs-saas-template, 786 stars), Codflow Update (bighadj22/codflow, 354 stars), Cloudflare Pages (sickn33/agentic-awesome-skills, 47k stars) and Cloudflare Workers CD Rollback (mizchi/skills, 360 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Luciole-Studio (a GitHub organization) maintains it in Luciole-Studio/Misaka-Agent, which has 171 GitHub stars. The repository holds 77 skills in this directory. The repository was last updated on October 8, 2026.
Source: Luciole-Studio/Misaka-Agent on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.