Publish text, markdown, JSON, files, or whole multi-file sites to brewpage.app — get a public URL instantly. No sign-up.
-
Install:
npx skills add kochetkov-ma/claude-brewcode
-
Use via slash command:
/brewpage-publish "Hello, world!" /brewpage-publish report.md /brewpage-publish '{"status": "ok"}' /brewpage-publish screenshot.png --ttl 1 /brewpage-publish ./my-site --entry index.html /brewpage-publish site.zipOr via natural language:
Publish this to brewpage Upload report.md to brewpage.app Deploy this directory as a site
Claude detects the content type, asks for a namespace and password interactively, calls the brewpage.app API, and returns a public URL. The owner token is saved to .claude/brewpage-history.md for later deletion.
- Detects content type — directory/ZIP becomes a multi-file site, single file becomes a file upload, objects/arrays become JSON, everything else becomes HTML (markdown rendered)
- Asks namespace — interactive prompt for a short, human-readable namespace (URL slug)
- Asks password — optional password protection (hides the page from the gallery)
- Calls API — sends content to brewpage.app
- Returns URL — public link ready to share
- Saves token — owner token written to
.claude/brewpage-history.md
| Content | Type | Endpoint |
|---|---|---|
| Text / markdown | HTML | POST /api/html?format=markdown |
| JSON object/array | JSON | POST /api/json |
| Local file | File | POST /api/files |
| Directory | Site | POST /api/sites (zipped on the fly) |
.zip archive |
Site | POST /api/sites |
POST /api/sites accepts only a .zip archive — there is no raw-folder upload.
- Directory (primary): point at a built static directory; the skill auto-zips it and uploads. Archive sealing keeps relative paths intact.
- Pre-built
.zip(alternative): uploaded as-is.
The auto-zip excludes .git/, .env/.env.*, node_modules/, .DS_Store, Thumbs.db, .idea/, .vscode/, .cache/, *.map and *.log — only real built assets ship; secrets and VCS data never leak into the public archive.
Built-static guard: publish build output, not sources. No .html in the directory → the skill fails and tells you to build first. A source tree (package.json + src/, no top-level .html) → the skill asks you to point at the build output (dist/, build/, out/, _site/, public/).
Entry file: --entry override > index.html > first .html alphabetically.
No trailing slash. The API returns https://brewpage.app/public/<id> without a trailing /. Appending / routes to brewpage.app's landing page and breaks the link. Share the URL exactly as printed. Site URLs cannot be verified with plain curl (the no-slash URL serves an inline JS redirect that only runs in a browser) — verify with a real browser or fetch <url>/index.html.
Default time-to-live is 15 days (max 30). Override with --ttl N (days):
/brewpage-publish report.md --ttl 1
/brewpage-publish '{"data": [1,2,3]}' --ttl 30
The owner token is never printed in conversation — the skill's bash blocks curl the API, parse the token, and append it to .claude/brewpage-history.md directly. Only the public URL is shown.
.claude/brewpage-history.md is a private file (keep it out of version control). Use the token to delete a page:
# html / json / kv
curl -X DELETE "https://brewpage.app/api/{ns}/{id}" -H "X-Owner-Token: {token}"
# site
curl -X DELETE "https://brewpage.app/api/sites/{ns}/{id}" -H "X-Owner-Token: {token}"This skill is part of brewcode — a development platform for Claude Code with infinite focus tasks, agents, quorum reviews, and knowledge persistence.
claude plugin marketplace add https://github.com/kochetkov-ma/claude-brewcode
claude plugin install brewcode@claude-brewcodeMIT