Posts
-
Replacing RDPGuard With IPBan: The Traps Nobody Documents
I migrated from paid RDPGuard 7.8.7 to open-source IPBan 4.1.0 — and hit three undocumented traps, including an uninstaller that would have silently unbanned 12 attackers.
-
Your Own Speech-to-Text Server: Faster Than Typing, Private by Default
I run a self-hosted speech-to-text API on a single GPU PC. Dictation works from Windows, iPhone, iPad and Android — private, unlimited, and about 5x faster than typing.
-
Upgrading n8n v1 to v2: Seven Deprecations in One Log File
My self-hosted n8n 1.x to 2.40.1 upgrade surfaced seven silent breakages at once — a telemetry schema rejection, deprecated webhook vars, and a DB override that quietly disabled the AI sandbox.
-
I Ran a Text-to-Speech Service for a Year on Two Cron Containers
A reading app needed TTS. Cloud free tiers expire tokens in 10 minutes and 1 hour. Here's the sidecar pattern that kept Azure and Google voices working for a year with no secrets in any workflow.
-
Self-Healing Access Control for Digital Goods: NocoDB, n8n, and AList
How I built a five-workflow entitlement system that grants, expires, and continuously repairs customer file access — with a build-time code-sharing trick and a public endpoint designed to leak nothing.
-
Shipping an AI Photo Editor as a WordPress Plugin: 22 Versions of Hard Lessons
From a single HTML file to a shipped WordPress plugin: the fal.ai async queue, a watermark that must never silently fail, optional lead capture, and five bugs that only appeared in production.
-
The Corruption Came Back on Different Drives — the Cause Was TRIM, Not the SSDs
Two weeks after a btrfs RAID1 pool corrupted on healthy-looking NVMe drives, the same all-zero checksum reappeared on a different drive stack. The culprit was queued TRIM (NCQ) on Seagate IronWolf 110 SSDs — a firmware bug FreeBSD blacklisted but Linux never did. How I caught it and the fix.
-
How I Self-Hosted a Mem0 Memory Stack (So My AI Agent Remembers)
A private, self-hosted memory layer for AI agents — mem0 API + LiteLLM + PostgreSQL with pgvector on a Synology NAS. Semantic memory under your control, not a third party's.
-
I Was About to RMA This SSD — the Fault Was a SATA Cable
A Seagate IronWolf 110 SSD threw WRITE FPDMA timeouts, failed mkfs with 'superblock magic doesn't match', and went silent — a textbook dying drive. I swapped one SATA cable and it formatted clean with zero errors. How to test before condemning a drive.
-
When SMART Says Healthy and Your RAID Is Silently Corrupting Data
A btrfs RAID1 pool on two healthy-looking NVMe drives quietly corrupted a Windows VM. How I caught it with a checksum forensic — and why the root cause (M.2 riser link fault vs batch defect) is still uncertain, with both drives now testing clean.
-
Why Unraid Hangs When You Stop the Array With a Swapfile — and the Fix
My Unraid array stop hung forever at unmounting disks because an 8 GB btrfs swapfile pinned /mnt/cache. Root cause, the /boot/config/stop trap, and two User Scripts that fix it.
-
Passbolt UI Kept Hanging — Three Failure Modes From One Missing Config File
My self-hosted Passbolt returned 504s for weeks: a null GPG fingerprint stalled email delivery, a container recreate wiped the fix, and ssl.force behind a proxy caused a redirect loop.
-
Scraping a Bot-Walled Marketplace With a Warm Browser Session
Scraping bot-walled marketplace listings for a client's used-electronics business: warm CDP session, fail-fast health checks, split-wait rendering.
-
Best AI Video Generators in 2026: Free vs Paid, and My LTX-2.3 Test
Compare the best AI video generators in 2026 — free vs paid plans, real pricing, local open-weight models, and my hands-on LTX-2.3 test.
-
How I Made My Own Songs with Suno AI
I wrote the lyrics, tuned the prompts, and shipped seven songs with Suno AI — folk ballads, a kids' tune, an anime-style Heart Sutra. Full workflow + the tracks.
-
How I Built an AI Furniture Compositing Demo With FLUX.1 Kontext
Compositing furniture photos into styled room scenes with fal.ai FLUX.1 Kontext — the multi-image endpoint, the tainted-canvas fix, and why prompt enhancement had to go.
-
Syncing a Self-Improving AI Agent Across Machines
How I sync my Hermes agent's skills, config, and cron jobs between two PCs with a git-backed profile distribution — and why I sync manually instead of on a cron.
-
Using Chinese LLM APIs From Malaysia: What Actually Works
Using Chinese LLM APIs (GLM-5.3, DeepSeek V4) from Malaysia: how I paid in RMB, handled phone verification, and which providers actually work.
-
The NocoDB Attachment That Wouldn't Update (and a Regex That Missed)
Two small gotchas from backfilling 300 rows: NocoDB ignores a path change when the attachment keeps its id, and a lookahead regex silently skipped URLs without a file extension.
-
Why Your Headless Browser Can't Scrape Everything
Two second-hand marketplaces, two very different walls: Goofish blocks a headless browser with 'illegal access' while Carousell keeps serving data. The lesson is to read how a page delivers data before you reach for Playwright.
-
How I Vetted 20 VPS Providers in Three Hours with Parallel Subagents
A case study in orchestrating parallel AI subagents to run due diligence on 20 hosting providers — WHOIS, AUP, and reputation checks — collapsing a multi-hour research task into a structured, verifiable vendor scorecard.
-
Hardening a Tor Onion Service: What Actually Matters
Out of curiosity I mirrored my portfolio and git server onto the darknet. Here's the hardening that held, the parts that silently broke, and whether it's worth offering to clients.
-
Automating CyberPanel Without the UI: Reverse-Engineering an Undocumented v2 API
CyberPanel v2 killed the documented JSON API and left only the Angular UI's own session+CSRF endpoints. Here's the exact auth flow and how I found the real functions behind the pages.
-
Authentik 2025.8 to 2026.8: The Breakable Parts Nobody Warns You About
A year's worth of authentik major-version upgrade pain: storage mount changes, RBAC session cleanup, trusted proxies, and the authorization_flow vs authentication_flow mix-up that broke SSO.
-
How to Verify a Hosting Provider Before You Buy
A reusable checklist for separating real hosting claims from marketing: check the domain age against the 'since' claim, read the AUP for silent disqualifiers, and cross-check reputation on third-party sources.
-
Why Telegram Bot Notifications Die: IPv6, DNS, and a 400 That Took a Day
A debugging story: a Dockerized telegram monitor whose sendPhoto calls returned 400 from nginx/1.30.1 while getMe worked fine — an IPv6-only DNS answer, a wrong extra_hosts IP, and a multipart join that corrupted JPEG bytes.
-
How I Built the DigiKedai Telegram AI Bot
A customer-support AI bot that answers questions and provisions free-trial accounts over Telegram and WhatsApp — TypeScript, grammY, a Cloudflare tunnel webhook, and a self-hosted LiteLLM gateway.
-
Hello, World — About This Blog
What this blog is for: technical writing, self-hosting experience, and a record of what I build and learn.
-
How I Host This Blog: Astro, Gitea Actions, and Self-Hosted CI/CD
A walkthrough of the end-to-end pipeline that builds and serves this site — git-as-CMS, a self-hosted runner on my unRaid server, and Cloudflare in front.