41554 blogs · [ { "id": "01a0b68b-4cdc-70ce-a080-0df5c8944550", "title": "localghost (Sophie Koonin)", "url": "https://localghost.dev", "published_at": "2026-09-07T05:20:44+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13b3956af5", "title": "Turning my sad gaming PC into a media server", "url": "https://localghost.dev/blog/turning-my-sad-gaming-pc-into-a-media-server/", "published_at": "2026-08-30T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13b3a50c3c", "title": "Returning to owning things in a streaming world", "url": "https://localghost.dev/blog/returning-to-owning-things-in-a-streaming-world/", "published_at": "2026-08-29T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13b44d3d73", "title": "Some things I’ve been enjoying: August 2026", "url": "https://localghost.dev/blog/some-things-i-ve-been-enjoying-august-2026/", "published_at": "2026-08-16T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13b5094555", "title": "Time-based background colour transitions with Temporal and CSS color-mix", "url": "https://localghost.dev/blog/time-based-background-colour-transitions-with-temporal-and-css-color-mix/", "published_at": "2026-07-05T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13b5372c10", "title": "Making an original Jubilee line door button into a Hue light switch", "url": "https://localghost.dev/blog/making-an-original-jubilee-line-door-button-into-a-hue-light-switch/", "published_at": "2026-05-02T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13b5618dc4", "title": "Stop generating, start thinking", "url": "https://localghost.dev/blog/stop-generating-start-thinking/", "published_at": "2026-02-08T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13b5ce6c83", "title": "2025: The year in lists", "url": "https://localghost.dev/blog/2025-the-year-in-lists/", "published_at": "2025-12-30T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13b6424095", "title": "This website is for humans", "url": "https://localghost.dev/blog/this-website-is-for-humans/", "published_at": "2025-08-08T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13b66d6675", "title": "Touching grass (and shrubs, and flowers, and dog)", "url": "https://localghost.dev/blog/touching-grass-and-shrubs-and-flowers-and-dog/", "published_at": "2025-07-05T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13b7257b76", "title": "This page is under construction", "url": "https://localghost.dev/blog/this-page-is-under-construction/", "published_at": "2025-02-22T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13b75d7021", "title": "The blog questions challenge", "url": "https://localghost.dev/blog/the-blog-questions-challenge/", "published_at": "2025-02-18T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13b7c549be", "title": "Good links: 16 February 2025", "url": "https://localghost.dev/blog/good-links-2025-02-16/", "published_at": "2025-02-16T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13b7eed9a7", "title": "Good links: 9 February 2025", "url": "https://localghost.dev/blog/good-links-2025-02-09/", "published_at": "2025-02-09T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13b8acb3cc", "title": "My month of rest and relaxation", "url": "https://localghost.dev/blog/my-month-of-rest-and-relaxation/", "published_at": "2025-01-16T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13b967e2ed", "title": "I repaired my Steam Deck and it was fine, actually", "url": "https://localghost.dev/blog/i-repaired-my-steam-deck-and-it-was-fine-actually/", "published_at": "2025-01-13T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13b9afa203", "title": "2024: The year in lists", "url": "https://localghost.dev/blog/2024-the-year-in-lists/", "published_at": "2024-12-26T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13b9b5ccf8", "title": "Good links: 8 December 2024", "url": "https://localghost.dev/blog/good-links-2024-12-08/", "published_at": "2024-12-08T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13b9ddcccc", "title": "Some things I've been enjoying recently (November 2024 edition)", "url": "https://localghost.dev/blog/some-things-i-ve-been-enjoying-recently-november-2024-edition/", "published_at": "2024-11-30T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13bad7d128", "title": "The art in everyday life", "url": "https://localghost.dev/blog/the-art-in-everyday-life/", "published_at": "2024-11-12T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13bb660ecb", "title": "Good links: 22 September 2024", "url": "https://localghost.dev/blog/good-links-2024-09-22/", "published_at": "2024-09-22T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13bbe69286", "title": "You should go to conferences", "url": "https://localghost.dev/blog/you-should-go-to-conferences/", "published_at": "2024-09-16T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13bcd9c563", "title": "New garden theme", "url": "https://localghost.dev/blog/new-garden-theme/", "published_at": "2024-09-15T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13bd94c2d9", "title": "Good links: 15 September 2024", "url": "https://localghost.dev/blog/good-links-2024-09-15/", "published_at": "2024-09-15T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13be0b570c", "title": "Good links: 18 August 2024", "url": "https://localghost.dev/blog/good-links-2024-08-18/", "published_at": "2024-08-18T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13bf028005", "title": "liveness probe", "url": "https://localghost.dev/blog/liveness-probe/", "published_at": "2024-08-12T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13bf520831", "title": "Different ways to mock third-party integrations in Jest", "url": "https://localghost.dev/blog/different-ways-to-mock-third-party-integrations-in-jest/", "published_at": "2024-05-12T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13bf71be15", "title": "Good links: 12 May 2024", "url": "https://localghost.dev/blog/good-links-2024-05-12/", "published_at": "2024-05-12T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13c0669bf6", "title": "New keyboard alert! Mykeyclub MKC75", "url": "https://localghost.dev/blog/new-keyboard-alert-mykeyclub-mkc75/", "published_at": "2024-05-05T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13c0a2a041", "title": "Twitter reply guys were bad, but Mastodon is no better", "url": "https://localghost.dev/blog/twitter-reply-guys-were-bad-but-mastodon-is-no-better/", "published_at": "2024-05-04T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13c1613aa4", "title": "All Day Hey 2024, and some stuff I bought in Leeds", "url": "https://localghost.dev/blog/all-day-hey-2024-and-some-stuff-i-bought-in-leeds/", "published_at": "2024-05-04T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13c19bd0c5", "title": "Good links: 28 April 2024", "url": "https://localghost.dev/blog/good-links-2024-04-28/", "published_at": "2024-04-28T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13c2423400", "title": "Good links: 14 April 2024", "url": "https://localghost.dev/blog/good-links-2024-04-14/", "published_at": "2024-04-14T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13c34166d9", "title": "A good recipe: Ways with rhubarb", "url": "https://localghost.dev/blog/a-good-recipe-ways-with-rhubarb/", "published_at": "2024-04-09T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13c3b15042", "title": "Upcoming talk: All Day Hey, Leeds - 2nd May 2024", "url": "https://localghost.dev/blog/upcoming-talk-all-day-hey-leeds-2nd-may-2024/", "published_at": "2024-04-01T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13c46837fd", "title": "Good links: 31 March 2024", "url": "https://localghost.dev/blog/good-links-2024-03-31/", "published_at": "2024-03-31T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13c5539b0a", "title": "Good links: 17 March 2024", "url": "https://localghost.dev/blog/good-links-2024-03-17/", "published_at": "2024-03-17T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13c56d0ef5", "title": "Some things I've been enjoying recently", "url": "https://localghost.dev/blog/some-things-i-ve-been-enjoying-recently/", "published_at": "2024-03-16T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13c570d53b", "title": "Good links: 10 March 2024", "url": "https://localghost.dev/blog/good-links-2024-03-10/", "published_at": "2024-03-10T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13c5ec5a54", "title": "Good links: 3 March 2024", "url": "https://localghost.dev/blog/good-links-2024-03-03/", "published_at": "2024-03-03T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13c5f5fade", "title": "Good links: 25 February 2024", "url": "https://localghost.dev/blog/good-links-2024-02-25/", "published_at": "2024-02-25T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13c6158ed9", "title": "Good links: 18 February 2024", "url": "https://localghost.dev/blog/good-links-2024-02-18/", "published_at": "2024-02-18T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13c6335269", "title": "Good links: 4 February 2024", "url": "https://localghost.dev/blog/good-links-2024-02-04/", "published_at": "2024-02-04T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13c6d68a3d", "title": "Listen to this: The Stand-in by Caitlin Rose", "url": "https://localghost.dev/blog/listen-to-this-the-stand-in-by-caitlin-rose/", "published_at": "2024-01-30T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13c7bec970", "title": "Good links: 28 January 2024", "url": "https://localghost.dev/blog/good-links-2024-01-28/", "published_at": "2024-01-28T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13c8809bc6", "title": "So you've decided to get into mechanical keyboards", "url": "https://localghost.dev/blog/so-you-ve-decided-to-get-into-mechanical-keyboards/", "published_at": "2024-01-27T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13c94f3997", "title": "Automated weekly links posts with raindrop.io and Eleventy", "url": "https://localghost.dev/blog/automated-weekly-links-posts-with-raindrop-io-and-eleventy/", "published_at": "2024-01-22T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13ca00cdcb", "title": "Good links: 21 January 2024", "url": "https://localghost.dev/blog/good-links-2024-01-21/", "published_at": "2024-01-21T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13cafc337c", "title": "How I deploy my Eleventy site to Neocities", "url": "https://localghost.dev/blog/how-i-deploy-my-eleventy-site-to-neocities/", "published_at": "2024-01-20T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13cb483a27", "title": "Sending webmentions from a static site", "url": "https://localghost.dev/blog/sending-webmentions-from-a-static-site/", "published_at": "2024-01-20T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13cc30e460", "title": "Just because you can doesn't mean you should: the element", "url": "https://localghost.dev/blog/just-because-you-can-doesnt-mean-you-should-the-meter-element/", "published_at": "2024-01-07T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13cc5a43b3", "title": "Remembering the early 00s teen website scene", "url": "https://localghost.dev/blog/remembering-the-early-00s-teen-website-scene/", "published_at": "2023-12-30T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13cc6471ad", "title": "A good podcast: Twenty Thousand Hertz", "url": "https://localghost.dev/blog/a-good-podcast-twenty-thousand-hertz/", "published_at": "2023-12-24T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13cd526540", "title": "2023: The year in lists", "url": "https://localghost.dev/blog/2023-the-year-in-lists/", "published_at": "2023-12-21T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13cddf5941", "title": "Engineering progression for humans", "url": "https://localghost.dev/blog/engineering-progression-for-humans/", "published_at": "2023-12-12T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13ceba9bdd", "title": "Beautiful musical chaos", "url": "https://localghost.dev/blog/beautiful-musical-chaos/", "published_at": "2023-12-02T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13cf061500", "title": "A good recipe: The best chocolate brownies", "url": "https://localghost.dev/blog/a-good-recipe-the-best-chocolate-brownies/", "published_at": "2023-11-23T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13cf2d4322", "title": "How to schedule posts in Eleventy", "url": "https://localghost.dev/blog/how-to-schedule-posts-in-eleventy/", "published_at": "2023-11-21T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13d0283240", "title": "Building post types and category RSS feeds in Eleventy", "url": "https://localghost.dev/blog/building-post-types-and-category-rss-feeds-in-eleventy/", "published_at": "2023-11-19T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13d10ac76f", "title": "A good recipe: Smitten Kitchen's apple pie cookies", "url": "https://localghost.dev/blog/a-good-recipe-smitten-kitchens-apple-pie-cookies/", "published_at": "2023-11-12T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13d1be24f9", "title": "Introducing separate category RSS feeds", "url": "https://localghost.dev/blog/introducing-separate-category-rss-feeds/", "published_at": "2023-11-12T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13d2390510", "title": "\"AI\", and the trouble with inaccessible SaaS", "url": "https://localghost.dev/blog/ai-and-the-trouble-with-inaccessible-saas/", "published_at": "2023-09-17T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13d2d91424", "title": "A good podcast: If Books Could Kill", "url": "https://localghost.dev/blog/a-good-podcast-if-books-could-kill/", "published_at": "2023-07-16T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13d3a682f0", "title": "Beyond Tellerrand: beyond amazing", "url": "https://localghost.dev/blog/beyond-tellerrand-beyond-amazing/", "published_at": "2023-05-01T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13d3f9c477", "title": "Painting the whole beetle: an adventure in learning to learn", "url": "https://localghost.dev/blog/painting-the-whole-beetle-an-adventure-in-learning-to-learn/", "published_at": "2023-02-18T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13d4736298", "title": "Everything should have an API: adventures in trying to automate stuff", "url": "https://localghost.dev/blog/everything-should-have-an-api-adventures-in-trying-to-automate-stuff/", "published_at": "2023-01-24T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13d4d44724", "title": "I miss Twitter", "url": "https://localghost.dev/blog/i-miss-twitter/", "published_at": "2023-01-14T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13d50c4daa", "title": "2022: The year in lists", "url": "https://localghost.dev/blog/2022-the-year-in-lists/", "published_at": "2022-12-30T00:00:00+00:00" }, { "id": "01a0e261-4571-71b2-baec-d906d1171f62", "title": "localghost joined Hotline Webring", "url": "https://localghost.dev/", "published_at": "2022-12-26T16:22:23+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13d5579aaf", "title": "Preparing for conferences", "url": "https://localghost.dev/blog/preparing-for-conferences/", "published_at": "2022-12-14T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13d5c30a81", "title": "Building a website like it's 1999... in 2022", "url": "https://localghost.dev/blog/building-a-website-like-its-1999-in-2022/", "published_at": "2022-10-23T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13d686388f", "title": "Everything I googled in a week as a senior software engineer", "url": "https://localghost.dev/blog/everything-i-googled-in-a-week-as-a-senior-software-engineer/", "published_at": "2022-10-15T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13d6880980", "title": "When going back doesn't mean going backwards", "url": "https://localghost.dev/blog/when-going-back-doesnt-mean-going-backwards/", "published_at": "2022-08-27T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13d71fd773", "title": "Burnout, a cautionary tale (and a plea to take a break)", "url": "https://localghost.dev/blog/burnout-a-cautionary-tale-and-a-plea-to-take-a-break/", "published_at": "2022-04-16T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13d74554f8", "title": "Start at the beginning: the importance of learning the basics", "url": "https://localghost.dev/blog/start-at-the-beginning-the-importance-of-learning-the-basics/", "published_at": "2022-01-02T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13d7e5e7bf", "title": "The right tag for the job: why you should use semantic HTML", "url": "https://localghost.dev/blog/the-right-tag-for-the-job-why-you-should-use-semantic-html/", "published_at": "2021-06-06T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13d7fc838e", "title": "A typical day: pandemic edition", "url": "https://localghost.dev/blog/a-typical-day-pandemic-edition/", "published_at": "2021-01-18T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13d8359bab", "title": "Give yourself a break: lessons from burnout", "url": "https://localghost.dev/blog/give-yourself-a-break-lessons-from-burnout/", "published_at": "2020-12-16T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13d8a81d4c", "title": "7 myths designers and developers believe about web accessibility", "url": "https://localghost.dev/blog/7-myths-designers-and-developers-believe-about-web-accessibility/", "published_at": "2020-10-11T00:00:00+00:00" }, { "id": "01a0879b-de6c-7192-9d7a-cb13d8e43b43", "title": "Defending yourself against cross-site scripting attacks with Content-Security-Policy", "url": "https://localghost.dev/blog/defending-yourself-against-cross-site-scripting-attacks-with-content-security-policy/", "published_at": "2020-05-03T00:00:00+00:00" }, { "id": "01a0879b-de6d-72a9-9fa5-c932fa2e104c", "title": "ffconf 2019: future friends beside the seaside", "url": "https://localghost.dev/blog/ffconf-2019-future-friends-beside-the-seaside/", "published_at": "2019-11-16T00:00:00+00:00" }, { "id": "01a0d89e-44b3-7006-bea1-51c27ea36180", "title": "ffconf 2019: future friends beside the seaside", "url": "https://localghost.dev/2019/11/ffconf-2019-future-friends-beside-the-seaside/", "published_at": "2019-11-16T00:00:00+00:00" }, { "id": "01a0879b-de6d-72a9-9fa5-c932fb0aeb1d", "title": "Everything I googled in a week as a professional software engineer", "url": "https://localghost.dev/blog/everything-i-googled-in-a-week-as-a-professional-software-engineer/", "published_at": "2019-09-02T00:00:00+00:00" }, { "id": "01a0879b-de6d-72a9-9fa5-c932fb9a3bcd", "title": "Questions to ask at an engineering interview", "url": "https://localghost.dev/blog/questions-to-ask-at-an-engineering-interview/", "published_at": "2019-08-22T00:00:00+00:00" }, { "id": "01a0879b-de6d-72a9-9fa5-c932fc786c23", "title": "Why software engineers should know their audience", "url": "https://localghost.dev/blog/why-software-engineers-should-know-their-audience/", "published_at": "2019-04-06T00:00:00+00:00" } ] posts Claim your blog
Back to localghost
Blog · corpus.blog/blogs/localghost.dev/posts

localghost

localghost.dev

2026

2025

2024

2023

2022

2021

2020

2019