My AI twin lives in a browser tab: LFM3-Omni on WebGPU and my cloned voice
A 3D avatar with my face that hears me through LFM3-Omni on WebGPU and answers in a Pocket TTS clone of my voice, plus the three audio bugs between the model and the mouth.
Field Notes
Notes on event-driven Java, Spring Boot, Kafka, and secure systems for regulated banking.
A 3D avatar with my face that hears me through LFM3-Omni on WebGPU and answers in a Pocket TTS clone of my voice, plus the three audio bugs between the model and the mouth.
I built a 25-second loop of zakaria.lu with HyperFrames and Claude Code: seven HTML scenes on paused GSAP timelines, and a frame-by-frame gate that refused to pass a 1 px wobble.
Security and privacy, in practice
I pointed PentestCode, an open-source multi-agent pentest harness, at everything I run under zakaria.lu. The interesting part was not the 40 findings but how a coordinator, shared state and a critic killed two false HIGHs before they reached the report.
There is no Scala SDK for Claude, and you don't need one: anthropic-java inside a Play 3 app, async end to end, behind one small trait. Plus the Jackson classpath trap that compiles fine and fails later.
Kubernetes: From Zero to Hero · Part 1
I start CKA prep with no Kubernetes experience: a pinned kind and Calico lab on WSL, four setup traps, and a first lesson on why deleted pods come back.
Security and privacy, in practice
BuildCV ran entirely in the browser. Here is how I added four opt-in Claude Haiku 5.5 actions on my own API credit: behind LinkedIn sign-in, capped three ways, falling back to built-in coaching when the money runs out, plus what the first real calls got wrong.
I reformatted 80 Scala files in one commit and a plain git blame put 207 of 260 lines in one file on it. One .git-blame-ignore-revs file brought that down to 22, on GitHub and locally.
When requirements keep changing, the expensive part is not the code. It is re-explaining everything each session. A method that keeps the spec in the repo and treats every pivot as a reviewed delta.
Guice and play and escaping DI hell · Part 4
A Provider class for the MongoDB client, a @Provides method for the database, and @Named qualifiers for two clocks of the same type, with the real errors Guice prints when I get it wrong.
Guice and play and escaping DI hell · Part 3
A MongoDB client as an eager singleton, closed by an ApplicationLifecycle stop hook. Why sbt run printed nothing until the first request, and why my tests built three clients.
The multi-part series and running themes, rather than one long pile.
Learning Typelevel Cats Core in Scala 2 through runnable examples: combining optional values, collecting validation errors, and understanding the type classes behind practical operations.
Learning Scala 2 and Play from a Java and Spring background, step by step: language fundamentals, sbt workflows, domain modelling, asynchronous services, with runnable examples and practical comparisons.
Working through large language models from the ground up — turning text into tokens, embeddings and the geometry of meaning, the transformer architecture, attention, how these models are trained, and what separates one generation from the next.
Learning Embabel by building with it, in order — planning, durable sessions, testing without a model, tools, human-in-the-loop, tracing, exposing it over MCP.
Build it, attack it, keep extending it — the Ask Zakaria concierge from the first prompt through prompt-injection red-teaming to reading a job description and taking questions by voice.
Instrument it, learn to query it, then point it at something that thinks.
An agent as a collaborator rather than an autocomplete — design systems, durable knowledge, automation ladders, subagent fleets on my own source, and now in CI.
Using Codex and ChatGPT as engineering collaborators — repository workflows, security reviews, automation, and the practical boundaries that keep the work controlled.
Attacking my own features and reading the protocols underneath them — secrets delivery, response headers, a published address for bad news, a cookie banner that sets no cookies, and what an auth flow is actually protecting you from.
Shipping and operating my own product in public — one jar serving two hosts, making it findable, dropping experiments into it, shipping a free CV builder off the side.
The design and architecture patterns every backend engineer should have at hand — each built as a small, runnable showcase you can watch work, with the trade-offs and the framework gotchas spelled out rather than hand-waved.
A hands-on, lesson-by-lesson walk through enumeratum, the Scala library that turns sealed traits into real enums: autogenerated values, safe parsing from strings, and integrations with JSON and databases. Each post starts from runnable sbt code on Scala 2.13 and compares it with what plain Scala gives you, scala.Enumeration and hand-rolled case objects, so you see why teams reach for it.