← All work
Project gritera.com

Gritera

Web developmentWordPressSystems integrationTechnology
Visit live site →
Gritera

Gritera is a Norwegian advisory firm - quality, risk, security, and systems development for public and private clients. We built their corporate site: a two-language WordPress platform for their services, advisors, courses, and news. The hard part was never the pages. It was the two sections that fill themselves - the advisor roster and the course catalogue - each kept in sync with an external business system that owns the data, without ever overwriting what Gritera’s editors put in by hand.

Sync external data, never clobber the human edits

Both integrations are built on the same principle. An external system is the source of truth for some fields, and the editor is the source of truth for the rest. The sync only touches what it owns, leaves everything else alone, and never deletes - it drafts and flags instead. So the site stays current on its own without a person ever losing their work to a background job. Both plugins are typed (declare(strict_types=1)), namespaced, and documented, with WP-CLI commands and their own admin screens.

Advisors that keep themselves current

A single advisor profile on gritera.com - name, position and bio synced from Flowcase, photo and local details kept by the editors

People data lives in Flowcase (CVPartner), the consultancy CV system. Our sync pulls each advisor into the site across both languages - name, position, bio, phone, email - and stops there. Photos, cities, and categories stay editor-controlled, because those are choices a person makes, not fields a CV tool should dictate. New people show up as drafts for review; anyone who leaves Flowcase is drafted and flagged rather than silently removed. Name-matching and WPML handling sit in their own layers so a rename or a second language never creates a duplicate.

A course catalogue wired to the registration system

The course catalogue on gritera.com - each course pulled from the Pindena registration system, searchable and filterable

The training catalogue is driven the same way. Courses come from Pindena, the registration platform Gritera already runs, so the site never becomes a second place to re-enter a course by hand. Auto-sync is opt-in, editor content is never overwritten, and the plugin ships with built-in API inspection and debug tooling for when the upstream data needs a look. Visitors search and filter the result; staff just keep running Pindena.

Built like software, not a template

The site runs on Bedrock - Composer-managed WordPress with a split-environment config and secrets kept out of the repo - on a custom base theme with an ACF flexible-content page builder, so editors assemble pages from reusable blocks. WPML runs through the whole stack, LiteSpeed and Redis handle caching, and delivery is a GitHub Action into cPanel where only main reaches production. A separate RunCloud staging environment mirrors the site for safe testing, including a migration of the ~1GB uploads library and a live-to-dev database copy with URL search-replace.

Stack: WordPress (Bedrock, Composer-managed), custom Sage-style theme, ACF Pro + ACF Extended, WPML, PHP, LiteSpeed Cache, Redis. Two custom sync plugins (Flowcase / CVPartner and Pindena). CI/CD via GitHub Actions to cPanel, with a RunCloud staging environment.

Full page preview
↓ Scroll to explore the full page Visit live site ↗

Tell us what’s broken.
We’ll tell you the truth.

Book a free call →
Reply within one business day · EN / LV