Jens Oliver Meiert

Use my latest work: latest tech book · latest non-tech book · latest optimization tool · latest defense tool

Website Optimization Measures, Part XXXVIII

Published on Jul 14, 2026, filed under , . (Share this post, e.g., on Mastodon.)

Welcome to the apocalypse and part 38 of this series, started in 2008, in which I sketch improvements and lessons from the work on my projects for the potential benefit of yours:

  1. Correcting cross-project indentation (and updating editor configs)… Do you love this, too? Randomly you discover that in a file indented with spaces, you have this random line that’s indented by tabs? When noticing this the other day, I didn’t just align this in the respective file (collective consistency?), but searched all files of the type for use of tabs, to ensure consistency, and checked my editor config if it defined this correctly.

    Are you, too, a fan of tabs for indentation, but bow to the industry convention of using spaces at least in JavaScript files? That’s the situation for me, now mostly using tabs only in HTML and CSS files (with those tabs configured as two spaces wide).

  2. Restructuring repo folders. For the longest time, I’ve used a local directory structure of platform folders (e.g., codeberg.org) followed by folders marked “internal” (my projects) and “external” (third-party projects) that then contained the respective repos. This worked well for more than a decade. With GitHub’s prevalence, however, and my own output (websites, tools, books), the github.com/internal folder held the majority of repos.

    This led me to a review, doing away with platform folders and instead introducing a layer of “type” folders—e.g., websites, tools, books, and little else (meta, fora, uncategorized). I hope this new structure speeds up local navigation while not being hard to manage given no more exposure to platform information (by virtue of “codeberg.org”, “github.com”, “gitlab.com” folder names).

  3. Removing Twitter/X metadata. About a year ago, Frontend Dogma fully dropped support for Twitter/X. There has been a grace period since, allowing authors and publishers to reach out and have their handles updated to alternatives on Mastodon or Bluesky (if this wasn’t done automatically, by me). This grace period is ending, and I’ve been removing hundreds of commented Twitter/X handles as part of Frontend Dogma maintenance.

  4. Introducing llms.txt files. Although aware of llms.txt (coverage), I hadn’t used it for my own projects. In May, I sat down to draft and upload llms.txt for four of my websites—linking the respective files if you’re curious, meiert.com, frontenddogma.com, webglossary.info, and iadefensa.com.

  5. Un-escaping email addresses. For… decades I’ve used @ references to escape “@” signs in emails. Very basic spam protection. (I think.) However, I noticed that some email services like Proton struggle with this, only parsing the part before the “@”. In short, I decided against reporting the issue to Proton, to instead look into how effective the old technique was (apparently really not that much) and to keep it simple again, by not doing any escaping anymore. Thank you, modern spam filters.

  6. Deduplicating GitHub workflows. I like to provide LTS support for my Node packages. I didn’t know that in GitHub Actions, I could read this info out of .nvmrc files—where I then replaced node-version: 'lts/*' with node-version-file: ".nvmrc". Nice!

  7. Ignoring Markdown changes in tests. Optimizing workflows a bit more, I started to ignore certain changes from triggering test runs—like Markdown changes (e.g., to README.md). GitHub allows to do so via paths-ignore: ["**.md"].

  8. Grouping Dependabot updates. I use Dependabot as a dependency management fallback (covering Depfu). Occasionally, I get a batch of Dependabot updates, all individual PRs. While this hasn’t been so painful so far, I learned that it’s possible to group PRs, with the following addition to package-ecosystem rules:

    groups:
      minor-and-patch:
        update-types:
          - "minor"
          - "patch"
  9. “Unpersisting” GitHub credentials. I also learned about problems around GitHub's “checkout” actions’s persist-credentials, i.e., its true default. I took this to update almost all workflows using this action to explicitly set it to false.

This is a part of an open article series. Check out some of the other optimization posts!

About Me

Jens Oliver Meiert, on March 2, 2026.

I’m Jens (long: Jens Oliver Meiert), and I’m an engineering lead, guerrilla philosopher, and indie publisher. I’ve worked as a technical lead and engineering manager at various companies, including Google; I’m an open-source developer and a contributor to web standards (like HTML, CSS, WCAG); and I write and review books for O’Reilly and Frontend Dogma.

I love trying things, not only in web development and engineering management, but also with respect to politics and philosophy. Here on meiert.com I talk about some of my experiences and perspectives. (Please share feedbackinterpret charitably, keep it friendly, but do be critical.)