---
title: Scratching my own itches
url: https://nandomoreira.dev/en/lab
---

# Scratching my own itches

Open source tools I built to scratch my own itches: apps and plugins for my Linux desktop, CLIs, automations and tooling for AI agents, much of it written alongside the agents themselves.

## AI Bar

Plugin for Noctalia Shell that shows on the bar how much of the Claude Code and Grok plan has already been used: the percentage of the most critical window, the time until it resets, and a progress bar. In the panel, each window appears with the usage pace, ahead or behind relative to the time that has passed.

- Stack: QML, JavaScript, Noctalia Shell, Vitest
- Markdown: [noctalia-aibar.md](https://nandomoreira.dev/en/lab/noctalia-aibar.md)

## Amnesia

Persistent, deterministic memory layer for Claude Code. Merge, deduplication and validation leave the model and move into a Python CLI, so the result is the same on every run and the agent stops answering with a wrongly remembered fact. Daily use in my own workflow.

- Stack: Python, Claude Code
- Markdown: [amnesia-claude-code.md](https://nandomoreira.dev/en/lab/amnesia-claude-code.md)

## CoachBot

Anti-motivational coach for the terminal: every time a shell opens, a sarcastic line in a speech bubble, spoken by a little pixel-art robot. Over a hundred lines in English and as many in Portuguese, and it installs with a single command.

- Stack: Shell, JSON
- Markdown: [coachbot-cli.md](https://nandomoreira.dev/en/lab/coachbot-cli.md)

## Daybar

Plugin for Noctalia Shell that gathers the day into a bar: a quick-capture field that understands free text ("buy bread tomorrow 9am" becomes a task, "/e meeting Friday 3pm-4pm" becomes an event on Google Calendar), plus today's checklist, pomodoro and timer (which also open in their own window or pinned to a screen corner), favorites with page preview and Markdown notes.

- Stack: QML, JavaScript, Noctalia Shell, Google Calendar
- Markdown: [noctalia-daybar.md](https://nandomoreira.dev/en/lab/noctalia-daybar.md)

## Desktop Sticky Notes

Plugin for Noctalia Shell that pins sticky notes to the desktop as widgets: each note can be dragged and resized, has a post-it color and Markdown text, opens an editor on click and can stay linked to a .md file on disk, updating when the file changes.

- Stack: QML, JavaScript, Noctalia Shell, Markdown, Vitest
- Markdown: [noctalia-desktop-sticky-notes.md](https://nandomoreira.dev/en/lab/noctalia-desktop-sticky-notes.md)

## FlipClock

Flip clock for the desktop, built in Go with Fyne, with a two-phase flip animation, a fullscreen mode and a screensaver mode that covers every connected monitor. The font is embedded in the binary, so the app runs with no external file dependency.

- Stack: Go, Fyne, OpenGL
- Markdown: [flipclock-app.md](https://nandomoreira.dev/en/lab/flipclock-app.md)

## FlipClock ASCII Screensaver

Screensaver for Hyprland that draws the time in large ASCII inside a fullscreen terminal, one per monitor, with Terminal Text Effects transitions every minute. It comes in through hypridle when the machine goes idle and leaves on the first movement.

- Stack: Python, Shell, Hyprland
- Markdown: [flipclock-screensaver-ascii.md](https://nandomoreira.dev/en/lab/flipclock-screensaver-ascii.md)

## Forja

Desktop client that brings Claude Code, Codex and Gemini into one interface, so context survives when I switch instead of vanishing across three terminals. Built with Electron, React and TypeScript, with xterm.js for the terminal and an adapter layer per CLI instead of forcing a common protocol on all three. It is my primary client day to day.

- Stack: Electron, React, TypeScript
- Markdown: [forja.md](https://nandomoreira.dev/en/lab/forja.md)

## Forja Plugins

Official registry and monorepo of Forja plugins: clock, Pomodoro and Markdown tasks, on a shared SDK with the plugin API types. Each plugin declares the permissions it uses, and a script generates the registry that Forja consults to install.

- Stack: TypeScript, Vite, pnpm, Vitest
- Markdown: [forja-plugins.md](https://nandomoreira.dev/en/lab/forja-plugins.md)

## Gistbar

Plugin for Noctalia Shell that brings my GitHub gists to the bar: search by description, file name, language and content, copy from the keyboard, new gist from the clipboard, preview and edit, all through the gh CLI.

- Stack: QML, JavaScript, Noctalia Shell, GitHub CLI, Vitest
- Markdown: [noctalia-gistbar.md](https://nandomoreira.dev/en/lab/noctalia-gistbar.md)

## grab-sh

Minimal screenshot script for Wayland and Hyprland that copies straight to the clipboard, without saving a file to disk. Two keyboard shortcuts: full screen or a region picked with the crosshair.

- Stack: Shell, Hyprland, Wayland
- Markdown: [grab-sh.md](https://nandomoreira.dev/en/lab/grab-sh.md)

## Hypr Switcher

Visual Alt+Tab for Hyprland, which ships no window switcher of its own. In Rust on the Wayland layer-shell, so the overlay sits above everything without stealing focus, and with open latency as the main criterion, because that is what decides whether the tool is used or abandoned.

- Stack: Rust, Wayland, Hyprland
- Markdown: [hypr-switcher.md](https://nandomoreira.dev/en/lab/hypr-switcher.md)

## job-radar

Scrapes job boards, drops what does not match your profile and posts the matches to Discord, running on its own a few times a day. Pure Python, no dependencies: hard filters decide what gets through, a 0-to-100 score ranks the rest, and the qualifications come from your own resume in markdown.

- Stack: Python, pytest, Discord, systemd
- Markdown: [job-radar.md](https://nandomoreira.dev/en/lab/job-radar.md)

## rdo-solo

Solo session controller for Red Dead Online and GTA Online that blocks the game's peer-to-peer traffic on the Linux gateway the console goes through. It started as an iptables script and gained a Rust TUI, with players in the session and GeoIP, and a web panel to turn solo mode on and off from the phone.

- Stack: Rust, Ratatui, Shell, iptables, Next.js
- Markdown: [rdo-solo.md](https://nandomoreira.dev/en/lab/rdo-solo.md)

## Terminal Noir

Open-source theme extracted from this site to give the same visual identity to the whole system and the apps I use: near-black cold surfaces, scaled by luminance, a single amber accent and an emerald green for status. Design tokens left the nandomoreira.dev CSS and became ports for shell, compositor, terminal, editor, browser and command-line tools, with a light paper-toned variant.

- Stack: Bash, jq, bats, Astro, Firebase Hosting
- Markdown: [terminal-noir.md](https://nandomoreira.dev/en/lab/terminal-noir.md)

## Tumodori

Terminal Pomodoro with large digits, readable from across the room without leaning into the monitor. Built in Rust with Ratatui, so the timer lives in the same place as the work, and with the digits drawn in block characters, so the size does not depend on the font configured in whoever is using the terminal.

- Stack: Rust, Ratatui
- Markdown: [tumodori.md](https://nandomoreira.dev/en/lab/tumodori.md)

## Other open projects

- [sextafeirachegou.com.br](https://github.com/nandomoreirame/sextafeirachegou.com.br): Site that says whether it is Friday yet, with a countdown and drama (TypeScript, 2026)
- [motivaai](https://github.com/nandomoreirame/motivaai): Motivational quote generator, rebuilt in Remix (TypeScript, 2019)
- [vovo-juju-ipsum](https://github.com/nandomoreirame/vovo-juju-ipsum): Quote generator for Grandma Juju, from the cartoon Irmão do Jorel (Vue, 2019)
- [app-whatsapp-url](https://github.com/nandomoreirame/app-whatsapp-url): Builds the WhatsApp chat link for any phone number (Vue, 2018)
- [nandomoreira.me-nuxt-theme](https://github.com/nandomoreirame/nandomoreira.me-nuxt-theme): An older version of my personal site, in Vue with Nuxt (Vue, 2016)
- [end2end](https://github.com/nandomoreirame/end2end): Clean Jekyll theme for blogs (Sass, 2015)
- [dotX](https://github.com/nandomoreirame/dotX): Simple Jekyll theme for blogs (CSS, 2015)
- [lora](https://github.com/nandomoreirame/lora): Free Jekyll theme for blogs (CSS, 2015)

All repositories: https://github.com/nandomoreirame?tab=repositories
