Built a Free Analytics Platform, Here's Why
I got tired of the way web analytics worked. Every tool out there either wanted to track your visitors to death or charge you a fortune for the privilege of not doing that. So I built Nanolytica.
Read →Hello, I'm İlhan Neğiş, a.k.a
Thoughts about design, making and code. Random information, experiments, and notes from the workbench.
About

I’m interested in the space where ideas turn into real things. Sometimes that’s software, sometimes it’s electronics, sometimes it’s something built by hand.
I care about design, how things work, and how they feel when you use them. I enjoy the process of sketching ideas, experimenting, refining details, and learning by doing.
This site is a collection of notes, experiments, and thoughts from things I’m building, breaking, and putting back together.
Projects
Open-source tools and libraries
A tiny declarative library for building dynamic web pages. Send messages between HTML elements using simple attributes — no build step, no virtual DOM, no framework.
talkdom.orgPrivacy-first, cookie-free web analytics. Lightweight tracking with bot detection, real-time visitors, and a clean dashboard — all self-hosted.
nanolytica.orgBlog
A living notebook for things and tinkering
I got tired of the way web analytics worked. Every tool out there either wanted to track your visitors to death or charge you a fortune for the privilege of not doing that. So I built Nanolytica.
Read →talkDOM is a lightweight framework for declarative DOM messaging. HTML elements send Smalltalk-style messages to fetch content, update the DOM, compose pipelines, and control navigation—all with a tiny runtime and no build step.
Read →What happens when you replace a user's terminal shell with a video game? I spent the weekend experimenting with OpenSSH's ForceCommand to create a 'shell-less' gaming experience. The result is XZAP a classic Commorore 16 game inspired GO muse, you play by simply SSHing into my server
Read →How I used Claude Code to build a pure Go WebP encoder from scratch, and the three subtle bitstream bugs that took days to find: a missing bit, an off-by-one in Huffman tree construction, and a spatial distance table that was silently backwards.
Read →Sometimes the most useful tools are the ones you build for yourself. This post walks through creating a tiny Elixir based CLI todo app that stores tasks in plain Markdown and integrates directly with the shell, turning the terminal into a quiet reminder system without adding noise to your workflow.
Read →PubEngine is a minimal blog engine built with Go, HTMX, and SQLite that prioritizes three things: simplicity, performance, and ease of use. It's a single binary with no Javascript frameworks to maintain, just write and publish.
Read →Browser based passport MRZ reader built with Tesseract.js and WebAssembly. this tool captures passport data instantly using any device camera, without specialized hardware required. All processing happens client side.
Read →WebAssembly based barcode scanner for iOS/Safari browsers that lack the Barcode Detection API. Uses ZBar compiled to WASM via Emscripten to achieve almost native scanning performance directly in the browser, no native app required.
Read →Mobile interface design is often discussed in terms of aesthetics, but one of the most important factors behind good mobile UI choices is performance. Many visual design decisions directly affect how smoothly an interface behaves, especially during scrolling and animation.
Read →Simplicity in web design is often misunderstood. Many people think it means removing features, reducing visual elements, or making a site look minimal. But a truly simple website is not about stripping things away randomly — it’s about clarity, familiarity, and purposeful design.
Read →