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

  1. Day 3 #

    Folded the articles section into a real newsletter and gave the devlog its own page.

    Show details Hide details

    /articles held exactly one post and that post was placeholder text. Two thin writing surfaces compete for the same entity, which is the mistake story.html made against the homepage before it became /about, so it is now one publication at /newsletter with the old URLs 301ing across.

    Issues are .mdx so the body can call real components. <Figure> takes a width of column, wide or full, 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.

  2. 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 in src/assets/ is the filename Google sees. Eighteen images were shipping as 1.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.png and 111.png were 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/sitemap emits 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.
  3. 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 license and acquireLicensePage on the ImageObject, and both have to be live URLs — it drops the enhancement silently if either 404s, the same way a dead sameAs entry devalues that whole array.

    So /license exists now, and IMAGE_LICENSE in identity.ts points at it. That page existing is a hard dependency of the markup: rename it and the constant has to move with it.