Generate an interactive HTML dashboard showing the full portfolio status. Use whenever the user mentions dashboard, portfolio dashboard, portfolio view, "show me the portfolio", "visualize portfolio", status overview, or wants to see all portfolio data in a browser — even if they don't say "dashboard".
From cogni-portfolionpx claudepluginhub cogni-work/insight-wave --plugin cogni-portfolioThis skill is limited to using the following tools:
examples/design-variables-cogni-work.jsonschemas/design-variables.schema.jsonscripts/generate-dashboard.pyProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
Builds 3-5 year financial models for startups with cohort revenue projections, cost structures, cash flow, headcount plans, burn rate, runway, and scenario analysis.
Generate a self-contained HTML dashboard that visualizes the entire portfolio — entity counts, completion progress, the Feature x Market matrix, market sizing, pricing, competitors, customer profiles, and claims status. The dashboard opens in the user's browser and supports drill-down navigation into every entity.
The dashboard turns scattered JSON entity files into a single visual overview. Unlike the text-based portfolio-resume skill (quick status check), the dashboard is designed for visual exploration — clicking through entities, scanning the proposition matrix, comparing pricing across markets, and spotting gaps at a glance.
It matters because portfolio data lives in dozens of small JSON files that are hard to reason about in aggregate. A visual dashboard makes coverage, gaps, and relationships immediately visible without reading markdown or running shell commands.
Scan the workspace for portfolio.json files under cogni-portfolio/ paths. If multiple projects exist, ask the user which one to open. Store the resolved project directory path.
First, check if <project-dir>/output/design-variables.json already exists from a previous dashboard run. If it does, ask the user: "A dashboard theme is already configured. Reuse it, or pick a new one?" Default to reuse — most re-runs just want fresh data with the same look.
cogni-workspace:pick-theme skill to let the user select a theme. The skill returns theme_path, theme_name, and theme_slug.Additional skip conditions (auto-select without prompting):
theme_pathRead the selected theme.md file and produce a design-variables JSON file at <project-dir>/output/design-variables.json.
The JSON must follow the schema at $CLAUDE_PLUGIN_ROOT/skills/portfolio-dashboard/schemas/design-variables.schema.json. See the example at $CLAUDE_PLUGIN_ROOT/skills/portfolio-dashboard/examples/design-variables-cogni-work.json for the exact format.
What the LLM adds beyond a raw token extraction:
surface2 (~4% darker than surface) if not explicit in the themeaccent_muted and accent_dark variants if the theme only defines accent@import URL from the font familiestext and background, text_light and surface_darkradius and shadows appropriate to the theme's visual styleRequired fields: theme_name, colors (all 13 keys), status (4 keys), fonts (3 keys).
Optional fields with defaults: google_fonts_import (empty), radius ("12px"), shadows (standard set).
Run the dashboard generator script with the design-variables JSON:
python3 $CLAUDE_PLUGIN_ROOT/skills/portfolio-dashboard/scripts/generate-dashboard.py "<project-dir>" --design-variables "<project-dir>/output/design-variables.json"
The script:
portfolio.json and all entity directories (products, features, markets, propositions, solutions, competitors, customers)cogni-claims/claims.json if presenttips_enrichment.pursuit_slug on propositions or cogni-trends/*/tips-project.json with matching portfolio_source) and loads portfolio-anchored Solution Templates and portfolio-opportunities.jsonproject-status.sh for counts and completion data<project-dir>/output/dashboard.html{"status": "ok", "path": "<output-path>", "theme": "<name>", "design_variables": "<path>"} on successLegacy fallback: The script still accepts --theme <path-to-theme.md> for CI/automated runs. When used, it parses the theme.md directly via the built-in regex parser. Precedence: --design-variables > --theme > built-in defaults.
open "<project-dir>/output/dashboard.html"
Tell the user the dashboard is open. If they want to refresh after making changes to entities, just rerun the script.
The generated HTML includes these sections, all in a single-page app with drill-down panels:
quality_assessment, display a quality badge on the cell: green dot for "pass", yellow dot for "warn", red dot for "fail". Click a cell to expand IS/DOES/MEANS, pricing tiers (type-aware: project/subscription/partnership), unit economics, and competitor summary. The drill-down panel includes a "Quality Assessment" section (when present) showing the overall score and per-dimension pass/warn/fail for DOES and MEANS, with assessed_at date. Below that, a collapsible "Variants" section lists all variants with their angle label, DOES/MEANS summary, tips_ref, and quality score. Variants are sorted by variant_id. The section is collapsed by default and shows a count header (e.g., "Variants (3)"). Competitor data for each proposition also appears in this drill-down panel (not as a standalone section).portfolio.json has a taxonomy field) Heatmap grid showing all 8 dimensions x categories from the b2b-ict taxonomy. Green cells = category has mapped features, red cells = gap. Summary chip shows X of 57 covered (Y%). Below the heatmap: Gap Analysis listing uncovered categories grouped by dimension.quality_flag == "quality_investment_needed". Click-to-expand shows individual STs with theme_ref and full needs breakdown. Bottom section aggregates all unmet needs feeding the opportunity pipeline.named_customers) — Per-market named company cards with fit score badges (green/yellow/red), industry, headquarters, revenue, and pain points. Click a card to expand full profile with tech stack pills, fit rationale, source URLs, and researched date. Buyer personas for the market are shown below for context. Hidden when no named customers exist.cost_model) — Separated by solution type. Project solutions show effort-based margins per tier. Subscription solutions show unit economics (LTV/CAC, gross margin, churn). Color-coded: green for healthy, yellow for below-target, red for negative/failing. This section is marked INTERNAL/CONFIDENTIAL.portfolio-opportunities.json exists in a linked TIPS project) Summary stats: total opportunities, estimated revenue, build/buy/partner breakdown. Opportunity cards sorted by opportunity_score (descending). Each card shows: opportunity name, score gauge (0-10, color gradient green/yellow/red), classification badge (build/buy/partner), priority badge (high/medium/low), revenue estimate with confidence, feature spec description, unmet needs as pills, and source ST reference. Hidden when no opportunities file exists.output/communicate/ has files) Rich content section grouped by use case (Customer Narratives, Pitches, Proposals, Market Briefs, Repository Documentation, Workbooks). Coverage summary bar shows market/proposition coverage per use case (e.g., "Narratives: 3/5 markets", "Proposals: 8/15 propositions"). Each card shows: title from YAML frontmatter (fallback to filename), scope chip (Overview/Market/Customer), date created, source entity counts (products, features, propositions used), content preview snippet (~150 chars), review verdict badge with per-perspective mini-scorecard. Pitch files show arc_id chip. Workbook files show XLSX badge with file size. Unknown use cases appear in an "Other" group. Hidden when no communicate output exists.This dashboard is the reference implementation of the design-variables pattern documented at cogni-workspace/references/design-variables-pattern.md. Other plugins building themed HTML dashboards (cogni-trends trend-report, scoring-ui, catalog) should follow the same 3-stage flow: pick-theme → LLM derives design-variables.json → generator consumes JSON.
The dashboard is not only a capstone deliverable — it is also a review tool at major workflow milestones. Other portfolio skills (features, propositions, solutions) have review checkpoints where they offer the user the option to "open the dashboard for a visual overview." When the user accepts that offer, the calling skill should generate a fresh dashboard snapshot so the user can see the current state before proceeding.
Skills should offer a dashboard at these checkpoints:
When a skill offers "open the dashboard" at a review checkpoint:
dashboard-refresher agent with project_dir and plugin_root: $CLAUDE_PLUGIN_ROOT to regenerate and open the dashboardThis is lightweight — the generator script runs in seconds and the HTML is self-contained. The cost of generating an intermediate dashboard is negligible compared to the cost of the user discovering problems after the next phase has already run.
output/dashboard.htmlportfolio.json in the project root. If a language field is present, communicate with the user in that language (status messages, instructions, recommendations, questions). Technical terms, skill names, and CLI commands remain in English. If no language field is present, default to English.