Built a daemon in Gleam to fix the most annoying thing about my arr stack

Built a daemon in Gleam to fix the most annoying thing about my arr stack

Every time Sonarr renames a file, qBittorrent loses it and stops seeding. I know the hardlink workaround, but it breaks the moment your downloads and media are on different volumes.

So I spent a few weekends building arr-sync — a daemon that watches your media folders and automatically resyncs qBittorrent when a file moves or gets renamed. Matching is done via BitTorrent piece hashes, not filenames, so it actually works.

Wrote it in Gleam mostly because I wanted to learn it, and honestly the OTP supervision tree was perfect for this kind of long-running process. Had to write a couple Erlang FFI shims for the filesystem watcher and the piece hasher but nothing crazy.

Still some rough edges (pure v2 BitTorrent torrents can't be matched, qBittorrent bug), documented in the README.

https://github.com/Chahine-tech/daemon

Happy to answer questions, especially around the Gleam/OTP bits since that was the most interesting part to figure out.

u/Middle-Perception52 — 2 hours ago

Built a daemon in Gleam to fix the most annoying thing about my arr stack

Every time Sonarr renames a file, qBittorrent loses it and stops seeding. I know the hardlink workaround, but it breaks the moment your downloads and media are on different volumes.

So I spent a few weekends building arr-sync — a daemon that watches your media folders and automatically resyncs qBittorrent when a file moves or gets renamed. Matching is done via BitTorrent piece hashes, not filenames, so it actually works.

Wrote it in Gleam mostly because I wanted to learn it, and honestly the OTP supervision tree was perfect for this kind of long-running process. Had to write a couple Erlang FFI shims for the filesystem watcher and the piece hasher but nothing crazy.

Still some rough edges (pure v2 BitTorrent torrents can't be matched, qBittorrent bug), documented in the README.

https://github.com/Chahine-tech/daemon

Happy to answer questions, especially around the Gleam/OTP bits since that was the most interesting part to figure out.

reddit.com
u/Middle-Perception52 — 1 day ago

I built a self-hosted alternative to Liveblocks and PartyKit — real-time CRDT sync, no vendor lock-in

Hey r/selfhosted,

I got tired of paying for Liveblocks and being locked into their infrastructure, so I built Meridian — a self-hosted real-time CRDT sync server.

What it does:

  • Real-time sync between clients with conflict-free data structures (CRDTs)
  • Works on your own server or at the edge on Cloudflare Workers — same SDK, same protocol
  • Built-in support for collaborative text editing (RGA algorithm), hierarchical trees, counters, sets, registers, presence
  • AI agent support out of the box — Claude, GPT, Gemini can read/write shared CRDT state via tool use
  • Pluggable storage: sled, PostgreSQL, Redis, in-memory
  • Multi-node clustering via Redis Pub/Sub
  • S3 WAL archive for disaster recovery

Why self-hosted matters here:
Liveblocks starts at $99/mo for serious usage. PartyKit was acquired by Cloudflare. With Meridian you bring your own infra and your own R2/S3 bucket.

Quick start:

bash

MERIDIAN_SIGNING_KEY=$(openssl rand -hex 32) docker compose up -d

That's it. Full TypeScript SDK, React hooks, Rust client, and a devtools panel included.

GitHub: https://github.com/Chahine-tech/meridian

Happy to answer questions about the CRDT implementation or the Cloudflare Workers deploy.

u/Middle-Perception52 — 9 days ago

I shipped email subscribers, post permalinks, and reactions to my changelog SaaS — week 2 update

Hey, posted about Shiplog a week ago and got some great feedback. Here's what shipped since then.

What's new:

- Email subscribers — readers can subscribe and get an email when a new post is published (double opt-in, unsubscribe link in every email)

- Post permalinks — each entry has its own URL with proper OG meta tags for sharing

- Emoji reactions — 👍 🚀 ❤️ 😮 on every post, no login required

- Scheduled posts — set a publish date, goes live automatically

- Custom domains — Pro plan lets you serve your changelog from your own domain

Stack is still Hono + React (Inertia.js) on Cloudflare Workers + D1.

Free to start (1 project, 10 posts). Pro is $8/mo.

Original post: https://www.reddit.com/r/sideprojects/comments/1t68vcv/i_built_a_lightweight_changelog_tool_for_devs/

Would love to know — is double opt-in overkill for a changelog newsletter, or expected?

reddit.com
u/Middle-Perception52 — 2 months ago

Hey everyone,

I just launched Shiplog (shiploghq.app) — a simple changelog tool I built because I couldn't find something lightweight enough.

What it does:

- Public changelog page per project

- Embeddable widget (one script tag)

- RSS feed out of the box

- REST API to publish posts from scripts or CI/CD

- Clean, minimal UI

Free to start (1 project, 10 posts). Pro at $9/month for unlimited everything + API access.

Stack for the curious: Hono + React (Inertia.js) on Cloudflare Workers. All on the edge.

Would love feedback — especially from anyone who's tried other changelog tools and found them too heavy.

reddit.com
u/Middle-Perception52 — 2 months ago