A look at Ibbani, a simple static asset gateway built with Nginx and Filebrowser for a homelab.
Published 25th Jan, 2026
Homelabs have a way of growing quietly. What starts as a few containers eventually turns into an ecosystem of services you rely on every day. Somewhere along that journey, I realized I needed a clean and centralized way to serve static assets, JavaScript files, stylesheets, images, and small binaries without overengineering the solution.
If you had a chance to inspect the references in the source code, you might come across a couple of subdomains. That’s where Ibbani.0x4e.cc comes in.
Ibbani is a static asset gateway for my homelab. At its core, it’s an Nginx front end that serves files from disk and proxies specific requests to a Filebrowser container.
Nothing more. Nothing less.
It’s simply the origin where the static assets live.
As I started self-hosting more services my blog, analytics, and internal tooling. I noticed a recurring pattern: multiple services needed access to shared static assets. Keeping those assets bundled inside individual containers quickly became messy.
Duplicate files everywhere, inconsistent URLs and absolutely no centralized control over headers or caching. I wanted a single, predictable place where assets could live and be served cleanly.
The design is intentionally boring, I would say. It doesn’t use an enterprise-grade framework or object storage spread across multiple hosts.
This keeps the system easy to understand and trivial to debug.

The Ibbani stack visualized
Assets are organized on disk, and Nginx either serves them directly or forwards specific paths to backend services when required. This keeps the system easy to understand and trivial to debug.
Nginx is fast, predictable, and well understood. It gives me full control over routing, caching behavior, and request handling without introducing unnecessary abstraction.
More importantly, when something breaks, I know exactly where to look. There’s no hidden magic or opaque behavior involved. Ibbani itself doesn’t deal with CORS or security headers directly. Since the service is fronted by Cloudflare, those concerns are handled at the edge. This means:
It’s a clean split between edge concerns and origin behavior.
Ibbani behaves a bit like a CDN in small setups because assets are centralized and cached by clients, but architecturally it’s not one. There’s no geographic distribution, no replication and no edge nodes. And that’s perfectly fine. For a homelab, this level of simplicity is a feature, not a limitation.
I could have used Amazon S3 compatible storage or something like MinIO, but that would have added complexity I don’t currently need. It just needs to reliably serve files rather than managing versioning, signed URLs, lifecycle policies and what not.
If I ever outgrow it, that’ll be the right time to move on to something more complex.
Well, that’s a little secret of mine that I’d very much like to preserve. Sometimes the best solutions are the ones you don’t have to think about.
I’ll see you in the next one.
You can write to me at [email protected]. Email services are insecure, consider encrypting emails with my PGP Key if you're sending me something sensitive.
Loading comments