Flagship · 02 · 2026 — in production

CCIR — the platform of the Chamber of Commerce and Industry of Romania

The Chamber of Commerce and Industry of Romania has represented the business community since 1864. Its website was from another century. We rebuilt everything, moved 17,962 entries without losing a single link, and put the institution's services up front, in two languages.

Year
2026 — in production
Client
Chamber of Commerce and Industry of Romania
Role
Strategy, information architecture, design, development, migration, launch
Sector
Institutional · Public sector · Bilingual platform

Services

  • Strategy
  • Information Architecture
  • Design
  • Development
  • Migration
  • Launch
  • Maintenance

Stack

  • WordPress
  • Custom block theme
  • theme.json
  • PHP
  • Vanilla JavaScript
  • Polylang
  • REST API
  • Cloudflare Stream
  • Bunny Stream
  • GA4
ccir.roStatus · In production · active maintenance
CCIR — the platform of the Chamber of Commerce and Industry of Romania — motion trailer
ccir.ro
CCIR — the platform of the Chamber of Commerce and Industry of Romania — full website
CCIR — the platform of the Chamber of Commerce and Industry of Romania — full website — mobile

An institution from 1864 had a website from another century. Now it has a platform.

Before and after

This is what ccir.ro looked like in March 2026: three-level menus, press releases stacked in a list, no hierarchy. Anyone who needed a certificate of origin had to guess which directorate of the institution to look under.

Drag the handle.

Homepage · March 2026 → July 2026

The old ccir.ro: a three-level menu and lists of press releases, with no visual hierarchy
The new ccir.ro: video of the CCIR building, the institution's title, the focus list
Same institution, same address. The capture on the left is from the web archive, March 2026: the archive did not save the slider or the release thumbnails (the grey block and the icons), but the page structure is the real one.

Why WordPress, still

We stayed on WordPress deliberately. CCIR's communication team was already publishing there, every day. A platform on another system would have broken their routine and turned us into a mandatory stop for every change.

So we kept everything they had: the content, the publishing flow, the habits. And we changed everything visible and everything underneath: a custom block theme, no page builder, no CSS framework, the design defined once in theme.json, and a library of ready-made blocks for the newsroom.

Services, one click away

Services are the reason a company visits ccir.ro: certificates of origin, ATA carnets, force majeure certification, arbitration. On the old site they were three or four clicks deep, with nothing connecting them.

Now each service has its own page, with the required documents, the fees, the working hours and the phone number of the directorate that handles it. And the homepage carries the full catalogue, with search and filters.

The services catalogue

The services catalogue on the homepage: a search field, category filters and the service cards
  1. 1Search straight into the services, with synonyms and the diacritic-free spellings people actually type.
  2. 2Category filters: certification, digital certification, registries, business center, promotion, information, education.
  3. 3Each card leads to the service page. The category is on the card, the responsible directorate on the page.

A service page · before and after

The old Certificates of Origin page: a block of text with no structure, the working hours and phone number buried in a paragraph
The new Certificates of Origin page: description, important notice and the responsible directorate's contact card
The same page, Certificates of Origin: on the left the old site, February 2026, from the web archive; on the right the new platform.

Two languages, the same page

The English version is not a translation pasted over the site. Every page, every menu and every label has its counterpart, with its own address and correct hreflang. The editor presses a button, the translation arrives as a draft, and a person reads it before it appears on the site. When CCIR's authorised translator sent corrections for dozens of pages, we applied them one by one.

The first screen of ccir.ro in Romanian: the menu, the institution's title and the focus list
Romanian
The first screen of ccir.ro in English: the same menu, the same title, the same list, its own address
English — the same page, at ccir.ro/en/
The CCIR building at sunset, in the video that opens the site

What else the platform does

  • Events with registration. A filterable archive, a registration form configured per event, calendar export, weekly sync with the ROMEXPO calendar.
  • The press room. All of the institution's releases, migrated, with a filterable archive. The county chambers' press coverage as a separate layer.
  • Publications read in the browser. Catalogues and bulletins in our own reader, generated from the PDFs: double pages, contents, zoom.
  • Live broadcasts with no intervention. When the studio goes on air, the menu gets a "LIVE" pill and the podcast page starts the stream. When it ends, it disappears. Nobody presses anything.
  • Forms that reach the right desk. Contact, registrations, room hire requests, newsletter. Every message goes to its directorate and stays in the admin as well.
The chamber network's agenda on the homepage: three events with date, type and organiser
The agenda: upcoming events across the whole network, with date, type and organiser.
The publications section on the homepage: three reports with type, date and page count
Publications: reports, studies and barometers. Each opens in the in-house reader, no download.

The move

Nothing from the old site was allowed to be lost. A 2014 release indexed by Google, a page cited in an official document, an address printed in a brochure: all of it had to work the day after launch.

The move, in numbers

17,962
Content entries moved to the new platform
419
Old addresses permanently redirected
0
Broken links after launch

We extracted all the content, mapped it address by address and imported it with scripts that can run as many times as needed without duplicating anything. 419 old addresses received a permanent redirect, kept in the database rather than in a file that is lost at the first server move. Before launch we checked all 3,517 addresses in the sitemap programmatically.

One trap is worth telling: 863 files existed on the server, had the right name to the eye, and returned 404. The names were written in a different Unicode form from the one the browser asked for. We found them and normalised them with a script. Without that check, hundreds of images in old releases would have been missing at launch, and nobody would have known why.

What you do not see

The public sector has accessibility obligations. We treated them as a delivery threshold, not a statement: contrast, keyboard navigation, visible focus, 44 px targets, labelled forms. Then we took the published accessibility statement and checked every claim in it against the platform. Lighthouse at launch: 100 for accessibility, 100 for SEO.

The platform is fully versioned, with 134 commits and 117 written architecture decisions. Deliveries go out as packages verified file by file, and after launch we periodically compare the server with our archive. Several people work on an institutional platform; nothing changes without it being known.

On the phone

The old ccir.ro on a phone: a large logo, a hamburger menu, a banner and lists of releases whose thumbnails the archive did not save
The new ccir.ro on a phone: the menu, the institution's title and the focus list over video
On the phone, where most visitors arrive. On the left, the archive did not save the release thumbnails.

Stack

CMSWordPress 6.x, custom block theme, no page builder
Designtheme.json — tokens for colour, typography, spacing, motion
TypographySchibsted Grotesk + Zodiak, self-hosted, with diacritics
Content14 custom content types, own taxonomies
MultilingualPolylang + own assisted-translation layer
Searchown index, served through the REST API
Publicationsown reader, generated from PDF
VideoBunny Stream (hero), Cloudflare Stream (live broadcasts)
AnalyticsGA4 with Consent Mode v2
Migrationown export/import scripts, idempotent
Deliveryaudited packages, file-by-file MD5 verification

The result

The platform has been live at ccir.ro since July 2026. Services are found on the first try, events are booked online, publications are read in the browser, and English truly exists. The communication team publishes on its own, without calling us.

We continue with maintenance and development: the live broadcasts and online payment for the chargeable services came after launch. The project did not end at launch, and was never meant to.