October 25, 2026
LayStop: Rebuilding a Layover Experiences Site in Seven Weeks

You land in Dubai at 9 in the morning and your next flight leaves at 5 in the afternoon. Eight hours. Most people spend them at the gate. My co-founder wanted to change that, and that's how LayStop started: curated experiences for long layovers in Dubai, Abu Dhabi and Doha, timed so you never miss your flight.
The idea is his, and so is the business side, along with a first version of the site made with a website builder. I lead the tech. On 2 September I made the first commit of a full rebuild, and seven weeks later the site has a layover planner, landing pages for three airports, a Journal, two request inboxes and an admin panel he runs on his own.
Why rebuild it
The site-builder version looked good, and we kept the design one to one: same fonts, same navy and gold, same layouts. What it couldn't do was the part that makes LayStop useful. Every experience has a real constraint behind it: how long it takes, how far it is from the terminal, and how much margin you need to get back through security. A static page can't answer "does my layover fit?". A database can.
The other reason was ownership. My co-founder adds experiences, writes Journal posts and changes the copy. He shouldn't need a developer for any of that, and he shouldn't need to fight a page builder either.
The planner
The heart of the site is a small piece of arithmetic. Take an 8-hour layover at DXB: 45 minutes for immigration and bags, the transfer each way, and a buffer to be back at the airport in time. What's left is your time on the ground, and every experience knows the shortest layover it fits.

Pick your airport, slide to your layover length, and the list filters live. It works without JavaScript too: the form then becomes a tailor-made request with your airport and hours already filled in. The catalogue is per city, so a desert safari from Dubai and one from Abu Dhabi are two different cards with their own timings and photos, and the site never shows them side by side.
From the planner you can get your picks by email, with a plan page that turns them into clock times once you add when you land. If nothing fits, you can ask for a tailor-made itinerary instead.
An admin panel for a non-developer
The admin is built with Filament. My co-founder edits experiences, airports, FAQs and Journal posts there, with drafts and scheduled publishing. Every marketing text on the site, from the home hero to the footer line, is editable on one page, with the launch copy as the fallback when a field is blank. Contact and tailor-made requests land in two separate inboxes, and each one also arrives by email.
One detail I like: every release that changes something he would notice gets a short entry, in Italian and in plain words, on a "What's new" page in the admin. He never has to read a commit message.
The boring parts that matter
- Content that survives deploys. The catalogue is seeded on every deploy, but the seeder only creates missing rows and never overwrites an edit. Early on it kept bringing back rows he had deleted. The fix was soft deletes, so a deleted row stays in the trash and the seeder leaves it alone.
- SEO from day one. Every page ships structured data (organisation, breadcrumbs, FAQs, airports, articles), a dynamic sitemap and robots file, and 301 redirects from the old site's URLs, so nothing it had built up was lost.
- Fast pages. Self-hosted fonts, WebP images with responsive sizes, and admin uploads re-encoded to WebP on save.
- Rules as tests. We agreed on a few copy rules, things the site must never say. A test fails if any page breaks one of them, so a rule can't slip back in with a quick edit.
- More than 300 automated tests across the site, the admin and the planner logic.
Errors fixed before anyone reports them
Once a day, a workflow reads the new Sentry errors and opens a triage report as a GitHub issue: what broke, the probable cause, a proposed fix. I reply with the ones I want fixed, and each fix comes back as its own pull request with a test that failed before the change and passes after it. Nothing merges without my approval.
The stack
- Laravel 13 and Filament 5
- Blade and Tailwind 4 for the public site
- Docker image built on GitHub, deployed with Dokploy
- Mailgun EU for request emails, rate limits and a honeypot on the forms
- Sentry, plus Google Analytics only after cookie consent
What's next
More Journal posts are queued, written to answer what travellers actually search before a long layover. Then it's the usual: watch what people use, cut what they don't, and keep the planner honest as the catalogue grows.
I'm Andrea Giannini, a full stack developer and product builder based in Valencia. LayStop is live at laystop.com.