FoodyFocus
AI food photography for restaurants: product, front end and the growth audit, all in one pair of hands.
FoodyFocus turns a phone photo of a dish into a print-ready professional photograph in seconds, for 19 euros a month instead of a 400 to 800 euro shoot. It is my own product. I own the UX, the React front end, and the SEO and performance work that decides whether restaurants ever find it.
Role
Founder, UX engineer
Client
Own product
Timeline
2026, live
Platform
Web app (React, Vercel, Supabase), marketing site in five languages
Live
Visit site
334
URLs across five languages in the sitemap
450x
Organic traffic gap to the direct competitor, diagnosed as topic selection, not page count
1.5 MB
JavaScript every marketing page was shipping before the decoupling work
Context
Restaurants need good photographs for delivery apps and menus, and a professional shoot costs 400 to 800 euros. FoodyFocus lets an owner photograph the dish on a phone and get a professional image back in seconds. The audience does not buy AI; it buys photographs, and every decision on the site follows from that.
The audit
Before any redesign I audited what a crawler actually receives. The site had 334 URLs in five languages and roughly three organic visits a month against a competitor's 1,352. That is a 450x gap, and it was a topic-selection gap rather than a page-count gap.
Two things were holding the site back. About 56 landing pages had never been crawled because the sitemap had grown since Google last read it, which is a twenty-minute dashboard fix that gates everything downstream. And every marketing page shipped 1.5 MB of JavaScript, including the entire 826 KB application bundle and the auth client, so a visitor reading a blog post was booting a logged-in app.
The first audit pass also flagged a canonical decision as a bug. It was not; it was a deliberate response to a real duplicate-content signal, and the audit records the retraction so the next person to crawl the site does not repeat it.

Decisions
- Stop the bleeding first: the one real 404, the Search Console tasks only a human can do.
- Decouple the marketing bundle from the app before splitting anything. Most of the performance win lands here and it pays for itself even if the split is cancelled.
- Then split: marketing on www, product on app, two builds, two deployments.
- Brand before visuals. Four mood boards, deliberately far apart, each stating the claim it makes and what that claim costs. The point is not to pick a pretty one but to decide which claim the brand makes.
Why it is on this page
It is the clearest example of how I work: research the real problem, decide in writing, then build it myself. The same six-phase process runs on client work; here I also own the consequences.




