Building Zenith: What I’ve Learned From Turning Side Projects Into Real Software
Building Zenith: What I’ve Learned From Turning Side Projects Into Real Software I’ve built a lot of small projects over the years. Some lasted a few hours. Some turned into GitHub repositories I still work on. Others eventually became part of something much bigger. Zenith is probably the best example of that. What is Zenith? Zenith started from a fairly simple idea: What if checking the health of a website didn’t require five different tools? A website can be online and still have plenty wrong with it. It might have: weak security headers accessibility problems poor performance broken redirects missing SEO metadata bad configuration opportunities for growth that nobody notices Zenith is my attempt at bringing those things together. The goal is simple: Monitor, improve and grow your website. Rather than treating security, performance, SEO and accessibility as completely separate problems, I wanted to build something that looks at a website as one system. That idea has changed quite a bit while I’ve been developing it. And that has probably taught me more than the original idea ever did. Building Things Changes How You Think When I first started programming, getting something to work felt like the main objective. If the page loaded, the API responded and the button did what it was supposed to do, that was a success. I don’t really think that way anymore. Now I usually start asking questions like: Why does this work? What happens when it doesn’t? What happens if someone sends a request the interface never expected? What happens when ten thousand requests arrive instead of ten? That shift has made security and systems engineering much more interesting to me. A login page can look completely secure from the browser while the backend behind it has serious problems. A security header can exist while being configured in a way that makes it almost useless. A website can score well in one audit while still giving users a terrible experience. The interesting part is normally somewhere underneath the surface. The Stack Behind Zenith A lot of Zenith has been built around Cloudflare infrastructure. I’ve experimented with things including: Cloudflare Workers D1 R2 Queues scheduled jobs rate limiting authentication bot protection browser-based website analysis One thing I like about this architecture is that it forces me to think about software differently. Instead of having one large server doing everything, you start thinking about individual services, boundaries, failures and communication between components. That introduces new problems. But those problems are interesting. What happens when a scan fails halfway through? What gets retried? What should be stored? How much should be trusted? What happens if one part of the system becomes unavailable? Those are the kinds of questions I want to get better at answering. Open Source Has Been Just as Important A lot of what I’ve learned has also come from GitHub. My profile contains a mixture of personal experiments, website tooling and contributions to other projects. One project I’ve been experimenting with is browser-harness, which explores ways of making browser interaction easier for AI systems and automated agents. I’m particularly interested in the gap between: “An AI model understands what it should do.” and “The AI model can reliably interact with a real application and actually do it.” Real websites are messy. Forms behave differently. Interfaces change. Authentication exists. Errors happen. Pages contain information intended for humans rather than machines. Making AI systems interact reliably with that environment is a surprisingly interesting engineering problem. I’ve also spent time looking through existing open-source projects, fixing smaller issues and submitting contributions. Those smaller changes are useful because they force you to work inside someone else’s decisions. You can’t redesign everything. You have to understand the project first. Sometimes the best contribution is only a few lines of code. AI Got Me Interested in Systems, Not Just AI I first started seriously experimenting with large language models around 2023. Since then I’ve tried different local models, inference tools and hardware setups. I’ve used things like: llama.cpp Ollama LM Studio Qwen Llama models DeepSeek models local GPU inference At first, most of my attention was on the models themselves. How large are they? How much VRAM do they need? How quickly can they generate tokens? How good are they at coding? Eventually I became more interested in everything surrounding the model. Routing. Tool use. Memory. Security. Permissions. Browser interaction. Infrastructure. APIs. Failure handling. A capable model by itself isn’t necessarily a capable system. The engineering around it matters just as much. I Still Build Things That Fail A lot of my projects don’t work perfectly the first time. Sometimes the architecture is wrong. Sometimes I massively overcomplicate something. Sometimes I build a feature and later realise it shouldn’t exist. Sometimes I rewrite something that technically worked because I finally understand why the first version was bad. I think that is one of the best parts of building your own projects. There’s nowhere to hide. If your database design is terrible, eventually you have to deal with it. If your authentication flow is badly designed, you eventually discover why that matters. If your interface is confusing, real users will find things you thought were obvious completely incomprehensible. Every failure exposes something you didn’t understand before. What I’m Working Toward I’m particularly interested in the overlap between: computer science, cybersecurity, artificial intelligence and distributed systems. Zenith happens to touch nearly all of those areas. There’s website analysis. There’s infrastructure. There’s security. There’s automation. There’s data. There’s AI. And most importantly, there are plenty of problems I still don’t know how to solve properly. That’s probably why I keep working on it. I don’t just want to know how to make software work. I want to understand why it works, where it breaks, and how to build it better the next time. You can follow my projects on GitHub: github.com/marceli1404 And Zenith is available at: https://zenith.me.uk I’ll be writing more about the architecture behind Zenith, security mistakes I’ve found while building web applications, local AI experiments, and the things I learn from contributing to open-source projects. If you work on similar things, I’d love to hear what you’re building.