Skip to content

LLM ready

/en/posts.md

Title:
Posts

Posts

---
title: Posts
url: https://nandomoreira.dev/en/posts
---

# Posts

- 2026-11-01: [My AI harness with RPI: from Superpowers and TLC to Forja 2.0](https://nandomoreira.dev/en/ai-harness-with-rpi): Harness is everything that runs around the model. Mine came out of almost a year of projects, tests, and study on top of Superpowers and tlc-spec-driven, and now it is becoming Forja 2.0.
- 2026-10-28: [Treating dotfiles as software](https://nandomoreira.dev/en/treating-dotfiles-as-software): A dotfiles script runs from a shortcut, a timer and a hook, where nobody sees the error. How I test mine with shellcheck and BATS, swap dependencies for stubs and let AI write almost everything without losing trust.
- 2026-10-28: [Does your system have memory? A dotfiles from the first symlink to a reinstall](https://nandomoreira.dev/en/dotfiles-from-symlink-to-reinstall): Formatting cost me a full day and a week remembering what I had missed. How to build a dotfiles that keeps the configs and the why of each one, and how it reinstalls the whole system on a blank machine, with what broke anyway.
- 2026-10-26: [My Gitflow scripts: from 31 lines of Bash to a Claude Code skill](https://nandomoreira.dev/en/gitflow-scripts-to-a-skill): Around 2019 I wrote a few scripts so I would not type the same git flow every time I opened a branch. They grew, got rewritten with AI and today live in a skill. The idea is still the same.
- 2026-10-23: [Ctrl+K on my site: a command palette that only downloads when someone hits the key](https://nandomoreira.dev/en/command-palette-ctrl-k): Site-wide search, G + letter shortcuts and single-key actions, in plain TypeScript with no library. Anyone who never opens the palette downloads nothing of it, and what cost the most bytes was the loader, not the palette.
- 2026-10-20: [Terminal Noir: the theme of my site became the theme of my whole system](https://nandomoreira.dev/en/terminal-noir-theme-across-my-system): The colors of my site became the theme of my whole desktop: twelve apps, an open source repository, its own site and a beta release, in a single night.
- 2026-10-19: [Dynamic tiling or stacked windows: what I learned quitting Alt+Tab](https://nandomoreira.dev/en/dynamic-tiling-or-stacked-windows): Niri, Hyprland and Pop!_OS's new COSMIC arrange the windows for you, and all three let you float a window when you need to. After months to quit Alt+Tab, I am not going back, but that does not make tiling the right way for everyone.
- 2026-10-18: [Cross-model review: why a second agent finds what the first one misses](https://nandomoreira.dev/en/cross-model-review): Different models fail in different places. How I put a second model to review the code the first one wrote, how I merge both sets of findings, what Codex caught on this site and why today the reviewer is agy.
- 2026-10-18: [My homelab on a 2018 Mac mini: disks, DNS and Tailscale](https://nandomoreira.dev/en/homelab-on-a-2018-mac-mini): A Mac mini on Ubuntu and CasaOS, drawing 5.5 W, holds the laptop backups, my music, this site's staging and Pi-hole, which blocks one in five DNS queries in the house. Installing the apps was the easy part; the work was deciding where the data lives and how each device reaches it.
- 2026-10-17: [game-mode: I freeze work to play, without closing any window](https://nandomoreira.dev/en/game-mode-freezing-work-with-cgroup): A Niri shortcut freezes Chrome, Slack and the terminals with the cgroup v2 freezer, blanks the leftover monitors and turns on quiet mode. Steam and music keep going. Getting there cost a Steam painted black and a game mode that not even its own command could turn off.
- 2026-10-16: [Scratchpad on Niri: windows that vanish and return with a shortcut](https://nandomoreira.dev/en/niri-scratchpad-windows-vanish): Niri cannot minimize a window. A 199-line script and a hidden workspace make WhatsApp, Obsidian and YouTube appear and disappear with one key, and Discord, Spotify and LocalSend return to the tray.
- 2026-10-16: [espanso: iPhone text replacement, now on my Linux](https://nandomoreira.dev/en/espanso-text-replacement-on-linux): I used macOS Text Replacement for years and still use it on the iPhone every day. On CachyOS with Niri, espanso does the same in any text field, after three tweaks the docs never mention.
- 2026-10-15: [From five days to thirty minutes: AI in an ETL pipeline](https://nandomoreira.dev/en/five-days-to-thirty-minutes): How preparing a dataset went from nearly a week of manual work to half an hour: API automation, AI where it helps, tests where it can go wrong and the deadline as a product rule.
- 2026-10-15: [job-radar: I stopped scrolling job lists and let Python discard for me](https://nandomoreira.dev/en/job-radar-pure-python): Seven job sources, filters that discard before the score, the résumé as a qualifications list and a Discord channel that only gets what survived. Zero runtime dependencies, and the code is open.
- 2026-10-14: [No JavaScript in the browser: I built analytics for my site and follow it from the terminal, in Rust](https://nandomoreira.dev/en/analytics-without-browser-javascript): I only wanted the basics of analytics, without injecting a script into the site and without sending visitor data to anyone. It became a middleware, a 1×1 pixel, a cookie named __session and a Rust TUI.
- 2026-10-13: [My study of Red Dead Online sessions: P2P, Rockstar relays and the double NAT I built myself](https://nandomoreira.dev/en/red-dead-online-sessions-p2p-double-nat): I spent ten days looking at my Xbox traffic to understand how a Red Dead Online session forms. I learned to tell a player from a relay in a capture, found that my gateway had dropped the NAT type to Moderate, and that hiding the home IP costs an MTU tweak.
- 2026-10-11: [rdo-solo: Red Dead Online alone through the home gateway, now open source](https://nandomoreira.dev/en/rdo-solo-alone-via-home-gateway): I open-sourced rdo-solo, the controller that lets me stay alone in a public Red Dead Online session on Xbox. The console goes through a Linux gateway, the gateway drops the game's P2P, and you can turn it on and off from the terminal, a Rust TUI, or the phone.
- 2026-10-11: [Memory for agents: a four-layer backbone](https://nandomoreira.dev/en/four-layer-memory-for-agents): How Claude Code remembers decisions across sessions without loading everything into context: what is always read, what only comes in when someone asks, and the migration that only finished when a gate allowed it.
- 2026-10-11: [I built four Noctalia plugins entirely with AI on my CachyOS](https://nandomoreira.dev/en/four-noctalia-plugins-with-ai): Four plugins for the Noctalia bar and desktop: quick capture and agenda, Claude Code and Grok plan usage, GitHub gists, and sticky notes. All built with AI, in the RPI flow, and the UI was what took the most work.
- 2026-10-10: [RPI flow with three agents: Claude Code plans, Grok implements, Codex reviews](https://nandomoreira.dev/en/rpi-flow-with-three-agents): Research and plan before any feature, the way I already worked. Claude Code leads, Grok writes, Codex reviews, and the test comes before the code even when that makes the AI slower.
- 2026-10-10: [How I built my new 2026 site that talks to AI via MCP](https://nandomoreira.dev/en/site-that-talks-to-ai-via-mcp): The cobbler's children have no shoes: an AI engineer without a site that talks to AI. How I rebuilt mine, with an MCP server, a machine version of every page and seven automated gates.
- 2026-10-09: [The false green: when the gate says PASS and nothing ran](https://nandomoreira.dev/en/the-false-green): In a flow with agents, a red test gets investigated. The danger is the green nobody questions: the gate that skipped everything, the pipeline that hid the error, the test that read the source instead of making the request.
- 2026-10-09: [Mute headphones for 78 days: a script that follows the P2 jack on PipeWire](https://nandomoreira.dev/en/mute-headphones-for-78-days): On my laptop, headphones and speakers live on different sound card profiles, and WirePlumber never switches on its own. The March fix was exactly what locked the headphones. Today a 164-line watcher listens to the connector and picks the profile for me.

Ready to share.