Context
A family business carrying a WordPress liability.
Fiskardo Properties sells villas, village houses and land across the villages of north Kefalonia: around 45 listings, run on local knowledge and personal relationships. The person managing it day to day is the owner, who is not technical and should not have to be.
The site was an ageing WordPress build: slow, expensive to keep secure, and dependent on a maintenance contract for every small change. My audit found the usual bodies: an unpatched attack surface, credentials leaked into backups, and content locked inside theme-specific fields only the theme could read.
The brief I set: the owner manages every listing herself, from her phone, with nothing to break and nothing to maintain.
The decision
No backend. At all.
The easy pitch would have been newer WordPress. I went the other way: a fully static site generated from plain-text listing data, deployed globally on every change. No database, no server, no plugins. Nothing to patch, and hosting costs of pounds rather than hundreds per month.
The trade-off is honest: a saved change takes about a minute to go live, because every save rebuilds the whole site. For an agency updating listings a few times a week, that is the right trade: durability and speed for thousands of visitors over instant gratification for one editor.
Challenge
Build the admin around one real user.
The plan was an off-the-shelf git-based CMS, until the owner couldn't get through its login. Rather than train around a bad fit, I built a purpose-made admin measured entirely against her reality: sign-in is an emailed link, photos compress themselves in the browser, and publishing is guided rather than gated.
Try to publish an incomplete listing and the admin numbers every problem, marks each one beside its field, and walks you through them, "Problem 3 of 7", ticking them off live as they are fixed. Half-finished work saves as a draft instead, invisible to the public site.
Execution
AI in the workflow, not on a pedestal.
Two AI features earn their place in the admin. A photo upscaler rescues low-resolution listing photos instead of rejecting them, and a copy refiner tidies descriptions without touching facts or figures, primed with the local gazetteer so it never "corrects" Tselentata or Vasilikades into something more English.
The engineering discipline is in the restraint. Upscales are right-sized to the dimensions the site actually displays rather than the model's maximum, outputs are re-compressed to normal web weight. One fix alone cut enhanced photo sizes by 88%. And every AI result is reviewed by a human before it is kept. Nothing replaces a photo silently.
The economics
Running costs as a product feature.
The AI features cost real money per use, so I productised the economics instead of hiding them. Every action is metered the moment it happens, the client pays a flat transparent rate per use, and an itemised invoice generates itself each month: sequential numbering, per-feature line items, with my actual provider costs tracked separately for margin visibility.
Nobody gets a surprise bill in either direction. The client knows what she spent and on what; the studio knows what it earned.
Outcome
Live, consolidated, and run by its owner.
Live at fiskardoproperties.gr: 45 listings across 14 villages, map search, galleries, seven domain spellings consolidated onto one canonical address. Roughly 400 photos migrated from the old database with strict parsing: anything ambiguous flagged for a human rather than silently guessed.
Zero servers, zero database, zero plugin treadmill. One non-technical owner managing everything from a browser.
In the client’s words
Thank you Juan for a great website!! Your effort and dedication made it super easy to communicate what I needed and you delivered so much more!! I’ll recommend your service any day.
Nicoletta AntypasFiskardo Properties Real Estate
Reflection
What this proved about the studio.
The most valuable work happened before any code: auditing first, proving listing parity before touching DNS, and advising the client to launch immediately and polish live rather than perfect in private.
User-test the tooling, not just the website: the admin exists because the owner couldn't log into the off-the-shelf alternative.
And incidents become design improvements or they become recurring incidents. A quality gate caught bad data mid-project and blocked deployment; within the hour the admin had a three-layer safeguard so it can never recur. That is the shape of software that keeps working after the invoice is paid.