portfolio

Giuliano Zorzi — Portfolio

Open-source software built primarily in Go: system tooling, media utilities, and developer infrastructure.


About

A collection of small, focused, single-purpose tools I build and maintain for real problems I hit in my own workflow — media library management, self-hosted infrastructure, and everyday CLI utilities. Each project is deliberately small, well-tested, and documented, with a Makefile for easy builds.


Projects

Media & Video

tomp4

Batch-converts video files to the modern MP4 (H.264/AAC) container using FFmpeg.

HandbrakeCLI-QSV

Builds HandBrakeCLI from source inside an Alpine container with Intel QSV (--enable-qsv) encoding support.

AudiobookConverter

Converts an archive of MP3 chapters (ZIP/7z/RAR or a plain folder) into a single M4B audiobook.

audio-tagger

Organises audio files by their ID3 metadata into an Artist/Album/ folder layout.

videoinfo

Prints detailed technical metadata for media files using FFmpeg libraries (libavformat/avcodec via cgo).

video-server

A simple HTTP file server that serves a local directory over the network.


Servers and system tools

localCA

A web app for managing a local Certificate Authority and issuing internal server certificates.

unifi-route-table-updater

Lightweight Go daemon that keeps a UniFi static route in sync with a dynamic DNS hostname.

TelegramAlert

A lightweight Go daemon that monitors a folder for files and sends a Telegram alert when matching files are found.

luks-mount

A Go CLI took that mounts, unmounts, creates and expands LUKS-encrypted devices and file-backed containers.

filex

A fast, self-hosted web-based file browser with a dark theme, built in Go with zero external runtime dependencies.

regex-renamer

Batch-renames files and folders using a chain of regex rules defined in YAML.

random-mover

Randomly selects and moves N files from one directory to another.


Development Environment

opencode-dev

A Docker-based development container for Go and OpenCode development, with VPN connectivity.

opencode-alpine

Builds a static musl binary of opencode for Alpine Linux using Docker buildx.


Games

dungeon

A tile-based dungeon maze game with a web interface — roll the dice, traverse a randomly generated grid of corridor tiles, and race to catch the goal before the other players.

shisensho

A web port of KShisen, the Shisen-Sho Mahjongg game of the KDE Games project — it runs in the browser, needs no server and no installation, and works on a desktop as well as on a phone.


Zenn Articles

In-depth technical write-ups — long-form, run-an-example-first tutorials on Go systems programming, networking, and security. Each title links to the article on Zenn, with a GitHub icon next to the title linking to the companion repo where one exists — every repo pairs the full article with complete, runnable sample code.

Low-Level Networking in Go: Forging Packets, Decoding Bytes, and Building Custom Protocols low-level-networking

Goes below net.Conn — encoding custom binary protocols over UDP/TCP, reading raw Ethernet frames with x/net/ipv4, and hand-crafting IP/ICMP packets (including checksums) with gopacket.

Hardening Web Applications with WebAssembly: A Practical Security Approach wasm

Makes the case for WebAssembly as a security tool (not just a performance one): sandboxing untrusted code, isolating memory, and running the same Go validator compiled to Wasm on both client and server.

Building Custom Struct Tags in Go: A Practical Guide struct-tags

Explains how struct tags work under the hood via reflect, then builds a working reflection-based validate tag library for API request validation.

Automating TLS Certificate Renewal in Go with Cloudflare DNS-01 Validation tls-renew

Builds a Go ACME client with go-acme/lego that obtains and auto-renews (wildcard) Let’s Encrypt certificates using Cloudflare DNS-01 validation, with a daily expiry-check background loop.

Building HTTP/3 Services in Go http3

Covers why HTTP/3/QUIC matters (0-RTT handshakes, no head-of-line blocking, connection migration) and stands up production http3 servers and clients with quic-go.

Building a Simple P2P / Multi-Node Service with LAN Auto-Discovery in Go p2p

Implements UDP multicast discovery (239.0.0.0/8) for nodes to find each other on a LAN, then TCP for reliable messaging — complete, runnable, dependency-free example.

Using PGP with Go pgp

A history of PGP / OpenPGP and a practical guide using the maintained ProtonMail/go-crypto package — key-pair generation, encryption, and signature verification across runnable examples/ modules.

Real-Time Feature Flags in Go: How and Why feature-flags

Shows why flag toggling must be real-time (kill switches, progressive rollouts, targeting, A/B tests) and builds a thread-safe in-memory store with streaming sync — from simple atomic.Value to production-grade setups.

Newbie vs. Pro vs. Enterprise Go: How Code Evolves as Skill Grows newbie-vs-pro-code

Walks the same problem (reading users and fetching profile data) at three maturity levels, demonstrating how error handling, package structure, concurrency, and maintainability improve with experience.

Browser Automation in Go with chromedp chromedp

Drives Chrome via the Chrome DevTools Protocol from pure Go — no Selenium or WebDriver — covering contexts, actions/tasks, scraping JavaScript-heavy sites, screenshots, PDFs, and end-to-end tests.

Using C Libraries in Go videoinfo

A primer on cgo, then builds an MP4 inspector that uses FFmpeg’s C libraries (libavformat/avcodec/avutil) to list video, audio, and subtitle streams plus chapters.

Go Annotations: A Practical Guide to //go: Directives go-annotations

Go has no @Override or [Serializable] — it has compiler directives. Explains what actually makes a //go: comment a directive rather than a plain comment, then covers //go:generate, //go:build, //go:embed, //go:noinline, //go:noescape, //go:linkname and //go:nosplit, each with runnable examples.

Fuzzy Testing in Go fuzzy-testing

Go’s built-in fuzzing (since 1.18) with no external dependencies — *testing.F seed corpora and f.Fuzz callbacks, worked examples fuzzing a JSON parser, a URL parser, a math function and byte slices, a real bug the fuzzer found in the author’s own code, and how to run, bound and triage fuzz targets.

How the Go Compiler Optimizes Your Code

Walks the passes that make naive-looking Go fast — escape analysis, inlining, bounds-check elimination, dead code and constant folding, function specialization and devirtualization — and the code patterns that silently defeat them, with a before/after example and a practical checklist.

Go metadata injection

Injects a version, Git commit hash and build time into a binary at compile time with go build -ldflags "-X" — without changing a single line of code — plus the Makefile plumbing that automates it.

How FIDO2 Works

The standard behind passkeys, security keys and Windows Hello: WebAuthn vs CTAP2, the registration (attestation) and authentication (assertion) ceremonies, what’s actually inside the data, why it resists phishing, and a full relying-party server built in Go with go-webauthn — begin/finish for both ceremonies and the key security properties to get right.

How Screen Readers “Read” Web Pages

Screen readers never see the DOM — they consume the accessibility tree. Explains the DOM → a11y tree → OS API → speech pipeline, why DOM order and semantics matter more than visual appearance, how accessible names are computed, and the most common errors and their fixes. —


Maintained by @giulianozor · All projects are available at github.com/giulianozor · Articles at github.com/gz-zenn