This is the first real post on Murat's Lab, a personal notebook for homelab tinkering, project writeups, and code snippets.
What lives here
The blog sits on a small CasaOS homeserver at home, behind Nginx Proxy Manager. It runs Ghost in Docker alongside Plex, the *arr stack, wger, and a handful of other services. If something here is useful to you, great; if not, I'm also writing this mostly for my future self.
The stack
- Ghost 6.27 in a Docker container, paired with MySQL 8
- Liebling theme (eddiesigner/liebling), with a sky-blue accent and JetBrains Mono for code
- Weekly automated backups (mysqldump + content tarball, 30-day retention)
- Let's Encrypt SSL via NPM, exposed at
blog.muratslab.com
A quick code example
Here is what the Ghost Admin API looks like from Python, just to show off the syntax highlighting:
import jwt, time, urllib.request, json
KEY = "id:hex_secret"
kid, secret = KEY.split(":")
iat = int(time.time())
token = jwt.encode(
{"iat": iat, "exp": iat + 300, "aud": "/admin/"},
bytes.fromhex(secret),
algorithm="HS256",
headers={"kid": kid},
)
What you'll find
I'm organizing posts under four tags:
- Notes — short-form thoughts and quick observations
- Projects — deeper dives into things I'm building
- Homelab — server, network, and infrastructure writeups
- Code — scripts and snippets worth keeping
Thanks for stopping by.