Kanzlei Pilatushof

Industry
Legal Services
Service
Product Design ·
WordPress Development ·
Plugin Development
Agency
outwork.ch
Location
Lucerne,
Switzerland
Stack
Figma · WordPress · PHP · JavaScript · WPML · Custom plugin

Company

A law firm with thirteen practice areas and eleven people

Kanzlei Pilatushof AG is a law firm in Lucerne. For over fifteen years it has advised SMEs and private clients on legal and tax matters, across thirteen practice areas from contract and corporate law to notarial services, inheritance, employment and family law. Its eleven lawyers, notaries and staff each cover several of those areas. The firm carries a Top Anwaltskanzlei Schweiz seal and an Advisory Excellence Award for company law. The project came to me through outwork.ch in 2026.

The brief

A new site on WordPress, keeping a fifth of the old one

The firm wanted a completely new website, with three conditions. It had to run on WordPress, because that is what the practice knows. It had to keep roughly twenty percent of the old site's structural concept, so that clients and staff would still recognise how things were organised. And it had to be bilingual, German and English, with a large amount of content: thirteen practice areas, a full team, and a blog the firm publishes to regularly.

The problem

Every lawyer, hand-placed on up to fourteen pages, twice

On the old site, team members existed only as layout. Each person was placed by hand on the Team page, then again at the bottom of every practice-area page they were responsible for, two or three lawyers per page across thirteen areas. And because the site runs in two languages, all of it existed twice.

There was no plugin and no data behind any of it. A new lawyer joining, a title changing, a photo being replaced: each one meant opening every affected page, in German and then in English, and rebuilding the same block by hand. The team was the most frequently changing content on the site and the hardest to change.

Approach

Colour first, then Figma, then a plugin planned before the pages

I began with the visual identity for the web: a colour system and a type pairing that would carry a law firm's seriousness without the corporate blue most firms default to. That went into Figma as a complete concept, was presented to the client, and was refined with them before a single page was built.

Then the structure. From the old site I kept the part the client valued, the way practice areas are organised and reached, and rebuilt everything else around it. With thirteen areas, a full team and a growing blog, the content was large, so each page was planned for how much it could hold before it became heavy, and content was added page by page rather than poured in.

The plugin was designed at the same time as the pages, not after them. Until team members were data, neither the Team page nor the practice-area pages could be designed properly, because their layout depended on what the plugin would produce.

Information architecture

Thirteen areas that all point at each other

The practice areas are the spine of the site. Each has its own page, and every practice-area page carries a row of pill-shaped links to the other twelve, so a client who arrives at Vertragsrecht and needs Erbrecht moves across in one click without going back through the menu. The blog uses the same thirteen categories, so an article on inheritance law sits under the same label as the inheritance practice page.

Team members are connected to the areas through the plugin. A member is assigned to practice areas in the back end and appears automatically at the bottom of each of those pages. Which lawyer handles which area stopped being a layout decision and became a relationship in the data.

The plugin

One record per person, everywhere at once

Team members are a content type. Each person is a single entry with structured fields: title, phone, email, languages, core competencies, a short biography, a portrait, and two repeating tables for professional career and secondary roles, with rows that can be added, copied and removed. Enter the information once and it is used everywhere.

Practice areas are a global list. The thirteen areas exist once in the plugin, with their names and URLs, and are edited in one place; any change applies to every member. On each member's record they appear as checkboxes, and ticking one places that person on that practice-area page.

Three shortcodes, three views. The plugin outputs the team in three forms: a full three-column grid with contact details and a CV button, a compact card with only portrait, name and title, and a single card for one named person. A page holds a shortcode, and nothing else about a person lives in it.

Every person has an anchor. Each member gets a stable ID, such as #emp-adrian-schmid, generated from their name. It drives the popup, and it means any page on the site can link straight to a specific lawyer's profile.

The profile opens in place. Clicking a card opens a popup with the full profile: competencies, languages, contact, biography and a year-by-year career timeline. A visitor reads a lawyer's background without leaving the page they came from.

The order is drag and drop. In the team overview, rows are reordered by dragging, the new order is saved automatically, and the front end follows. A one-line tip above the list explains it in German.

WPML: one entry, two languages. The plugin is integrated with WPML, which runs the site's German and English versions. A member entered in German is created for the English site in the same step, and the team list shows for each person whether the English profile is up to date or still needs attention.

Missing photos don't break the page. If a member has no portrait, a placeholder takes its place, so a new colleague can be published before their photo is ready.

Design

Dark green, gold, and a serif that reads as law

The palette is built for a firm whose clients arrive with serious matters. A deep green carries the header, the buttons and the hero overlays, with a mint tint for highlighted words and a warm gold for headlines and the popup's top edge. Green reads as steady and established, gold as considered rather than showy.

Two typefaces divide the work. A classic serif sets headlines, names and the popup's labels, giving the pages the weight a legal practice expects. A clean sans-serif sets everything read at length, from practice descriptions to career timelines, so long content stays effortless.

The homepage opens on Lucerne itself: the city's medieval towers at dusk under a dark green wash, with Anwaltskanzlei Luzern set large in white. Practice-area pages follow the same pattern, a photograph under a dark overlay with the area's name in gold. Team portraits are black and white on white, in cards with softly rounded tops, so eleven photographs taken at different times read as one team. The popup is white with a gold top bar, so the profile lifts cleanly off the dark page behind it.

Development

Built as a WordPress plugin, not a page

The team system is a standalone WordPress plugin written in PHP. It registers a custom post type with its own meta boxes, custom repeater fields for the career tables with add, copy and delete controls, and JavaScript for the popup and the drag-and-drop ordering, which saves the new order without reloading the page. The WPML integration means each member exists in both languages from one entry, with translation status visible in the team list.

Output runs entirely through shortcodes. A page contains a shortcode and nothing more about a person, which keeps the plugin independent of how the pages are built: templates can be redesigned, and the team data is untouched.

Migration was done the durable way. Every hand-placed team block on the old pages, in both languages, was removed rather than hidden with code. Hiding would have been faster, but a future update to the site's templates could have surfaced everything again. Deleting gave the automatic display clean pages to fill.

Outcome

One form replaces an afternoon of editing

Adding a new lawyer used to mean rebuilding the same block on every page they appeared on, in German and then again in English. It now means one form and a few checkboxes. Name, title, contact, languages, competencies, portrait and career timeline go in once; the practice areas are ticked; the entry is published. The person is on the Team page, on every area they cover, and on the English site, in the same step. Correcting a title or a phone number is one field, once.

The other half of the result is who can do it. The plugin was built for the firm's staff, not for a developer. Every field is labelled in plain German, the career tables work the way the staff already understood, and a single line of text explains the drag-and-drop order. Nobody needs training and nobody needs to know how the site is built. The firm's management can add a colleague, fix a detail or reorder the team between two client calls, and the change is live everywhere at once.

That is the shift the plugin made. The most frequently edited content on the site went from the hardest thing to maintain to something the firm now handles itself, in minutes, across fourteen pages or more, without touching a developer.