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


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

- 1Search straight into the services, with synonyms and the diacritic-free spellings people actually type.
- 2Category filters: certification, digital certification, registries, business center, promotion, information, education.
- 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


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.



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 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


Stack
| CMS | WordPress 6.x, custom block theme, no page builder |
| Design | theme.json — tokens for colour, typography, spacing, motion |
| Typography | Schibsted Grotesk + Zodiak, self-hosted, with diacritics |
| Content | 14 custom content types, own taxonomies |
| Multilingual | Polylang + own assisted-translation layer |
| Search | own index, served through the REST API |
| Publications | own reader, generated from PDF |
| Video | Bunny Stream (hero), Cloudflare Stream (live broadcasts) |
| Analytics | GA4 with Consent Mode v2 |
| Migration | own export/import scripts, idempotent |
| Delivery | audited 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.


