Genpage
Send a self-contained, interactive HTML report to the local GenPage app instead of dumping a long markdown response into chat. Use this skill whenever your reply would naturally produce a table with 3+ rows, a grouped list with headers, a comparison, a set of metrics, a timeline, a dependency map, or any audit/findings summary — even when the user didn't explicitly say 'report' or 'visualize'. Trigger on output shape, not on request wording.From its SKILL.md
npx -y skills add nandzz/genpage --skill genpageAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its file declares
Copied from the file, not written here
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
10.0 KB, ~2.4k tokens by cl100k_base, as published. Nobody here has run it
GenPage
Generates a self-contained HTML page and posts it to the local GenPage app.
The endpoint is configured in scripts/post-to-result-hub.py, which lives at
<SKILL_DIR>/scripts/post-to-result-hub.py.
Model-agnostic. For best behavior prefer a non-reasoning model — models that stream visible chain-of-thought may leak intermediate text this skill can't suppress at the prompt level.
When to use
The trigger is the shape of the answer, not the words in the request.
Use GenPage when your reply would otherwise contain any of:
| Shape | Examples |
|---|---|
| Table with 3+ rows | dependency list, file inventory, API endpoints, test results |
| Grouped list with headers | architecture layers, module breakdown, error categories |
| Comparison between 2+ items | before/after, A vs B, file-vs-file |
| Counts or metrics | N files changed, M dependencies, K failing tests |
| Timeline or sequence | commit history, migration steps, event flow |
| Findings / audit summary | security issues, code smells, missing coverage, TODOs |
| Anything plain text flattens | dependency graphs, layer diagrams, trees |
Also trigger on explicit cues: "summary", "report", "recap", "visualize", "show me", "send to GenPage", "give me a breakdown of".
Don't use for single-value answers, short prose explanations (≤3 lines), or code edits — those go in chat or directly in the file.
The most common miss
"Which dependencies does X have?" sounds like a question, but the answer is a grouped map. That is the trigger. Check the shape of the answer, not the wording of the question.
There are two natural moments to check:
- On message receipt — could my answer be structured?
- Before composing — I have the data; the answer has 3+ rows or grouped headers. Stop and follow the steps below.
The second moment is where this skill is usually missed.
Output discipline (silent mode)
The page is the deliverable. The chat is not.
Why it matters: the user is reading the page in the GenPage app. Anything you write in chat — plans, framework names, restated questions, "I'll now…", findings dumps — is duplicated noise that competes with the actual deliverable. It also leaks data the page is supposed to render, making the chat the de-facto output and the page redundant.
What this means in practice:
- Don't restate the user's request.
- Don't preview sections, libraries, charts, or layout decisions.
- Don't paste HTML/CSS/JS into chat.
- Don't narrate skill mechanics ("Step 0…", "the skill says…", "I need to…").
- Don't summarize the report's findings in chat — those go in the report.
The only chat output the user should see:
| When | What |
|---|---|
| Once per session | The merged consent + detail-level question (Step 1) |
| While building | Up to 3 short progress lines, ≤5 words each (e.g. Gathering data…, Building page…, Almost done…) |
| At the end | One final result line (Step 5) |
If you're about to write a sentence that starts with I , The user , Let me , Now , Following , Step , or According , delete it. Render that thought into the page, or keep it private.
Tool calls happen without preamble. Questions are emitted only through the host's structured-question UI (when one exists), with no chat text before or after — the question is the entire user-visible output of that turn.
Steps
Step 1 — Ask once: consent + detail level
Use the host platform's structured question UI (VS Code's ask-questions tool, Claude Code's AskUserQuestion, or the equivalent native prompt). Only fall back to plain inline text if no structured prompt exists.
Skip this step entirely when:
- The user explicitly requested GenPage in this turn ("send to GenPage", "use GenPage", "generate it in GenPage") — proceed at Standard unless they specified a level.
- The user already answered this question earlier in the same session — reuse the answer.
Question:
"How should I deliver this?"
Options:
- No, keep it as text (declines GenPage; respond in markdown and stop)
- Send to GenPage — Lean — one summary section, key metrics only, no drill-downs
- Send to GenPage — Standard (recommended) — summary + highlights + selected details, up to 2 charts
- Send to GenPage — Deep — full breakdown, multiple sections/charts, comparisons, drill-down views
If the user picks a GenPage option, proceed to Step 2. Do not ask again before posting — this answer is also consent to post.
Step 2 — Gather data
Collect the minimum needed for a useful page.
| Field | Description | Required |
|---|---|---|
title | Short title | Yes |
date | YYYY-MM-DD | Yes |
summary | 1–3 lines describing the outcome | Yes |
highlights | Key findings/decisions | No |
metrics | Counts, durations, rates | No |
chart_data | Data suited for Chart.js | No |
sections | Tables, lists, diffs, logs, risks | No |
Step 3 — Build the page
Generate one self-contained HTML document. The body layout is unconstrained — pick whatever structure best represents the data.
For everything below, read the relevant reference file:
- Framework choice, CDNs, colors, scrollbars, motion, layout →
references/styling.md - Accessibility (WCAG AA) →
references/accessibility.md - Brand footer (mandatory) →
references/footer.md - Image sourcing policy →
references/images.md
Read the file once, follow it, and don't re-read on subsequent runs in the same session.
Design data — pick a palette and font pair before writing HTML. Every report has a domain (code audit, finance, travel, wellness, ops, editorial, security, etc.). Match the domain to a palette and a font pair from references/data/ — this is the default path, not an escape hatch. The plain DaisyUI theme + Inter is the fallback only when no domain signal exists at all (e.g. a generic "list my files" request).
Order of operations:
- Name the domain in one word (e.g.
finance,devtools,travel,healthcare,security,editorial). If you can't, skip to defaults. colors.csv— 161 industry-mapped palettes. Grep theProduct TypeandNotescolumns for your domain word; pick the first match. Use its tokens as DaisyUI CSS custom properties or Tailwind arbitrary values.typography.csv— 57 Google Fonts pairings withMood/Style KeywordsandCSS Import. GrepMood/Style Keywordsfor the same domain or a mood word (serious, playful, technical, calm). Drop theCSS Importline straight into<head>.ux-guidelines.csv— 99 anti-patterns/best practices. SkimHighseverity rows relevant to the sections you're rendering (tables, navigation, forms, accessibility).
Only skip steps 2–3 when the request has no domain signal and no mood signal. "Show me my failing tests" → devtools palette + technical font pair. "Plan my trip to Italy" → travel palette + editorial font pair. Don't default to bare DaisyUI just because it would render.
Files are bundled under MIT from nextlevelbuilder/ui-ux-pro-max-skill; see references/data/NOTICE.md.
Step 4 — Security check
Run through references/security.md before posting. If anything fails, fix the page and re-check.
Step 5 — Save and post
The user already consented in Step 1. Don't ask again. Post directly:
- Write the page to
~/.genpage/pages/report-<timestamp>.htmlusing your file-writing tool (Write,create_file, etc.) — these auto-create missing parent directories. Don't prefix withmkdir,ls,test -d, ortouch; they're noise. - Run the POST script — it posts the file and keeps it on disk for later re-open / re-send:
python3 "<SKILL_DIR>/scripts/post-to-result-hub.py" ~/.genpage/pages/report-<timestamp>.html
<SKILL_DIR> is the absolute path of the directory containing this SKILL.md. Substitute it directly. Don't use ${CLAUDE_PLUGIN_ROOT} or any other env var — it's unreliable across hosts and has expanded to empty (causing can't open file '/scripts/post-to-result-hub.py').
Windows: use
pythoninstead ofpython3.
Step 6 — Final result line
One line in chat. Choose based on the script's output:
-
POST succeeded →
Page sent to GenPage ↗ -
CONNECTION_REFUSED(app not running) → the GenPage App isn't installed or isn't running. Auto-install for the user's OS, then retry the POST against the same saved file (do not regenerate the page). Detect the platform first — pick the matching block:macOS / Linux (
unamereturnsDarwinorLinux):curl -fsSL https://genpagehub.com/install.sh | shWindows (PowerShell):
irm https://genpagehub.com/install.ps1 | iexThe installer downloads the latest release, installs it, and launches the app on
127.0.0.1:5678. As soon as it returns, re-run the same POST command against the saved file:python3 "<SKILL_DIR>/scripts/post-to-result-hub.py" ~/.genpage/pages/report-<timestamp>.htmlThen resolve based on the retry's output:
- Retry succeeded →
Page sent to GenPage ↗ - Still
CONNECTION_REFUSEDafter install →Page saved to `~/.genpage/pages/report-<timestamp>.html`. The GenPage App couldn't be reached after install — start it manually and re-run the POST script. - Any other error → report the exact error returned by the script.
- Retry succeeded →
-
Any other error → report the exact error returned by the script.
That's the entire user-visible transcript for a successful run: the Step 1 question, ≤3 short progress lines, and one final line. Nothing else.
What ships with it: 11 files
130.7 KB alongside SKILL.md, 1 of them executable
references/
- accessibility.md932 B
- data/colors.csv31.7 KB
- data/LICENSE-ui-ux-pro-max1.0 KB
- data/NOTICE.md791 B
- data/typography.csv48.5 KB
- data/ux-guidelines.csv18.3 KB
- footer.md1.3 KB
- images.md788 B
- security.md613 B
- styling.md23.5 KB
scripts/
- post-to-result-hub.pyruns3.3 KB
Gives 0 of the 12 instructions most docs writing skills give in ~2.4k tokens
Counted across 1,637 of the 3,044 authors here whose files we hold, read 2026-08-07
- Announce the skill at startin 54 of 1637, across 26 files
- Convert legacy doc files before editingin 45 of 1637, across 7 files
- Predict questions readers might askin 42 of 1637, across 4 files
- Generate clarifying questions for initial contextin 42 of 1637, across 3 files
- Create document scaffold with placeholder textin 42 of 1637, across 3 files
- Brainstorm content options for each sectionin 42 of 1637, across 3 files
- Test the document with a fresh context-less instancein 42 of 1637, across 3 files
- Include exact file paths in every taskin 42 of 1637, across 15 files
- Ask interview questions one at a timein 42 of 1637, across 27 files
- Apply surgical edits during refinementin 41 of 1637, across 2 files
- Offer structured workflow or freeformin 40 of 1637, across 1 file
- Ask for document meta-contextin 40 of 1637, across 2 files
Said here and by no other author read
- send structured replies to the local GenPage app
- check answer shape instead of request wording
- ask for consent and detail level once
- ask questions only through structured UI
- match report domain to a palette and font pair
- run the security check before posting
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.