| name | release-notes-deck |
| description | Use when the user wants to create a new monthly Virto Commerce release-notes deck from a community-forum URL (e.g. "Create release notes from https://www.virtocommerce.org/t/virto-s-release-notes-august-2026/..."). Covers the full workflow โ fetch the source, plan sections, copy the previous month as template, replace the slides array, wire chronological navigation between months, update README, and verify layout across viewports. Also invoke when a user says "add a new month", "generate a release deck", or drops a raw notes URL and asks for a deck. |
Create a monthly release-notes deck
Build a self-contained interactive HTML slide deck for one Virto Commerce monthly release, matching the design and behavior of every existing deck in this repo.
When to use
- User provides a URL like
https://www.virtocommerce.org/t/virto-s-release-notes-<month>-<year>/<id> and asks to turn it into a deck.
- User says "create a release deck for [month]" or "add [month] to the release notes site".
- User is preparing the monthly release announcement and needs the interactive deck alongside the forum post.
Prerequisites
- The repo is a checkout of
VirtoCommerce/vc-release-notes with existing month folders 2026-01/ โฆ 2026-NN/ and the reference file 2026-07/index.html (or newer).
- The full presentation spec lives at prompts/release-notes-presentation-prompt.md. Read it once at the start of every deck generation.
Workflow
1. Read the spec, then fetch the source
Read: prompts/release-notes-presentation-prompt.md โ the design + behavior contract
Fetch the source URL twice with WebFetch โ once for content, once for image URLs โ to keep the results focused:
- Content extraction: title, category, problem, solution, integration/adoption, module versions, WOW flag, per feature. Preserve order.
- Image extraction: raw
https:// image URLs in order, each with a one-line label describing the feature.
2. Plan the section grouping
The deck opens with Section 01 ยท WOW Business Features (7 features max, golden divider), then groups the rest by product area business โ technical. Typical sections after WOW:
- Cart / Configurable Products / Loyalty
- Frontend & Storefront UX
- Marketplace & AI (Virto OZ)
- Catalog, Search & Content
- Payments, Notifications & Logs
- Platform / Modularity / DX
- Quality & Community
Adapt to source material โ don't force sections that aren't there. Consolidate related minor features onto one slide (e.g. "AI Vendor Portal enhancements" grouping search + description generation + translation into one feature).
Constraints from the spec:
- Every content slide must have all six fields:
category, title, problem, solution, size (S/M/L), integration.
- No time estimates in the
integration field. No "day", "week", "hour", "minute", "~".
- WOW features get
wow: true and appear in Section 01 only.
- Slide with an image sets
image + caption; slide without sets noVisual: true and icon: 'network'|'api'|'refund'|'ai'|'speed'|'book'|'globe'|'moon'.
3. Copy the previous month as template
cp 2026-<PREV>/index.html 2026-<NEW>/index.html
Then update:
<title> โ Virto Commerce โ Release Notes | <Month> <Year> (add edition subtitle like (Comics Edition) or (Stable 15) only if the source itself uses one).
- Every occurrence of
Release Notes โ <Prev Month> โ Release Notes โ <New Month> (replace_all).
- Cover header pill + eyebrow + h1 with the new month.
cover-highlights chips โ 4 chips summarizing the release headlines (numbers or short labels).
- Chronological navigation on cover and thanks slides:
href="../2026-<PREV>/" and title " ".
- Thanks slide
.thanks-sub + .cta-btn.outline link โ new source URL. Keep the Documentation button and Request-a-Demo button.
.thanks-footer bottom string.
- Markdown export in
buildMarkdown() โ heading # Virto Commerce โ <Month> <Year> Backlog and the final Source: URL.
4. Replace the slides array
The slides array is bounded by const slides = [ and the matching ]; right before const icons = {. Locate both, splice the new array in.
Prefer authoring the new slides array as a plain text file, then splicing with a small Python script (see the example in scratchpad/port/apply.py from the mobile-port work โ same brace-matching pattern).
5. Wire the previous month's forward link
In 2026-<PREV>/index.html, both cover and thanks slides have <div class="cover-nav">โฆ</div>. Add a second <a class="cover-nav-link"> alongside the existing back-link, this time pointing forward with a right-chevron:
<a class="cover-nav-link" href="../2026-<NEW>/" title="<New Month> <Year>">
<New Month> <Year>
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>
</a>
Do this for both the cover-slide footer and the thanks-slide .cover-nav.
6. Update the README + landing page
README.md: insert a new row at the top of the Releases table, format matching existing rows (Month ยท Highlights ยท Deck link ยท Source link).
index.html: insert a new <article class="release-card"> at the top of the .releases grid. Update the Hero + Spotlight + CTA-strip primary CTAs to point to the new month.
7. Verify
Run the following checks against the new file. If any fails, fix and re-run.
python -c "import re; \
h=open('2026-<NEW>/index.html', encoding='utf-8').read(); \
m=re.search(r'<script>(.*?)</script>', h, re.S); \
open('/tmp/_c.js','w',encoding='utf-8').write(m.group(1))"
node --check /tmp/_c.js && echo "JS OK"
Programmatic content checks (Python script, run against the file):
- Every content slide has
category:, title:, problem:, solution:, size:, integration:.
- Every
size is S, M, or L.
- Integration text contains no word-boundary matches for
day, week, hour, minute, and no ~.
- Slide order:
cover โ div-wow at index 1 โ content slides + dividers โ backlog second-to-last โ thanks last.
- No
onerror= attributes anywhere.
- Both
cover-nav-link hrefs on the new file point to ../2026-<PREV>/.
- Previous-month file's
cover-nav now has two links (back + forward).
Visual verification with the browser pane (if available), at four viewports:
- iPhone 17 Pro 402ร874, iPhone SE 375ร667, iPad portrait 820ร1180, desktop 1280ร800.
- Check: no horizontal overflow, nav pill doesn't overlap slide-footer at end of scroll,
+ Add button in nav enabled on content slides / disabled on cover-divider-backlog-thanks, image click opens the lightbox.
8. Ask the user (only if genuinely blocked)
Don't ask about anything already in the source URL or the spec. Do ask if:
- Section 01 has fewer than 5 or more than 8 WOW candidates (spec target is 4โ8; if wildly off, confirm intent).
- The source is very short (< 8 features) and would produce a thin deck โ offer to consolidate more aggressively or add editorial content.
What NOT to do
- Don't change the base CSS shell,
.slide, .slide-inner, or media queries โ the template already has all the mobile fixes.
- Don't add new JavaScript to the slide-rendering path. If you need new state, add it to the existing
updateBacklogChrome / showSlide / syncNavBacklogToggle seams.
- Don't skip the
data-goto-wiring in renderDivider โ the in-slide TOC on section-divider slides is a spec item.
- Don't move
Backlog or Thanks off the last two positions.
- Don't rename
.wow / .section-divider.wow / topic-tag classes โ CSS depends on them.
- Don't remove the previous month's chronological link โ it stays as "โ " and you add " โ" alongside.
Reference files
After delivery
- Commit the new month folder plus updates to README, index.html, and previous-month index.html together in one commit:
Add <Month> <Year> release notes.
- Do not push without explicit user request.