A multilingual website can have a quiet political life. One language gets the root URL and acts as the host. The others get subfolders. If this is done out of habit, you may accidentally tell visitors they are guests, even though the website was made for them.

In the Shuklina Consulting projects, I worked with two market configurations. The French project has English at the root and French under /fr. The Slovak project has Slovak at the root and English under /en. This is not one scheme with a different flag.

Reusable code, separate decisions

Both applications use React, Vite and TypeScript. Copy is stored in language messages and market settings in configuration. Styling uses plain CSS. Releases and URL sets remain independent for each project.

This allows components to be reused without mixing content and routes. A shared service card remains shared. But the specific website decides which text it shows, which URL it opens and where the language switch leads.

The “Shuklina Consulting — first screen” view preserves the project’s real material and design.

Shuklina Consulting — first screen

Archived interface · demo data

Shuklina Consulting — first screen
Saved project screen · no interactive controls

This avoids an unpleasant kind of technical economy: the developer gets the convenience of maintaining one version, while visitors must figure out why their language keeps taking them back to someone else’s homepage.

The “Shuklina Consulting — internal section” view preserves the project’s real material and design.

Shuklina Consulting — internal section

Archived interface · demo data

Shuklina Consulting — internal section
Saved project screen · no interactive controls

Each market has its own release

The French and Slovak projects are published separately. Content and contacts for one market can change without affecting the other. Shared components therefore sit alongside separate configurations.

Shuklina Consulting — contact section

Archived interface · demo data

Shuklina Consulting — contact section
Saved project screen · no interactive controls

When working with AI, this arrangement needs to be explicit. Ask an agent to “make the second website the same” and it may neatly copy everything, including an unsuitable language order. Repetition is useful only after deciding which decisions really repeat.

In this project I reused code while keeping separate decisions for each market. The Slovak repository’s history does not describe all the work on the French version. Archived screens document the selected stage; the availability of live domains is checked separately.

Related stories: Connection.me and RTL · A shared platform for three websites.