Technical Tutorials
Step-by-step guides for building things on the web and working with developer tools.
38 postsA Love Letter to the Super Dimension Fortress
#291
I've finally became an ARPA member of SDF, a non-profit public-access UNIX system running continuously since 1987. I give a history from Ted Uhlemann's 300-baud Apple IIe BBS to today's NetBSD network of DEC Alphas and Opterons; a tour of the shell, gopher, and gemini services; how to join, plus two hands-on bonuses: writing a flat-file Perl CGI guestbook and making a site Dillo-compatible.
Static Site Generators for Beginners
#290
Written for a 32-bit Café thread asking where to even begin with static-site generators. I go over the free resources I'd learn first (and why hand-rolled HTML beats an SSG for your very first site), a plain-language glossary of the jargon docs never define, a brief history from HSC and Movable Type to Jekyll, why git gets recommended everywhere, my own beginner starters, and tiny alternatives like barf, bashblog, and kiki.
Creating a Blog in Gemini://
#288
Creating your own corner of Geminispace: why you'd want to blog on a protocol with no JavaScript, no CSS, and no AI slop; where to host a capsule (SmolPub, the Tildeverse, flounder, Gemcities); how the community's gemlog conventions work; and the surprising social life of Gemini BBS, Station, and Astrobotany. Plus ASCII art, CGI scripting, and every gemini:// link I've found worth keeping.
Oldnets and Altnets: A Guide to Building a Low-Spec Daily Internet Out of Gemini, Gopher, and Terminal Tools
#281
Reacting to the Omarchy and DigitalOcean news, I set out a curated low-spec, text-first alternative to the modern web: Gemini, Gopher, Spartan, Lynx-friendly sites, terminal readers, public Unix communities, and peer-to-peer networks like Yggdrasil, I2P, and Hyphanet.
More Mindful Web Development
#279
Yet another technical audit of brennan.day, this time using the Safi Studio Scanner, covering fixes for duplicate <h1> headings, meta descriptions, image dimensions, JSON-LD organization data, render-blocking scripts, and a switch from IndieAuth to IndieLogin—plus what I left alone.
A Guide to Becoming a Rogue Scholar
#261 CC BY
I've been weighing grad school against continuing my own open-access publication, so I wrote a guide to becoming a 'Rogue Scholar' using ORCID, citation metadata, issue numbers, print CSS, and Wayback Machine archiving to try to make my static Eleventy site as citable, permanent, and discoverable as institutional scholarship.
Advanced Webweaving: Auditing Against Specification.Website
#258
I ran brennan.day against The Website Specification's 140-item checklist covering foundations, SEO, accessibility, security, performance, privacy, and resilience. Notes on a broken web manifest I'd never noticed, why I don't have cookie consent banners, CSP debugging with third-party services, service worker CORS issues, a bunch of small improvements, and the list of things I didn't fix.
I Would Have Written a Shorter Blog Post, But I Didn’t Have the Time: Creating a WriterDeck
#252
On the KISS principle and Pascal's apology for long letters, the cultural shift away from minimalism, and the growing trend of writer decks. A technical guide to creating a distraction-free writing environment by removing the desktop environment entirely and using terminal-only Linux distributions like Debian, Ubuntu Server, Arch, or Alpine. There's so much you can do in the terminal! There's applications for file management (ranger), web browsing (Lynx, w3m), markdown reading (glow, mdcat), email (Alpine, NeoMutt), IRC (WeeChat, Irssi), music (cmus, MPD), RSS (Newsboat), and writing tools (Micro, WordGrinder), plus document management via git or rsync cron jobs... oh, this is kind of long-winded, isn't it?
Creating a Digital Garden in 11ty: Tracking My Daily Word Count with URLminder
#238
I decided to build brennan.click, a wiki-linked digital commonplace book in Eleventy, with auto-generated stubs created with eleventy-plugin-interlinker, pure-CSS hover transclusion and footnotes with no JavaScript, and a plain-text /urlminder.txt feed that drives a Beeminder goal.
Softcore First, Hardcore Eventually: A Ladder for the IndieWeb
#233
Responding to Adam Newbold's 'Hardcore IndieWeb' guide, I argue for a ladder approach to joining the IndieWeb. Rather than choosing between easy platforms and full technical independence, people should climb rungs progressively. Start with BearBlog or Pika, learning hand-coded HTML, then move to static site generators when ready. This applies progressive disclosure to onboarding, avoiding the curse of knowledge that makes experts skip beginner-friendly steps.
300 Minutes a Month: Cutting My Eleventy Netlify Build Time in Half
#229
A sequel to my Eleventy build post: this time the bottleneck wasn't the build tool, it was the hosting bill. Notes on caching webmentions and guestbook fetches, killing a dead Discord webhook, nearly breaking my JSON feed, and a git error I still don't have an answer for.
A Full Guide to Properly Delete Corporate Social Media Accounts
#227
Facebook, Messenger, Instagram, WhatsApp, Threads, X, Reddit, Discord. Eight platforms, eight different deletion policies. A full technical walkthrough of what 'delete' actually means on each one, the prep work nobody tells you to do first, and the human-side work the documentation doesn't mention.
Publishing My Eleventy Blog to the ATmosphere with Standard.site
#221
A walkthrough of how I wired up Standard.site AT Protocol lexicons into this 11ty blog: from writing a custom publish script to migrating to Sequoia, with code for the link tags, and handle verification.
Blogging with Magic Unicode: Simple Doesn't Have to Mean Boring!
#219
You don't need bloat. You can use CSS variables and Unicode symbols to add visual personality to your personal website while keeping it minimal, accessible, and fast-loading. Includes a reference of symbol sets (celestial, elemental, occult, card suits, chess, zodiac, and more) with colour examples using the Gruvbox palette.
Every Commit A Sentence: Git Commit Messages for Bloggers
#211
I had 448 `feat:` commits and 417 `fix:` commits. Nearly the same count, for wildly different kinds of work. Here's why conventional commits were never designed for a writer's blog, and the eleven-type system I built to replace them.
How Webmentions Work on brennan.day
#207
A tutorial and walkthrough of how I implemented webmentions on my site, from setup to display, including webmention.io integration, Eleventy filters, CSS styling, and Bridgy for sending.
Why Make Your Website Accessible, Anyways?
#201
Web accessibility isn't compliance theatre or checking off a list. It's about designing for everyone. Exploring the curb cut effect, why disability is more common than we think, and practical steps to make your website usable by as many people as possible.
Homelab For the Beginner: You Can Self-host Your Own Server on $50 Hardware
#194
A beginner-friendly guide to building your own homelab on inexpensive hardware. Covers finding old computers, setting up Linux, SSH, Docker, and self-hosting services like password managers, RSS readers, and your own Fediverse instance. Digital sovereignty doesn't require expensive equipment.
Gemini, Gophers, and Fingers. Oh My! Alternative Internets Beyond HTTPS
#193
Finger from 1971, Gopher from 1991, and Gemini from 2019. These protocols offer decentralized, terminal-based alternatives to the modern web. The small web's is in a renaissance. On the solarpunk philosophy of intentional technology, and how these protocols meet you where you are, whether you're on a machine from 2005 or just tired of Chrome's monoculture.
Introducing writer-cli: a bash tool I built from scratch to blog in the terminal!
#192
After finding the tildeverse and the Tilde.town feels engine, I decided to build my own simple command-line tool for blogging that handles the full lifecycle of a blog post (creation, editing, building, and git push). A walkthrough of the design decisions, the modular architecture, and the tradeoffs of writing 700 lines of plain bash.
Cleaning House: Refactoring My Eleventy Config Into Modules
#185
How I decomposed an 866-line .eleventy.js monolith into four focused modules, fixed some lurking bugs, and eliminated dead CSS and dead dependencies along the way.
I Made My Eleventy Build 5× Faster with Five Changes
#182
A walkthrough of how I audited my 11ty build benchmarks and cut cold-start time from 14 seconds down to 2.6 seconds by caching two custom filters and swapping out a bare network fetch.
The Fool's Autopsy
#149
A review of the prank I pulled yesterday, in addition to serious discourse about being silly, including thoughts on the role and importance of satire and literacy. I also share a detailed technical breakdown of the scripts that I added to the prank as well.
Downgrading to macOS Catalina: A Sermon on Obsolescence
#138
A complete step-by-step tutorial for creating a bootable Catalina USB installer using mist-cli on modern macOS in order to downgrade an Early 2015 MacBook Pro from macOS Monterey to Catalina. Accidentally also a philosophical look at planned obsolescence, e-waste, and corporate control over hardware lifespan.
Building brennan.day Part Two: IndieWeb, New Features, and Three Months of Iterations
#130
What have I added to my site since I started in December? Quality-of-life improvements, new pages, interesting features, and of course, easter eggs! When you add a little each day, it really adds up.
My Malware Story Gets Stolen; Yet Another Argument for the IndieWeb
#112
A few days after writing about a weird malware campaign, I discovered that half a dozen cybersecurity news outlets had picked up the story. They now outrank me on Google. A metacommentary on the state of internet journalism, attribution, and what it says that a netsec industry has to rely on amateurs to break stories.
Creating an Alphabetical Tag Page feat. Nunjucks Pitfalls
#90
I transformed a messy tag list into an organized alphabetical sections, and there were a surprising amount of gotchas I encountered along the way.
twtxt: Simple, Decentralized Microblogging with status.lol
#89
I set up an effortless sync between my status.lol updates and a twtxt feed, creating a bridge between IndieWeb tools and classic decentralized microblogging.
Posting to Your Static Site with Quill and Micropub
#83
After building an IndieAuth comment system, I wanted to complete the loop by posting content to my site from an external client. Here's how I implemented a Micropub endpoint for my static site using Quill as the client.
Respecting the No-JS Choice: Making Your Site Work for Everyone
#82
Gracefully degrading my site for no JavaScript, including the CSS-based .no-js approach, testing with Lynx, and creating an informative experience for all users.
From 65 to 83: Attempts at Performance Optimization
#80
A humble look into the performance optimizations boosting my Lighthouse score from 65 to 83, including critical CSS, layout shift fixes, and image optimization while maintaining the site's design and user experience.
Extending the Post Graph Plugin: Adding Clickable Links and Tooltips
#79
A technical walkthrough of how I extended the eleventy-plugin-post-graph to add clickable links and hover tooltips showing article titles.
Building an IndieAuth Comment System for Your Static Site
#77
A journey through authentication, CORS issues, and the joy of owning your comments! Learn how to build a comment system for your static site using IndieAuth and Netlify Functions, storing the comments in your git repository.
auld lang syne: The Commonplace (micro)Log
#73
A simple gratitude journal online, with media tracking and Beeminder integration. Yes, yet another 11ty project technical write-up, but I promise you'll learn something.
Deploying An Eleventy Site to NeoCities with GitLab CI/CD
#72
A guide to automatically deploying your Eleventy static site to NeoCities using GitLab CI/CD, including authentication, error handling, and optimizations.
Why I'm not a Full-stack Dev
#71
The Internet should be a place where ideas can live and spread without people extracting rent at every turn. Where an emerging nonprofit can publish their mission statement without paying Squarespace $300/year. Where a poet can share their work without feeding it into Meta's engagement.
Building brennan.day Part One: Design, Rainbows, and Accessibility
#69
A dive into how this site is built, why it exists, and the philosophy behind owning your corner of the web.
Bring Back the 90's Guestbook with JAMstack: How I Added Dynamic Comments to My Static 11ty Site
#64
Reviving the classic guestbook for a static site using Netlify Forms and serverless functions, with lessons on distributed systems and race conditions.