Author
Taceddin Sancak
Taceddin Sancak runs wleeaf, an independent software studio, and writes its field notes: hands-on guides to Linux, self-hosting, networking and reverse engineering.
Every note on this site is written by Taceddin, and each one comes from the work of the studio: the server that hosts its products, the mail and chat it runs itself, the command-line tools used every day, and the occasional reverse-engineering project, such as WolknerProtocol, a live state editor for the game Suzerain.
The studio’s products are built by the same hands:
- wleeaf Play: free party games with friends in the browser, from Okey and Tavla to drawing and arena games.
- Projectum: a desktop app for projects, playlists, todos and notes.
- Kartiya: an AI tarot reader for Android.
- X Archives: threads worth keeping, preserved and searchable.
Code is on GitHub. Questions or corrections about a note: [email protected].
18 Field notes
Everything Taceddin has written.
Live Editing Suzerain: Walking an IL2CPP Heap to Find a Hidden Lua VM
How I built WolknerProtocol, a real-time state editor for Suzerain, by reverse engineering its Unity 6 IL2CPP build to find the in-process Lua variable table without any static knowledge of class layouts.
10 min readDNS For People Who Just Want Their Site to Work
A, AAAA, CNAME, MX, TXT, NS, SOA. What they do, when to use them, and how to debug when things break.
4 min readBuilding a WebSocket Server From Scratch in Node.js
The WebSocket protocol is simple enough to implement by hand. Here is what happens under the hood.
4 min readawk in 10 Minutes With Practical Examples
Nobody reads the awk manual. Here are the patterns that cover 90% of real-world use.
4 min readMakefiles Are Not Just for C
Using Make as a project task runner when npm scripts and shell aliases fall short.
4 min readPython One-Liners for Server Troubleshooting
When awk gets ugly and bash gets painful, Python -c is right there in your PATH.
3 min readWriting systemd Services That Actually Work
Unit files, restart policies, environment variables, and journalctl. A practical guide to running your own daemons.
3 min readGit Worktrees Changed How I Handle Branches
Switching branches without stashing, losing context, or waiting for node_modules to reinstall.
3 min readDebugging Running Docker Containers Without Restarting Them
exec, logs, inspect, and nsenter. Four tools for figuring out what is happening inside a container without touching it.
3 min readCaddy Patterns That Replaced My Nginx Config
Wildcard certs, host matching, VPN-only routes, and SPA fallbacks in a single Caddyfile.
3 min readBypassing ISP Deep Packet Inspection on Linux
When your ISP blocks websites at the packet level, here is how to get around it without a full VPN.
5 min readjq Is the SQL of JSON
Every API returns JSON now. jq turns your terminal into a query engine for it.
3 min readSSH Config Tricks I Use Every Day
Stop typing full hostnames and passwords. Your SSH config file is more powerful than you think.
3 min readSelf-Hosting Matrix: Federation, Calls, and What Nobody Tells You
Setting up a Matrix homeserver with Element Web, voice calls, and federation. The documentation leaves out some important details.
5 min readSplit Tunnel WireGuard: Private Services Without Routing Everything
How to set up WireGuard so only traffic to your private services goes through the tunnel, while everything else uses your normal connection.
4 min readBash Traps and the Art of Not Leaving a Mess
How trap, set -e, and a cleanup function can save you from half-finished deployments.
3 min readRunning 15 Services on One VPS With Docker Compose
How a single compose file, two networks, and some naming discipline keeps everything manageable.
4 min readWhat I Learned Setting Up My Own Mail Server in 2026
Running your own SMTP/IMAP server is supposedly a nightmare. Here is what actually happened when I tried it.
4 min read