Skip to content
Back to skills

Huozi

ASecurity

Publish Markdown and HTML to huozi.app as beautiful, shareable web pages. Register, manage, and publish — all through conversation.

  • 2 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 9, 2026
content-marketingjavascriptgojavabashexpressapi

Works with

  • cli
  • api

Security analysis

A100/100

Scanned September 9, 2026

npx -y skills add Lord1Egypt/awesome-skill-forge --skill huozi --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Huozi?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Huozi
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/lord1egypt-huozi/badge)](https://www.skillsdirectory.com/skills/lord1egypt-huozi)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: huozi
description: Publish Markdown and HTML to huozi.app as beautiful, shareable web pages. Register, manage, and publish — all through conversation.
homepage: https://huozi.app
user-invocable: true
metadata: {"openclaw":{"requires":{"env":[],"bins":["curl"]},"primaryEnv":"HUOZI_API_KEY","emoji":"📄","os":["darwin","linux","win32"]}}
---

# Huozi — Markdown & HTML Publishing for Agents

Publish Markdown or HTML content to [huozi.app](https://huozi.app) as shareable web pages. One API call, instant publishing.

## Onboarding

**IMPORTANT:** When this skill is first loaded, check if `HUOZI_API_KEY` is set. If NOT, do NOT just show a link — immediately start the interactive registration flow below. Guide the user through it conversationally, step by step.

### Step 1 — Ask for email

Tell the user: "Let's set up your Huozi account. What's your email?" Then call:

```bash
curl -s -X POST https://huozi.app/api/v1/auth/signup \
  -H "Content-Type: application/json" \
  -d '{"email": "<user_email>"}'
```

Tell the user: "A verification code has been sent to your email. Please check your inbox and tell me the code."

### Step 2 — Verify the code

When the user provides the code:

```bash
curl -s -X POST https://huozi.app/api/v1/auth/verify \
  -H "Content-Type: application/json" \
  -d '{"email": "<user_email>", "code": "<code>"}'
```

Save the returned `access_token`.

### Step 3 — Create workspace

Suggest a slug from the user's email username (e.g. `alice@gmail.com` → `alice`). Tell the user:

> "Your pages will be published at **huozi.app/alice/** — would you like to change this, or is this OK?"

After the user confirms (or gives a new slug):

```bash
curl -s -X POST https://huozi.app/api/v1/auth/setup \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{"workspace_slug": "<confirmed_slug>"}'
```

### Step 4 — Done!

The response contains `api_key` and `workspace.url`. Tell the user:

> "All set! Your workspace is **huozi.app/<slug>/**. To save your API key for future sessions, run:
> `export HUOZI_API_KEY=<api_key>`
> You can now publish Markdown anytime — just tell me what to publish."

## Publishing Markdown

Publish or update a Markdown page:

```bash
curl -s -X POST https://huozi.app/api/v1/pages \
  -H "Authorization: Bearer <api_key>" \
  -H "Content-Type: application/json" \
  -d '{"title": "<title>", "slug": "<slug>", "content": "<markdown>"}'
```

- `slug` is optional — auto-generated from title if omitted. Keep under 8 words (e.g. `weekly-report-apr-14`)
- Same slug = upsert (update existing page)
- Response includes the public `url`

## Publishing HTML

Publish a static HTML page — perfect for landing pages, dashboards, reports with custom styling:

```bash
curl -s -X POST https://huozi.app/api/v1/pages \
  -H "Authorization: Bearer <api_key>" \
  -H "Content-Type: application/json" \
  -d '{"title": "<title>", "slug": "<slug>", "content": "<html>", "content_type": "html"}'
```

- Set `content_type` to `"html"` (defaults to `"markdown"` if omitted)
- Same slug = upsert, versioning, and access tokens work identically to Markdown pages

### HTML Input Format

- **Full document**: `<html><head>...</head><body>...</body></html>` — head is parsed for `<style>` and `<meta>`, body is rendered
- **Fragment**: any HTML without `<html>`/`<head>` tags — treated as body content directly
- `<meta>` OG tags (`og:title`, `og:description`, `og:image`) and `<meta name="description">` are extracted as fallback metadata; API fields (`title`, `description`) always take priority

### HTML Constraints — What Is Allowed

| Category | Allowed | Blocked |
|----------|---------|---------|
| **HTML tags** | All standard tags: `div`, `span`, `table`, `form`, `svg`, `img`, `video`, `audio`, etc. | `<script>`, `<iframe>`, `<embed>`, `<object>`, `<link rel="stylesheet">` |
| **CSS** | `<style>` blocks, inline `style=""`, all standard properties (flexbox, grid, animations, transforms, etc.) | `@import`, `expression()`, `javascript:` in `url()`, `-moz-binding`, `behavior:` |
| **JavaScript** | None | All `<script>` tags stripped; all event handlers (`onclick`, `onerror`, `onload`, etc.) stripped |
| **URLs** | `http:`, `https:`, `mailto:`, `tel:` | `javascript:` (rewritten to `#`), `data:` in CSS `url()` |
| **Images** | `<img>` with `http:`/`https:`/`data:` src | — |
| **SVG** | Full inline SVG support (path, circle, rect, gradient, filter, etc.) | External SVG via `<img src>` works; `<use href="external.svg">` does not |
| **Forms** | Display only — `<input>`, `<select>`, `<textarea>`, `<button>` render but `action`/`method` are stripped | No form submission |
| **External resources** | Images (`<img src>`), video/audio (`<video>`, `<audio>`) via `http:`/`https:` | External CSS (`<link>`), external JS, `@import` |
| **Content size** | Max 2MB per page | — |

### Best Practices for HTML Pages

- **Include all CSS inline** — use `<style>` blocks in `<head>` or inline `style=""` attributes; external stylesheets are not supported
- **Use system fonts or web-safe fonts** — `@import` for Google Fonts is blocked; use `font-family: system-ui, sans-serif` or embed fonts as base64 `@font-face` if essential
- **Embed small images as data URIs** — for icons/logos under ~50KB; larger images should be hosted externally and referenced via `https://` URLs
- **Design responsive layouts** — pages are served full-width; use `max-width` on a container and CSS media queries for mobile support
- **Set a background color** — the page has no default background; always set `background` on `body` or a wrapper element

## Other Operations

| Action | Method | Endpoint |
|--------|--------|----------|
| List pages | GET | `/api/v1/pages` |
| Get page | GET | `/api/v1/pages/<slug>` |
| Update page | PUT | `/api/v1/pages/<slug>` |
| Delete page | DELETE | `/api/v1/pages/<slug>` |

All require `Authorization: Bearer <api_key>` header. Base URL: `https://huozi.app`

## Examples

- "帮我把这个 markdown 发布到 huozi" → publish content, return URL
- "发布我的周报" → generate slug like `weekly-report-2026-04-14`, publish
- "更新 huozi 上的 hello 页面" → PUT to update
- "帮我做一个 landing page 发布到 huozi" → generate HTML, publish with `content_type: "html"`
- "把这个报告做成网页发布" → generate styled HTML page, publish

## Notes

- API keys start with `hz_` prefix
- No password needed — registration uses email OTP only
- Markdown: supports GFM, task lists, code highlighting, math (KaTeX)
- HTML: full CSS + SVG + images, no JavaScript — see constraints table above
- Content limit: 2MB per page for both Markdown and HTML
- Use `curl` via Bash to make API calls
- When generating HTML for the user, always produce self-contained pages with all CSS inlined
- **Full API reference (agent-friendly):** https://huozi.app/docs4agent
- Setup options: https://huozi.app/start
- Human-readable docs: https://huozi.app/docs

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.