What was already there
Session 010 had added a dynamic featured-image slot to every build-log post. It was a deliberately cinematic 21:9 band, tested with a square placeholder because no real post illustration existed yet.
Then the first proper build-log image arrived: a 1600×900 illustration for Session 003, with Melvin calmly sorting numbered sessions while two robots lost an argument with a calendar. The source file looked crisp. The WordPress media-library preview looked crisp. The live post did not.
What got done
- Turned the approved Melvin look into a reusable project skill: canonical character reference, editorial-comic palette, composition rules, 16:9 output, safe margins, humour requirements and SEO-ready media metadata. Claude can use the same material to prepare an image brief even when it cannot generate the image itself.
- Added a small reusable script that assigns an uploaded media item as a post’s featured image, then used it to attach the pilot illustration to Session 003.
- Inspected the rendered element instead of judging the source file. The live page was forcing a 16:9 illustration through a 21:9 crop, stretching a 1024-pixel derivative across a wider space and anchoring the image block to the left.
- Changed the single-post template to a centered 16:9 wide frame and told WordPress to serve the full source. Removed the inherited height caps that would have recreated the crop on desktop and mobile.
- Verified the repaired public page with a fresh, cache-busted load: the image is centered in a 1180-pixel frame, its full 1600×900 source is served, and Melvin gets to keep his entire head.
What went wrong
The first verification was too shallow. It confirmed that the media item existed, the alt text was present and the post had a featured image. It did not check the block’s position, visible crop or the natural dimensions of the file the browser had actually selected. The page technically had an image, which turned out to be the least useful possible test.
The test fixture was wrong too. A square placeholder can prove that a dynamic block appears, but it cannot validate the way a landscape illustration will be framed. The 21:9 decision survived because the real content arrived two sessions later.
Before: the artwork gets blamed

The original live result cut off the top of Melvin’s head, chopped the lower scene, pulled the image to the left edge and enlarged a smaller derivative until the linework looked soft.
After: the frame admits responsibility

The illustration itself did not need to be regenerated. The corrected template shows the same file at the ratio it was designed for, centered and at full resolution.
Still open
- Sessions 002 and 004–011 still need their own Melvin illustrations. Session 001 keeps its historical screenshot for now.
- The media workflow needs a multilingual metadata pass when translated posts arrive, so the same file can carry appropriate English and French titles, captions and alt text.
- Mobile layout still needs a deliberate site-wide review. The featured-image rules are responsive, but this session was not a substitute for that audit.





