Devlog
What I shipped, what broke, and what it taught me. One line a day from inside FlashFX, with the long version underneath.
3 entries · 3 days in
- Day 3 #
Folded the articles section into a real newsletter and gave the devlog its own page.
Show details Hide details
/articlesheld exactly one post and that post was placeholder text. Two thin writing surfaces compete for the same entity, which is the mistakestory.htmlmade against the homepage before it became/about, so it is now one publication at/newsletterwith the old URLs 301ing across.Issues are
.mdxso the body can call real components.<Figure>takes a width ofcolumn,wideorfull, which maps to named columns on a CSS grid — that grid is the entire mechanism, and it only reaches the figures because MDX renders them as direct children of the slot. Wrap that slot and every figure silently snaps back to the text width with nothing failing. - Day 2 #
Renamed every image asset after what it actually shows, then declared them all in a sitemap.
Show details Hide details
Astro emits
<source-basename>.<hash>.webp, so the filename insrc/assets/is the filename Google sees. Eighteen images were shipping as1.png,33.png,1010.png— the only keyword signal an image carries besides its alt text, thrown away for free.Two things found while doing it:
7.pngand111.pngwere byte-identical. Astro dedupes on content, so the homepage’s “AI features” screenshot and the/about“Bolt hackathon prototype” have always been one file with two contradictory captions.@astrojs/sitemapemits page URLs only, with no<image:image>support, so every screenshot was discoverable only by a crawler parsing a lazy-loaded<img>inside a carousel.
- Day 1 #
Gave every image a licence in the structured data, which meant building a page for it to point at.
Show details Hide details
Google’s licensable-images feature needs
licenseandacquireLicensePageon theImageObject, and both have to be live URLs — it drops the enhancement silently if either 404s, the same way a deadsameAsentry devalues that whole array.So
/licenseexists now, andIMAGE_LICENSEinidentity.tspoints at it. That page existing is a hard dependency of the markup: rename it and the constant has to move with it.