Hey, I'm Ian and I make websites

This is my digital garden, where I write about making websites, creating games and other creative adventures.

Page code #392 orange / blue-navy / red
Fig. 1 · Ian, 96 × 96 pxDrawn in #392

Latest posts

All 40 posts
  1. GRD040

    #74AFiled 5 days ago

    Stati 2 started as four bug reports

    I filed four bug reports about Stati's templates in one afternoon, each with a fix. Two hours later I threw the fixes away and broke the template API instead.

  2. GRD039

    #319Filed a week ago

    @stati/images: responsive images and link preview cards for Stati

    AVIF and WebP at several widths, and an Open Graph card for every page drawn without a browser. It ships as a separate package, and I had my reasons.

  3. GRD038

    #238Filed 3 months ago

    The dev server got slower with every save

    Windows eating file writes, a watcher that watched too much, and the instruments I built into Stati so the next slowdown shows up on a pull request instead of in my hands.

  4. GRD037

    #6B1Filed 6 months ago

    What Stati is, and what it isn't

    Where a small, TypeScript-first static site generator fits next to Astro, Eleventy and Hugo, and when you should pick one of those instead.

  5. GRD036

    #A42Filed 8 months ago

    Why I'm building Stati

    I rebuilt this blog on a new framework every few years and the blog never changed. So I wrote a static site generator I intend to keep for ten years.

Fig. 2

  • Link to or from the latest 5 · 6
  • Link between older posts · 15

Random snippets

  1. SNP032

    Generate a random password in the terminal

    No password generator website needed.

    3 lines of sh in 3 blocks, 4 lines of explanation.

    #42B cmd linux
  2. SNP118

    Lazy load images without JavaScript

    Two attributes and the browser handles it.

    2 lines of html in 2 blocks, 7 lines of explanation.

    #639 html webdev
  3. SNP093

    Search a Stati site in the browser

    Stati writes the search index at build time. A few dozen lines of TypeScript search it.

    39 lines of ts and html in 2 blocks, 11 lines of explanation with 3 notes.

  4. SNP109

    stati invalidate cheat sheet

    Clear Stati's build cache by tag, path, glob or age, and what each query really matches.

    17 lines of sh in 1 block, 10 lines of explanation with 4 notes.

    #942 stati cmd
  5. SNP149

    Includes with props in Stati 2

    A card component, included by its path. The guard Stati 1 components needed on their first line can go.

    11 lines of eta in 4 blocks, 19 lines of explanation with 3 notes.

    #2B7 stati eta

Fig. 3

  • Code · 72 lines in 12 blocks
  • Explanation · 51 lines
  • Notes · 10