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

MITAuto-check passedDevOps & Cloud

Install Build App

skills CLI
$ npx skills add butterbase-ai/butterbase-skills --skill build-app -a claude-code

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

GitHub CLI
$ gh skill install butterbase-ai/butterbase-skills build-app --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/build-app .claude/skills/build-app && 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
build-app
GitHub stars
534
Token cost
~4.9k tokens
SKILL.md length
1,658 words
Files
1
Skills in repo
39
Repo updated
First seen
Licence
MIT

At a glance

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

  • Works in 7 steps: Create the App → Design & Apply Schema → Secure Data with RLS → …
  • Building a new Butterbase app from scratch
  • SKILL.md covers Phase 1: Create the App, Phase 2: Design & Apply Schema, Phase 3: Secure Data with RLS and Phase 4: Authentication, plus 2 more sections
  • Calls npm and curl; reaches api.butterbase.ai and s3.amazonaws.com; needs SENDGRID_API_KEY

What it does

Build App is an agent skill from butterbase-ai/butterbase-skills. Use 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

Its SKILL.md is about 4.9k 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. The repository describes itself as: Plugin for Butterbase.ai. The licence is MIT.

When your agent uses it

  • Building a new Butterbase app from scratch
  • Creating a full-stack application
  • The user asks to set up a complete backend with database

Example prompts

  • “/build-app”

Requirements

  • Node.js
  • A credential in SENDGRID_API_KEY

Workflow steps

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

  1. Create the App
  2. Design & Apply Schema
  3. Secure Data with RLS
  4. Authentication
  5. Backend Logic (Optional)
  6. Deploy Frontend
  7. Production Checklist

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:

    • npm
    • curl

    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
    • s3.amazonaws.com

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

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • SENDGRID_API_KEY

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

Context cost

Build App loads about 4.9k tokens when it runs. Until then it costs about 46 tokens; SKILL.md has 1,658 words of instructions outside code blocks.

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

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). 1,658 words, ~4,926 tokens.

