I Added Voice-to-Text to Noctalia Shell So I Can Stop Typing

It was a Wednesday afternoon. I was writing documentation for one of my projects and my hands were getting tired. Not from the code — from the prose. Paragraph after paragraph of explaining things in plain English while my fingers begged for mercy. I thought: why am I still typing all of this? I have a microphone. I have a Wayland compositor. I have a shell that I built myself. And yet, every time I wanted to dictate text, I’d have to open a browser, go to some cloud service, copy the text, paste it back. Or install some Electron app that eats 400 MB of RAM just to sit in the background and do nothing. ...

May 29, 2026 · 10 min read · enrell

I Rewrote My Crystal MCP in Go — And It Got Better: Better Search MCP

If you read my last post, you know I built searxng-web-fetch-mcp — a Crystal MCP server that gives AI assistants web search and content fetching. It worked. It was fast. I shipped it in a night. But after a few weeks of daily use, things started to bother me. The extraction was good, but not great. Some articles came back with navigation junk. Others had the main content buried under sidebar text. And the batch fetch, while fast, didn’t give me the control I wanted over what came back and how. ...

April 21, 2026 · 9 min read · enrell

Port: A TUI + CLI for Managing Open Network Ports on Linux

You run a server, the terminal crashes, and suddenly localhost:3000 is still occupied. You have no idea which process owns it. Sound familiar? Port solves this. Two ways to use it: $ port # TUI mode — interactive table $ port 3000 # CLI mode — kill port 3000 directly $ port --list # List ports as text (scriptable) The Problem It happens all the time. You start a Node.js server, a Python Flask app, or a Rust backend. Then: ...

April 14, 2026 · 4 min read · enrell

Building a Crystal MCP for Web Search and Content Extraction

It was 7pm on a Wednesday. I was staring at my terminal, watching OpenCode try to answer a question about a library it had never seen before. The LLM was doing its best. But it was hallucinating API endpoints that didn’t exist. And I thought: “Why can’t my AI just… search the web?” The Problem I use OpenCode, Claude Code and some times Crush as my daily coding companion. It’s powerful. But it has a blind spot: The native web fetch can’t access claudflare protected sites. ...

March 25, 2026 · 6 min read · enrell

I Built a NPM Package for Parsing Anime Filenames — Here's My Story

It was 3 AM on a Tuesday night. I was staring at my anime folder, scrolling through filenames like: [SubsPlease] Spy x Family - 01 (1080p) [A4DAF3D9].mkv [Coalgirls] Clannad (1920x1080 Blu-Ray FLAC) [1234ABCD]/[Coalgirls] Clannad - 01 (1920x1080 Blu-Ray FLAC) [1234ABCD].mkv One Punch Man S02E03 1080p WEBRip x264-PandoR.mkv And I thought to myself: “There has to be a better way.” Sound familiar? If you’ve ever built a media library, you know exactly what I’m talking about. Those messy, inconsistent filenames — they drive me crazy. And the existing parsers? Either too slow, too rigid, or didn’t handle the wild variety of naming conventions we anime fans use. ...

February 21, 2026 · 4 min read · enrell