The trilingual travel site we built for this client six years ago got a redesign in the spring of 2022. The main change: the visa application moved from a standalone entry point into the tour pages — after browsing a tour you tap 'apply for visa' right there, instead of jumping to another domain and registering all over again.
The Hard Part of Merging: Drafts
The visa form fields stayed roughly the same — eleven fields, eight required, close to the 2016 version. The real trouble is 'the person halfway through.'
A user might pick a tour, get to the third one, head off to fill in the visa form, complete two steps, go back to change the tour, then return to continue. Before, the two systems each stored their own drafts; merged, that chain broke.
Our approach: add a tour_id column to the draft table and thread all cross-page state through a single draft_id. The cookie carries draft_id and language_code — switching languages or devices (same browser) loses nothing. Attachments land in the permanent directory on upload; that rule dates from losing attachments in 2016, and we kept it as-is.
A scheduled job clears drafts untouched for seven days, once a day. Before deletion it doesn't remove attachments — it marks first, then truly deletes a day later.
Three Languages, Same Old Structure
Tour main table plus translation table, language as the first URL segment — untouched. What is new: the visa form copy also needs three languages, so all form labels, hints, and error messages went into that same translation table, stored by item_id and language_code, sharing one admin with the tour copy.
A detail on the Japanese site: the name field splits into family name and given name, while the English site has one Full Name. We didn't force them into one field; the frontend renders different inputs per language, and the backend concatenates them into a single name column with a separate name_split flag. Exports split it back out according to the flag.
Verified Before Launch
Before the redesign we pulled six months of old-site logs to see which pages still received traffic. Six legacy URLs still had steady visits — all tour pages indexed by search engines. All of them got 301s to the new addresses; nothing was simply switched off. The old visa entry point also stays up, auto-redirecting to the new page with drafts.
We cut over on the morning of March 17 and watched the logs all afternoon for 404s. Two showed up, both carrying old parameters; we added two rewrite rules.
The photo of an office desk, taken in 2016 and still sitting on the old site's server, was not kept in the redesign. Someone dug it out of a backup and posted it to the group chat with the caption: the router is still there.

