Skip to content
Development
Skill

/vibes

Self-contained app generator — invoke this skill directly, do not decompose into sub-steps. Generates React web apps with TinyBase reactive data store. Use when creating new web applications, adding components, or working with real-time data. Ideal for quick prototypes and

From plugin
vibes
13311 skills2 hooks
Install
$ npx -y skills add popmechanic/VibesOS --skill vibes --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/vibes

Context preview

The summary Claude sees to decide when to auto-load this skill.

Self-contained app generator — invoke this skill directly, do not decompose into sub-steps. Generates React web apps with TinyBase reactive data store. Use when creating new web applications, adding components, or working with real-time data. Ideal for quick prototypes and

SKILL.md

vibes.SKILL.md
name: vibes
argument-hint: "[prompt]"
description: Self-contained app generator — invoke this skill directly, do not decompose into sub-steps. Generates React web apps with TinyBase reactive data store. Use when creating new web applications, adding components, or working with real-time data. Ideal for quick prototypes and single-page apps that need real-time data sync.
license: MIT
allowed-tools: Read, Write, Edit, Glob, Grep, Bash, AskUserQuestion
metadata:
  author: "Marcus Estes"

> **Plan mode**: If you are planning work, this entire skill is ONE plan step: "Invoke /vibes:vibes". Do not decompose the steps below into separate plan tasks.

**Display this ASCII art immediately when starting:**

░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░▒▓███████▓▒░░▒▓████████▓▒░░▒▓███████▓▒░
░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░      ░▒▓█▓▒░
 ░▒▓█▓▒▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░      ░▒▓█▓▒░
 ░▒▓█▓▒▒▓█▓▒░░▒▓█▓▒░▒▓███████▓▒░░▒▓██████▓▒░  ░▒▓██████▓▒░
  ░▒▓█▓▓█▓▒░ ░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░             ░▒▓█▓▒░
  ░▒▓█▓▓█▓▒░ ░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░             ░▒▓█▓▒░
   ░▒▓██▓▒░  ░▒▓█▓▒░▒▓███████▓▒░░▒▓████████▓▒░▒▓███████▓▒░

