Most billing software treats payment and network access as two systems: invoices in one place, router config in another, a sync job in the middle. On a mobile-money hotspot that gap is the whole product. The payment callback is the login button. Every second between "payment…
Fabian Muema
@fabianmuema
Software Engineer / DevOps / Network Administrator / React Native
- Centipid Technologies
- Nairobi, Kenya
- centipidtechnologies.com
- github.com/fabianmuema
- Sponsor on GitHub
- Joined October 2026
Commit activity
11 commits in the last 30 days
longest streak 2 days
297 / 400 XP103 XP to maintainer
Thu, Oct 22
Tue, Oct 20
Clipboard managers remember what you copied. None I tried remember where you pasted it.
That gap is how API keys end up in Slack threads. So we're building Paster for macOS: it watches paste events, keeps a record of which app each paste went to, and warns when something…
Mon, Oct 19
Our Caddy edge boxes were running out of memory. Caddy held 1.47 GB of 2 GB after 27 days up, yet open connections stayed flat for 28 days.
A heap profile put 520 MB of 663 MB live heap in the reverse proxy's upstream connection pool. With proxy_protocol on, Caddy puts the…
SSE or Websockets?
Lesson from this week: WebSockets don’t survive mobile captive-portal sheets (the “sign in to Wi-Fi” popup). Our socket server was on a separate host, and the hotspot blocks every host except ours until the user pays.
Server-sent events from the same origin…
Same lesson from the terminal side. SSE is just a long HTTP response, so it rides every proxy, captive portal and
curl that already works. WebSockets need the upgrade to survive the whole path. For a CLI I'd pick SSE every time. The 337 ms number is nice, polling fallback is…I'd sign up. Day one:
cargo new dev-null. Day two: a long talk with the borrow checker about who owns the timeline.[deleted]This commit was deleted.
That's @fabianmuema's root commit.
