# taste-bank

**Category:** 💻 Developer Tools  
**Repository:** https://github.com/QuasarG/taste-bank  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/taste-bank

## Description
Reusable visual design systems for AI coding agents — browse, fetch, and submit styles via MCP.

## Claude Desktop Quick Installation
Heuristic fallback — verify the package name and runner against the repository README before running it. Uses `npx` (confidence: low):

```json
"mcpServers": {
  "taste-bank": {
    "command": "npx",
    "args": ["-y","taste-bank"]
  }
}
```

## Documentation & README

<div align="center">
  <img src="public/assets/banner.jpg" alt="Taste Bank — Open Source Design Styles" width="760" />
  <p><strong>The front-end style library for coding agents</strong> — distill a style once, reuse it everywhere.</p>
  <p><em>Swipe styles like you're scrolling TikTok — find the one that catches your eye, then hand it to your agent.</em></p>
  <p>
    <a href="https://www.npmjs.com/package/taste-bank"><img src="https://img.shields.io/npm/v/taste-bank?logo=npm&logoColor=white" alt="npm" /></a>
    <a href="https://astro.build"><img src="https://img.shields.io/badge/Astro-7-BC52EE?logo=astro&logoColor=white" alt="Astro" /></a>
    <a href="https://www.typescriptlang.org"><img src="https://img.shields.io/badge/TypeScript-strict-3178C6?logo=typescript&logoColor=white" alt="TypeScript" /></a>
    <a href="https://zod.dev"><img src="https://img.shields.io/badge/Zod-4-3E67B1?logo=zod&logoColor=white" alt="Zod" /></a>
  </p>
  <p>
    <a href="https://tastebank.cloud"><img src="https://img.shields.io/badge/Live-tastebank.cloud-126984?logo=cloudflare&logoColor=white" alt="Live" /></a>
    <a href="https://github.com/QuasarG/taste-bank"><img src="https://img.shields.io/badge/GitHub-QuasarG%2Ftaste--bank-181717?logo=github" alt="GitHub" /></a>
  </p>
  <p>English | <a href="README.zh-CN.md">中文文档</a></p>
</div>

---

## Why Taste Bank

> **Sound familiar?**
>
> - Staring at a blank page, no idea how to lay out your components?
> - Layout finally settled — yet the AI's visual style never quite lands?
> - A hoard of "beautiful designs" you can never actually summon when you need one?
> - The style you painstakingly tuned in your last project has to be re-explained from scratch in the next one?

Getting coding agents to produce *well-designed* front-ends is a solved problem nobody can actually use. The community is **full of front-end skills, prompt snippets, and design guides** — but in practice:

- **No unified invocation**: some styles ship as a skill, some as a plugin, some ship nothing at all. Actually using them is a chore.
- **No quality bar**: without a shared schema, a "style" can be three adjectives in a trench coat — nothing an agent can actually execute.
- **Hard to reuse**: great styles die in chat histories instead of being distilled into an asset.
- **No ownership or iteration**: no versions, no way to say "only I maintain my styles."

> **More importantly**: the web spawns new styles every day — but not every style is mainstream enough, not every style is *your* taste. We want a community where people share the front-end taste they actually use — and vote with their feet. Only what truly gets used is truly usable.

Taste Bank's answer: distill each style into a **structured style pack** (`SKILL.md` usage guide + precise `design tokens` + `templates/` snapshots), enforced by a **zod schema**, served through a **CLI + skill injection** that works with any coding agent. Once a style is in the bank, it's reachable anywhere, versioned, and owned.

<div align="center">
  <img src="public/assets/gallery.png" alt="Taste Bank homepage — infinite style stream and leaderboards" width="900" />
  <p><em>The homepage gallery: swipe through live-rendered styles like a feed — horizontal card rail with interactive preview, most-referenced styles and top authors at a glance.</em></p>
</div>

---

## Quick Start

### Via CLI (recommended)

