Selected work

Stan Cassidy Foundation — WordPress for a Fredericton rehabilitation-hospital fundraising arm, 2006

Mid-2000s WordPress build for the Stan Cassidy Foundation in Fredericton, the fundraising arm of New Brunswick's provincial rehabilitation hospital. A custom bilingual content system, built before WordPress had any native or third-party answer for serving English and French as equal partners.

The Stan Cassidy Foundation raises money for the Stan Cassidy Centre for Rehabilitation in Fredericton, New Brunswick — the provincial rehabilitation hospital that serves anyone in the province who has lost mobility, speech, or independence and is working through the long road back. New Brunswick is the only officially bilingual province in Canada. The Centre serves Francophone and Anglophone patients without distinction, and the Foundation’s website had to do the same. This was a WordPress® build in the mid-2000s, before WordPress had a real answer for bilingual content.

What bilingual actually meant for this site

The Foundation did not want an English site with a French translation bolted onto it. It wanted two parallel sites that read as native in each language, with the same donate flow, the same campaign pages, the same annual-report shape, and the same urgency. A donor reading the French side should never have the feeling they were getting the lesser of two versions. An editor updating a campaign page should be able to keep the two halves in step without learning a separate workflow for each.

That sounds straightforward. In 2006 it was not.

The state of bilingual WordPress at the time

WordPress in 2006 had translation support for the theme and admin chrome through gettext, but no native concept of a post that existed in two languages. The plugins that did exist worked by wrapping content in inline language tags, with one post in the database holding both languages in the same body field, separated by markers the plugin would strip on the front end. That approach was fine for a personal blog. It was not fine for a non-profit whose communications coordinator was going to be editing donor letters and event pages on a deadline, and whose board would not accept “the French version stopped rendering because a tag got nested wrong” as a Monday-morning explanation.

The other off-the-shelf option was running two completely separate WordPress installs, with no link between them in the database. That moved the problem into the editor’s head. Every change to a donor page meant remembering to do the same thing twice, on two logins, in two admins, with no system to flag when the two halves had drifted out of sync. For a small team, that is how a French page falls eighteen months behind its English partner without anyone noticing.

What I built instead

One WordPress install. Two URL trees, /en/ and /fr/, routed at the theme layer. Every page in one tree was paired to its partner in the other tree through a custom translation-pair meta field, so the system always knew which English page corresponded to which French page. The editor saw both halves side-by-side in the admin when working on either one, and the system flagged when one side had been updated more recently than its partner, so a stale translation could not quietly sit in production unnoticed.

The donate flow ran in whichever language the donor had been reading. Receipts were generated in the same language. The annual-report pages, the program descriptions, the staff bios, and the event listings all rendered from the same templates, with the language toggle on every page swapping the visitor across to the matching partner page rather than dumping them on the French homepage and asking them to navigate back to where they were.

The layout work was its own small problem. French text runs about fifteen to twenty percent longer than the equivalent English, and a button or a heading or a navigation label that fits cleanly in English will wrap or overflow in French. The theme had to be built with that in mind from the first wireframe: buttons sized to grow without snapping the line, headings that could break onto a second row without breaking the surrounding layout, and sidebar widgets sized for the longer language so the shorter one never felt cramped. None of that is glamorous, and almost none of it shows up in a portfolio screenshot, but it is the work that separates a bilingual site reading as native from one reading as an English site with a French overlay.

Where this sits now

WordPress eventually grew real bilingual infrastructure. WPML arrived a couple of years later, Polylang after that, and the multisite feature that shipped with WordPress 3.0 in 2010 made the two-install pattern less painful for organisations that still wanted it. The Stan Cassidy Foundation site has been redesigned several times since the build I did, on newer versions of those tools, by the teams that came after me. The bilingual pattern I established remains structurally the same one the modern plugins implement now: paired translation, side-by-side editing in the admin, language-aware donate flow, and layout that accommodates the longer language without forcing the shorter one to pad.

  • Platform: WordPress, custom theme
  • The build: Custom bilingual content system, built before native or third-party support existed
  • Client: Stan Cassidy Foundation, Fredericton, New Brunswick
  • Period: Mid-2000s Maritimes career period — specific dates still being confirmed from old project files

The same job in other clothes

Any organisation operating in an officially bilingual or multilingual jurisdiction carries a version of this job. New Brunswick provincial bodies. Federal agencies under the Official Languages Act. Healthcare organisations serving a Francophone minority outside Quebec or an Anglophone minority inside it. Municipal governments in regions with a sizeable second-language community. School boards. Charities whose donor base spans two language communities. The trap in all of these is the same one we faced in 2006: treating the second language as a translation layer over the primary one rather than as a parallel content tree with equal standing. The plugins available now are far better than what I was working with. What has not changed is the discipline of treating the second language as a peer rather than as an afterthought, and that part still has to come from the people building the site.

Christopher Ross

Your consultant

Christopher Ross

I lead the work personally, from discovery and architecture through delivery and handoff.

  • Twenty-two years delivering training and nineteen years building with WordPress.
  • Direct delivery for media, education, and federal government programs.

Sectors covered: Media · Education · Government