Repository navigation
Redraw the homepage value-prop videos as D3 diagrams - #195
Merged
Merged
Conversation
The fourth homepage value-prop video (4_adopt.mp4) is now a 2D diagram drawn with D3, in the hero diagram's wireframe style and the video's original colors. It follows the video's layout and timing: an existing system of three apps and Kafka, then a Dapr app with a state store, then a Dapr app sending to RabbitMQ. Motion is eased and runs at the display frame rate, and the loop fades the additions out and slides back instead of the video's hard cut. - assets/js/value-props.js holds a small 2D engine (hexagons, Dapr badges, growing arrows, a wireframe cylinder, brand marks) and one scene per diagram, so the other three videos can follow. - A feature item in data/homepage.yml with `diagram: <scene>` and `diagramdesc` renders a diagram instead of a video, at the videos' 600x480 size. - The Kafka and RabbitMQ marks come from Simple Icons (CC0) and are inlined as symbols from assets/images/icons/. - Each diagram has a pause control, starts paused under reduced motion, stops offscreen, and shows a static fallback without JavaScript. The fallback exporter now covers every diagram: `npm run export:diagram-fallbacks` in tests/. - The D3 script tags move to the homepage layout, as both diagrams use them. The hero script and tests now scope to the hero's own toggle. - Tests cover the new diagram's pause control, focus ring, animation, reduced motion and fallback. - Deletes 4_adopt.mp4 and 4_adopt.gif (about 1.4 MB); nothing else references them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Marc Duiker <4191277+marcduiker@users.noreply.github.com>
All four homepage value-prop videos are now 2D D3 diagrams in the hero's wireframe style and the videos' colors, each following its video's layout and timing frame by frame, with eased motion and a smooth loop. - automate (1_automate.mp4): a workflow builds up step by step, from a pub/sub message through activities that call the Secrets API, wait for an external event, invoke an app and write key/value state. - secure (2_best_practices.mp4): three calls fail, are retried by a resiliency policy and go through; colors blend instead of switching. - integrate (3_integrate.mp4): the same app on Microsoft Azure, AWS, Google Cloud and on-premises, sliding from one platform to the next. Platforms are named in text instead of with company logos. - The engine in value-props.js gains the shapes these need: activity boxes, workflow nodes, envelopes, a message broker, a lock box, a person, secure lock, retry and failure marks, multi-line labels, and arrows that can recolor and drop their head. - Vendor marks come from the official Azure, AWS and Google Cloud architecture icon sets and from Simple Icons, kept unmodified in assets/images/icons/ with their sources and terms in its README. The template inlines every file there as a symbol, prefixing ids and classes so they cannot clash on the page. - tests/specs/diagrams.spec.js checks each scene's still frame: title and description, expected labels drawn, symbols resolved, nothing outside the frame, a working fallback image, and no script errors. It fails if a scene is added without being listed. - The video tests skip when the page has no videos. Fallbacks drop elements the still frame hides, so they only carry what is shown. - Deletes the remaining value-prop MP4s and GIFs (about 6.7 MB); nothing else references them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Marc Duiker <4191277+marcduiker@users.noreply.github.com>
marcduiker
force-pushed
the
value-prop-adopt-diagram
branch
from
October 26, 2026 09:17
7d005be to
e35c048
Compare
App hexagons now take light blue, dark blue, teal and orange, in that order: one app is light blue, two add dark blue, three add teal, four add orange. Yellow is gone, as it is too light on the white background. - automate: its one app is light blue. - integrate: light blue, dark blue, teal. - secure: light blue, dark blue, teal, orange. - adopt has five app hexagons, so they are colored by role: the three apps of the existing system teal, the two Dapr apps added to it light and dark blue. The colors are defined once (APP in value-props.js); the fallbacks are regenerated to match. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Marc Duiker <4191277+marcduiker@users.noreply.github.com>
skills/d3-2d-diagrams/ holds the rules and workflow behind the value-prop diagrams, so new ones match the existing four. It lives in a generic skills/ folder at the repo root, not under .claude/. - SKILL.md: where things live, the design rules (2D wireframe style at 600x480, the color palette and the app hexagon color order, no yellow, labels, arrows, motion and smooth loops), brand mark sourcing and terms, accessibility, the step-by-step workflow, and the traps already hit. - reference/engine.md: the shape, timing and color API in value-props.js, with a minimal scene. - scripts/video-frames.sh: frame count, contact sheets and full frames from a source video, and color sampling. - scripts/scene-frames.mjs: screenshots a scene at exact moments on a local build, optionally next to the source video's frames. - scripts/smoothness.mjs: measures a scene's frame rate, visible moves and opacity steps against limits. AGENTS.md points to the skills folder and to this skill. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Marc Duiker <4191277+marcduiker@users.noreply.github.com>
The skill's workflow assumed a source video to measure. It now has a first step for each starting point: - 1a, a video or GIF: unchanged. - 1b, a still image: measure layout and colors from it with the same scripts, then design the reveal, with an order (along the flow, shapes before their arrows, an arrow before its target, existing parts first) and pacing taken from the existing scenes. - 1c, a text description: list components and connections, map them to engine shapes, lay them out on the canvas using the existing scenes' spacing, get the layout agreed as a still before animating, then animate as for a still. The frontmatter description now names all three starting points. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Marc Duiker <4191277+marcduiker@users.noreply.github.com>
Not every diagram needs to animate. A feature item with `diagramstatic: true` now shows its scene as a still: the template marks the svg data-static and leaves out the pause button, and the script draws the scene's `still` frame once, with no timer. A scene without a loop length T is always drawn as a still, so a still-only scene cannot break if the flag is forgotten. Any animated scene can be shown as a still with the flag. - Tests: the animation and pause tests cover animated diagrams only, and the markup check counts pause buttons for animated diagrams only. A new test in diagrams.spec.js marks a diagram as a still in the page's HTML before its script runs, and checks it has no pause button, draws its complete frame and never changes. It fails if the still path is removed from the script. - The skill starts its design rules with "Animated or still": videos are always animated; still images and text descriptions follow the user's instructions, and when there are none, it says to ask. The workflow, accessibility and testing steps say which parts apply to stills, and the engine reference adds a still-only scene. - AGENTS.md notes `diagramstatic`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Marc Duiker <4191277+marcduiker@users.noreply.github.com>
The hero's three app hexagons now follow the same order as the value-prop diagrams: Workflow app light blue (#3EA9F5), Agent dark blue (#0D2192), App teal (#4EA4AF). The four app colors are defined once in hero-diagram.js, in the same order (light blue, dark blue, teal, then orange), so a fourth app would be orange. The static fallback is regenerated to match. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Marc Duiker <4191277+marcduiker@users.noreply.github.com>
Checked every tracked image and video outside styleguides/ and themes/: built the site and collected every image path its output references (HTML, CSS, JS, markdown, llms.txt, sitemap, manifest), searched the repo for each file, and searched GitHub for outside links to the public /images/ URLs. Deletes 17 unused files (about 800 KB): - adopter logos referenced only by commented-out entries in data/homepage.yml: amd, apple, ea, ford, jpmorgan, loreal, paloalto, pfizer - case study images referenced only by commented-out entries: case-study-atbay, case-study-bosch - unreferenced: avatar.png, building-blocks.webp, cta.svg, hero.png, on-prem.png, pubsub.webp, screenshot.svg Kept although the site no longer uses them, because other repositories embed them from dapr.io: building-blocks.png (quarkiverse/quarkus-dapr and others) and service-invocation.png. The icons in assets/images/icons are inlined by the template at build time, so they are used. Re-enabling one of the commented-out entries needs its image restored from git history. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Marc Duiker <4191277+marcduiker@users.noreply.github.com>
"The APIs behind it" showed dapr-apis-overview.png. It is now a still 2D diagram drawn with the same engine as the value-prop diagrams, on a 1200x624 canvas that fills the section's width like the image did: - Three bands: your app in any language or runtime (Node.js, Python, .NET, Go, Java, PHP, Rust); Dapr and its APIs over HTTP or gRPC; the infrastructure it runs on and integrates with. - 16 API tiles in two rows of eight, adding Binary Store, Search and Vector. The six alpha APIs are grouped at the end of the second row and tagged "alpha", as on the API cards. Observability, Security and Resiliency are a column of filled tiles. - C++ is removed. The language section is teal. - Languages, runtimes and cloud providers use their official logos, from Wikimedia, in their own colors and proportions. The Java logo is not freely licensed (fair use on Wikipedia) and is used at the maintainers' request; the icons README records every source and license. Generic icons are Fluent UI System Icons (MIT), the set the API cards already use. - The markdown rendering points at the diagram's fallback. The PNG is deleted. The diagram code is generalized so a diagram can go in any section: - value-props.js is now diagrams.js and draws every svg[data-scene]. It gains panel, pill and tile builders, icons that keep their proportions, and left-aligned labels. - partials/diagram.html renders one diagram; partials/home/ diagram-assets.html adds the symbols and the script once per page. - Fallbacks move to assets/images/diagrams/, and symbol ids are renamed to match. - Every class name in an inlined icon file is prefixed, including in its <style> block, and a file without a viewBox gets one from its size. Tests, the fallback exporter and the skill scripts use the generic names; the diagrams spec covers the new scene. The skill and AGENTS.md cover placements beyond the value props, Fluent icons, and when and how to use official logos. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Marc Duiker <4191277+marcduiker@users.noreply.github.com>
The description listed the six alpha APIs after a single "alpha APIs for", so binary store ended up about 75 characters from the word "alpha", and content-119.spec.js (alpha features are labeled everywhere) failed in CI. The stable and alpha APIs now get their own sentences: "Six more APIs are in alpha: binary store, search, vector, cryptography, distributed lock, and conversation." The skill now says to keep alpha APIs labeled close to each mention in a diagram's description, and names the spec that checks it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Marc Duiker <4191277+marcduiker@users.noreply.github.com>
2 of 3 tasks
marcduiker
added a commit
that referenced
this pull request
Oct 26, 2026
Every diagram's static fallback was an <image> inside its svg, so every visitor downloaded all six (about 165 KB) although the scripts draw over them straight away. Each fallback is now an <img> in a <noscript> next to its svg, laid over the svg's box by CSS, for the hero and all 2D diagrams. Browsers running the scripts never fetch them; without JavaScript they show as before. Homepage download with JavaScript, measured locally: 937 KB to 772 KB uncompressed, about 541 KB to 498 KB with text compressed. - The scripts no longer remove a fallback, and the exporter no longer strips one from its copy. - Tests: with JavaScript, the hero and the 2D diagrams never request their fallbacks; without it, each fallback is visible, loads, and sits over its svg's box. The still-diagram test's HTML rewrite allows for the noscript before the pause button. - The regenerated fallbacks lose a blank line, and apis.svg picks up the reworded alpha sentence from #195, which was merged without it. - The skill explains why the fallback stays in its noscript. Signed-off-by: Marc Duiker <4191277+marcduiker@users.noreply.github.com> Co-authored-by: Marc Duiker <4191277+marcduiker@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
All four homepage value-prop videos are now 2D D3 diagrams, following the hero diagram (#194). They use the hero's wireframe style and the videos' colors, except for app hexagons. Those take a fixed set in order: light blue, dark blue, teal, orange. There is no yellow, which is too light on white. The adopt diagram has five apps, so it colors them by role: the existing system teal, and the two Dapr apps light and dark blue.
Each one follows its video's layout, order and timing, measured frame by frame. Motion is eased and runs at the display's frame rate instead of 24 fps. Each loop ends with a fade instead of the video's hard cut.
automate• started by a pub/sub message
• Activity 1 calls the Secrets API
• waits for an external event
• Activity 2 invokes an app
• Activity 3 writes key/value state
• completion publishes a message
secureintegrateadoptWhat changes
assets/js/diagrams.js, formerlyvalue-props.js): a small 2D engine and one scene per diagram.data/homepage.yml): each feature item hasdiagram: <scene>and adiagramdesctext description, instead ofvideo. The diagrams are 600×480 like the videos, and the same size on phones.diagramstatic: trueshows its scene as a still. It is drawn once at its complete frame, with no animation and no pause button. A scene without a loop length is always drawn as a still. All four current diagrams are animated.assets/images/icons/):README.md.<symbol>, prefixing ids and classes so they cannot clash on the page. The Google Cloud files carry<style>blocks with generic class names.prefers-reduced-motionassets/images/diagrams/. It sits in a<noscript>, so visitors running the scripts never download it (the hero's fallback too)npm run export:diagram-fallbacksintests/regenerates the hero and all four fallbacks. It drops elements the still frame hides.APIs overview as a still diagram
"The APIs behind it" showed
dapr-apis-overview.png. It is now a still D3 diagram on a 1200×624 canvas that fills the section's width, like the image did.assets/images/icons/README.md.To support diagrams outside the value props:
diagrams.js.assets/images/diagrams/.Unused images
Every tracked image and video outside
styleguides/andthemes/was checked three ways:dapr.io/images/URL.Deleted, 17 files (about 800 KB):
data/homepage.yml: amd, apple, ea, ford, jpmorgan, loreal, paloalto, pfizer.avatar.png,building-blocks.webp,cta.svg,hero.png,on-prem.png,pubsub.webp,screenshot.svg.Kept:
building-blocks.pngandservice-invocation.png, because other repos embed them from dapr.io.The rebuilt site has no image references to missing files. Re-enabling a commented-out entry needs its image restored from git history.
Skill for future diagrams
skills/d3-2d-diagrams/sits in a genericskills/folder at the repo root, not under.claude/. It records the rules and workflow behind these diagrams, so new ones match:SKILL.md:reference/engine.md: the engine's API, with a minimal scene.scripts/:video-frames.sh: frames and color samples from a source video.scene-frames.mjs: a scene's frames at exact moments, next to the source.smoothness.mjs: checks frame rate, moves and opacity steps against limits.AGENTS.md points to the skills folder and to this skill.
Tests
New
tests/specs/diagrams.spec.js. For each scene's still frame, it checks:It also fails if a scene is added to the page without being listed.
Existing specs: they cover every diagram, including the pause button, focus ring, animate/pause/play, reduced motion and the no-JavaScript fallback.
Still test:
diagrams.spec.jsmarks a diagram as a still in the page's HTML before its script runs, then checks it has no pause button, draws its complete frame, and never changes. The animation and pause tests cover animated diagrams only.Video tests: they now skip when the page has no videos. They stay in place in case a video is added back.
Notes for reviewers
integrateis the Azure version.tests/playwright.config.jsand AGENTS.md said system Chrome was needed for the MP4s. Both now say that reason is gone. The setting is unchanged.Test plan
🤖 Generated with Claude Code