Agent skill

Deploy Frontend

by butterbase-ai in butterbase-ai/butterbase-skills

A skill your agent uses when deploying a frontend (React, Next.js, or static HTML) to a live URL on Butterbase, or when troubleshooting deployment issues like MIME type errors or blank pages

MITAuto-check passedFrontend & Design

Install Deploy Frontend

skills CLI
$ npx skills add butterbase-ai/butterbase-skills --skill deploy-frontend -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install butterbase-ai/butterbase-skills deploy-frontend --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/butterbase-ai/butterbase-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/deploy-frontend .claude/skills/deploy-frontend && rm -rf skills-src

Use ~/.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/

Facts

Skill name
deploy-frontend
GitHub stars
534
Token cost
~2.8k tokens
SKILL.md length
973 words
Files
1
Skills in repo
39
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses when deploying a frontend (React, Next.js, or static HTML) to a live URL on Butterbase, or when troubleshooting deployment issues like MIME type errors or blank pages

  • Works in 7 steps: Set Environment Variables → Build → Configure CORS → …
  • Deploying a frontend (React
  • SKILL.md covers Overview, Framework Reference Table, Step 1: Set Environment… and Step 2: Build, plus 8 more sections
  • Calls node, npm and curl; reaches api.butterbase.ai

What it does

Deploy Frontend is an agent skill from butterbase-ai/butterbase-skills. Use when deploying a frontend (React, Next.js, or static HTML) to a live URL on Butterbase, or when troubleshooting deployment issues like MIME type errors or blank pages

Its SKILL.md is about 2.8k 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 Frontend & Design, covering Deployment. It works with Next.js, React and Vite. The repository describes itself as: Plugin for Butterbase.ai. The licence is MIT.

When your agent uses it

  • Deploying a frontend (React
  • Static HTML) to a live URL on Butterbase
  • Troubleshooting deployment issues like MIME type errors

Example prompts

  • “/deploy-frontend”

Requirements

  • Node.js

Workflow steps

7 steps, taken from the step headings in SKILL.md.

  1. Set Environment Variables
  2. Build
  3. Configure CORS
  4. Create Deployment
  5. Create Zip (Node archiver — the only supported method)
  6. Upload
  7. Start & Verify

What it can do on your machine

Read from SKILL.md and the folder at commit aa8ae69. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • node
    • npm
    • curl
    • npx

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • api.butterbase.ai

    Also links to:

    • npmjs.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Deploy Frontend loads about 2.8k tokens when it runs. Until then it costs about 47 tokens; SKILL.md has 973 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~47
When it runs · the whole SKILL.md, loaded when a task matches
~2.8k

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.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated 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.

SKILL.md

The full file from butterbase-ai/butterbase-skills at commit aa8ae69, republished under its MIT licence (© butterbase-ai). 973 words, ~2,773 tokens.

Download SKILL.mdSave it as .claude/skills/deploy-frontend/SKILL.md (or your agent's skills folder).
name
deploy-frontend
description
Use when deploying a frontend (React, Next.js, or static HTML) to a live URL on Butterbase, or when troubleshooting deployment issues like MIME type errors or blank pages

Overview

7-step workflow for deploying static frontends to Butterbase. Covers building, CORS, zipping, uploading, and verification.


Framework Reference Table

FrameworkBuild commandOutput dirEnv prefixFramework flag
React (Vite)npm run builddist/VITE_react-vite
Next.js (static)next buildout/NEXT_PUBLIC_nextjs-static
Plain HTML(none)project rootN/Astatic

Note: Next.js requires output: 'export' in next.config.js to produce a static export.


Step 1: Set Environment Variables

Use manage_frontend with action: "set_env" to configure the API URL and app ID before building. These variables are injected at build time by the framework.

json
{
  "app_id": "app_abc123",
  "action": "set_env",
  "vars": {
    "VITE_API_URL": "https://api.butterbase.ai/v1/app_abc123",
    "VITE_APP_ID": "app_abc123"
  }
}
  • For Vite, prefix all public variables with VITE_
  • For Next.js, prefix with NEXT_PUBLIC_
  • For Create React App, prefix with REACT_APP_

set_env upserts; you can call it again to add or change variables.


Step 2: Build

Run the framework-specific build command to produce the static output directory.

FrameworkCommand
React (Vite)npm run build
Next.js (static)next build
Plain HTML(no build needed)

After building, verify the output directory contains index.html at its root:

bash
# For Vite
ls dist/index.html

# For Next.js static export
ls out/index.html

If index.html is missing, check that the build completed without errors and that the framework is configured for static output.


Step 3: Configure CORS

Before deploying, configure CORS so the browser can make API requests from the deployment URL.

Call manage_app with action: "update_cors". Pass the deployment URL (use the Butterbase Pages URL pattern) and any local dev origins:

json
{
  "app_id": "app_abc123",
  "action": "update_cors",
  "allowed_origins": [
    "https://your-app.pages.dev",
    "http://localhost:5173"
  ]
}
  • Always include http://localhost:5173 (Vite dev server default) for local development
  • Include http://localhost:3000 if using Next.js or Create React App locally
  • Origins must include the protocol (https:// or http://) and must not have trailing slashes
  • If you don't yet know the exact deployment URL, you can update CORS again after Step 7

Step 4: Create Deployment

Call create_frontend_deployment with the app_id and the correct framework flag from the reference table above.

json
{
  "app_id": "app_abc123",
  "framework": "react-vite"
}

The response contains:

  • deployment_id — save this for Step 7
  • uploadUrl — the presigned S3 URL for uploading the zip (expires in 15 minutes)

Free plan: 1 deployment per app. Deploying again automatically replaces the previous deployment — no need to delete first.


Step 5: Create Zip (Node archiver — the only supported method)

⚠️ Do not use Compress-Archive, File Explorer, or zip -r from outside the build dir. Windows built-in tools write backslash (\) path separators, which makes the platform serve every file as text/html and breaks JS/CSS with MIME errors. Zipping from the parent dir nests dist/ inside the archive and ships a blank page.

Butterbase's recommended cross-platform method is the archiver Node package. It always writes POSIX / separators (works identically on macOS, Linux, Windows PowerShell, cmd, Git Bash, WSL) and zips from inside the source dir so index.html lands at the zip root.

One-time setup in the project being deployed:

bash
npm install --save-dev archiver
mkdir -p scripts

Then save this as scripts/make-zip.mjs (copy verbatim):

js
#!/usr/bin/env node
/**
 * Butterbase frontend zipper — the only supported way to compress a build
 * for `create_frontend_deployment` / `create_from_source`.
 *
 * Usage:
 *   node scripts/make-zip.mjs <sourceDir> <outZip> [--exclude=glob,glob,...]
 *
 * Examples:
 *   node scripts/make-zip.mjs dist frontend.zip                # Vite
 *   node scripts/make-zip.mjs out  frontend.zip                # Next.js static export
 *   node scripts/make-zip.mjs .    source.zip \                # source-build flow
 *     --exclude=node_modules,.next,dist,out,.git,.turbo,.cache
 */
import { createWriteStream } from "node:fs";
import { stat } from "node:fs/promises";
import { resolve } from "node:path";
import archiver from "archiver";

const [, , srcArg, outArg, ...rest] = process.argv;
if (!srcArg || !outArg) {
  console.error(
    "usage: node make-zip.mjs <sourceDir> <outZip> [--exclude=glob,glob,...]"
  );
  process.exit(2);
}

const src = resolve(srcArg);
const out = resolve(outArg);

const excludeFlag = rest.find((a) => a.startsWith("--exclude="));
const excludes = excludeFlag
  ? excludeFlag
      .slice("--exclude=".length)
      .split(",")
      .map((s) => s.trim())
      .filter(Boolean)
      .flatMap((g) => [g, `${g}/**`])
  : [];

const srcStat = await stat(src).catch(() => null);
if (!srcStat?.isDirectory()) {
  console.error(`error: source is not a directory: ${src}`);
  process.exit(1);
}

const output = createWriteStream(out);
const archive = archiver("zip", { zlib: { level: 9 }, forceLocalTime: true });

output.on("close", () => {
  const mb = (archive.pointer() / (1024 * 1024)).toFixed(2);
  console.log(`wrote ${out} (${mb} MB, ${archive.pointer()} bytes)`);
});
archive.on("warning", (err) => {
  if (err.code === "ENOENT") console.warn(err);
  else throw err;
});
archive.on("error", (err) => {
  throw err;
});

archive.pipe(output);
// cwd: src + glob('**/*') ⇒ entries are relative to src, so index.html
// sits at the zip root. archiver normalises separators to '/' on every OS.
archive.glob("**/*", { cwd: src, dot: true, ignore: excludes });
await archive.finalize();

Run it:

FrameworkCommand
Vitenode scripts/make-zip.mjs dist frontend.zip
Next.js (static)node scripts/make-zip.mjs out frontend.zip
Plain HTMLnode scripts/make-zip.mjs . frontend.zip --exclude=node_modules,.git

The script prints the final size on success — must be ≤ 100 MB for static deploys, ≤ 50 MB for source-build.


Step 6: Upload

Upload the zip file to the presigned S3 URL returned in Step 4:

bash
curl -X PUT "{uploadUrl}" \
  -H "Content-Type: application/zip" \
  --data-binary @frontend.zip
  • Replace {uploadUrl} with the full presigned URL from Step 4
  • The upload URL expires in 15 minutes — if it expires, repeat Step 4 to get a new one
  • Maximum file size: 100 MB
  • A successful upload returns an empty 200 response with no body

Show full SKILL.md (430 more words)Show less

Step 7: Start & Verify

Call manage_frontend with action: "start_deployment" and the deployment_id from Step 4:

json
{
  "app_id": "app_abc123",
  "action": "start_deployment",
  "deployment_id": "uuid-1234"
}
  • The tool polls until the deployment status is READY (up to 5 minutes)
  • On success, it returns the live URL (e.g., https://your-app.pages.dev)

Verification checklist:

  1. Open the live URL in a browser
  2. Check the browser console (F12) for JavaScript errors or failed network requests
  3. Navigate to a non-root route to verify SPA routing works (auto-handled for react-vite and nextjs-static)
  4. Make an API call and confirm it succeeds (no CORS errors)

Troubleshooting

ProblemCauseFix
Blank pageindex.html not at zip rootRe-zip with the supported script: node make-zip.mjs dist frontend.zip
MIME type errors / broken JS/CSSWindows backslash in zip paths (Compress-Archive, File Explorer)Re-zip with node make-zip.mjs dist frontend.zip — archiver writes POSIX / on every OS
API calls return 403CORS not configuredAdd deployment URL via manage_app action update_cors
Routes return 404SPA routing not set upSPA routing is auto-handled for react-vite and nextjs-static framework flags
Deploy stuck in BUILDINGBuild errorCheck manage_frontend action list_deployments for error field
Upload fails or curl errorsUpload URL expiredGet a new URL by calling create_frontend_deployment again
Next.js pages not exportingMissing static export configAdd output: 'export' to next.config.js and rebuild
Environment variables not foundNot set before buildRun manage_frontend action set_env and rebuild — env vars are baked in at build time

Bonus: server-side build (no local build needed)

If you want Butterbase to run npm install + build on the server, skip Steps 2–6 and use the source-build flow:

  1. manage_frontend action create_from_source → returns presigned URL for a source-code zip (≤ 50 MB)
  2. Zip the source with make-zip.mjs (same script as Step 5), excluding build artefacts:
    bash
    node scripts/make-zip.mjs . source.zip \
      --exclude=node_modules,.next,dist,out,.git,.turbo,.cache
    Do not use zip -r ../source.zip . -x ... — it has the same Windows-separator hazard as Step 5.
  3. curl -X PUT "{uploadUrl}" -H "Content-Type: application/zip" --data-binary @source.zip
  4. manage_frontend action start_from_source with deployment_id, lockfile_hash (sha256 of package-lock.json), optional build_command, output_dir, package_manager, user_env

Same lockfile_hash across deploys = cached node_modules for faster rebuilds.


Edge SSR (Next.js / Remix with server-side rendering)

Static deploys can't run server-side code. For Next.js (App Router with SSR/middleware) or Remix on Cloudflare Workers, use manage_edge_ssr instead of create_frontend_deployment + manage_frontend. Same shape, separate tool:

ActionPurpose
createReturns presigned URL for a pre-built Workers zip (framework default nextjs-edge)
startUploads + deploys; polls ≤ 60s
create_from_source / start_from_sourceServer-side build flow (defaults: npx @cloudflare/next-on-pages, output .vercel/output/static)
listHistorical edge deployments

Frameworks: nextjs-edge, remix-edge, other-edge.


If a docs/butterbase/00-state.md exists in the working directory, prefer invoking via /butterbase-skills:journey-frontend so the journey orchestrator stays in sync.

© butterbase-ai, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/deploy-frontend of butterbase-ai/butterbase-skills.

Open the folder on GitHubat commit aa8ae69

Compare with similar skills

Deploy Frontend 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.

Deploy Frontend compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Deploy Frontend this skillbutterbase-ai/butterbase-skills534—~2.8kAutomated safety check: PassMIT
Convex Self Hostingwaynesutton/markdown-site628—~1.4kAutomated safety check: PassMIT
Pinmeglitternetwork/pinme3.7k—~3.8kAutomated safety check: NotesMIT
Vercel Geist Design Systemsyhily/kobato114—~3.3kAutomated safety check: PassMIT
React Best Practicesryokun6/ryos1.3k—~2kAutomated safety check: PassMIT
Convex Quickstartwaynesutton/markdown-site628—~1.2kAutomated safety check: NotesMIT

Similar skills

  • Convex Self Hosting

    waynesutton/markdown-site

    Integrate Convex static self hosting into existing apps using the latest upstream instructions from get-convex/self-hosting every time.

    628 GitHub stars~1.4k tokensUpdated 4 mo ago
    DevOps & CloudAuto-check passed
  • Pinme

    glitternetwork/pinme

    A skill your agent uses when the user mentions "pinme", or needs to upload files, store to IPFS, create/publish/deploy websites or full-stack services (including frontend pages, backend APIs…

    3.7k GitHub stars~3.8k tokensUpdated 26 days ago
    Frontend & DesignAuto-check: notes
  • Community skill for applying the Geist design system to Vercel-inspired rendered frontend UI across React/Next.js/Vite/Astro/Svelte/Vue/HTML/CSS, Tailwind, shadcn, and Radix.

    114 GitHub stars~3.3k tokensUpdated 8 days ago
    Frontend & DesignAuto-check passed
  • React performance optimization guidelines from Vercel Engineering (vercel-labs/agent-skills).

    1.3k GitHub stars~2k tokensUpdated yesterday
    Frontend & DesignAuto-check passed
  • Convex Quickstart

    waynesutton/markdown-site

    Initialize a new Convex project from scratch or add Convex to an existing app.

    628 GitHub stars~1.2k tokensUpdated 4 mo ago
    Frontend & DesignAuto-check: notes
  • Next.js Developer

    Jeffallan/claude-skills

    Builds Next.js 14+ apps on the App Router with server components, server actions, explicit caching, SEO metadata, loading and error boundaries and Vercel deployment.

    12k GitHub stars~1.4k tokensUpdated 5 days ago
    Frontend & DesignAuto-check passed

More from butterbase-ai/butterbase-skills

All 39 skills in this repo
  • AI

    butterbase-ai/butterbase-skills

    A skill your agent uses when calling the app's AI gateway from agent tools — chat completions, embeddings, listing models, configuring defaults or BYOK, reading token/cost usage

    534 GitHub stars~1.1k tokensUpdated 3 days ago
    Auto-check passed
  • Auth Setup

    butterbase-ai/butterbase-skills

    A skill your agent uses when configuring OAuth providers (Google/GitHub/Apple/X/etc.), setting up post-login auth hooks, tuning JWT lifetimes, or generating service API keys

    534 GitHub stars~2.2k tokensUpdated 3 days ago
    Auto-check passed
  • Build App

    butterbase-ai/butterbase-skills

    A skill your agent uses when building a new Butterbase app from scratch, creating a full-stack application, or when the user asks to set up a complete backend with database, auth, and deployment

    534 GitHub stars~4.9k tokensUpdated 3 days ago
    Auto-check passed
  • Contributing

    butterbase-ai/butterbase-skills

    A skill your agent uses when contributing to the Butterbase codebase, adding new MCP tools, creating API routes, writing migrations, or understanding the monorepo architecture

    534 GitHub stars~1.5k tokensUpdated 3 days ago
    Auto-check passed
  • Debug Rls

    butterbase-ai/butterbase-skills

    A skill your agent uses when users report access denied errors, see wrong data, RLS policies are not working, or when troubleshooting Row-Level Security issues in Butterbase

    534 GitHub stars~3.5k tokensUpdated 3 days ago
    Auto-check passed
  • Durable Objects

    butterbase-ai/butterbase-skills

    A skill your agent uses when building stateful per-key actors — chat rooms, multiplayer rooms, rate limiters, long-running agents, leaderboards — that need persistent in-memory + storage state…

    534 GitHub stars~2.8k tokensUpdated 3 days ago
    Auto-check passed

Questions about Deploy Frontend

What does Deploy Frontend do?

A skill your agent uses when deploying a frontend (React, Next.js, or static HTML) to a live URL on Butterbase, or when troubleshooting deployment issues like MIME type errors or blank pages. Deploy Frontend is an agent skill from butterbase-ai/butterbase-skills.

When should I use Deploy Frontend?

Deploy Frontend fits situations like: deploying a frontend (React; static HTML) to a live URL on Butterbase; troubleshooting deployment issues like MIME type errors.

How do I install Deploy Frontend in Claude Code?

Run `npx skills add butterbase-ai/butterbase-skills --skill deploy-frontend -a claude-code`. Or copy the skill folder (skills/deploy-frontend in butterbase-ai/butterbase-skills) into .claude/skills/deploy-frontend in your project. Claude Code loads it when a task matches its description.

How do I install Deploy Frontend in Codex?

Run `npx skills add butterbase-ai/butterbase-skills --skill deploy-frontend -a codex`. Or copy the skill folder (skills/deploy-frontend in butterbase-ai/butterbase-skills) into .agents/skills/deploy-frontend in your project. Codex loads it when a task matches its description.

Can I use Deploy Frontend in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add butterbase-ai/butterbase-skills --skill deploy-frontend -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/deploy-frontend, .gemini/skills/deploy-frontend, .github/skills/deploy-frontend and .opencode/skills/deploy-frontend in your project.

What does Deploy Frontend need to run?

Going by SKILL.md and its folder, Deploy Frontend needs the command-line tools its instructions call (node, npm, curl and npx). Our summary lists: Node.js.

Does Deploy Frontend access the network?

SKILL.md names 2 domains. In commands or code: api.butterbase.ai; the agent is likely to contact it when it follows the instructions. As links in the text: npmjs.com. This is read from the text; nothing was executed.

Is Deploy Frontend safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Deploy Frontend use?

Deploy Frontend is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Deploy Frontend use?

About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Deploy Frontend?

Skills that share tags, products or a category with Deploy Frontend: Convex Self Hosting (waynesutton/markdown-site, 628 stars), Pinme (glitternetwork/pinme, 3.7k stars), Vercel Geist Design System (syhily/kobato, 114 stars) and React Best Practices (ryokun6/ryos, 1.3k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Deploy Frontend?

butterbase-ai (a GitHub organization) maintains it in butterbase-ai/butterbase-skills, which has 534 GitHub stars. The repository holds 39 skills in this directory. The repository was last updated on October 5, 2026.

Source: butterbase-ai/butterbase-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.