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.
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
$ npx skills add butterbase-ai/butterbase-skills --skill deploy-frontend -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install butterbase-ai/butterbase-skills deploy-frontend --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/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-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 "deploy-frontend" agent skill from https://github.com/butterbase-ai/butterbase-skills/tree/main/skills/deploy-frontend into .claude/skills/deploy-frontend/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "deploy-frontend", 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/butterbase-ai/butterbase-skills/tree/main/skills/deploy-frontendType 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 butterbase-ai/butterbase-skills --skill deploy-frontend -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install butterbase-ai/butterbase-skills deploy-frontend --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/butterbase-ai/butterbase-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/deploy-frontend .agents/skills/deploy-frontend && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "deploy-frontend" agent skill from https://github.com/butterbase-ai/butterbase-skills/tree/main/skills/deploy-frontend into .agents/skills/deploy-frontend/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "deploy-frontend", 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 butterbase-ai/butterbase-skills --skill deploy-frontend -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install butterbase-ai/butterbase-skills deploy-frontend --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/butterbase-ai/butterbase-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/deploy-frontend .cursor/skills/deploy-frontend && 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 "deploy-frontend" agent skill from https://github.com/butterbase-ai/butterbase-skills/tree/main/skills/deploy-frontend into .cursor/skills/deploy-frontend/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "deploy-frontend", 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/butterbase-ai/butterbase-skills.git --path skills/deploy-frontend--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 butterbase-ai/butterbase-skills --skill deploy-frontend -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install butterbase-ai/butterbase-skills deploy-frontend --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/butterbase-ai/butterbase-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/deploy-frontend .gemini/skills/deploy-frontend && 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 "deploy-frontend" agent skill from https://github.com/butterbase-ai/butterbase-skills/tree/main/skills/deploy-frontend into .gemini/skills/deploy-frontend/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "deploy-frontend", 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 butterbase-ai/butterbase-skills deploy-frontendInstalls 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 butterbase-ai/butterbase-skills --skill deploy-frontend -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/butterbase-ai/butterbase-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/deploy-frontend .github/skills/deploy-frontend && 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 "deploy-frontend" agent skill from https://github.com/butterbase-ai/butterbase-skills/tree/main/skills/deploy-frontend into .github/skills/deploy-frontend/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "deploy-frontend", 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 butterbase-ai/butterbase-skills --skill deploy-frontend -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install butterbase-ai/butterbase-skills deploy-frontend --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/butterbase-ai/butterbase-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/deploy-frontend .opencode/skills/deploy-frontend && 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 "deploy-frontend" agent skill from https://github.com/butterbase-ai/butterbase-skills/tree/main/skills/deploy-frontend into .opencode/skills/deploy-frontend/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "deploy-frontend", 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.
deploy-frontendA 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. 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.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit aa8ae69. 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:
nodenpmcurlnpxFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
api.butterbase.aiAlso links to:
npmjs.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
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.
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 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.
The full file from butterbase-ai/butterbase-skills at commit aa8ae69, republished under its MIT licence (© butterbase-ai). 973 words, ~2,773 tokens.
.claude/skills/deploy-frontend/SKILL.md (or your agent's skills folder).7-step workflow for deploying static frontends to Butterbase. Covers building, CORS, zipping, uploading, and verification.
| Framework | Build command | Output dir | Env prefix | Framework flag |
|---|---|---|---|---|
| React (Vite) | npm run build | dist/ | VITE_ | react-vite |
| Next.js (static) | next build | out/ | NEXT_PUBLIC_ | nextjs-static |
| Plain HTML | (none) | project root | N/A | static |
Note: Next.js requires
output: 'export'innext.config.jsto produce a static export.
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.
{
"app_id": "app_abc123",
"action": "set_env",
"vars": {
"VITE_API_URL": "https://api.butterbase.ai/v1/app_abc123",
"VITE_APP_ID": "app_abc123"
}
}VITE_NEXT_PUBLIC_REACT_APP_set_env upserts; you can call it again to add or change variables.
Run the framework-specific build command to produce the static output directory.
| Framework | Command |
|---|---|
| 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:
# For Vite
ls dist/index.html
# For Next.js static export
ls out/index.htmlIf index.html is missing, check that the build completed without errors and that the framework is configured for static output.
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:
{
"app_id": "app_abc123",
"action": "update_cors",
"allowed_origins": [
"https://your-app.pages.dev",
"http://localhost:5173"
]
}http://localhost:5173 (Vite dev server default) for local developmenthttp://localhost:3000 if using Next.js or Create React App locallyhttps:// or http://) and must not have trailing slashesCall create_frontend_deployment with the app_id and the correct framework flag from the reference table above.
{
"app_id": "app_abc123",
"framework": "react-vite"
}The response contains:
deployment_id — save this for Step 7uploadUrl — 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.
archiver — the only supported method)⚠️ Do not use
Compress-Archive, File Explorer, orzip -rfrom outside the build dir. Windows built-in tools write backslash (\) path separators, which makes the platform serve every file astext/htmland breaks JS/CSS with MIME errors. Zipping from the parent dir nestsdist/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:
npm install --save-dev archiver
mkdir -p scriptsThen save this as scripts/make-zip.mjs (copy verbatim):
#!/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:
| Framework | Command |
|---|---|
| Vite | node scripts/make-zip.mjs dist frontend.zip |
| Next.js (static) | node scripts/make-zip.mjs out frontend.zip |
| Plain HTML | node 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.
Upload the zip file to the presigned S3 URL returned in Step 4:
curl -X PUT "{uploadUrl}" \
-H "Content-Type: application/zip" \
--data-binary @frontend.zip{uploadUrl} with the full presigned URL from Step 4Call manage_frontend with action: "start_deployment" and the deployment_id from Step 4:
{
"app_id": "app_abc123",
"action": "start_deployment",
"deployment_id": "uuid-1234"
}READY (up to 5 minutes)https://your-app.pages.dev)Verification checklist:
react-vite and nextjs-static)| Problem | Cause | Fix |
|---|---|---|
| Blank page | index.html not at zip root | Re-zip with the supported script: node make-zip.mjs dist frontend.zip |
| MIME type errors / broken JS/CSS | Windows 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 403 | CORS not configured | Add deployment URL via manage_app action update_cors |
| Routes return 404 | SPA routing not set up | SPA routing is auto-handled for react-vite and nextjs-static framework flags |
| Deploy stuck in BUILDING | Build error | Check manage_frontend action list_deployments for error field |
| Upload fails or curl errors | Upload URL expired | Get a new URL by calling create_frontend_deployment again |
| Next.js pages not exporting | Missing static export config | Add output: 'export' to next.config.js and rebuild |
| Environment variables not found | Not set before build | Run manage_frontend action set_env and rebuild — env vars are baked in at build time |
If you want Butterbase to run npm install + build on the server, skip Steps 2–6 and use the source-build flow:
manage_frontend action create_from_source → returns presigned URL for a source-code zip (≤ 50 MB)make-zip.mjs (same script as Step 5), excluding build artefacts:node scripts/make-zip.mjs . source.zip \
--exclude=node_modules,.next,dist,out,.git,.turbo,.cachezip -r ../source.zip . -x ... — it has the same Windows-separator hazard as Step 5.curl -X PUT "{uploadUrl}" -H "Content-Type: application/zip" --data-binary @source.zipmanage_frontend action start_from_source with deployment_id, lockfile_hash (sha256 of package-lock.json), optional build_command, output_dir, package_manager, user_envSame lockfile_hash across deploys = cached node_modules for faster rebuilds.
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:
| Action | Purpose |
|---|---|
create | Returns presigned URL for a pre-built Workers zip (framework default nextjs-edge) |
start | Uploads + deploys; polls ≤ 60s |
create_from_source / start_from_source | Server-side build flow (defaults: npx @cloudflare/next-on-pages, output .vercel/output/static) |
list | Historical 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
Just SKILL.md in skills/deploy-frontend of butterbase-ai/butterbase-skills.
Open the folder on GitHubat commit aa8ae69
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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Deploy Frontend this skillbutterbase-ai/butterbase-skills | 534 | — | ~2.8k | Automated safety check: Pass | MIT | |
| Convex Self Hostingwaynesutton/markdown-site | 628 | — | ~1.4k | Automated safety check: Pass | MIT | |
| Pinmeglitternetwork/pinme | 3.7k | — | ~3.8k | Automated safety check: Notes | MIT | |
| Vercel Geist Design Systemsyhily/kobato | 114 | — | ~3.3k | Automated safety check: Pass | MIT | |
| React Best Practicesryokun6/ryos | 1.3k | — | ~2k | Automated safety check: Pass | MIT | |
| Convex Quickstartwaynesutton/markdown-site | 628 | — | ~1.2k | Automated safety check: Notes | MIT |
waynesutton/markdown-site
Integrate Convex static self hosting into existing apps using the latest upstream instructions from get-convex/self-hosting every time.
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…
syhily/kobato
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.
ryokun6/ryos
React performance optimization guidelines from Vercel Engineering (vercel-labs/agent-skills).
waynesutton/markdown-site
Initialize a new Convex project from scratch or add Convex to an existing app.
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.
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
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
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
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
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
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…
Categories
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.
Deploy Frontend fits situations like: deploying a frontend (React; static HTML) to a live URL on Butterbase; troubleshooting deployment issues like MIME type errors.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.