---
name: hashgraph-online-book-publish
description: "Phase 5: Publishing. Convert to EPUB/PDF/MOBI/TXT/Markdown, cover design, metadata, title candidates, KDP checklist, marketing plan."
license: "Apache-2.0"
metadata:
  decimalai-skill-id: "01f06878-f5a9-4fc8-ba78-3c077264d20b"
  decimalai-version-id: "90ca1b21-bf08-4936-ae00-13d2d29988fe"
  decimalai-version: "1"
  decimalai-body-sha256: "69bf3dba2ca824e194f43a82dce16ba821188c914b14ca800d24a4ec9076b110"
  decimalai-name: "hashgraph-online/book-publish"
  decimalai-format: "1"
  decimalai-invocation: "model"
  decimalai-category: "documentation"
  decimalai-source: "https://app.decimal.ai/s/hashgraph-online-book-publish@1/SKILL.md"
---
# Phase 5: Publishing

**Formats** (requires `pandoc`, optional `calibre` for MOBI):
- **EPUB**: `pandoc drafts/ch*.md -o publish/book.epub --toc --toc-depth=2 --metadata-file=publish/metadata.yaml --css=publish/style.css`
- **PDF**: `pandoc` with 6x9in geometry, mirror margins, CJK font support
- **MOBI**: `ebook-convert book.epub book.mobi` (optional, Kindle supports EPUB)
- **TXT**: `pandoc --to plain --wrap=none`
- **MD**: `pandoc --to markdown --standalone`

**Metadata**: `publish/metadata.yaml` (title, subtitle, author, lang, keywords, description).

**Titles**: 22+ candidates across 5 categories (descriptive, emotional, question, metaphor, provocative).

**Agents**: `cover-designer` → concepts + image prompts. `illustrator` → interior illustration plan (see `/book-illustrate`). `marketing-expert` → personas, channels, 12-week calendar, launch checklist.

Output: `publish/` directory with all formats + metadata + title-candidates.md + cover/concepts.md + illustrations/plan.md + marketing-plan.md.

Gate: EPUB + PDF generated, metadata complete, 22+ titles, cover concepts, marketing plan.

## Pre-processing

**Poetry line breaks**: If genre is `poetry` or `poetry-essay`, before running pandoc, prepend two trailing spaces (`  `) to each non-empty line within poem sections (content under `##` headings, before `###` subheadings). This forces pandoc to preserve line breaks instead of merging into paragraphs.

**Cover image guard**: Before running pandoc, check if the cover image file referenced in `metadata.yaml` (typically `cover.png`) actually exists. If missing, temporarily remove the `cover-image` field from metadata, run pandoc, then restore the field. This prevents pandoc from failing when cover hasn't been generated yet.


## Post-Completion

Update the project dashboard status:

```bash
node {PLUGIN_ROOT}/velith.mjs scan [project-dir] --plugin-root={PLUGIN_ROOT}
```