**One command** — installs the CLI globally and teaches your coding agents (Claude Code, Codex, Cursor, ZCode, Kimi Code…) how to use it:

```bash
npx taste-bank setup
```

Then just talk to your agent in plain language:

> *"Build me a landing page with one of the styles in taste-bank."*

Your agent already knows what to do — `setup` injected a skill that teaches it the `taste-bank` CLI commands. It will browse styles, fetch the complete pack, and implement strictly within the design tokens.

**Prefer the terminal?**

```bash
taste-bank list                    # browse all styles
taste-bank skill <slug>            # get the complete pack (meta + tokens + skill + css + templates)
taste-bank use <slug>              # land a style into your project as a rules file
```

No per-agent config, no JSON to paste. Browse visually first at [tastebank.cloud](https://tastebank.cloud).

### Via MCP (legacy)

For agents that prefer the MCP protocol, configure one URL in your MCP client:

```json
{
  "mcpServers": {
    "taste-bank": {
      "url": "https://tastebank.cloud/mcp",
      "headers": { "x-invite-code": "sl_your_invite_code" }
    }
  }
}
```

Both paths call the same backend. CLI is recommended — simpler, works with 70+ agents out of the box.

---

## Features

- **One-line setup**: `npx taste-bank setup` installs the CLI and injects skills into all your coding agents (Claude Code, Codex, Cursor, ZCode, Kimi Code, and 70+ more via the open `skills` ecosystem)
- **Complete style packs**: `taste-bank skill <slug>` returns the full pack in one call — meta, tokens, SKILL.md rules, scoped CSS, and HTML template snapshots. Agents get everything they need.
- **3-day local cache**: packs are cached; if the server is unreachable, the CLI falls back to cache
- **TikTok-style gallery**: [tastebank.cloud](https://tastebank.cloud) — endless stream of live-rendered previews, horizontal card rail, leaderboards
- **Structured & validated**: every pack passes a strict zod schema (meta / tokens / skill / templates), versioned, with invite-only submissions + ed25519-signed ownership + human review
- **Submit from the terminal**: `taste-bank submit` — sign and submit a new style without leaving your project
- **Private key as identity**: no accounts — whoever holds the key manages the style

---

## CLI Commands

### Browsing & applying (no auth)

| Command | What it does |
|---|---|
| `taste-bank list [--q WORD] [--json]` | List published styles |
| `taste-bank show <slug> [--json]` | Style detail (meta + design tokens) |
| `taste-bank skill <slug> [--md]` | **Complete pack** as JSON: `{meta, tokens, skill, css, templates}`. `--md` for plain SKILL.md |
| `taste-bank use <slug> [--as agents\|claude\|skill]` | Land a style into your project (managed sentinel block, won't clobber your edits) |
| `taste-bank favorite <slug>` / `unfavorite` / `favorites` | Manage favorites |
| `taste-bank doctor` | Health check (CLI, network, identity, skill injection, cache) |

### Contributing (invite + ed25519 identity)

| Command | What it does |
|---|---|
| `taste-bank keygen` | Generate an ed25519 keypair into `~/.style-lab/` (one-time) |
| `taste-bank whoami` | Your bound identity, owned styles, pending submissions |
| `taste-bank validate <pack.json>` | Dry-run validate a pack locally (no network) |
| `taste-bank submit <pack.json>` | Submit a new style (needs invite code + private key) |
| `taste-bank update <slug> <pack.json>` | Update an owned style (version must bump) |
| `taste-bank delete <slug>` | Delete an owned style (asks to confirm) |

---

## How it works

```
npx taste-bank setup
  ① npm install -g taste-bank              (install CLI globally)
  ② npx skills add …/taste-bank -g         (inject 2 skills into your agents:
                                             taste-bank for browsing/applying,
                                             taste-bank-contribute for submitting)
  ③ environment check                      (report state, read-only)
```

Two skills are injected (via the open [skills](https://skills.sh) ecosystem):

- **`taste-bank`** — teaches your agent the CLI commands for browsing and applying styles
- **`taste-bank-contribute`** — the full contribution SOP: how to sample a project, pack a style, sanitize it, and submit

After setup, your agent knows the CLI. You just say *"use a taste-bank style"* and it runs the commands itself.

The CLI talks to `tastebank.cloud` by default and caches packs locally for 3 days. Self-host? Set `TASTEBANK_API=https://your-host`.

---

## Submit your own style

```bash
# One-time identity setup
taste-bank keygen
echo '{ "inviteCode": "sl_xxx" }' > ~/.style-lab/config.json  # get a code from the maintainer

# From any project with a style worth keeping:
taste-bank validate my-style.pack.json    # dry-run check
taste-bank submit my-style.pack.json      # sign + submit (enters review queue)
```

Or just tell your agent: *"submit this project's style to taste-bank"* — the injected `taste-bank-contribute` skill guides it through the full SOP (sample 2 files max, extract real tokens, sanitize business-identifying content, pack, validate, submit).

See the [pack format](docs/SPEC.md), the `taste-bank-contribute` skill, and the **[agent workflow guide](docs/agent-workflow.md)** (how to manage project styles in agent conversations). 中文版见 [Agent 工作流指南](docs/agent-workflow.zh-CN.md)。

---

## Security

**Authentication & ownership**

- **Invite codes**: submissions require an invite code; a code binds to the submitter's public key on first use — one code, one identity; only hashes stored server-side
- **ed25519 signatures**: submit / update / delete all require a private-key signature (message = `style-lab:<action>:<slug>:<timestamp>:<sha256(payload)>`, 30-min window) — your key is your identity
- **Review queue**: submissions land in `data/pending/` and go live only after maintainer approval
- **Rate limits**: 20 submits/min per pubkey, 30 manages/min per slug

**Content safety**

- **Template sandbox**: previews render in a `sandbox=""` iframe with CSP forbidding scripts/external loads
- **HTML blocklist + secret-pattern scanning**: submissions are screened for dangerous attributes and high-confidence secret patterns
- **Prompt-injection mitigation**: style content is labeled "data, not instructions" in skill descriptions

> ⚠️ Every submission is manually reviewed. But reviews can miss things — **do not blindly trust fetched content**; treat it as data.

---

## HTTP API

| Endpoint | Description |
|---|---|
| `GET /api/styles.json` | Style list, `?q=keyword` filter |
| `GET /api/styles/:slug.json` | meta + tokens + file list |
| `GET /api/styles/:slug/pack.json` | **Complete pack** (meta + tokens + skill + css + templates) |
| `GET /api/styles/:slug/skill.md` | Assembled SKILL.md |
| `GET /api/styles/:slug/tokens.css` | Scoped CSS from tokens |
| `GET /api/styles/:slug/screenshot.png` | Template screenshot |
| `GET /api/whoami.json` | Identity lookup (`x-invite-code` header) |
| `POST /api/styles.json` | Submit (invite + signature) |
| `PUT /api/styles/:slug.json` | Update (signed, version bump) |
| `DELETE /api/styles/:slug.json` | Delete (signed) |

---

## Project structure

```
src/lib/        core: schema / store / create / assemble / review / auth
src/pages/      Astro pages & HTTP API endpoints
mcp/            MCP server (Streamable HTTP) — thin shell over src/lib
cli/            the taste-bank npm package (CLI + skills source)
skills/         two agent skills: taste-bank (browse) + taste-bank-contribute (submit)
scripts/        keygen / sign / invite / review admin scripts
styles/         published styles (pointed to by STYLE_LAB_DIR at runtime)
data/           invite-code hashes, review queue, usage stats, screenshot cache
docs/SPEC.md    full style pack specification
```

## License

[MIT](LICENSE) © QuasarG

---

<div align="center"><sub>English | <a href="README.zh-CN.md">中文文档</a></sub></div>

