{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "myles' garden",
  "home_page_url": "https://myles.garden/",
  "feed_url": "https://myles.garden/feed.json",
  "description": "Myles Braithwaite's garden of ideas. A collection of thoughts, photos, and things I love.",
  "icon": "https://myles.garden/icon-512.png",
  "favicon": "https://myles.garden/apple-touch-icon.png",
  "authors": [
    {
      "name": "myles",
      "url": "https://myles.garden/",
      "avatar": "https://myles.garden/_vercel/image?url=https%3A%2F%2Fuploads.myles.garden%2Fpersona-pfps%2Fmyles.jpg&w=640&q=100&dpl=dpl_HHVC7cqy2RVoz4dSQ9A1PncH5diw"
    }
  ],
  "items": [
    {
      "id": "https://myles.garden/2026/07/15/wild-flowers",
      "url": "https://myles.garden/2026/07/15/wild-flowers",
      "content_html": "   <p>Saw these flowers on my walk to 1RG this morning.</p>   <div> <div> <img src=\"https://uploads.myles.garden/posts/2026/07/15/wild-flowers/wild-flowers.jpg\" alt=\"A bunch of wild flowers beside the sidewalk.\" /> </div> </div>",
      "date_published": "2026-07-15T15:15:00.000Z",
      "authors": [
        {
          "name": "myles",
          "url": "https://myles.garden/",
          "avatar": "https://myles.garden/_vercel/image?url=https%3A%2F%2Fuploads.myles.garden%2Fpersona-pfps%2Fmyles.jpg&w=640&q=100&dpl=dpl_HHVC7cqy2RVoz4dSQ9A1PncH5diw"
        }
      ],
      "tags": [
        "City of Toronto"
      ],
      "attachments": [
        {
          "url": "https://uploads.myles.garden/posts/2026/07/15/wild-flowers/wild-flowers.jpg",
          "mime_type": "image/jpeg",
          "title": "A bunch of wild flowers beside the sidewalk."
        }
      ]
    },
    {
      "id": "https://myles.garden/2026/07/15/release-the-rats",
      "url": "https://myles.garden/2026/07/15/release-the-rats",
      "content_html": "      <div> <div> <img src=\"https://uploads.myles.garden/posts/2026/07/15/release-the-rats/release-the-rats-poster.jpg\" alt=\"Poster on a utility poll saying &quot;Release the Rats&quot;.\" /> </div> </div>",
      "date_published": "2026-07-15T15:00:00.000Z",
      "authors": [
        {
          "name": "myles",
          "url": "https://myles.garden/",
          "avatar": "https://myles.garden/_vercel/image?url=https%3A%2F%2Fuploads.myles.garden%2Fpersona-pfps%2Fmyles.jpg&w=640&q=100&dpl=dpl_HHVC7cqy2RVoz4dSQ9A1PncH5diw"
        }
      ],
      "tags": [
        "City of Toronto",
        "Street Posters"
      ],
      "attachments": [
        {
          "url": "https://uploads.myles.garden/posts/2026/07/15/release-the-rats/release-the-rats-poster.jpg",
          "mime_type": "image/jpeg",
          "title": "Poster on a utility poll saying \"Release the Rats\"."
        }
      ]
    },
    {
      "id": "https://myles.garden/2026/07/12/theo-photo-dump",
      "url": "https://myles.garden/2026/07/12/theo-photo-dump",
      "content_html": "   <p>A photo dump of Theo at the farm. He was a little camera shy, but I managed to get a few good shots of him.</p>   <div> <div> <img src=\"https://uploads.myles.garden/posts/2026/07/12/theo-photo-dump/theo-photo-dump-004.jpg\" alt=\"Theo sitting upright on a striped rug in front of a TV showing a France–Morocco World Cup match, next to a coffee table with a glass of sparkling wine and a stack of books.\" /> </div><div> <img src=\"https://uploads.myles.garden/posts/2026/07/12/theo-photo-dump/theo-photo-dump-001.jpg\" alt=\"The back of Theo's fluffy head as he sits on a rain-soaked deck beside a metal side table holding a Whistler Starbucks mug and a portable speaker.\" /> </div><div> <img src=\"https://uploads.myles.garden/posts/2026/07/12/theo-photo-dump/theo-photo-dump-003.jpg\" alt=\"Theo dozing at the far end of a beige couch, viewed past the photographer's outstretched legs in jeans and penguin socks. A wood stove and shelves full of CDs are in the background.\" /> </div><div> <img src=\"https://uploads.myles.garden/posts/2026/07/12/theo-photo-dump/theo-photo-dump-005.jpg\" alt=\"Theo lying flat on dark hardwood floors in a dim sitting room, seen through a doorway with white trim. A rocking chair sits by the window behind him.\" /> </div> </div>",
      "date_published": "2026-07-12T22:23:04.000Z",
      "authors": [
        {
          "name": "myles",
          "url": "https://myles.garden/",
          "avatar": "https://myles.garden/_vercel/image?url=https%3A%2F%2Fuploads.myles.garden%2Fpersona-pfps%2Fmyles.jpg&w=640&q=100&dpl=dpl_HHVC7cqy2RVoz4dSQ9A1PncH5diw"
        }
      ],
      "tags": [
        "Family Farm",
        "Theo",
        "Photo Dump"
      ],
      "attachments": [
        {
          "url": "https://uploads.myles.garden/posts/2026/07/12/theo-photo-dump/theo-photo-dump-004.jpg",
          "mime_type": "image/jpeg",
          "title": "Theo sitting upright on a striped rug in front of a TV showing a France–Morocco World Cup match, next to a coffee table with a glass of sparkling wine and a stack of books."
        },
        {
          "url": "https://uploads.myles.garden/posts/2026/07/12/theo-photo-dump/theo-photo-dump-001.jpg",
          "mime_type": "image/jpeg",
          "title": "The back of Theo's fluffy head as he sits on a rain-soaked deck beside a metal side table holding a Whistler Starbucks mug and a portable speaker."
        },
        {
          "url": "https://uploads.myles.garden/posts/2026/07/12/theo-photo-dump/theo-photo-dump-003.jpg",
          "mime_type": "image/jpeg",
          "title": "Theo dozing at the far end of a beige couch, viewed past the photographer's outstretched legs in jeans and penguin socks. A wood stove and shelves full of CDs are in the background."
        },
        {
          "url": "https://uploads.myles.garden/posts/2026/07/12/theo-photo-dump/theo-photo-dump-005.jpg",
          "mime_type": "image/jpeg",
          "title": "Theo lying flat on dark hardwood floors in a dim sitting room, seen through a doorway with white trim. A rocking chair sits by the window behind him."
        }
      ]
    },
    {
      "id": "https://myles.garden/2026/07/12/farm-photo-dump",
      "url": "https://myles.garden/2026/07/12/farm-photo-dump",
      "content_html": "   <p>Spent last week at the farm. Took a lot of photos. These are the keepers.</p>   <div> <div> <img src=\"https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-000.jpg\" alt=\"A young corn field ringed by a bare dirt margin, framed by dark maple branches overhead and tall grass in the foreground, under a blue sky with scattered clouds.\" /> </div><div> <img src=\"https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-001.jpg\" alt=\"A broad old maple shading an overgrown stone wall, orange daylilies poking through the underbrush, sunlit lawn in front.\" /> </div><div> <img src=\"https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-002.jpg\" alt=\"An echeveria bloom stalk arcing red flowers across the frame, shot from the porch furniture with stepping stones, lawn, and the brick farmhouse wall behind.\" /> </div><div> <img src=\"https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-003.jpg\" alt=\"Rain-slicked deck boards in the foreground, orange daylilies and shrubs beyond, and a flat grey sky over the corn field.\" /> </div><div> <img src=\"https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-004.jpg\" alt=\"Two white rocking chairs on a rain-soaked covered porch, raindrops rippling the deck's finish, a red water bottle on the table in the corner.\" /> </div><div> <img src=\"https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-005.jpg\" alt=\"A two-lane highway running straight through rolling green hills under heavy clouds, shot over the dashboard, the car stereo playing Undergrnd Garage on TuneIn Radio.\" /> </div><div> <img src=\"https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-006.jpg\" alt=\"Dusk over the corn field, tree line in silhouette, the last pink of sunset low on the horizon and a single bright point of light hanging in the blue-grey sky.\" /> </div><div> <img src=\"https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-007.jpg\" alt=\"Morning off the deck: a tall dark planter spilling flowers and grasses, orange daylilies at left, and the corn field stretching to the tree line under wispy clouds.\" /> </div><div> <img src=\"https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-008.jpg\" alt=\"Fresh mowing stripes running across the lawn toward a dense wall of maples and shrubs under a cloudless sky.\" /> </div><div> <img src=\"https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-009.jpg\" alt=\"The corner of the swimming pool, a weathered board-and-batten shed tucked under mature trees behind it, one bare dead trunk against the blue.\" /> </div><div> <img src=\"https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-010.jpg\" alt=\"Sunset in orange and pink over the corn field, the tree line in silhouette, grass and dirt path dark in the foreground.\" /> </div><div> <img src=\"https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-011.jpg\" alt=\"A rough meadow dotted with clover, three large trees mid-frame, the corn field showing between their trunks under a deep blue sky.\" /> </div><div> <img src=\"https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-012.jpg\" alt=\"Blue hour from the porch: one cloud glowing pale against a deep indigo sky, framed by white gingerbread trim and a corner post, the fields below already dark.\" /> </div><div> <img src=\"https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-013.jpg\" alt=\"A butterfly folded into an orange daylily bloom, surrounded by dense green leaves and spent lily buds.\" /> </div><div> <img src=\"https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-014.jpg\" alt=\"Valley view from the escarpment: ski runs cutting green stripes down the far hillside, a small pond, farmland and houses scattered below.\" /> </div><div> <img src=\"https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-015.jpg\" alt=\"The valley running to the horizon in a patchwork of forest and field, framed by cedar branches at the cliff edge.\" /> </div><div> <img src=\"https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-016.jpg\" alt=\"A limestone pinnacle splitting away from the escarpment face, cedars growing from its cracks, the forested valley floor far below.\" /> </div><div> <img src=\"https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-017.jpg\" alt=\"A hiker with a blue backpack, hands on hips, standing at a cliff-edge lookout framed by cedars, ski hills and a small lake in the valley beyond.\" /> </div> </div>",
      "date_published": "2026-07-12T22:22:53.000Z",
      "authors": [
        {
          "name": "myles",
          "url": "https://myles.garden/",
          "avatar": "https://myles.garden/_vercel/image?url=https%3A%2F%2Fuploads.myles.garden%2Fpersona-pfps%2Fmyles.jpg&w=640&q=100&dpl=dpl_HHVC7cqy2RVoz4dSQ9A1PncH5diw"
        }
      ],
      "tags": [
        "Family Farm",
        "Photo Dump"
      ],
      "attachments": [
        {
          "url": "https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-000.jpg",
          "mime_type": "image/jpeg",
          "title": "A young corn field ringed by a bare dirt margin, framed by dark maple branches overhead and tall grass in the foreground, under a blue sky with scattered clouds."
        },
        {
          "url": "https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-001.jpg",
          "mime_type": "image/jpeg",
          "title": "A broad old maple shading an overgrown stone wall, orange daylilies poking through the underbrush, sunlit lawn in front."
        },
        {
          "url": "https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-002.jpg",
          "mime_type": "image/jpeg",
          "title": "An echeveria bloom stalk arcing red flowers across the frame, shot from the porch furniture with stepping stones, lawn, and the brick farmhouse wall behind."
        },
        {
          "url": "https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-003.jpg",
          "mime_type": "image/jpeg",
          "title": "Rain-slicked deck boards in the foreground, orange daylilies and shrubs beyond, and a flat grey sky over the corn field."
        },
        {
          "url": "https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-004.jpg",
          "mime_type": "image/jpeg",
          "title": "Two white rocking chairs on a rain-soaked covered porch, raindrops rippling the deck's finish, a red water bottle on the table in the corner."
        },
        {
          "url": "https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-005.jpg",
          "mime_type": "image/jpeg",
          "title": "A two-lane highway running straight through rolling green hills under heavy clouds, shot over the dashboard, the car stereo playing Undergrnd Garage on TuneIn Radio."
        },
        {
          "url": "https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-006.jpg",
          "mime_type": "image/jpeg",
          "title": "Dusk over the corn field, tree line in silhouette, the last pink of sunset low on the horizon and a single bright point of light hanging in the blue-grey sky."
        },
        {
          "url": "https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-007.jpg",
          "mime_type": "image/jpeg",
          "title": "Morning off the deck: a tall dark planter spilling flowers and grasses, orange daylilies at left, and the corn field stretching to the tree line under wispy clouds."
        },
        {
          "url": "https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-008.jpg",
          "mime_type": "image/jpeg",
          "title": "Fresh mowing stripes running across the lawn toward a dense wall of maples and shrubs under a cloudless sky."
        },
        {
          "url": "https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-009.jpg",
          "mime_type": "image/jpeg",
          "title": "The corner of the swimming pool, a weathered board-and-batten shed tucked under mature trees behind it, one bare dead trunk against the blue."
        },
        {
          "url": "https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-010.jpg",
          "mime_type": "image/jpeg",
          "title": "Sunset in orange and pink over the corn field, the tree line in silhouette, grass and dirt path dark in the foreground."
        },
        {
          "url": "https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-011.jpg",
          "mime_type": "image/jpeg",
          "title": "A rough meadow dotted with clover, three large trees mid-frame, the corn field showing between their trunks under a deep blue sky."
        },
        {
          "url": "https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-012.jpg",
          "mime_type": "image/jpeg",
          "title": "Blue hour from the porch: one cloud glowing pale against a deep indigo sky, framed by white gingerbread trim and a corner post, the fields below already dark."
        },
        {
          "url": "https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-013.jpg",
          "mime_type": "image/jpeg",
          "title": "A butterfly folded into an orange daylily bloom, surrounded by dense green leaves and spent lily buds."
        },
        {
          "url": "https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-014.jpg",
          "mime_type": "image/jpeg",
          "title": "Valley view from the escarpment: ski runs cutting green stripes down the far hillside, a small pond, farmland and houses scattered below."
        },
        {
          "url": "https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-015.jpg",
          "mime_type": "image/jpeg",
          "title": "The valley running to the horizon in a patchwork of forest and field, framed by cedar branches at the cliff edge."
        },
        {
          "url": "https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-016.jpg",
          "mime_type": "image/jpeg",
          "title": "A limestone pinnacle splitting away from the escarpment face, cedars growing from its cracks, the forested valley floor far below."
        },
        {
          "url": "https://uploads.myles.garden/posts/2026/07/12/farm-photo-dump/farm-photo-dump-017.jpg",
          "mime_type": "image/jpeg",
          "title": "A hiker with a blue backpack, hands on hips, standing at a cliff-edge lookout framed by cedars, ski hills and a small lake in the valley beyond."
        }
      ]
    },
    {
      "id": "https://myles.garden/2026/07/11/hypertexting",
      "url": "https://myles.garden/2026/07/11/hypertexting",
      "content_html": "   <p>I really want to like <a href=\"https://hypertexting.com\">HyperTexting</a> (an iOS app that will turn feeds into a scrollable social media interface), but when I first opened the app, it auto-subscribed me to 20+ feeds I have no interest in, and now the first post on the list is an ad to buy a sponsorship for their app.</p>\n<p>I get that good software requires people to actually make money, but this is a little much for an app that hasn’t even shown me it’s worth using.</p>   <div> <div> <img src=\"https://uploads.myles.garden/posts/2026/07/11/hypertexting/screenshot-of-hypertexting-ios-app.png\" alt=\"iOS screenshot of the HyperTexting app’s Timeline, showing a sponsored post — an advertisement from the verified @hypertexting.com account promoting their “Weekly Sponsorship Program.” The ad explains that advertisers can promote products to free users with text, links, images, audio, video, and PDF downloads, and that free users will see one sponsor per week, displayed once per day. Below the ad copy is a link preview card with a money bag emoji linking to hypertexting.com/sponsors.\" /> </div> </div>",
      "date_published": "2026-07-11T15:16:00.000Z",
      "authors": [
        {
          "name": "myles",
          "url": "https://myles.garden/",
          "avatar": "https://myles.garden/_vercel/image?url=https%3A%2F%2Fuploads.myles.garden%2Fpersona-pfps%2Fmyles.jpg&w=640&q=100&dpl=dpl_HHVC7cqy2RVoz4dSQ9A1PncH5diw"
        }
      ],
      "attachments": [
        {
          "url": "https://uploads.myles.garden/posts/2026/07/11/hypertexting/screenshot-of-hypertexting-ios-app.png",
          "mime_type": "image/png",
          "title": "iOS screenshot of the HyperTexting app’s Timeline, showing a sponsored post — an advertisement from the verified @hypertexting.com account promoting their “Weekly Sponsorship Program.” The ad explains that advertisers can promote products to free users with text, links, images, audio, video, and PDF downloads, and that free users will see one sponsor per week, displayed once per day. Below the ad copy is a link preview card with a money bag emoji linking to hypertexting.com/sponsors."
        }
      ]
    },
    {
      "id": "https://myles.garden/2026/07/07/witch-hat-atelier",
      "url": "https://myles.garden/2026/07/07/witch-hat-atelier",
      "content_html": "   <p>I started reading <em>Witch Hat Atelier</em>, a manga by Kamome Shirahama.</p>  <a href=\"https://myles.garden/bookshelf/books/9781632367709\">  <img src=\"https://myles.garden/_vercel/image?url=https%3A%2F%2Fuploads.myles.garden%2Farcana%2Fcovers%2Fbooks%2Fwitch-hat-atelier%2Fvol-1.jpg&amp;w=640&amp;q=100&amp;dpl=dpl_HHVC7cqy2RVoz4dSQ9A1PncH5diw\" alt=\"Cover of &quot;Witch Hat Atelier, Volume 1&quot;\" width=\"256\" height=\"384\" /> </a> ",
      "date_published": "2026-07-07T20:50:37.000Z",
      "authors": [
        {
          "name": "myles",
          "url": "https://myles.garden/",
          "avatar": "https://myles.garden/_vercel/image?url=https%3A%2F%2Fuploads.myles.garden%2Fpersona-pfps%2Fmyles.jpg&w=640&q=100&dpl=dpl_HHVC7cqy2RVoz4dSQ9A1PncH5diw"
        }
      ],
      "tags": [
        "Witch Hat Atelier, Volume 1"
      ],
      "attachments": []
    },
    {
      "id": "https://myles.garden/2026/07/06/theo-vs-bird-feeder",
      "url": "https://myles.garden/2026/07/06/theo-vs-bird-feeder",
      "content_html": "   <p>He saw a chipmunk on the bird feeder once and now he just assumes they live there.</p>   <div> <div> <img src=\"https://uploads.myles.garden/posts/2026/07/06/theo-vs-bird-feeder/theo-bird-feeder-bark.jpg\" alt=\"Theo, a cream-coloured goldendoodle, sits on a lawn with his head tilted up, mouth open mid-bark at a green bird feeder hanging from a large tree. Behind him, an old moss-covered stone wall is overgrown with summer greenery.\" /> </div><div> <img src=\"https://uploads.myles.garden/posts/2026/07/06/theo-vs-bird-feeder/theo-bird-feeder-watch.jpg\" alt=\"Theo stands on the lawn, looking at the camera with the bird feeder hanging behind him. A stone wall and dense green undergrowth fill the background.\" /> </div> </div>",
      "date_published": "2026-07-06T14:45:00.000Z",
      "authors": [
        {
          "name": "myles",
          "url": "https://myles.garden/",
          "avatar": "https://myles.garden/_vercel/image?url=https%3A%2F%2Fuploads.myles.garden%2Fpersona-pfps%2Fmyles.jpg&w=640&q=100&dpl=dpl_HHVC7cqy2RVoz4dSQ9A1PncH5diw"
        }
      ],
      "tags": [
        "Family Farm",
        "Theo"
      ],
      "attachments": [
        {
          "url": "https://uploads.myles.garden/posts/2026/07/06/theo-vs-bird-feeder/theo-bird-feeder-bark.jpg",
          "mime_type": "image/jpeg",
          "title": "Theo barking at the bird feeder"
        },
        {
          "url": "https://uploads.myles.garden/posts/2026/07/06/theo-vs-bird-feeder/theo-bird-feeder-watch.jpg",
          "mime_type": "image/jpeg",
          "title": "Theo watching the bird feeder"
        }
      ]
    },
    {
      "id": "https://myles.garden/2026/07/02/canada-malting-silos",
      "url": "https://myles.garden/2026/07/02/canada-malting-silos",
      "content_html": "   <p>Went to see InterAccess’s, <a href=\"https://www.interaccess.org/events/toronto-made-the-world-in-a-city-illuminated\">Toronto Made, The World in a City Illuminated</a> exhibition at the Canada Malting silos tonight.</p>   <div> <div> <img src=\"https://uploads.myles.garden/posts/2026/07/02/canada-malting-silos/canada-malting-silos-1.jpg\" alt=\"The Canada Malting silos at night with soft pink and cream cloud shapes projected onto the concrete facade. String lights and small crowds line the waterfront promenade below, their glow reflecting in the rippling water of the channel.\" /> </div><div> <img src=\"https://uploads.myles.garden/posts/2026/07/02/canada-malting-silos/canada-malting-silos-2.jpg\" alt=\"A title card projected onto the Canada Malting silos at night reading &quot;Dan Tapper, Blastula Division, @visualcodepoetry&quot;, framed by glitchy magenta, cyan, and violet stripes that wrap around the building's edges. The waterfront below is lit with string lights, reflected in the dark water.\" /> </div><div> <img src=\"https://uploads.myles.garden/posts/2026/07/02/canada-malting-silos/canada-malting-silos-3.jpg\" alt=\"The Canada Malting silos covered in projected polka dots of pink, peach, violet, and green, scattered across the full facade like confetti. Trees and string lights line the promenade below, and a few silhouetted people watch from across the water.\" /> </div><div> <img src=\"https://uploads.myles.garden/posts/2026/07/02/canada-malting-silos/canada-malting-silos-4.jpg\" alt=\"A projection on the Canada Malting silos of green sprouting stems, red flares, scattered stars, and a white brain-like tangle of roots, resembling a glowing night garden. Silhouettes of people sit along the dock in the foreground, watching across the water.\" /> </div><div> <img src=\"https://uploads.myles.garden/posts/2026/07/02/canada-malting-silos/canada-malting-silos.jpg\" alt=\"The Canada Malting Co. silos at Bathurst Quay at dusk, seen from a garden across the water. The concrete elevator building and row of cylindrical silos stand pale against a soft blue sky with a single pink-orange cloud. A white tugboat's wheelhouse pokes above the treeline in the foreground, with flowers and greenery along the bottom of the frame.\" /> </div> </div>",
      "date_published": "2026-07-03T02:57:48.000Z",
      "authors": [
        {
          "name": "myles",
          "url": "https://myles.garden/",
          "avatar": "https://myles.garden/_vercel/image?url=https%3A%2F%2Fuploads.myles.garden%2Fpersona-pfps%2Fmyles.jpg&w=640&q=100&dpl=dpl_HHVC7cqy2RVoz4dSQ9A1PncH5diw"
        }
      ],
      "tags": [
        "Canada Malting Silos"
      ],
      "attachments": [
        {
          "url": "https://uploads.myles.garden/posts/2026/07/02/canada-malting-silos/canada-malting-silos-1.jpg",
          "mime_type": "image/jpeg",
          "title": "The Canada Malting silos at night with soft pink and cream cloud shapes projected onto the concrete facade. String lights and small crowds line the waterfront promenade below, their glow reflecting in the rippling water of the channel."
        },
        {
          "url": "https://uploads.myles.garden/posts/2026/07/02/canada-malting-silos/canada-malting-silos-2.jpg",
          "mime_type": "image/jpeg",
          "title": "A title card projected onto the Canada Malting silos at night reading \"Dan Tapper, Blastula Division, @visualcodepoetry\", framed by glitchy magenta, cyan, and violet stripes that wrap around the building's edges. The waterfront below is lit with string lights, reflected in the dark water."
        },
        {
          "url": "https://uploads.myles.garden/posts/2026/07/02/canada-malting-silos/canada-malting-silos-3.jpg",
          "mime_type": "image/jpeg",
          "title": "The Canada Malting silos covered in projected polka dots of pink, peach, violet, and green, scattered across the full facade like confetti. Trees and string lights line the promenade below, and a few silhouetted people watch from across the water."
        },
        {
          "url": "https://uploads.myles.garden/posts/2026/07/02/canada-malting-silos/canada-malting-silos-4.jpg",
          "mime_type": "image/jpeg",
          "title": "A projection on the Canada Malting silos of green sprouting stems, red flares, scattered stars, and a white brain-like tangle of roots, resembling a glowing night garden. Silhouettes of people sit along the dock in the foreground, watching across the water."
        },
        {
          "url": "https://uploads.myles.garden/posts/2026/07/02/canada-malting-silos/canada-malting-silos.jpg",
          "mime_type": "image/jpeg",
          "title": "The Canada Malting Co. silos at Bathurst Quay at dusk, seen from a garden across the water. The concrete elevator building and row of cylindrical silos stand pale against a soft blue sky with a single pink-orange cloud. A white tugboat's wheelhouse pokes above the treeline in the foreground, with flowers and greenery along the bottom of the frame."
        }
      ]
    },
    {
      "id": "https://myles.garden/2026/07/02/curb-chamomile",
      "url": "https://myles.garden/2026/07/02/curb-chamomile",
      "content_html": "   <p>Nobody planted this. Gardeners call these volunteers: seeds that show up, pick a crack, and commit.</p>   <div> <div> <img src=\"https://uploads.myles.garden/posts/2026/07/02/curb-chamomile/curb-chamomile.jpg\" alt=\"A dense clump of chamomile with white daisy-like flowers bursting from a crack where brick pavers meet asphalt, growing around the base of a metal signpost. Scattered weeds and a crumpled paper napkin surround it, and the plant casts a lacy shadow across the pavement in bright sunlight.\" /> </div> </div>",
      "date_published": "2026-07-02T15:30:00.000Z",
      "authors": [
        {
          "name": "myles",
          "url": "https://myles.garden/",
          "avatar": "https://myles.garden/_vercel/image?url=https%3A%2F%2Fuploads.myles.garden%2Fpersona-pfps%2Fmyles.jpg&w=640&q=100&dpl=dpl_HHVC7cqy2RVoz4dSQ9A1PncH5diw"
        }
      ],
      "tags": [
        "City of Toronto"
      ],
      "attachments": [
        {
          "url": "https://uploads.myles.garden/posts/2026/07/02/curb-chamomile/curb-chamomile.jpg",
          "mime_type": "image/jpeg",
          "title": "A dense clump of chamomile with white daisy-like flowers bursting from a crack where brick pavers meet asphalt, growing around the base of a metal signpost. Scattered weeds and a crumpled paper napkin surround it, and the plant casts a lacy shadow across the pavement in bright sunlight."
        }
      ]
    },
    {
      "id": "https://myles.garden/2026/07/01/my-neighbour-totoro-mural",
      "url": "https://myles.garden/2026/07/01/my-neighbour-totoro-mural",
      "content_html": "      <div> <div> <img src=\"https://uploads.myles.garden/posts/2026/07/01/my-neighbour-totoro-mural/my-neighbour-totoro-mural.jpg\" alt=\"A mural painted on a garage door in a brick laneway garage, depicting a scene from My Neighbour Totoro: Satsuki and Mei nap on the belly of a large sleeping Totoro in a forest clearing, while the small blue and white Totoros gather around them. The mural is signed &quot;Kirby.&quot; Graffiti tags mark the siding and brick on either side, and a cracked laneway runs in front.\" /> </div> </div>",
      "date_published": "2026-07-01T16:00:00.000Z",
      "authors": [
        {
          "name": "myles",
          "url": "https://myles.garden/",
          "avatar": "https://myles.garden/_vercel/image?url=https%3A%2F%2Fuploads.myles.garden%2Fpersona-pfps%2Fmyles.jpg&w=640&q=100&dpl=dpl_HHVC7cqy2RVoz4dSQ9A1PncH5diw"
        }
      ],
      "tags": [
        "City of Toronto"
      ],
      "attachments": [
        {
          "url": "https://uploads.myles.garden/posts/2026/07/01/my-neighbour-totoro-mural/my-neighbour-totoro-mural.jpg",
          "mime_type": "image/jpeg",
          "title": "A mural painted on a garage door in a brick laneway garage, depicting a scene from My Neighbour Totoro: Satsuki and Mei nap on the belly of a large sleeping Totoro in a forest clearing, while the small blue and white Totoros gather around them. The mural is signed \"Kirby.\" Graffiti tags mark the siding and brick on either side, and a cracked laneway runs in front."
        }
      ]
    },
    {
      "id": "https://myles.garden/2026/06/29/yarrow",
      "url": "https://myles.garden/2026/06/29/yarrow",
      "title": "How I Built Yarrow",
      "content_html": "   <p>Tarot’s had me for a few years. So I built <a href=\"https://yarrow.myles.garden\">Yarrow</a>, a three-card reader.</p>\n<p>Most spreads run past, present, future. Yarrow runs Root, Stem, Bloom: what’s beneath, where it stands, what it’s becoming.</p>\n<p>Past, present, future never sat right with me. It treats time like a straight line you’re stuck on. A reading should feel like growth, not a sentence being read out.</p>\n<p>So I stole the structure from a plant. Root holds what you don’t see. Stem is the part doing the work right now. Bloom is the thing you’re turning into, whether you meant to or not. Same three-card logic, better metaphor.</p>\n<p>Also I wanted to build something. Tarot was the excuse.</p>\n<h2>The Stack</h2>\n<p>I wanted tooling I half-knew and wanted to know better. <a href=\"https://astro.build\">Astro</a> for the structure, <a href=\"https://tailwindcss.com\">Tailwind</a> for the styling, <a href=\"https://svelte.dev\">Svelte</a> for the moving parts.</p>\n<p>I’ve been on Astro about two years, since <a href=\"https://wilkinson.graphics\">Henry</a> recommended it at a <a href=\"https://1rg.space\">1RG</a> Side Project Social. It’s fast to pick up and faster to get going. Yarrow was started with <a href=\"https://github.com/myles/understory\">understory</a>, my own Astro template, so most of the setup was already done.</p>\n<p>Tailwind has taken over enough of my day-to-day that I’ve forgotten half my raw CSS. I spend less time on syntax and more on how things should behave.</p>\n<p>Svelte handles the few interactive pieces on the site: the welcome widget on the landing page and the <a href=\"https://myles.garden/where\"><code>/where</code></a> page. I left Vue behind when the 2-to-3 migration started to feel like learning a new framework anyway. If I’m relearning something, it might as well be new.</p>\n<p>React was the other option. It carried more overhead than I wanted, and Svelte’s syntax is close enough to Vue that the switch was cheap.</p>\n<h2>The Design</h2>\n<p>I wanted the site simple. The cards are the whole point, so everything else gets out of the way. I opened Figma and sketched what I was after.</p>\n<figure><a href=\"https://uploads.myles.garden/posts/2026/06/29/yarrow/original-figma-sketch-of-yarrow.png\" target=\"_blank\">   <img src=\"https://myles.garden/_vercel/image?url=https%3A%2F%2Fuploads.myles.garden%2Fposts%2F2026%2F06%2F29%2Fyarrow%2Foriginal-figma-sketch-of-yarrow.png&amp;w=750&amp;q=100&amp;dpl=dpl_HHVC7cqy2RVoz4dSQ9A1PncH5diw\" alt=\"Hand-drawn wireframe with rough sketched borders: &quot;yarrow&quot; lettered top-left above a rule, and three empty card rectangles in a row labeled past, present, and future.\" width=\"768\" /> </a><figcaption><p>Figma sketch of three stacked card outlines labeled Root, Stem, Bloom on a\nblank canvas.</p></figcaption></figure>\n<p>I keep meaning to do more in Figma, sketch through to final design, but it boxes me in. I’d rather work in the browser, where I can see and click the thing the way a visitor will. So I sketched once and went straight to building.</p>\n<figure><a href=\"https://uploads.myles.garden/posts/2026/06/29/yarrow/first-deployed-version-of-yarrow.png\" target=\"_blank\">   <img src=\"https://myles.garden/_vercel/image?url=https%3A%2F%2Fuploads.myles.garden%2Fposts%2F2026%2F06%2F29%2Fyarrow%2Ffirst-deployed-version-of-yarrow.png&amp;w=750&amp;q=100&amp;dpl=dpl_HHVC7cqy2RVoz4dSQ9A1PncH5diw\" alt=\"Bare unstyled page on plain white: a black &quot;Yarrow&quot; heading, the tagline &quot;Pull a tarot spread. That is the whole site,&quot; and three Rider–Waite cards in a row, each with its meaning printed underneath. No position labels, no color, no parchment.\" width=\"768\" /> </a><figcaption><p>First deployed Yarrow: three plain cards on a white page, no styling.</p></figcaption></figure>\n<p>The first deploy was bare bones. It drew a spread on page load, and a new spread meant refreshing the page. Fine as an MVP, not what I wanted it to be.</p>\n<figure><a href=\"https://uploads.myles.garden/posts/2026/06/29/yarrow/final-version-of-yarrow-landing.png\" target=\"_blank\">   <img src=\"https://myles.garden/_vercel/image?url=https%3A%2F%2Fuploads.myles.garden%2Fposts%2F2026%2F06%2F29%2Fyarrow%2Ffinal-version-of-yarrow-landing.png&amp;w=750&amp;q=100&amp;dpl=dpl_HHVC7cqy2RVoz4dSQ9A1PncH5diw\" alt=\"Yarrow's landing page on warm parchment inside a dark green border. yarrow and myles.garden across the top, an intro line, then three empty card slots labeled ROOT, STEM, BLOOM with what's beneath it / where it stands now / what it's becoming. A dark green pull a spread button sits below.\" width=\"768\" /> </a><figcaption><p>Yarrow’s final landing page: three cards on a warm parchment background.</p></figcaption></figure>\n<p>I was going for a garden aesthetic. Didn’t quite get there. The parchment’s better anyway.</p>\n<h2>The Build</h2>\n<p>Pulling a spread needed to generate fresh content on click. I used <a href=\"https://docs.astro.build/en/guides/actions/\">Astro Actions</a> for that, Astro’s way of writing backend functions.</p>\n<figure><a href=\"https://uploads.myles.garden/posts/2026/06/29/yarrow/final-version-of-yarrow-spread-pulled.png\" target=\"_blank\">   <img src=\"https://myles.garden/_vercel/image?url=https%3A%2F%2Fuploads.myles.garden%2Fposts%2F2026%2F06%2F29%2Fyarrow%2Ffinal-version-of-yarrow-spread-pulled.png&amp;w=750&amp;q=100&amp;dpl=dpl_HHVC7cqy2RVoz4dSQ9A1PncH5diw\" alt=\"The same parchment layout with a spread drawn: three Rider–Waite cards face-up in the Root, Stem, and Bloom slots, one upright and two reversed. Two buttons below, &quot;pull another spread&quot; and &quot;get reading.&quot;\" width=\"768\" /> </a><figcaption><p>Card detail modal open over the spread, showing one card’s full meaning.</p></figcaption></figure>\n<p>The action takes a spread type and a deck. Right now it only does the three-card spread and the Rider–Waite deck, since the Internet Archive had a clean high-res scan of it. The spread-type argument is there for later, in case I ever build out the Celtic Cross.</p>\n<p>The Svelte component calls the action and lays out the cards, each with a CSS flip I wrote so the draw has a bit of motion.</p>\n<figure><a href=\"https://uploads.myles.garden/posts/2026/06/29/yarrow/final-version-of-yarrow-card-details-modal.png\" target=\"_blank\">   <img src=\"https://myles.garden/_vercel/image?url=https%3A%2F%2Fuploads.myles.garden%2Fposts%2F2026%2F06%2F29%2Fyarrow%2Ffinal-version-of-yarrow-card-details-modal.png&amp;w=750&amp;q=100&amp;dpl=dpl_HHVC7cqy2RVoz4dSQ9A1PncH5diw\" alt=\"A card-detail modal open over the dimmed spread. It shows The Sun, reversed, with a thumbnail, the FIRE and SUN keywords, upright and reversed meanings, keyword tags, and a longer description of the card.\" width=\"768\" /> </a><figcaption><p>Final version of Yarrow with the card details modal open.</p></figcaption></figure>\n<p>Click any card to go deeper on its meaning. The card data lives in <a href=\"https://docs.astro.build/en/guides/content-collections/\">Astro Content Collections</a>, one entry per card.</p>\n<h2>LLM Integration</h2>\n<p>I wanted Yarrow to offer a basic reading, and I wanted a project with a user-facing LLM integration. Until now I’d only ever called an LLM inside a long-running task, never anything a person was waiting on in real time.</p>\n<figure><a href=\"https://uploads.myles.garden/posts/2026/06/29/yarrow/final-version-of-yarrow-reading-modal.png\" target=\"_blank\">   <img src=\"https://myles.garden/_vercel/image?url=https%3A%2F%2Fuploads.myles.garden%2Fposts%2F2026%2F06%2F29%2Fyarrow%2Ffinal-version-of-yarrow-reading-modal.png&amp;w=750&amp;q=100&amp;dpl=dpl_HHVC7cqy2RVoz4dSQ9A1PncH5diw\" alt=\"A &quot;Your Tarot Reading&quot; modal open over the dimmed spread, filled with a paragraph of generated reflection that reads the three cards as one growing plant. The Root, Stem, and Bloom labels are visible behind it.\" width=\"768\" /> </a><figcaption><p>Yarrow with the reading modal open, generated text filling the panel beside\nthe three cards.</p></figcaption></figure>\n<p>Prompt injection had me wary, so there’s no free-text field anywhere. The model only gets structured input: each card’s position (Root, Stem, Bloom), whether it’s reversed, the card name, and its upright and reversed meanings.</p>\n<p>The system message tells the model it’s Yarrow, explains the Root/Stem/Bloom metaphor, and asks it to read the spread as a growing plant: a reflection, not a prediction.</p>\n<p>The user message looks like this:</p>\n<pre><code><span><span>The spread:</span></span>\n<span><span>Root — Devil (reversed): Breaking free, recognising what binds you, or releasing an unhealthy pattern.</span></span>\n<span><span>Stem — Five of Swords (upright): The Five of Swords asks what the victory actually cost. Winning through deception or cruelty leaves something broken that doesn't easily repair.</span></span>\n<span><span>Bloom — King of Pentacles (reversed): Corruption, materialism, or stability that has become stagnation.</span></span></code></pre>\n<p>I wanted the text to stream in so it reads as coming straight from the model, which meant reaching for an <a href=\"https://docs.astro.build/en/guides/endpoints/\">Astro Endpoint</a>. Between this, the Actions, and the Svelte components, I leaned on Astro’s <a href=\"https://docs.astro.build/en/concepts/islands/\">Islands architecture</a> for most of the project.</p>\n<hr />\n<p>Yarrow’s live at <a href=\"https://yarrow.myles.garden\">yarrow.myles.garden</a>. The thing I set out to build is the thing that runs: a reading that feels like growth, not a verdict.</p>\n<p>The reading sits behind a flag I can flip off. If the LLM ever stops earning its place, the cards still pull and the meanings still hold, the generated reading just goes quiet. I’d rather the feature be optional than load-bearing.</p>\n<p>I’d structure the LLM input the same way again. The garden look I’d push further. And the spread-type argument is still sitting there, waiting for a Celtic Cross.</p>   ",
      "summary": "Yarrow is a Tarot reader that runs on Astro, Tailwind, and Svelte, with an LLM doing the reading.",
      "date_published": "2026-06-29T16:59:07.000Z",
      "authors": [
        {
          "name": "myles",
          "url": "https://myles.garden/",
          "avatar": "https://myles.garden/_vercel/image?url=https%3A%2F%2Fuploads.myles.garden%2Fpersona-pfps%2Fmyles.jpg&w=640&q=100&dpl=dpl_HHVC7cqy2RVoz4dSQ9A1PncH5diw"
        }
      ],
      "tags": [
        "Yarrow",
        "Astro",
        "Svelte",
        "Tailwind CSS"
      ],
      "attachments": []
    },
    {
      "id": "https://myles.garden/2026/06/28/design-pebble-watchface",
      "url": "https://myles.garden/2026/06/28/design-pebble-watchface",
      "external_url": "https://www.jonashietala.se/blog/2026/06/26/designing_a_personal_pebble_watchface/",
      "content_html": "   <p>Interesting tutorial by Jonas Hietala on <a href=\"https://www.jonashietala.se/blog/2026/06/26/designing_a_personal_pebble_watchface/\">designing a personal Pebble watchface</a>. I like the idea of using a watchface to display personal information, and this tutorial provides a good starting point for creating one.</p>   ",
      "date_published": "2026-06-28T17:03:26.000Z",
      "authors": [
        {
          "name": "myles",
          "url": "https://myles.garden/",
          "avatar": "https://myles.garden/_vercel/image?url=https%3A%2F%2Fuploads.myles.garden%2Fpersona-pfps%2Fmyles.jpg&w=640&q=100&dpl=dpl_HHVC7cqy2RVoz4dSQ9A1PncH5diw"
        }
      ],
      "tags": [
        "Pebble"
      ],
      "attachments": []
    },
    {
      "id": "https://myles.garden/2026/06/25/astro-jsonfeed",
      "url": "https://myles.garden/2026/06/25/astro-jsonfeed",
      "content_html": "   <p>Built a docs site for <a href=\"https://astro-jsonfeed.myles.garden\">astro-jsonfeed</a>, powered by <a href=\"https://starlight.astro.build\">Starlight</a>. Setup was painless. Took an afternoon.</p>   ",
      "date_published": "2026-06-25T16:57:53.000Z",
      "authors": [
        {
          "name": "myles",
          "url": "https://myles.garden/",
          "avatar": "https://myles.garden/_vercel/image?url=https%3A%2F%2Fuploads.myles.garden%2Fpersona-pfps%2Fmyles.jpg&w=640&q=100&dpl=dpl_HHVC7cqy2RVoz4dSQ9A1PncH5diw"
        }
      ],
      "tags": [
        "astro-jsonfeed"
      ],
      "attachments": []
    },
    {
      "id": "https://myles.garden/2026/06/23/koi-fish",
      "url": "https://myles.garden/2026/06/23/koi-fish",
      "content_html": "   <p>Love these koi in Graffiti Alley.</p>   <div> <div> <img src=\"https://uploads.myles.garden/posts/2026/06/23/koi-fish/koi-fish-1.jpg\" alt=\"Two koi-shaped paste-ups stuck to a graffitied concrete sidewalk, shot from above. Both fish are white with abstract patches of colour — the upper one scattered with black, yellow, red, purple and green spots and halftone dots, the lower one filled with a vertical rainbow gradient and black markings. Faded blue and red spray paint surrounds them; the toes of a pair of tan shoes show at the bottom edge.\" /> </div><div> <img src=\"https://uploads.myles.garden/posts/2026/06/23/koi-fish/koi-fish-2.jpg\" alt=\"Two painted koi on grey concrete at night, seen from above. Both have the classic white, orange and black markings of calico koi and cast soft shadows. One swims horizontally near the top, the other points downward below it. A green-painted curb and a graffitied brick wall sit along the top edge, with a light shoe at the bottom.\" /> </div> </div>",
      "date_published": "2026-06-24T00:00:00.000Z",
      "authors": [
        {
          "name": "myles",
          "url": "https://myles.garden/",
          "avatar": "https://myles.garden/_vercel/image?url=https%3A%2F%2Fuploads.myles.garden%2Fpersona-pfps%2Fmyles.jpg&w=640&q=100&dpl=dpl_HHVC7cqy2RVoz4dSQ9A1PncH5diw"
        }
      ],
      "tags": [
        "Graffiti Alley",
        "Graffiti"
      ],
      "attachments": [
        {
          "url": "https://uploads.myles.garden/posts/2026/06/23/koi-fish/koi-fish-1.jpg",
          "mime_type": "image/jpeg",
          "title": "Two koi-shaped paste-ups stuck to a graffitied concrete sidewalk, shot from above. Both fish are white with abstract patches of colour — the upper one scattered with black, yellow, red, purple and green spots and halftone dots, the lower one filled with a vertical rainbow gradient and black markings. Faded blue and red spray paint surrounds them; the toes of a pair of tan shoes show at the bottom edge."
        },
        {
          "url": "https://uploads.myles.garden/posts/2026/06/23/koi-fish/koi-fish-2.jpg",
          "mime_type": "image/jpeg",
          "title": "Two painted koi on grey concrete at night, seen from above. Both have the classic white, orange and black markings of calico koi and cast soft shadows. One swims horizontally near the top, the other points downward below it. A green-painted curb and a graffitied brick wall sit along the top edge, with a light shoe at the bottom."
        }
      ]
    },
    {
      "id": "https://myles.garden/2026/06/17/yarrow",
      "url": "https://myles.garden/2026/06/17/yarrow",
      "content_html": "   <p>I built a new website, <a href=\"https://yarrow.myles.garden\">Yarrow</a>. It pulls a three-card tarot spread every time you visit. A fun side-project built with <a href=\"https://astro.build\">Astro</a>, <a href=\"https://svelte.dev\">Svelte</a>, and <a href=\"https://tailwindcss.com\">Tailwind</a>. I’ve got a bunch of ideas for it, but wanted to get a basic version out first.</p>   ",
      "date_published": "2026-06-17T17:09:40.000Z",
      "authors": [
        {
          "name": "myles",
          "url": "https://myles.garden/",
          "avatar": "https://myles.garden/_vercel/image?url=https%3A%2F%2Fuploads.myles.garden%2Fpersona-pfps%2Fmyles.jpg&w=640&q=100&dpl=dpl_HHVC7cqy2RVoz4dSQ9A1PncH5diw"
        }
      ],
      "tags": [
        "Yarrow",
        "Astro",
        "Svelte",
        "Tailwind CSS"
      ],
      "attachments": []
    },
    {
      "id": "https://myles.garden/2026/06/16/love-yourself-1999-electronic-demo",
      "url": "https://myles.garden/2026/06/16/love-yourself-1999-electronic-demo",
      "content_html": "  <p>My current jam is <em>Love Yourself (1999 Electronic Demo)</em> by Sufjan Stevens.</p>   <div> <div> <img src=\"https://uploads.myles.garden/posts/2026/06/16/love-yourself-1999-electronic-demo/love-yourself-with-my-whole-heart.jpg\" alt=\"Album cover for Sufjan Stevens' EP Love Yourself / With My Whole Heart.\" /> </div> </div>",
      "date_published": "2026-06-16T15:26:36.000Z",
      "authors": [
        {
          "name": "myles",
          "url": "https://myles.garden/",
          "avatar": "https://myles.garden/_vercel/image?url=https%3A%2F%2Fuploads.myles.garden%2Fpersona-pfps%2Fmyles.jpg&w=640&q=100&dpl=dpl_HHVC7cqy2RVoz4dSQ9A1PncH5diw"
        }
      ],
      "tags": [
        "This Is [Myles] Jam",
        "Sufjan Stevens"
      ],
      "attachments": [
        {
          "url": "https://uploads.myles.garden/posts/2026/06/16/love-yourself-1999-electronic-demo/love-yourself-with-my-whole-heart.jpg",
          "mime_type": "image/jpeg",
          "title": "Album cover for Sufjan Stevens' EP Love Yourself / With My Whole Heart."
        }
      ]
    },
    {
      "id": "https://myles.garden/2026/06/10/art-in-high-park",
      "url": "https://myles.garden/2026/06/10/art-in-high-park",
      "content_html": "   <p>Spent the evening in High Park at 1RG’s Art in the Park event. Drew some trees. A squirrel came by to critique.</p>   <div> <div> <img src=\"https://uploads.myles.garden/posts/2026/06/10/art-in-high-park/buildings-on-the-lake.jpg\" alt=\"Condo towers catching golden-hour light across Grenadier Pond, framed between a willow and a bare dead tree, reflections rippling on the water.\" /> </div><div> <img src=\"https://uploads.myles.garden/posts/2026/06/10/art-in-high-park/my-bad-pen-art.jpg\" alt=\"Loose pen sketch of three gnarled trees in blue ink with green scribbled foliage and red grass accents, drawn on paper balanced on a yellow book in the sun.\" /> </div><div> <img src=\"https://uploads.myles.garden/posts/2026/06/10/art-in-high-park/squirrel.jpg\" alt=\"Grey squirrel standing upright in a grassy clearing, paws tucked to its chest, staring directly at the camera.\" /> </div><div> <img src=\"https://uploads.myles.garden/posts/2026/06/10/art-in-high-park/sunset-on-the-lake.jpg\" alt=\"Sun dipping behind the treeline across Grenadier Pond, orange sky reflected in still water, reeds and driftwood silhouetted along the shore.\" /> </div> </div>",
      "date_published": "2026-06-11T01:45:31.000Z",
      "authors": [
        {
          "name": "myles",
          "url": "https://myles.garden/",
          "avatar": "https://myles.garden/_vercel/image?url=https%3A%2F%2Fuploads.myles.garden%2Fpersona-pfps%2Fmyles.jpg&w=640&q=100&dpl=dpl_HHVC7cqy2RVoz4dSQ9A1PncH5diw"
        }
      ],
      "tags": [
        "High Park"
      ],
      "attachments": [
        {
          "url": "https://uploads.myles.garden/posts/2026/06/10/art-in-high-park/buildings-on-the-lake.jpg",
          "mime_type": "image/jpeg",
          "title": "Condo towers catching golden-hour light across Grenadier Pond, framed between a willow and a bare dead tree, reflections rippling on the water."
        },
        {
          "url": "https://uploads.myles.garden/posts/2026/06/10/art-in-high-park/my-bad-pen-art.jpg",
          "mime_type": "image/jpeg",
          "title": "Loose pen sketch of three gnarled trees in blue ink with green scribbled foliage and red grass accents, drawn on paper balanced on a yellow book in the sun."
        },
        {
          "url": "https://uploads.myles.garden/posts/2026/06/10/art-in-high-park/squirrel.jpg",
          "mime_type": "image/jpeg",
          "title": "Grey squirrel standing upright in a grassy clearing, paws tucked to its chest, staring directly at the camera."
        },
        {
          "url": "https://uploads.myles.garden/posts/2026/06/10/art-in-high-park/sunset-on-the-lake.jpg",
          "mime_type": "image/jpeg",
          "title": "Sun dipping behind the treeline across Grenadier Pond, orange sky reflected in still water, reeds and driftwood silhouetted along the shore."
        }
      ]
    },
    {
      "id": "https://myles.garden/2026/06/08/neocities-deploy-github-actions",
      "url": "https://myles.garden/2026/06/08/neocities-deploy-github-actions",
      "title": "Neocities Deploy from GitHub Actions",
      "content_html": "   <p>I redesigned my <a href=\"https://myles.neocities.org\">Neocities site</a> to lean harder into a GeoCities look. While I was in there, I wanted a deploy process simple enough to run from my iPad.</p>\n<p><a href=\"https://neocities.org\">Neocities</a> is dead-simple hosting for static sites. <a href=\"https://bret.io/\">Bret Comnes</a> already built a GitHub Action for deploying to it, so the hard part was done. I just wanted a clean test run before pointing it at the live site.</p>\n<p><code>ci.yml</code> runs Prettier over the code and builds the site. It fires on any push to <code>main</code>, any pull request, or a manual trigger.</p>\n<pre><code><span><span>name</span><span>: </span><span>CI</span></span>\n<span></span>\n<span><span># I wanted the CI to run on any push to main, pull request, or</span></span>\n<span><span># manually triggered.</span></span>\n<span><span>on</span><span>:</span></span>\n<span><span>  push</span><span>:</span></span>\n<span><span>    branches</span><span>: [</span><span>main</span><span>]</span></span>\n<span><span>  pull_request</span><span>:</span></span>\n<span><span>    branches</span><span>: [</span><span>main</span><span>]</span></span>\n<span><span>  workflow_dispatch</span><span>:</span></span>\n<span></span>\n<span><span>jobs</span><span>:</span></span>\n<span><span>  ci</span><span>:</span></span>\n<span><span>    runs-on</span><span>: </span><span>ubuntu-latest</span></span>\n<span></span>\n<span><span>    steps</span><span>:</span></span>\n<span><span>      - </span><span>id</span><span>: </span><span>checkout</span></span>\n<span><span>        name</span><span>: </span><span><span>📥</span> Checkout code</span></span>\n<span><span>        uses</span><span>: </span><span>actions/checkout@v4</span></span>\n<span><span>        with</span><span>:</span></span>\n<span><span>          lfs</span><span>: </span><span>true</span></span>\n<span></span>\n<span><span>      - </span><span>id</span><span>: </span><span>setup-node</span></span>\n<span><span>        name</span><span>: </span><span><span>⚙️</span> Setup Node.js</span></span>\n<span><span>        uses</span><span>: </span><span>actions/setup-node@v4</span></span>\n<span><span>        with</span><span>:</span></span>\n<span><span>          node-version-file</span><span>: </span><span>\".nvmrc\"</span></span>\n<span><span>          cache</span><span>: </span><span>\"npm\"</span></span>\n<span></span>\n<span><span>      - </span><span>id</span><span>: </span><span>install-dependencies</span></span>\n<span><span>        name</span><span>: </span><span><span>📦</span> Install dependencies</span></span>\n<span><span>        run</span><span>: </span><span>npm ci</span></span>\n<span></span>\n<span><span>      - </span><span>id</span><span>: </span><span>cache-dependencies</span></span>\n<span><span>        name</span><span>: </span><span><span>📂</span> Cache dependencies</span></span>\n<span><span>        uses</span><span>: </span><span>actions/cache@v4</span></span>\n<span><span>        with</span><span>:</span></span>\n<span><span>          path</span><span>: </span><span>~/.npm</span></span>\n<span><span>          key</span><span>: </span><span>${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}</span></span>\n<span><span>          restore-keys</span><span>: </span><span>|</span></span>\n<span><span>            ${{ runner.os }}-npm-</span></span>\n<span></span>\n<span><span>      - </span><span>id</span><span>: </span><span>prettier-check</span></span>\n<span><span>        name</span><span>: </span><span><span>💅</span> Run Prettier check</span></span>\n<span><span>        run</span><span>: </span><span>npm run prettier</span></span>\n<span></span>\n<span><span>      # In the future I'll probably add `astro check` support</span></span>\n<span><span>      # here: &lt;https://docs.astro.build/en/guides/typescript/#type-checking&gt;</span></span>\n<span></span>\n<span><span>      - </span><span>id</span><span>: </span><span>build</span></span>\n<span><span>        name</span><span>: </span><span><span>🏗️</span> Build website</span></span>\n<span><span>        run</span><span>: </span><span>npm run build</span></span></code></pre>\n<p><code>cd.yml</code> does the actual deploy. It hooks into the <code>workflow_run</code> event, which fires whenever CI finishes, and only proceeds if that run succeeded on main.</p>\n<pre><code><span><span>name</span><span>: </span><span>CD</span></span>\n<span></span>\n<span><span># I want the CD to only run if CI succeeded on main.</span></span>\n<span><span>on</span><span>:</span></span>\n<span><span>  workflow_run</span><span>:</span></span>\n<span><span>    branches</span><span>: [</span><span>\"main\"</span><span>]</span></span>\n<span><span>    types</span><span>: [</span><span>\"completed\"</span><span>]</span></span>\n<span><span>    workflows</span><span>: [</span><span>\"CI\"</span><span>]</span></span>\n<span><span>  # It would be nice if we can only allow this to be deployed</span></span>\n<span><span>  # from `main`, but GitHub doesn't support that right now.</span></span>\n<span><span>  workflow_dispatch</span><span>:</span></span>\n<span></span>\n<span><span>concurrency</span><span>:</span></span>\n<span><span>  group</span><span>: </span><span>cd</span></span>\n<span><span>  cancel-in-progress</span><span>: </span><span>true</span></span>\n<span></span>\n<span><span>jobs</span><span>:</span></span>\n<span><span>  cd</span><span>:</span></span>\n<span><span>    runs-on</span><span>: </span><span>ubuntu-latest</span></span>\n<span><span>    if</span><span>: </span><span>${{ github.event.workflow_run.conclusion == 'success' }}</span></span>\n<span></span>\n<span><span>    steps</span><span>:</span></span>\n<span><span>      - </span><span>id</span><span>: </span><span>checkout</span></span>\n<span><span>        name</span><span>: </span><span><span>📥</span> Checkout code</span></span>\n<span><span>        uses</span><span>: </span><span>actions/checkout@v4</span></span>\n<span><span>        with</span><span>:</span></span>\n<span><span>          lfs</span><span>: </span><span>true</span></span>\n<span></span>\n<span><span>      - </span><span>id</span><span>: </span><span>setup-node</span></span>\n<span><span>        name</span><span>: </span><span><span>⚙️</span> Setup Node.js</span></span>\n<span><span>        uses</span><span>: </span><span>actions/setup-node@v4</span></span>\n<span><span>        with</span><span>:</span></span>\n<span><span>          node-version-file</span><span>: </span><span>\".nvmrc\"</span></span>\n<span><span>          cache</span><span>: </span><span>\"npm\"</span></span>\n<span></span>\n<span><span>      - </span><span>id</span><span>: </span><span>install-dependencies</span></span>\n<span><span>        name</span><span>: </span><span><span>📦</span> Install dependencies</span></span>\n<span><span>        run</span><span>: </span><span>npm ci</span></span>\n<span></span>\n<span><span>      - </span><span>id</span><span>: </span><span>cache-dependencies</span></span>\n<span><span>        name</span><span>: </span><span><span>📂</span> Cache dependencies</span></span>\n<span><span>        uses</span><span>: </span><span>actions/cache@v4</span></span>\n<span><span>        with</span><span>:</span></span>\n<span><span>          path</span><span>: </span><span>~/.npm</span></span>\n<span><span>          key</span><span>: </span><span>${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}</span></span>\n<span><span>          restore-keys</span><span>: </span><span>|</span></span>\n<span><span>            ${{ runner.os }}-npm-</span></span>\n<span></span>\n<span><span>      - </span><span>id</span><span>: </span><span>build</span></span>\n<span><span>        name</span><span>: </span><span><span>🏗️</span> Build website</span></span>\n<span><span>        run</span><span>: </span><span>npm run build</span></span>\n<span></span>\n<span><span>      - </span><span>id</span><span>: </span><span>deploy</span></span>\n<span><span>        name</span><span>: </span><span><span>🚀</span> Deploy to Neocities</span></span>\n<span><span>        uses</span><span>: </span><span>bcomnes/deploy-to-neocities@v3</span></span>\n<span><span>        with</span><span>:</span></span>\n<span><span>          api_key</span><span>: </span><span>${{ secrets.NEOCITIES_API_TOKEN }}</span></span>\n<span><span>          cleanup</span><span>: </span><span>false</span></span>\n<span><span>          neocities_supporter</span><span>: </span><span>true</span></span>\n<span><span>          preview_before_deploy</span><span>: </span><span>true</span></span>\n<span><span>          dist_dir</span><span>: </span><span>dist/</span></span></code></pre>\n<p>Yes, that’s two builds. CD rebuilds instead of pulling CI’s output so I can run the deploy on its own when I need to, without depending on a CI run existing.</p>\n<p>If you want to see the full code, it’s all open source on the <a href=\"https://github.com/myles/myles-neocities-org\">GitHub repository</a>.</p>   ",
      "summary": "A CI workflow to lint and build, a CD workflow to deploy to Neocities, and a brief defense of why I build the site twice.",
      "date_published": "2026-06-08T20:49:23.000Z",
      "authors": [
        {
          "name": "myles",
          "url": "https://myles.garden/",
          "avatar": "https://myles.garden/_vercel/image?url=https%3A%2F%2Fuploads.myles.garden%2Fpersona-pfps%2Fmyles.jpg&w=640&q=100&dpl=dpl_HHVC7cqy2RVoz4dSQ9A1PncH5diw"
        }
      ],
      "tags": [
        "Neocities",
        "GitHub Actions",
        "Software Engineering"
      ],
      "attachments": []
    },
    {
      "id": "https://myles.garden/2026/06/08/blue-sky",
      "url": "https://myles.garden/2026/06/08/blue-sky",
      "content_html": "   <p>Summer in Toronto.</p>   <div> <div> <img src=\"https://uploads.myles.garden/posts/2026/06/08/blue-sky/blue-sky.jpg\" alt=\"Cloudless blue sky over a leafy residential Toronto street, sky filling most of the frame. Green trees line both sides; a gabled wood-and-shingle house with a second-floor balcony anchors the right, a pale apartment block sits behind trees on the left. Utility lines cross the middle. At the curb, a red STOP sign below a yellow ENDS sign. A faint daytime moon hangs at upper left.\" /> </div> </div>",
      "date_published": "2026-06-08T16:18:53.000Z",
      "authors": [
        {
          "name": "myles",
          "url": "https://myles.garden/",
          "avatar": "https://myles.garden/_vercel/image?url=https%3A%2F%2Fuploads.myles.garden%2Fpersona-pfps%2Fmyles.jpg&w=640&q=100&dpl=dpl_HHVC7cqy2RVoz4dSQ9A1PncH5diw"
        }
      ],
      "tags": [
        "City of Toronto"
      ],
      "attachments": [
        {
          "url": "https://uploads.myles.garden/posts/2026/06/08/blue-sky/blue-sky.jpg",
          "mime_type": "image/jpeg",
          "title": "Blue Sky"
        }
      ]
    },
    {
      "id": "https://myles.garden/2026/06/07/raccoon",
      "url": "https://myles.garden/2026/06/07/raccoon",
      "content_html": "   <p>Saw this raccoon outside the Legislative Assembly of Ontario.</p>   <div> <div> <img src=\"https://uploads.myles.garden/posts/2026/06/07/raccoon/raccoon.jpg\" alt=\"A raccoon crosses a floodlit lawn at the foot of a large tree at night, the lit windows of Queen's Park behind it. A '10' is painted on the road in the foreground.\" /> </div> </div>",
      "date_published": "2026-06-08T03:22:18.000Z",
      "authors": [
        {
          "name": "myles",
          "url": "https://myles.garden/",
          "avatar": "https://myles.garden/_vercel/image?url=https%3A%2F%2Fuploads.myles.garden%2Fpersona-pfps%2Fmyles.jpg&w=640&q=100&dpl=dpl_HHVC7cqy2RVoz4dSQ9A1PncH5diw"
        }
      ],
      "tags": [
        "City of Toronto"
      ],
      "attachments": [
        {
          "url": "https://uploads.myles.garden/posts/2026/06/07/raccoon/raccoon.jpg",
          "mime_type": "image/jpeg",
          "title": "Raccoon"
        }
      ]
    },
    {
      "id": "https://myles.garden/2026/06/06/they-them",
      "url": "https://myles.garden/2026/06/06/they-them",
      "content_html": "   <p>Love this poem I found:</p>\n<blockquote>\n<p><strong>They/Them</strong><br />\n<em>(dedicated to Nex Benedict)</em></p>\n<p>If God created night &amp; day<br />\n&amp; dawn, of course<br />\n&amp; dusk<br />\n&amp; the tangerine rosepink sunset<br />\n&amp; the deep amethyst twilight<br />\n&amp; the infact bright of morning</p>\n<p>the to perceive the world in binary is to forgo knowledge of the divine.</p>\n</blockquote>   <div> <div> <img src=\"https://uploads.myles.garden/posts/2026/06/06/they-them/they-them.jpg\" alt=\"A printed poem on cream-coloured paper, photographed close up. The title reads &quot;THEY/THEM&quot; in small caps, with an italic dedication to Nex Benedict beneath it. The poem is set in a serif typeface, its lines built from ampersands as it moves through times of day — dawn, dusk, sunset, twilight, morning — before closing on a two-line stanza about binary perception and the divine.\" /> </div> </div>",
      "date_published": "2026-06-06T17:07:02.000Z",
      "authors": [
        {
          "name": "myles",
          "url": "https://myles.garden/",
          "avatar": "https://myles.garden/_vercel/image?url=https%3A%2F%2Fuploads.myles.garden%2Fpersona-pfps%2Fmyles.jpg&w=640&q=100&dpl=dpl_HHVC7cqy2RVoz4dSQ9A1PncH5diw"
        }
      ],
      "attachments": [
        {
          "url": "https://uploads.myles.garden/posts/2026/06/06/they-them/they-them.jpg",
          "mime_type": "image/jpeg",
          "title": "A printed poem on cream-coloured paper, photographed close up. The title reads \"THEY/THEM\" in small caps, with an italic dedication to Nex Benedict beneath it. The poem is set in a serif typeface, its lines built from ampersands as it moves through times of day — dawn, dusk, sunset, twilight, morning — before closing on a two-line stanza about binary perception and the divine."
        }
      ]
    },
    {
      "id": "https://myles.garden/2026/06/02/street-art",
      "url": "https://myles.garden/2026/06/02/street-art",
      "content_html": "   <p>Love this Basquiatist graffiti.</p>   <div> <div> <img src=\"https://uploads.myles.garden/posts/2026/06/02/street-art/street-art.jpg\" alt=\"Two painted canvases leaning against a graffiti-covered brick wall in a dim alley at night. The larger central canvas is a black ink-and-charcoal drawing on a cream ground: elongated, sketchy human profiles and faces, with one figure in a coat holding a cigarette near a tiny orange figure perched on the hand. Below the image it's titled &quot;BIDDING WAR,&quot; dated &quot;2 JUNE 2026,&quot; and signed &quot;GRAF ALLEY&quot; with a heart and an artist's signature. A smaller canvas to the left, in the same scratchy style, shows two faces and reads &quot;SOLVE &amp; RASOLUTE.&quot; Behind them the wall is covered in red, teal, and grey graffiti, including a snarling wolf and the word &quot;RASCAL&quot; in red. On the concrete in the foreground, handwriting reads &quot;LIFE &amp; DEATH ARE THINGS YOU JUST DO WHEN YOU'RE BORED,&quot; and beside a small sketch, &quot;YOU CAN'T TAKE THIS ONE&quot; with an arrow.\" /> </div> </div>",
      "date_published": "2026-06-03T03:52:00.000Z",
      "authors": [
        {
          "name": "myles",
          "url": "https://myles.garden/",
          "avatar": "https://myles.garden/_vercel/image?url=https%3A%2F%2Fuploads.myles.garden%2Fpersona-pfps%2Fmyles.jpg&w=640&q=100&dpl=dpl_HHVC7cqy2RVoz4dSQ9A1PncH5diw"
        }
      ],
      "tags": [
        "Graffiti",
        "Graffiti Alley"
      ],
      "attachments": [
        {
          "url": "https://uploads.myles.garden/posts/2026/06/02/street-art/street-art.jpg",
          "mime_type": "image/jpeg",
          "title": "Two painted canvases leaning against a graffiti-covered brick wall in a dim alley at night. The larger central canvas is a black ink-and-charcoal drawing on a cream ground: elongated, sketchy human profiles and faces, with one figure in a coat holding a cigarette near a tiny orange figure perched on the hand. Below the image it's titled \"BIDDING WAR,\" dated \"2 JUNE 2026,\" and signed \"GRAF ALLEY\" with a heart and an artist's signature. A smaller canvas to the left, in the same scratchy style, shows two faces and reads \"SOLVE & RASOLUTE.\" Behind them the wall is covered in red, teal, and grey graffiti, including a snarling wolf and the word \"RASCAL\" in red. On the concrete in the foreground, handwriting reads \"LIFE & DEATH ARE THINGS YOU JUST DO WHEN YOU'RE BORED,\" and beside a small sketch, \"YOU CAN'T TAKE THIS ONE\" with an arrow."
        }
      ]
    },
    {
      "id": "https://myles.garden/2026/06/02/dog-library",
      "url": "https://myles.garden/2026/06/02/dog-library",
      "content_html": "      <div> <div> <img src=\"https://uploads.myles.garden/posts/2026/06/02/dog-library/dog-library.jpg\" alt=\"A hand-lettered cardboard sign staked into a grassy curb strip. The top reads &quot;DOG LIBRARY&quot; in colored block capitals; beneath it, smaller handwritten text says &quot;TAKE A STICK / LEAVE A STICK (OPTIONAL).&quot; A few sticks lie scattered in the grass below the sign. A sidewalk runs along the left, and a young staked tree sits in a mulch bed to the right.\" /> </div> </div>",
      "date_published": "2026-06-02T21:00:00.000Z",
      "authors": [
        {
          "name": "myles",
          "url": "https://myles.garden/",
          "avatar": "https://myles.garden/_vercel/image?url=https%3A%2F%2Fuploads.myles.garden%2Fpersona-pfps%2Fmyles.jpg&w=640&q=100&dpl=dpl_HHVC7cqy2RVoz4dSQ9A1PncH5diw"
        }
      ],
      "tags": [
        "Junction Triangle"
      ],
      "attachments": [
        {
          "url": "https://uploads.myles.garden/posts/2026/06/02/dog-library/dog-library.jpg",
          "mime_type": "image/jpeg",
          "title": "A hand-lettered cardboard sign staked into a grassy curb strip. The top reads \"DOG LIBRARY\" in colored block capitals; beneath it, smaller handwritten text says \"TAKE A STICK / LEAVE A STICK (OPTIONAL).\" A few sticks lie scattered in the grass below the sign. A sidewalk runs along the left, and a young staked tree sits in a mulch bed to the right."
        }
      ]
    },
    {
      "id": "https://myles.garden/2026/06/02/mechanical-pencil",
      "url": "https://myles.garden/2026/06/02/mechanical-pencil",
      "external_url": "https://mechanical-pencil.com",
      "content_html": "   <p><a href=\"https://mechanical-pencil.com\">Mechanical Pencil</a> is a collection of illustrated tear-downs of everyday products by <a href=\"https://www.bryanmacomber.com\">Bryan Macomber</a>. The <a href=\"https://mechanical-pencil.com/products/zippo\">Zippo tear-down</a> is particularly impressive.</p>   ",
      "date_published": "2026-06-02T15:57:11.000Z",
      "authors": [
        {
          "name": "myles",
          "url": "https://myles.garden/",
          "avatar": "https://myles.garden/_vercel/image?url=https%3A%2F%2Fuploads.myles.garden%2Fpersona-pfps%2Fmyles.jpg&w=640&q=100&dpl=dpl_HHVC7cqy2RVoz4dSQ9A1PncH5diw"
        }
      ],
      "attachments": []
    }
  ]
}