Skip to content
Back to skills

Preview

ASecurity

Render vault notes as styled HTML and open in browser. Turn markdown docs, decisions, progress reports into readable previews. Use for "/preview docs/project-a/checkout-flow.md", "/preview progress all", "/preview decide auth-approach", or when user wants to see a doc before sharing.

  • 133 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 6, 2026
businessshellbashapi

Works with

  • api

Security analysis

A100/100

Scanned September 6, 2026

npx -y skills add kv0906/pm-kit --skill preview --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Preview?

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

Security grade badge for Preview
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/kv0906-preview/badge)](https://www.skillsdirectory.com/skills/kv0906-preview)

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: preview
description: Render vault notes as styled HTML and open in browser. Turn markdown docs, decisions, progress reports into readable previews. Use for "/preview docs/project-a/checkout-flow.md", "/preview progress all", "/preview decide auth-approach", or when user wants to see a doc before sharing.
allowed-tools: Read, Write, Edit, Bash, Glob, Grep, TaskCreate, TaskUpdate, TaskList, TaskGet
user-invocable: true
---

# /preview — HTML Preview

Render vault content as styled HTML for browser viewing. Markdown stays the source of truth; HTML is the presentation layer.

## Context

Today's date: `!date +%Y-%m-%d`

Config: @_core/config.yaml
Preview rules: @.claude/rules/preview-formats.md
HTML shells: @_templates/html/
Processing logic: @_core/PROCESSING.md

## Usage

```
/preview docs/project-a/checkout-flow.md
/preview decisions/project-a/2026-06-29-auth-approach.md
/preview progress all
/preview progress project-a --week
/preview decide auth-approach
/preview block api-rate-limit
/preview meet 2026-06-29-sync-sprint-review
/preview reports/2026-06-29-progress-all.md
```

## Flags

| Flag | Effect |
|------|--------|
| `--with-links` | Inline first paragraph from linked notes |
| `--no-open` | Write HTML only, do not open browser |
| `--shell memo\|prd\|status\|executive` | Force template shell |
| `--link` | Write `preview:` path to source note frontmatter |

## Session Task Progress

```
TaskCreate: "Resolve preview source"
  activeForm: "Resolving preview source..."

TaskCreate: "Render HTML"
  activeForm: "Rendering HTML preview..."

TaskCreate: "Open and verify"
  activeForm: "Opening preview in browser..."
```

## Processing Steps

### 1. Parse Input

Determine source mode:

| Input pattern | Action |
|---------------|--------|
| Path to `.md` file | Read that file directly |
| `progress {project\|all}` | Synthesize like `/progress`, use status shell |
| `decide {slug}` | Glob `decisions/*/*{slug}*.md`, pick latest |
| `block {slug}` | Glob `blockers/*/*{slug}*.md` |
| `meet {slug}` | Glob `meetings/*{slug}*.md` |
| `doc {project} {slug}` | Read `docs/{project}/{slug}.md` |

If ambiguous, ask user to clarify path.

### 2. Gather Content

**File mode:** Read markdown + frontmatter.

**Synthesis mode (`progress`):** Follow `/progress` gather steps:
- Scan dailies, blockers, docs, decisions for project/timeframe
- Build structured sections: Shipped, In Progress, Blockers, Decisions
- Count metrics for status shell

### 3. Select HTML Shell

Auto-detect from source:

| Source | Shell |
|--------|-------|
| `docs/` | `shell-prd.html` |
| `decisions/`, `meetings/`, `blockers/` | `shell-memo.html` |
| `progress` synthesis | `shell-status.html` |
| `reports/*executive*` | `shell-executive.html` |
| Other | `shell-memo.html` (default) |

Override with `--shell` flag.

### 4. Convert Markdown → HTML

- Remove YAML frontmatter block
- Map frontmatter to shell vars: `project`, `status`, `date`, `title` (from H1 or filename)
- Convert body markdown to semantic HTML
- Resolve `[[wikilinks]]` per preview-formats.md
- Escape user content in HTML (no XSS — literal text only)

### 5. Write Output

- Ensure `reports/previews/` exists
- Filename: `{date}-{slug}.html` (slug from source file or synthesis type)
- Load shell template, replace all `{{PLACEHOLDER}}` tokens
- Write complete self-contained HTML file

### 6. Open Browser

Unless `--no-open`:

```bash
# macOS
open "reports/previews/{filename}.html"

# Linux
xdg-open "reports/previews/{filename}.html" 2>/dev/null

# Windows
start "" "reports/previews/{filename}.html"
```

### 7. Optional: Link Back to Source

If `--link` and source is a single vault note:
- Edit source frontmatter: `preview: reports/previews/{filename}.html`

### 8. Append Vault Log

Append to `01-index/_vault-log.md`:
- Action: `preview`
- Files: output HTML path + source path
- Details: shell used, synthesis or file mode

## Output

```
Preview ready: reports/previews/2026-06-29-checkout-flow.html
Shell: prd
Source: docs/project-a/checkout-flow.md
Opened in browser.
```

## Error Handling

| Situation | Action |
|-----------|--------|
| Source file not found | Suggest similar paths via Glob |
| Empty vault (progress) | Report "no data in timeframe" — do not write empty HTML |
| Browser open fails | Report file path; user can open manually |

## Design Principles

- **Typography first** — readable fonts, generous line-height, print-ready
- **No dependencies** — pure HTML/CSS, no npm/pip required
- **Self-contained** — single file, embedded styles, works offline
- **Source preserved** — never modify markdown body unless `--link` requested

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.