The call that changed everything
It was a Tuesday in January when Pau called me. Digital artist, friend for years, and with that voice of "I have an interesting proposal". The company where he works needed a corporate website and the person who was supposed to do it had refused. "Would you do it?"
I had just finished the modifications to my personal website. I had time. I was keen. And, I'll be honest, it had been a while since I'd done any external project and I was excited to get back to it.
"Yes," I said. Just like that. No questions.
Now, seven months later, I know that answer cost me 40 extra hours of work and a good scare with hosting.
The briefing that seemed simple
The requirements were clear: corporate website with "home", company page, contact and a product catalog organized by categories. Nothing fancy. They also wanted a back office so employees could manage all the content.
While we were talking, I was already mentally calculating the work it might involve. With Pau doing the design, I could focus only on development. Perfect.
But here came the first important decision: how to approach the project technically.
The stack choice
WordPress or similar was the obvious option. But I wanted a challenge. I hadn't touched a traditional CMS in years and frankly, I didn't feel like going back. At the same time, I didn't want to reinvent the wheel by building a CMS from scratch.
The solution: Headless CMS.
After researching several options, I decided on Strapi. It was simple, reliable, and I didn't want unpleasant surprises on a professional project where I was going solo. For the frontend, Nextjs was my natural choice. Perfect for hybrid websites where you need static pages for SEO and dynamic ones for the catalog.
I was motivated. The stack was decided and I knew I could pull the project through.
The budget that seemed realistic
With the design in Pau's hands, I could focus on calculating development hours:
- Backend with Strapi: 18 hours (configuration, entities, permissions, testing)
- Frontend with NextJS: 37 hours (landing, pages, catalog, filters)
- DevOps and deployment: 16 hours (hosting, tests, final touches)
Total: 71 hours.
Now came the tricky part: what to charge per hour? I asked AI to do a market study for me. 400 websites analyzed later, the result was clear: senior freelancers charged between €35-50/hour.
But I hadn't worked for third parties in a while. Impostor syndrome? Maybe. The fact is I decided to set myself at €20/hour (junior price/hour).
€1,420 + 15% contingency ≈ €1,650 rounded
The budget was accepted and I started development on April 15th.
When reality slaps you in the face
The first few weeks were fantastic. The backend with Strapi worked wonderfully. The frontend was progressing as planned. Pau and I worked in perfect sync.
Until it came time to deploy the website.
"We have contracted hosting," they had told me at the beginning. I, innocently, assumed it would be compatible with what I was building.
Huge mistake.
Their hosting was set up for WordPress and PrestaShop - the typical shared hosting that only understands traditional CMS. I couldn't deploy NodeJS applications, modify proxies, set up crons, or access logs. If I had access to the machine, it was completely crippled.
To switch to a normal VPS that supported my stack with this provider: €500 more per year. It seemed unbelievable.
I spent two weeks opening tickets. Each conversation was more frustrating than the last. Every question I asked, they dodged. It was clear they only understood WordPress and when I talked to them about NodeJS they looked like they didn't understand anything.
Finally I got angry. It was time to change providers.
The migration I hadn't foreseen
The solution was to migrate everything to Hetzner. Modern hosting, scalable, and much cheaper. A Linux machine where I had complete control to do things right and without friction.
But when I saw that the client would go from paying €350/year to only €130, I decided to migrate all their services. Not just to save them money, but because it was the only logical path.
This involved much more than simply changing servers:
- Migrate all the company's corporate emails
- Reconfigure DNS
- Teach employees to use Thunderbird instead of the webmail they had
- Document the new processes
What was supposed to be "deploy the website" became a complete infrastructure migration.
Every evening, after work, I would get on with the migration. Employees sent me screenshots with questions about the new configuration. I became an IT technician without having budgeted for it. That's what passion for work does, I suppose.
But when I saw the final savings of €220/year, all the headache was worth it.
The reality of numbers
When I closed the project on July 1st, I counted hours:
71 budgeted hours → 108.91 real hours
Where I failed:
- Frontend: from 37h to 57h (design changes on the fly)
- DevOps: from 16h to 39h (the unforeseen migration)
- Backend: 18h to 10h (Strapi was faster than I thought)
The only thing I got right was the backend. The rest? Total budget disaster.
The lessons that have cost me dearly
This experience has taught me that development is only part of the project. The questions I should have asked from day one:
- What hosting do they currently have?
- What technologies does it support?
- How do they have corporate email configured?
- Who manages domain and DNS?
I also learned that design changes during development kill any budget. Pau was very involved (good thing for the final result), but every adjustment became more hours invested.
For next time: approved design = final design. Period. Or find some strategy to better manage these aesthetic modifications, either by putting a specific price on them or establishing specific dates for changes within the initial budget.
What I'll do differently
The website was a success. The client is happy. But economically? I ended up charging much less than I should have per hour and I was already starting low.
Now I know that:
- You need to do technical discovery before accepting any project.
- Working for €20/hour is unsustainable when the market pays between €35 and €50 for an experienced freelancer.
- DevOps always hides surprises: you need to multiply any estimate by 1.5.
- You can't modify the design once accepted without reviewing the real impact on time and cost.
But above all, asking about hosting isn't paranoia, it's professionalism. A website that can't be deployed with the requirements it has provides no value.
Next time, the first question will be: "Explain the current infrastructure to me". It might seem boring, but it would have saved me 20 hours of my life.
What's coming next
Despite the headaches, this experience with Pau has been very enriching. Managing a project like this while working full-time isn't easy, but we've created a good dynamic: him handling the visual and branding part, me the technological.
In fact, we're open to doing more projects together. If you have any website in hand, you know where to find us.
Right now I have my head focused on my home lab. This month it's time to configure Home Assistant and start playing with home automation. Maybe that's the topic of the next post, or maybe not. I like chaos.
Oh, and if you want to see the final result of so much migration: angel-europa.com
Until next time!