I built more than 20 websites by myself, then helped lead a small team that delivered more than 30 more. At first, it was about learning how to make something visible and useful on the web. But over time, the work taught me something more lasting: the distance between a design and a working site is where most of the real engineering lives.
The gap between design and delivery
Turning rough Figma ideas into working pages sounds straightforward. In practice, every pixel from a mockup has to be interpreted, recreated in CSS, tested across viewports, and connected to actual content. A design that looks clean in a static frame can collapse under real data, variable text lengths, or missing hover states.
The gap is not a bug. It is the space where practical decisions happen. Which breakpoints matter. How images degrade. What happens when the client pastes a paragraph that is three times longer than the placeholder text.
Building custom WordPress themes
Custom theme development is where I learned PHP, the WordPress loop, template hierarchy, and the importance of separating presentation from logic. Each theme had to support a CMS that the client could actually use, which meant building admin interfaces that made sense to someone who did not write code.
- Custom post types and taxonomies for structured content
- Advanced Custom Fields for flexible page building
- Child themes to preserve upgrades without breaking customisations
The technical part was manageable. The harder part was predicting which settings the client would need six months later, and which would only add confusion.
Handling client needs and practical handoff
The handoff was never just a ZIP file. It was a walkthrough of how the backend worked, where to change text, and what not to touch. Some clients had in-house editors. Others had never logged into a CMS before. Both needed a different kind of documentation.
We learned that a good handoff reduces the number of questions that come back. Clear labelling in the admin, sensible defaults, and a short written guide saved more time than any feature we could have added.
What stayed
WordPress taught me that practical web work is mostly about boundaries: between design and code, between developer and client, between what a system should do and what it can do reliably. Those boundaries are still what I think about when I build anything today.