work details

Kiremitci Metal / KRM Steel — Multilingual Industrial B2B Catalogue

A multilingual B2B catalogue presenting construction formwork systems across two domains and five languages with product variants and integrated quotation flows.

Client

Kiremitci Metal

Start

01 Aug 2026

Completed

Kiremitci Metal / KRM Steel — Multilingual Industrial B2B Catalogue interface and project preview
Description

A multilingual B2B catalogue presenting construction formwork systems across two domains and five languages with product variants and integrated quotation flows.

Case study

Challenge

Kiremitci Metal sells under its own name in Turkey and as KRM Steel abroad. Two separate websites would have doubled maintenance, while a single site would have mixed the brands and produced duplicate content in search engines. Size options and custom production details for technical products also had to be presented clearly and tied to a quote request.

Approach

A domain-based language and brand policy was built on a single Next.js, Fastify and MySQL stack: kiremitcimetal.com serves Turkish and English, krmsteel.com serves English, German, Russian and Arabic. Products were modelled as a language-neutral master record plus per-language translations, sizes were stored as variants and the quote form was wired to open with the selected variant.

Outcome

Both brands are live in five languages with one catalogue, one quote inbox and one admin panel. Canonical and hreflang tags link every language to the correct domain, and quote requests are tracked in the panel with status, owner and note history.

Tools

Next.js, React, TypeScript, Fastify, Bun, Drizzle ORM, MySQL

Key Features
  • Two domains: kiremitcimetal.com (TR/EN), krmsteel.com (EN/DE/RU/AR)

  • Brand, logo and contact e-mail resolved per domain

  • 4 product groups, 17 size variants, localized specifications

  • B2B quote form opens with product and variant preselected

  • Quote statuses, assignment, internal notes and event history

  • Right-to-left (RTL) layout for Arabic

  • Cross-domain canonical, hreflang and domain-aware sitemaps

  • Downloadable A4 PDF catalogue in TR, EN and DE

  • Form protected by honeypot, rate limit and hashed IPs

Technologies Used
  • Next.js

  • React

  • TypeScript

  • Fastify

  • Bun

  • Drizzle ORM

  • MySQL

Design Highlights
  • The language switcher shows only the current domain's languages; unsupported languages redirect to the right domain with a 308

  • Brand names are not hard-coded in content but resolved server-side from a placeholder, so the same English content is correct under both brands

  • Missing translations are never filled from another language; an empty state is shown instead

  • Gallery, specification list, variant selector and quote button form a single flow on the product page

  • A host-aware HTML cache keeps the two brands' pages strictly apart

Details

Kiremitci Metal is a construction formwork equipment manufacturer based in Osmaniye, Turkey. Its range is narrow but technical: telescopic props, steel formwork panels, column connection elements and tie rods. The buyers are contractors, formwork companies and importers abroad, so the sale is not a shopping cart but a conversation about sizes, quantities and delivery terms. This project is a B2B catalogue and quotation platform that publishes the domestic brand Kiremitci Metal and the international brand KRM Steel from one codebase, one database and one admin panel, on two domains and in five languages.

Context and requirements

The company serves two distinct audiences. Buyers in Turkey search in Turkish and know the name "Kiremitci Metal"; buyers in Europe, Russia and the Middle East read English, German, Russian or Arabic and should meet the "KRM Steel" brand. Two separate websites would have split the content and doubled the maintenance effort. A single website, on the other hand, would have mixed the brands and created duplicate content in search engines.

On the product side, the requirement was clear: for each product group, the catalogue had to show size options, material and finish, photos and a straight answer to "can it be made to custom dimensions?" — and visitors had to be able to request a quote for the exact size they selected.

Solution and scope

Two domains, five languages, one platform

Language and brand are decided by the requested domain. kiremitcimetal.com serves Turkish and English only; krmsteel.com serves English, German, Russian and Arabic only. Requests without a language prefix are redirected with a 308 to the domain's default language, and a language that is not offered on a domain is sent to the correct one — kiremitcimetal.com/de, for example, goes to krmsteel.com/de. The language switcher only lists the languages of the current domain.

