Skills/operations/roadmap-timeline/SKILL.md
Generates a polished, self-contained HTML roadmap or milestone timeline from any project data — SharePoint lists, pasted tables, or a verbal description. Use when asked to build a project roadmap, product roadmap, migration timeline, release plan, onboarding sequence, run-of-show, phase plan, or any visual schedule showing items over time. Interviews the user if data is incomplete, constructs a validated JSON document, then renders it into a single sandbox-safe HTML file. Chooses between two layouts automatically: horizontal roadmap with swimlanes (for phase-range data) or vertical milestone list (for point-in-time events). No external dependencies — output runs inside a SharePoint sandboxed iframe.
npx skillsauth add zrosenfield/sharepoint-ai-skills roadmap-timelineInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Generates a complete, self-contained HTML visualization by (1) interviewing the user or parsing their data, (2) constructing and validating a JSON document, then (3) rendering that JSON into HTML using assets/roadmap-timeline-template.html. The JSON is the authoritative source of truth; the HTML is fully determined by it.
Check what the user has already provided before asking anything:
list_items on the relevant lists. Read all needed columns before proceeding.If the data or intent is not fully clear, ask these questions in a single message — not one at a time:
Confirm your understanding before building the JSON.
Roadmap mode — use when items have start and end date ranges (duration blocks):
Milestones mode — use when items are point-in-time events:
When data is mixed (some ranges, some points), use roadmap mode and mark point-in-time items as "milestone": true.
Construct the JSON object. Full schema:
report object| Field | Required | Description |
|---|---|---|
| title | yes | Report title, shown in header strip |
| subtitle | no | Subtitle or context line |
| date_range_start | roadmap only | ISO date string, e.g. "2026-01-01" |
| date_range_end | roadmap only | ISO date string, e.g. "2026-06-30" |
| palette | yes | warm-paper, deep-ink, clean-white, or slate |
| footer | no | Footer text |
mode string"roadmap" or "milestones".
swimlanes array (roadmap mode only)| Field | Required | Description |
|---|---|---|
| id | yes | Short identifier, e.g. "eng" |
| label | yes | Display name, e.g. "Engineering" |
items array| Field | Required | Description |
|---|---|---|
| id | yes | Unique short identifier, e.g. "item-1" |
| title | yes | Display label for the block or card |
| swimlane_id | roadmap only | References a swimlane id |
| start | yes | ISO date string |
| end | roadmap mode | ISO date string (omit for pure milestones mode) |
| status | yes | on-track, at-risk, delayed, complete, or planned |
| milestone | no | true if this is a point-in-time event within a roadmap |
| owner | no | Text name of the owner (no Person column — plain text only) |
| description | no | Additional detail shown in tooltip (roadmap) or card body (milestones) |
| dependencies | no | Array of id strings; rendered as a text note, not as arrows |
The skill pre-computes all layout positions as percentages. No JavaScript is required for positioning — all values are embedded in the HTML as inline styles.
| Value | Formula |
|---|---|
| total_days | Days between date_range_end and date_range_start (inclusive span) |
| item_left_pct | ((item_start − date_range_start) / total_days) × 100 |
| item_width_pct | ((item_end − item_start) / total_days) × 100 |
| today_left_pct | ((today − date_range_start) / total_days) × 100 |
Rules:
item_end equals item_start, treat the item as a milestone (diamond) regardless of the milestone flagToday's date is known from the system context. If today falls outside the date range, omit the today-line entirely.
Run every check before rendering. Fix any failure before proceeding.
Document level:
mode is "roadmap" or "milestones"report.palette is one of: warm-paper, deep-ink, clean-white, slateitems array has at least one entryreport.date_range_start and report.date_range_end are present and parseable as ISO datesdate_range_end is after date_range_startswimlanes array has at least one entryPer item:
id is unique within the items arraytitle is present and non-emptystart is a valid ISO date stringend is present and not before startstatus is one of: on-track, at-risk, delayed, complete, plannedswimlane_id references a valid swimlane iddependencies entries (if present) each reference a valid item iditem_left_pct + item_width_pct does not exceed 101 (floating-point tolerance)Computation check:
item_width_pct = 0 (rendered as diamonds, not blocks)Read assets/roadmap-timeline-template.html.
For both modes:
{{REPORT_TITLE}} in <title> with a concise page title.{{PALETTE_CLASS}} on <body> with palette- + palette name.{{HEADER}} with the .rpt-header strip (title, subtitle, date range).{{CONTENT}} with the full rendered visualization (roadmap or milestones).{{FOOTER}} with footer text (or empty string).{{INLINE_SCRIPT}} with any enhancement JS (tooltip hover, palette switcher if needed).See references/components.md for the exact HTML structure of each mode.
Generate the month-marker ruler, then one .swimlane row per swimlane entry. Within each row:
<div class="phase-block status-{status}"> with inline left and width percentage styles.<div class="milestone-diamond status-{status}"> with inline left percentage style.<div class="today-line"> with inline left percentage style (omit if today is out of range).Group items by phase (if phases are named in description or a group field is provided). For each item render a .milestone-card with a date badge, status dot, title, owner, and description.
<script src> tags. All JavaScript must be inline.testing
--- name: review-council description: Convene a council of expert AI personas to review, stress-test, and improve any document, idea, proposal, or plan. Use this skill whenever the user asks to "review," "stress-test," "get feedback on," "critique," "poke holes in," "red team," "evaluate," "council," "panel review," or "get perspectives on" any content — whether it's an uploaded Word doc, Excel spreadsheet, PowerPoint deck, PDF, or just a raw idea typed into chat. Also trigger on phrases like "w
tools
Generates a polished, self-contained HTML heatmap scorecard — a weighted comparison matrix where entities (rows) are scored across dimensions (columns), with computed totals, rank badges, and a winner highlight. Use when asked to build a scorecard, comparison matrix, decision matrix, vendor evaluation, tool assessment, candidate scoring grid, competitive analysis, site-readiness matrix, or any weighted multi-criteria ranking. Interviews the user if entities or criteria are missing, constructs a validated JSON document, then renders it into a sandbox-safe HTML file using the component library. No external dependencies — output runs inside a SharePoint sandboxed iframe.
development
Generates a polished, self-contained HTML executive report or dashboard from any data source — SharePoint lists, CSV exports, or a user description. Use when asked to build an exec report, one-pager, summary page, status dashboard, project summary, business review, or any single-page visual summary of data. Interviews the user if data is incomplete, constructs a validated JSON document block by block, then renders it into a single sandbox-safe HTML file using the component library. No external dependencies — output runs inside a SharePoint sandboxed iframe.
development
Renders a polished, self-contained HTML briefing from any data source — SharePoint lists, uploaded documents, or a verbal description. Use when asked to build a competitor landscape, account brief, candidate summary, site inventory, board bio, speaker profile, partner overview, or any grid of profile cards or single-subject one-pager. Interviews the user if data is incomplete, constructs a validated JSON document, then renders it into a sandbox-safe HTML file using grid mode (2–8 subjects as responsive cards) or one-pager mode (1 subject as a rich briefing). No external dependencies — output runs inside a SharePoint sandboxed iframe.