Quick Navigation

  • [Terminal or Editor](#step-0-terminal-or-editor-ui) — Choose how to build (ask first!)
  • [Pre-Flight Check](#pre-flight-check) — Validate credentials before coding
  • [Core Rules](#core-rules) — Essential guidelines for app generation
  • [Generation Process](#generation-process) — Design reasoning and code output
  • [Assembly Workflow](#assembly-workflow) — Build the final app
  • [UI Style & Theming](#ui-style--theming) — OKLCH colors and design patterns
  • [TinyBase Data API](#tinybase-data-api) — Hook reference, patterns, architectures
  • [AI Features](#ai-features-optional) — Optional AI integration
  • [Bug Prevention](#patterns-that-prevent-bugs) — Quick checklist
  • [Extended Docs](#when-to-read-extended-docs) — Reference files for deeper patterns
  • [Deployment Options](#deployment-options) — Where to deploy

---

Vibes DIY App Generator

Generate React web applications using TinyBase for reactive data with real-time sync.

Auth Check (silent — only prompt if needed)

Before asking Terminal or Editor, check for cached auth:

VIBES_ROOT="${CLAUDE_PLUGIN_ROOT:-$(dirname "$(dirname "${CLAUDE_SKILL_DIR}")")}"
bun --input-type=module -e "
import { readCachedTokens, isTokenExpired } from '$VIBES_ROOT/scripts/lib/cli-auth.js';
const tokens = readCachedTokens();
if (tokens && !isTokenExpired(tokens.expiresAt)) {
  console.log('AUTH_OK');
} else {
  console.log('AUTH_NEEDED');
}
"
  • If `AUTH_OK` → proceed silently to "Terminal or Editor?" (do not mention auth)
  • If `AUTH_NEEDED` → ask: "To deploy apps, you'll need a Vibes account. Sign in now? (A browser window will open for Pocket ID — takes about 10 seconds.)"
  • If yes:
    VIBES_ROOT="${CLAUDE_PLUGIN_ROOT:-$(dirname "$(dirname "${CLAUDE_SKILL_DIR}")")}"
    bun --input-type=module -e "
    import { getAccessToken } from '$VIBES_ROOT/scripts/lib/cli-auth.js';
    import { OIDC_AUTHORITY, OIDC_CLIENT_ID } from '$VIBES_ROOT/scripts/lib/auth-constants.js';
    const tokens = await getAccessToken({ authority: OIDC_AUTHORITY, clientId: OIDC_CLIENT_ID });
    if (tokens) console.log('Signed in successfully!');
    "

Confirm success, then proceed to "Terminal or Editor?"

  • If no → proceed anyway (auth will be needed at deploy time)

---

Step 0: Terminal or Editor UI?

**This is the very first question — ask before anything else (after auth check above).** Do not check .env, credentials, or project state before asking this question. Do not invoke any other skill before asking this question. If Editor is chosen, skip all pre-flight checks — the editor handles everything.

Ask the user: > "How do you want to build? **Editor** (opens a browser UI with live preview, chat, and deploy button) or **Terminal** (I'll generate and deploy from here)?"

Present Editor as the first/recommended option.

  • **If Editor**: Start the editor server and **END YOUR TURN. Do not ask any more questions. Do not continue to Pre-Flight Check or any step below.** The editor UI handles the entire workflow — setup, generation, preview, deploy.

Launch the editor server:

  VIBES_ROOT="${CLAUDE_PLUGIN_ROOT:-$(dirname "$(dirname "${CLAUDE_SKILL_DIR}")")}"
  bun "$VIBES_ROOT/scripts/server.ts" --mode=editor --prompt "USER_PROMPT_HERE"

If no prompt was given, omit `--prompt`:

  VIBES_ROOT="${CLAUDE_PLUGIN_ROOT:-$(dirname "$(dirname "${CLAUDE_SKILL_DIR}")")}"
  bun "$VIBES_ROOT/scripts/server.ts" --mode=editor

Tell the user: "Open http://localhost:3333 — the editor handles everything from here." **Your job is done. Stop. Do not read further. Do not proceed to any step below.**

  • **If Terminal**: Continue with the project folder selection and normal generation workflow below.

---

⛔ EVERYTHING BELOW IS TERMINAL MODE ONLY

**If the user chose Editor above, STOP. Do not read or execute anything below this line.** **The editor UI handles setup, generation, preview, and deployment.**

---

Project Folder

Before generating, ask the user where to save the project:

> "Where should this project live? Enter a path or press Enter for the default (`~/VibesOS/{app-slug}/`)."

  • If the user provides a path, use it as the project directory
  • If they press Enter, use `~/VibesOS/{app-slug}/` (the slug is derived from the prompt later — for now just note the preference)
  • Create the directory if it doesn't exist
VIBES_ROOT="${CLAUDE_PLUGIN_ROOT:-$(dirname "$(dirname "${CLAUDE_SKILL_DIR}")")}"
mkdir -p "$PROJECT_DIR"

After the directory is ready, initialize `vibes.json`:

bun -e "
  const { initVibesJson } = await import('$VIBES_ROOT/scripts/lib/vibes-json.js');
  initVibesJson('$PROJECT_DIR');
"

Use `$PROJECT_DIR` as the working directory (`cwd`) for all subsequent code generation. The generated `app.jsx` and assembled `index.html` will be written here.

Read more
Ships withvibes

Instantly make your own small multi-user apps, without a backend. For apps made with Vibes, the front-end is the app.

Get the whole plugin
Stats
133
Stars
5
Forks
Maintained
Maintenance
HTML
Language
MIT
License
1mo ago
Last commit
8mo ago
Created

Repo: popmechanic/VibesOS

Other skills on vibes.