From report-to-web
Generates interactive React presentation websites from markdown research reports using Tailwind CSS v4 and shadcn/ui. Parses structure into tabs, detects interactive components like calculators, deploys to GitHub Pages.
How this skill is triggered — by the user, by Claude, or both
Slash command
/report-to-web:site-generationThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Generate interactive React presentation websites from markdown research reports using Tailwind CSS v4 + shadcn/ui. Parse report structure into tabbed sections with interactive components, deploy as static sites to GitHub Pages.
Generate interactive React presentation websites from markdown research reports using Tailwind CSS v4 + shadcn/ui. Parse report structure into tabbed sections with interactive components, deploy as static sites to GitHub Pages.
Parse research report markdown into a structured site architecture:
Map markdown elements to React components:
| Markdown Pattern | React Component | Detection Rule |
|---|---|---|
> blockquote with legal/official text | StyledBlockquote | Contains legislation references, "section", "Act" |
| Tables with comparison data | ComparisonTable | 3+ columns, row headers describe same attributes |
| Tables with numerical data | DataTable or Calculator | Contains $, %, numerical values |
Footnote references [^N] | CitationCard | Inline superscript links to endnotes |
| Bullet/numbered lists | AnimatedList | Standard list rendering with reveal animations |
Bold markers [VERIFIED] etc. | Badge (shadcn) | Inline badge before content |
<!-- interactive: TYPE --> | Corresponding component | Explicit user marker |
Formula patterns X = A × B | Calculator | Mathematical expressions with variables |
Auto-detect interactive opportunities using these patterns:
Calculator candidates:
= with variable names on both sidesScenario candidates:
Timeline candidates:
Comparison candidates:
Support HTML comment markers for user control:
<!-- interactive: calculator -->
<!-- interactive: timeline -->
<!-- interactive: scenario -->
<!-- interactive: comparison -->
<!-- interactive: chart -->
Place markers immediately before the content block they apply to. Markers override AI detection.
Use Vite with React + Tailwind CSS v4 + shadcn/ui for fast builds and GitHub Pages compatibility.
Key config files:
vite.config.js — Set base to /<repo-name>/ for GitHub Pages, resolve.alias for @/, manualChunks for code splittingpostcss.config.js — @tailwindcss/postcss pluginjsconfig.json — @/ path alias to ./src/*components.json — shadcn config: tsx: false, style new-york, rsc: falsePackage dependencies:
react, react-dom — Core frameworkreact-markdown with remark-gfm — Render markdown content within componentsframer-motion — Animations for tab transitions and content revealslucide-react — Icons (search, external link, chevron, etc.)fuse.js — Lightweight fuzzy search for Knowledge Vaulttailwindcss, @tailwindcss/postcss, postcss — Tailwind CSS v4clsx, tailwind-merge, class-variance-authority — Utility class compositionradix-ui — Headless UI primitives for shadcn componentsshadcn — CLI for installing UI componentsAfter scaffolding, install shadcn UI components:
npx shadcn@latest add card input label table badge accordion collapsible slider button separator
Include .github/workflows/deploy.yml for automated deployment:
actions/deploy-pages@v4 for deploymentAlso include an npm run deploy script using gh-pages package as an alternative.
Each H2 section becomes a tab. Standard tab structure:
Each tab page follows this pattern:
TabPage
├── SectionRenderer (for each H3)
│ ├── Heading with gradient accent line
│ ├── Content (rendered markdown via ReactMarkdown)
│ └── InteractiveElement (if detected)
│ ├── Calculator (Card, Input, Label, Separator)
│ ├── ComparisonTable (Table, Button)
│ ├── TimelineView (Badge)
│ ├── ScenarioSlider (Card, Label, Separator)
│ └── CitationCard (Collapsible, Badge)
Parse report into reportData.js structured as:
reportData.meta → Site title, date, author
reportData.tabs[] → Tab definitions with sections
reportData.tabs[].sections[] → Section content with optional interactive configs
reportData.citations[] → All footnotes/endnotes with URLs
reportData.externalLinks[] → Deduplicated external URLs with labels
Interactive configurations go in interactiveConfig.js:
interactives[] → Array of interactive element definitions
.type → calculator | comparison | timeline | scenario
.tabId → Which tab contains this element
.sectionId → Which section within the tab
.config → Type-specific configuration (formula, inputs, data, etc.)
After scaffolding the project, install Vercel's agent skills for React code quality:
npx -y skills add vercel-labs/agent-skills --skill react-best-practices --skill web-design-guidelines --skill composition-patterns -y
Read the installed SKILL.md files and apply their rules when generating components:
These skills complement the bundled component templates by ensuring the generated code follows production-grade React patterns.
After generating all files:
npm install to install dependenciesnpm run build to verify production build succeedsFor detailed component API documentation, see ${CLAUDE_PLUGIN_ROOT}/skills/site-generation/references/component-api.md.
For a worked example of report parsing, see ${CLAUDE_PLUGIN_ROOT}/skills/site-generation/references/parsing-example.md.
For starter React component templates, see ${CLAUDE_PLUGIN_ROOT}/templates/src/components/.
For theme/registry selection, see ${CLAUDE_PLUGIN_ROOT}/skills/design-system/references/registry-guide.md.
npx claudepluginhub reggiechan74/cc-plugins --plugin report-to-webTurns proposals, plans, or ideas into interactive HTML pages deployed to Vercel with a built-in comment overlay for feedback.
Guides creation of production-ready Power Pages code sites as SPAs using React, Angular, Vue, or Astro, from requirements discovery to deployment with live dev server previews and git commits.
End-to-end AI website generation pipeline: research business data, acquire media, emit Bolt-style multi-file artifacts, upload to R2, update D1 status. Supports all business types.