Download SKILL.mdSave it as .claude/skills/build-app/SKILL.md (or your agent's skills folder).
name
build-app
description
Use 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

Prefer /butterbase-skills:journey — for a fully guided multi-stage build with preflight, planning, deployment verification, and (optionally) hackathon submission. This one-shot skill remains for users who want the legacy linear setup.

Build a Complete Butterbase App

This skill walks through all seven phases of building a production-ready Butterbase application — from provisioning a backend to deploying a live frontend. Follow each phase in order; later phases depend on artifacts (app_id, schema, RLS policies) produced by earlier ones.

Convention: every JSON body below is the argument object for the tool named in its Tool: header. When the header reads manage_schema with action: "apply", include "action": "apply" alongside the other fields when you make the call.


Phase 1: Create the App

Use init_app to provision an isolated backend with its own database and auto-generated REST API.

Tool: init_app

json
{
  "name": "my-blog"
}

Returns:

json
{
  "app_id": "app_abc123",
  "api_base": "https://api.butterbase.ai/v1/app_abc123"
}

Important: Save app_id and api_base — every subsequent tool call requires app_id.

Optional: Generate a Service API Key

If the user needs programmatic access (CI/CD pipelines, server-to-server calls, admin scripts), generate a service key now.

Tool: manage_auth_config with action: "generate_service_key"

json
{
  "name": "Production Deploy Key"
}

⚠️ The full key (bb_sk_...) is shown only once. Store it securely — it cannot be retrieved again.


Phase 2: Design & Apply Schema

Work with the user to understand their data model before writing any SQL. Ask:

  • What are the primary entities (users, posts, products, orders)?
  • Which tables are user-owned vs. shared/public?
  • What relationships exist between tables (foreign keys)?
  • Are there any boolean flags for public visibility (e.g. published, is_public)?
Preview First with dry_run_schema

Always preview schema changes before applying them.

Tool: manage_schema with action: "dry_run"

json
{
  "app_id": "app_abc123",
  "schema": {
    "tables": {
      "posts": {
        "columns": {
          "id": { "type": "uuid", "primaryKey": true, "default": "gen_random_uuid()" },
          "author_id": { "type": "uuid", "nullable": false },
          "title": { "type": "text", "nullable": false }
        }
      }
    }
  }
}

Review the generated SQL — make sure it matches intent before applying.

Apply the Schema

Tool: manage_schema with action: "apply"

Below is a complete example for a blog app with posts and comments:

json
{
  "app_id": "app_abc123",
  "schema": {
    "tables": {
      "posts": {
        "columns": {
          "id": { "type": "uuid", "primaryKey": true, "default": "gen_random_uuid()" },
          "author_id": { "type": "uuid", "nullable": false },
          "title": { "type": "text", "nullable": false },
          "body": { "type": "text" },
          "published": { "type": "boolean", "default": "false" },
          "created_at": { "type": "timestamptz", "default": "now()" }
        }
      },
      "comments": {
        "columns": {
          "id": { "type": "uuid", "primaryKey": true, "default": "gen_random_uuid()" },
          "post_id": { "type": "uuid", "nullable": false, "references": "posts.id" },
          "author_id": { "type": "uuid", "nullable": false },
          "body": { "type": "text", "nullable": false },
          "created_at": { "type": "timestamptz", "default": "now()" }
        }
      }
    }
  }
}
Verify the Schema Was Applied

Tool: manage_schema with action: "get"

json
{
  "app_id": "app_abc123"
}

Confirm every table and column is present before moving to Phase 3.

Schema Tips
  • Always include id as UUID with gen_random_uuid() default
  • Always include created_at with now() default
  • Use author_id / user_id UUID columns on user-owned tables — RLS will reference these
  • Use references: "table.column" for foreign keys (cascades must be set carefully)
  • manage_schema action apply is idempotent — safe to call again if schema is unchanged

Phase 3: Secure Data with RLS

Row-Level Security (RLS) ensures users can only access their own data. This phase is not optional for any table that holds user-generated content.

Enable User Isolation

Call create_user_isolation_policy for each user-owned table. This single call:

  1. Enables RLS on the table
  2. Creates a policy so users only see their own rows
  3. Installs a BEFORE INSERT trigger to auto-populate the user column
  4. Creates a service bypass policy for admin access

Tool: manage_rls with action: "create_user_isolation"

json
{
  "app_id": "app_abc123",
  "table_name": "posts",
  "user_column": "author_id"
}
Allow Public Reads (Optional)

For tables where some rows should be publicly visible (e.g. published blog posts), add public_read_column. This creates extra SELECT policies for both authenticated and anonymous users.

json
{
  "app_id": "app_abc123",
  "table_name": "posts",
  "user_column": "author_id",
  "public_read_column": "published"
}

Repeat for every user-owned table. For the blog example:

json
{
  "app_id": "app_abc123",
  "table_name": "comments",
  "user_column": "author_id"
}
Test RLS Isolation

After applying policies, verify they work correctly by simulating user requests.

Test SELECT as a specific user — should only see that user's rows:

Tool: select_rows

json
{
  "app_id": "app_abc123",
  "table": "posts",
  "as_role": "user",
  "as_user": "11111111-1111-1111-1111-111111111111"
}

Test SELECT as anonymous — should only see published/public rows (or nothing if no public policy):

json
{
  "app_id": "app_abc123",
  "table": "posts",
  "as_role": "anon"
}

Test INSERT as a specific user — author_id should be auto-populated by the trigger (do not include it in data):

Tool: insert_row

json
{
  "app_id": "app_abc123",
  "table": "posts",
  "data": {
    "title": "My First Post",
    "body": "Hello world!",
    "published": false
  },
  "as_role": "user",
  "as_user": "11111111-1111-1111-1111-111111111111"
}

Confirm the returned row has author_id set to 11111111-1111-1111-1111-111111111111 automatically.

Verify All Policies

Tool: manage_rls with action: "list"

json
{
  "app_id": "app_abc123"
}

Review the policy list and confirm every user-data table has at least one policy.


Phase 4: Authentication

Butterbase uses OAuth 2.0 for end-user authentication. Users sign in via a provider (Google, GitHub, Discord, etc.) and receive a JWT to authenticate subsequent API calls.

Configure an OAuth Provider

Built-in providers (google, github, discord, facebook, linkedin, microsoft, apple, x) only require three fields — URLs and scopes are auto-filled.

Tool: manage_oauth with action: "configure"

Google example:

json
{
  "app_id": "app_abc123",
  "provider": "google",
  "client_id": "123456789.apps.googleusercontent.com",
  "client_secret": "GOCSPX-xxxxxxxxxxxxxxxxxxxxxxxx",
  "redirect_uris": ["https://api.butterbase.ai/auth/app_abc123/oauth/google/callback"]
}

GitHub example:

json
{
  "app_id": "app_abc123",
  "provider": "github",
  "client_id": "Iv1.xxxxxxxxxxxxxxxx",
  "client_secret": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "redirect_uris": ["https://api.butterbase.ai/auth/app_abc123/oauth/github/callback"]
}

Redirect URI format:

https://api.butterbase.ai/auth/{app_id}/oauth/{provider}/callback

Replace {app_id} and {provider} with real values. Register this exact URI in the OAuth provider's developer console.

Setup Steps (per provider)
  1. Go to the provider's developer console (Google Cloud Console, GitHub Settings → Developer applications, etc.)
  2. Create a new OAuth app / client
  3. Set the redirect URI to the Butterbase callback URL above
  4. Copy the client_id and client_secret
  5. Call configure_oauth_provider with those credentials
Frontend Authentication Flow

Install the Butterbase SDK in the frontend:

bash
npm install @butterbase/sdk

Initialize the client and trigger OAuth sign-in:

typescript
import { createClient } from '@butterbase/sdk'

const client = createClient({
  appId: 'app_abc123',
  apiBase: 'https://api.butterbase.ai/v1/app_abc123'
})

// Initiate OAuth sign-in (redirects to provider)
await client.auth.signInWithOAuth({ provider: 'google' })

// After redirect back, get the current session
const { user, accessToken } = await client.auth.getSession()

// Use the access token in API calls — the SDK handles this automatically
const posts = await client.from('posts').select('*')
Adjust JWT Token Lifetimes (Optional)

Tool: manage_auth_config with action: "update_jwt"

json
{
  "app_id": "app_abc123",
  "accessTokenTtl": "15m",
  "refreshTokenTtlDays": 30
}

Short access tokens (15m) with longer refresh tokens (30 days) balance security and user experience.


Phase 5: Backend Logic (Optional)

Deploy serverless functions for business logic that cannot run in the browser: sending emails, processing payments, calling third-party APIs with secrets, scheduled jobs, and more.

Deploy a Function

Tool: deploy_function

Critical rules:

  • Handler must be exported as export async function handler
  • Handler must return a new Response() object — never return a plain object
  • Context provides db (Postgres), env (encrypted env vars), user (authenticated user or null)

HTTP function example:

json
{
  "app_id": "app_abc123",
  "name": "create-post",
  "description": "Create a new blog post and notify subscribers",
  "trigger": {
    "type": "http",
    "config": {
      "method": "POST",
      "path": "/create-post",
      "auth": "required"
    }
  },
  "code": "export async function handler(request, ctx) {\n  const { title, body } = await request.json();\n  if (!title) {\n    return new Response(JSON.stringify({ error: 'title is required' }), {\n      status: 400,\n      headers: { 'Content-Type': 'application/json' }\n    });\n  }\n  const result = await ctx.db.query(\n    'INSERT INTO posts (title, body, author_id) VALUES ($1, $2, $3) RETURNING *',\n    [title, body, ctx.user.id]\n  );\n  return new Response(JSON.stringify(result.rows[0]), {\n    status: 201,\n    headers: { 'Content-Type': 'application/json' }\n  });\n}"
}

Cron function example (runs daily at 9 AM UTC):

json
{
  "app_id": "app_abc123",
  "name": "daily-digest",
  "description": "Send a daily digest email to subscribers",
  "trigger": {
    "type": "cron",
    "config": {
      "schedule": "0 9 * * *",
      "timezone": "UTC"
    }
  },
  "code": "export async function handler(request, ctx) {\n  const result = await ctx.db.query(\n    'SELECT * FROM posts WHERE created_at > NOW() - INTERVAL \\'24 hours\\''\n  );\n  // send digest email with result.rows...\n  return new Response(JSON.stringify({ sent: result.rows.length }), {\n    status: 200,\n    headers: { 'Content-Type': 'application/json' }\n  });\n}"
}
Pass Secrets via Environment Variables

Never hardcode API keys. Pass them as envVars:

json
{
  "app_id": "app_abc123",
  "name": "send-email",
  "envVars": {
    "SENDGRID_API_KEY": "SG.xxxxxxxxxxxxxxxx",
    "FROM_EMAIL": "noreply@example.com"
  },
  "trigger": { "type": "http", "config": { "method": "POST", "auth": "required" } },
  "code": "export async function handler(request, ctx) {\n  const apiKey = ctx.env.SENDGRID_API_KEY;\n  // use apiKey...\n  return new Response('ok', { status: 200 });\n}"
}

To rotate secrets without redeploying code, call manage_function with action: "update_env".

Test a Function

Tool: invoke_function

json
{
  "app_id": "app_abc123",
  "function_name": "create-post",
  "method": "POST",
  "body": {
    "title": "Hello World",
    "body": "This is a test post."
  }
}
Debug with Logs

If a function returns an unexpected response or error, check logs immediately.

Tool: manage_function with action: "get_logs"

json
{
  "app_id": "app_abc123",
  "function_name": "create-post",
  "level": "error",
  "limit": 20
}

Logs include stack traces, duration, memory used, and status codes. Logs are retained for 7 days.

RLS Behavior in Functions
Invoked withRole assignedRLS enforced?
End-user JWTbutterbase_userYes — sees only user's data
Platform API keybutterbase_serviceNo — sees all data
Cron triggerbutterbase_serviceNo — sees all data

Phase 6: Deploy Frontend

Deploy the frontend as a static site. Butterbase hosts it on a CDN with SPA routing support.

Step 1: Configure CORS

Allow the frontend domain to call the API.

Tool: manage_app with action: "update_cors"

json
{
  "app_id": "app_abc123",
  "allowed_origins": [
    "http://localhost:3000",
    "https://my-app.pages.dev"
  ]
}

Add both local dev and production URLs. Update again after you know the final deployment URL.

Show full SKILL.md (670 more words)Show less
Step 2: Set Frontend Environment Variables

Tool: manage_frontend with action: "set_env"

json
{
  "app_id": "app_abc123",
  "vars": {
    "VITE_API_BASE": "https://api.butterbase.ai/v1/app_abc123",
    "VITE_APP_ID": "app_abc123"
  }
}

Prefix variables for your framework:

  • Vite: VITE_
  • Next.js: NEXT_PUBLIC_
  • Create React App: REACT_APP_
Step 3: Build the Frontend
bash
npm run build

This produces a dist/ (Vite) or out/ (Next.js static) folder.

Step 4: Create Deployment & Get Upload URL

Tool: create_frontend_deployment

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

Returns:

json
{
  "deployment_id": "dep_xyz789",
  "uploadUrl": "https://s3.amazonaws.com/...",
  "expiresIn": 900
}

Save deployment_id and uploadUrl.

Step 5: Zip and Upload

⚠️ Windows warning: Use Git Bash or WSL to create the zip. Windows built-in zip uses backslashes, which breaks MIME types and causes JS/CSS to be served as text/html.

bash
# From the project root — use Git Bash on Windows
cd dist && zip -r ../frontend.zip . && cd ..

Upload the zip:

bash
curl -X PUT "https://s3.amazonaws.com/..." \
  -H "Content-Type: application/zip" \
  --data-binary @frontend.zip

Replace the URL with the uploadUrl returned in the previous step.

Step 6: Start the Deployment

Tool: manage_frontend with action: "start_deployment"

json
{
  "app_id": "app_abc123",
  "deployment_id": "dep_xyz789"
}

This polls until the deployment reaches READY status (up to 5 minutes) and returns the live URL.

json
{
  "deployment_id": "dep_xyz789",
  "url": "https://my-app.pages.dev",
  "status": "READY"
}

Visit the URL to verify the frontend is live.

Step 7: Update CORS with Final URL

Once you have the live deployment URL, add it to CORS if it wasn't already included:

json
{
  "app_id": "app_abc123",
  "allowed_origins": [
    "http://localhost:3000",
    "https://my-app.pages.dev"
  ]
}
Framework Reference
FrameworkBuild commandZip folderframework param
React + Vitenpm run builddist/react-vite
Next.js (static)next build && next exportout/nextjs-static
Plain HTML/CSS/JSn/arootstatic
Othervariesbuild outputother

Phase 7: Production Checklist

Before announcing the app as production-ready, verify each item:

  • 1. CORS configured for production domain — update_cors includes the live frontend URL (not just localhost)
  • 2. RLS enabled on all user-data tables — manage_rls (action: "list") shows policies for every table holding user-generated content; no table is accidentally wide-open
  • 3. OAuth redirect URIs point to production — Provider developer consoles have the Butterbase callback URL registered; no localhost URIs are the only option in production
  • 4. Frontend env vars set for production API URL — VITE_API_BASE (or equivalent) points to https://api.butterbase.ai/v1/{app_id}, not a localhost URL
  • 5. Error handling in all functions — Every deploy_function handler returns appropriate HTTP status codes (400 for bad input, 401 for auth failures, 500 for unexpected errors) rather than throwing unhandled exceptions
  • 6. JWT config reviewed — manage_auth_config (action: "update_jwt") has been called with intentional token lifetimes; access token TTL is appropriate for the security sensitivity of the app (default 15m is reasonable)
  • 7. Storage quotas checked — manage_storage (action: "list") and app config reviewed; storage usage is within plan limits and allowedContentTypes are restricted to what the app actually needs
  • 8. Functions tested with invoke_function — Every HTTP function has been invoked with realistic payloads and edge cases (missing fields, invalid auth, large inputs) and returned correct responses
  • 9. Frontend deployed and verified — manage_frontend (action: "list_deployments") shows a READY deployment; the live URL loads correctly in a browser and all API calls succeed
  • 10. Monitoring and audit logs reviewed — query_audit_logs shows no unexpected login failures or suspicious activity; manage_function (action: "get_logs") shows no recurring errors in production traffic

Quick Reference: Tool → Phase Mapping

PhaseTools Used
1 — Create Appinit_app, manage_auth_config (generate_service_key)
2 — Schemamanage_schema (dry_run, apply, get)
3 — RLSmanage_rls (create_user_isolation, create_policy, enable, list), select_rows, insert_row
4 — Authmanage_oauth (configure), manage_auth_config (update_jwt)
5 — Functionsdeploy_function, invoke_function, manage_function (update_env, get_logs, list, delete)
6 — Frontendmanage_app (update_cors), manage_frontend (set_env, start_deployment, list_deployments), create_frontend_deployment
7 — Productionmanage_rls (list), query_audit_logs, manage_function (get_logs), manage_storage (list)

Common Mistakes to Avoid

Schema

  • Do not drop and recreate tables to rename a column — use manage_schema (action: "apply") with the new column name and migrate data separately
  • Do not skip action: "dry_run" — always preview before applying

RLS

  • Do not forget manage_rls (action: "create_user_isolation") — a table without RLS is readable by all authenticated users
  • Do not include author_id / user_id in INSERT bodies when a trigger is installed — it will be set automatically

Functions

  • Do not return plain objects from handlers (return { status: 200 }) — always return new Response(...)
  • Do not hardcode secrets in function code — use envVars and access via ctx.env

Frontend

  • Do not create zips on Windows with the built-in tool — use Git Bash or WSL
  • Do not forget to update CORS after deploying to the final URL

Auth

  • Do not register localhost redirect URIs in the production OAuth app — keep dev and prod OAuth apps separate, or add both URIs to the same app

© 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/build-app of butterbase-ai/butterbase-skills.

Open the folder on GitHubat commit aa8ae69

Compare with similar skills

Build App 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.

Build App compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Build App this skillbutterbase-ai/butterbase-skills534—~4.9kAutomated safety check: PassMIT
KubeSphere Multi-Tenant Managementkubesphere/kubesphere17k—~3.1kAutomated safety check: PassCustom licence
Azure PricingAzure/Copilot-Studio-and-Azure1102 repos~2.4kAutomated safety check: PassMIT
NGINX Ingress Policy CRD Guidenginx/kubernetes-ingress5.1k—~2kAutomated safety check: PassApache-2.0
Distributed Tracingwshobson/agents40k12 repos~527Automated safety check: PassMIT
ArvanCloud API Operatorerfnzdeh/arvancloud-agent-skill134—~3.9kAutomated safety check: PassMIT

Similar skills

  • Creates and queries KubeSphere users, workspaces and projects and assigns built-in roles, defaulting to least privilege and never deleting anything.

    17k GitHub stars~3.1k tokensUpdated 2 mo ago
    DevOps & CloudAuto-check passed
  • Azure Pricing

    Azure/Copilot-Studio-and-Azure

    Official

    Fetches real-time Azure retail pricing using the Azure Retail Prices API (prices.azure.com) and estimates Copilot Studio agent credit consumption.

    110 GitHub starsUsed in 2 repos~2.4k tokens
    DevOps & CloudAuto-check passed
  • NGINX Ingress Policy CRD Guide

    nginx/kubernetes-ingress

    Step-by-step checklist for adding a new Policy CRD type to the NGINX Ingress Controller, from the Go types and validation to config generation and templates.

    5.1k GitHub stars~2k tokensUpdated today
    DevOps & CloudAuto-check passed
  • Distributed Tracing

    wshobson/agents

    Implement distributed tracing with Jaeger and Tempo to track requests across microservices and identify performance bottlenecks.

    40k GitHub starsUsed in 12 repos~527 tokens
    DevOps & CloudAuto-check passed
  • ArvanCloud API Operator

    erfnzdeh/arvancloud-agent-skill

    Drives ArvanCloud's REST APIs for CDN, DNS, cloud servers, object storage and more, with helper scripts for calls, account inventory and certificates.

    134 GitHub stars~3.9k tokensUpdated 11 days ago
    DevOps & CloudAuto-check passed
  • Datadog Data Source Generator

    DataDog/terraform-provider-datadog

    Official

    Generates a Datadog Terraform provider data source from an OpenAPI operation with tfgen and opens a review-ready GitHub PR with a risk scan and testing guide.

    468 GitHub stars~2.7k tokensUpdated today
    DevOps & CloudAuto-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 4 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 4 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 4 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 4 days ago
    Auto-check passed
  • Deploy Frontend

    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

    534 GitHub stars~2.8k tokensUpdated 4 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 4 days ago
    Auto-check passed

Questions about Build App

What does Build App do?

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. Build App is an agent skill from butterbase-ai/butterbase-skills.

When should I use Build App?

Build App fits situations like: building a new Butterbase app from scratch; creating a full-stack application; the user asks to set up a complete backend with database.

How do I install Build App in Claude Code?

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

How do I install Build App in Codex?

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

Can I use Build App 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 build-app -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/build-app, .gemini/skills/build-app, .github/skills/build-app and .opencode/skills/build-app in your project.

What does Build App need to run?

Going by SKILL.md and its folder, Build App needs the command-line tools its instructions call (npm and curl) and credentials named SENDGRID_API_KEY. Our summary lists: Node.js; A credential in SENDGRID_API_KEY.

Does Build App access the network?

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

Is Build App 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 Build App use?

Build App 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 Build App use?

About 4.9k tokens (SKILL.md is roughly 20k 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 Build App?

Skills that share tags, products or a category with Build App: KubeSphere Multi-Tenant Management (kubesphere/kubesphere, 17k stars), Azure Pricing (Azure/Copilot-Studio-and-Azure, 110 stars), NGINX Ingress Policy CRD Guide (nginx/kubernetes-ingress, 5.1k stars) and Distributed Tracing (wshobson/agents, 40k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Build App?

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.