Welcome to the Lab

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.