02 / 04live on my server

MAXWorld

interiors · renovation

MAXWorld needed a focused Czech marketing site for renovation and finishing work. The visible job was trust and presentation. The invisible job was making sure a broken mail provider could never silently lose an enquiry.

frontend, lead capture, deploymentVite · React · Express · Tailwind · Dockermaxworld.cz
MAXWorld homepage with a deep green photographic hero for an interior renovation company
maxworld.czhomepage · 1440 px

// delivery record

service lines
5
application
React + Express
lead storage
write before email
hosting
self-hosted
01

The brief

Give a small renovation company a clear public face: explain the work, show completed interiors and make asking for an estimate feel straightforward.

The brand needed to feel established and careful, not like a marketplace listing or a generic construction template.

02

The interface

A deep green photographic hero establishes the category immediately. The rest of the page steps through services, realisations and reasons to trust the team before the enquiry form appears.

The typography and colour are deliberately quieter than the imagery. The finished spaces remain the persuasive element.

03

What I hardened

The original builder dependency and third-party webhook were removed. The React frontend and its Express API now ship in one container and the form posts to the same origin.

No lost leads
Every accepted enquiry is written to persistent storage before SMTP is called. Mail failure costs a notification, not the message.
Abuse controls
Server validation, a honeypot, JSON-only requests and separate flood and accepted-submission rate limits.
Ownership
No page-builder runtime, no cross-origin webhook and no platform lock-in. The code and data run on the same self-hosted deployment.
04

The result

The public site and its enquiry pipeline are now one deployable unit. A visitor sees a simple renovation website; the business gets durable lead capture, readable errors and an audit trail when email delivery fails.