Because English is live on both domains, the brand name is never written into the content as plain text. Texts carry a brand placeholder that is resolved on the server according to the domain, becoming either "Kiremitci Metal" or "KRM Steel"; the logo, social sharing image and contact e-mail follow the same rule. The same English content therefore appears correctly under both brands.

Product catalogue

The catalogue consists of four product groups and four main products. Sizes are stored as variants: five lengths from 3 m to 5 m for telescopic props, five formats from 20×100 cm to 50×100 cm for steel panels and seven lengths from 1 m to 3–3.5 m for column connection elements — 17 variants in total. Tie rods are produced to the required length, so they are presented with that information rather than a fixed list. Technical properties such as construction, adjustment mechanism, surface treatment, compatibility and custom production are stored as separate rows with their own label in every language. Each product page combines a gallery, the specification list, a variant selector and a quote button.

Quotation flow

When a visitor selects a size on a product page and clicks "Request a Quote", the form opens with that product and variant already selected. It collects company name, contact person, e-mail, phone, country, city, preferred contact channel (e-mail, phone or WhatsApp) and the requested items with quantity and unit. Every request receives a readable request number; product name, code and variant name are copied at submission time, so the request still reads as it was sent even if the catalogue changes later. The source page and UTM parameters are recorded as well.

Corporate pages and PDF catalogue

About, contact, FAQ (seven questions per language), privacy, cookie policy and terms of use are available in all five languages. Office and team details come from the database. A4 PDF catalogues generated from the catalogue data can be downloaded from the site in Turkish, English and German.

Admin panel

The panel is a separate Next.js application. Its product management section brings together product groups, products, quote requests, team and offices. Quote requests can be listed, searched and opened one by one; each request moves through the statuses new, in review, contacted, qualified, closed, spam, can be assigned to a team member and enriched with internal notes. Every status change is written to an event history together with the person who made it. Site settings, menus, home page layout, custom pages, media storage, FAQs, cache clearing, the audit log and role-based user management are handled in the same panel.

Technical architecture

  • Frontend: Next.js, React and TypeScript with server-side rendering; Arabic pages are rendered right-to-left with dir="rtl".
  • Backend: Fastify on Bun with Drizzle ORM and MySQL. Public endpoints and admin endpoints protected by JWT and role checks live in separate layers.
  • Data model: products, variants, images, specifications, offices and team are split into a language-neutral master record and one translation record per language. Missing translations are never silently filled from another language.
  • SEO: canonical and hreflang tags follow the language-to-domain mapping; Turkish pages point to kiremitcimetal.com, all other languages to krmsteel.com. Domain-aware sitemap, robots.txt and llms.txt, Organization, Product and BreadcrumbList structured data and an IndexNow key endpoint are in place.
  • Performance: an Nginx HTML cache that includes the host in its key, uploads served directly from disk and scheduled cache warming ensure that the two brands share one application without ever showing each other's pages.
  • Security: the quote form uses a honeypot field and a per-minute rate limit; IP addresses are stored only as a keyed hash, never in plain text. The cache revalidation endpoint does not accept a hard-coded default secret.

Integrations

The infrastructure uses Cloudflare, Let's Encrypt certificates and PM2 process management. The panel includes screens for GA4, Google Search Console and Google Workspace account connection, plus a module for managing the prompt templates used for AI-assisted text generation. Product and corporate content was loaded into the database through seed scripts built from the company's own photographs and brand files.

Result and current status

The platform is live at kiremitcimetal.com and krmsteel.com. Buyers in Turkey see Kiremitci Metal in Turkish, buyers abroad see KRM Steel in their own language — while a single catalogue, a single quote inbox and a single panel run behind both. The roadmap includes FAQPage structured data, completing the product schema with description and offer details, a LocalBusiness schema and visual acceptance testing of the right-to-left Arabic interface.