Marston Reid LLP

Screenshot of the lawfirm demo homepage

A fictional Pacific Northwest commercial litigation boutique — Marston Reid LLP — built to argue that WordPress is the right stack for the high-credibility professional-services request: practice areas, an attorney roster with bar admissions, results-bar trust signals, a monthly insights stream, and a contact page that pre-screens out the matters the firm won’t take. Ninth demo on the platform and the first of the Tier 1 professional-services batch. Live at lawfirm.wp.philiprehberger.com.

The challenge

Boutique law firms are the canonical example of “we just need a credible site, please don’t make us think about WordPress.” The reflexive recommendation from the legal-marketing trade press is one of three or four AmLaw-friendly hosted CMS products at $400–$1,200/month, ostensibly because law-firm sites need bar-admission directories, scoped contact intake, and the regulatory boilerplate every state-bar advertising rule requires. The implicit claim is that WordPress can’t handle the genre without a plugin pile that takes six months to stabilize.

That claim is wrong on three axes the actual market cares about. Practice areas and attorney bios are content, not application logic — WordPress’s page + image + heading + columns vocabulary handles them with no plugin help. The “results” trust signal that determines whether a visitor stays on the page is a row of four numbers with a count-up animation, which the platform already ships as a shared block. The contact page’s real job is to filter inbound matters before they reach a lawyer, which is a copy problem, not a plugin problem. Marston Reid is the worked example.

The approach

A per-demo theme (lawfirm) on the platform chassis with no new shared block — a deliberate departure from the recent pattern. The theme owns its identity: oxblood-burgundy primary (#6B1F2E), antique-brass accent (#A8853F), warm-ivory background (#F8F4ED), Source Serif 4 for headings against a system sans for body. Its header carries the four-item navigation (Practice Areas / Attorneys / Insights / Contact) and the footer carries the bar-admission boilerplate (“Admitted in Oregon, Washington, and the Ninth Circuit”) plus the regulatory disclaimer (“Attorney advertising. Prior results do not guarantee a similar outcome.”) that state-bar rules require.

The part worth lingering on is what we did NOT build. The tempting move was a new sfp-blocks/person-card shared block for the attorney roster — reusable across this demo, the dental demo, and the coaching demo. We considered it and deferred. The reasoning: an attorney card wants bar admissions and a JD year; a dental-team card wants procedures and credentials; a coaching card wants a single bio paragraph. Three slightly different shapes that would force a block schema with optional fields nobody ever fills, or a generic block that misses the genre-specific affordance every consumer actually wants. We built the lawyer roster with core/columns + core/image + core/heading + core/paragraph instead, which costs ten lines of pattern markup per attorney and surfaces the actual variation across roles. Promotion to a shared block is a clean future move once we’ve seen the three real consumers side by side.

What’s on the site

  • Home. Oxblood cover hero with the firm name + tagline (“Commercial litigation, not a brochure.”), four practice-area cards with brass top borders, a sfp-blocks/trust-stack results bar (“13 years in practice · 140+ cases tried to verdict · 4 jurisdictions · 27 Ninth Circuit appeals”), an attorney teaser, and a closing CTA
  • /practice-areas/. Four alternating image-text rows — Commercial Litigation, Employment Disputes, IP & Trade Secrets, Corporate Counsel. Each row carries a substantive description and a representative-matters paragraph in italics so a reader scanning for fit can find it
  • /attorneys/. Four lead-lawyer cards (founding partner, partner, of counsel, senior associate) with portrait placeholders, name + title + bar admissions + education + email, plus a callout listing the six associates. The “ten lawyers, named” framing makes the firm size legible at a glance
  • /insights/. A monthly-stream listing — four placeholder posts with date + author + practice tag + title + excerpt. Demonstrates how the site supports thought leadership without committing to actual posts on day one; the platform’s built-in post type and excerpt rendering is enough
  • /contact/. Office + inquiries columns, plus a “few notes before you write” callout box doing the actual screening work (billing model, conflicts timeline, what we don’t take). Treats the page as a pre-engagement filter, not a lead-capture maximizer
  • Demo banner across the top making it explicit that Marston Reid is fictional

The stack in detail

  • _chassis parent theme — templates, parts, patterns, gotcha-busting CSS, filemtime-based stylesheet enqueue. Inherited from the platform via symlink
  • lawfirm per-demo theme (this repo) — declares Template: _chassis, ships the oxblood + brass + ivory theme.json, Source Serif 4 headings with a fallback chain through Charter and Georgia, custom parts/header.html (Practice Areas / Attorneys / Insights / Contact) and parts/footer.html (firm bio + bar admissions + regulatory disclaimer)
  • sfp-blocks/trust-stack — consumed by the home page for the results bar. No new shared block authored for this demo on purpose; the attorney roster uses core blocks (columns + image + heading + paragraph) so we can see real variation across the next two professional-services demos before promoting to a shared block
  • Four sfp-* mu-plugins inherited from the platform; lawfirm-banner-config.php filters the demo banner copy for professional services
  • WordPress 6.x · PHP 8.3 · MySQL 8 on Apache 2.4 (the same EC2 t3.small that hosts every other demo on the hub)
  • .scripts/seed-pages.sh — idempotent five-page seed. Generates a wide oxblood-walnut hero, four attorney monogram cards, and four practice-area covers via ImageMagick; uploads via wp media import with the standard <name>-image attachment-slug rename; creates or refreshes all five pages; pins Home as the front

Where we made tradeoffs

Deferring the person-card shared block. The pattern across the next three Tier 1 demos (lawfirm, dental, coach) is some variant of “team member with photo and credentials,” and the platform-investment instinct — built into every prior demo we’ve done — is to author the shared block now. We didn’t. The attorney card wants bar admissions and JD year; a dentist card wants procedures and licensure board; a coach card wants a single bio paragraph and a calendar link. Premature abstraction here means a block with three optional fields that nobody uses uniformly, or a block constrained to the intersection of all three (a name and a title) which is so generic it doesn’t earn its weight. Built the roster with core blocks; will promote to a shared person-card block once we’ve seen the three real variants side by side. Documenting the deferral here so the next demo doesn’t litigate it from scratch.

Real legal substance in the placeholder content. The temptation on a fictional law firm site is the Lorem-ipsum-of-litigation: “we are passionate about helping clients navigate complex disputes.” We wrote the practice-area copy, the representative-matters lines, and the insights teasers as if a real litigator would have to defend them — specific procedural moves (TROs in the first seventy-two hours, decertification at the certification stage, non-compete enforcement under the ORS 653.295 amendments), specific jurisdictions (Ninth Circuit, D. Or., W.D. Wash.), specific dollar figures ($14M judgment, affirmed on appeal). The cost is two extra hours of writing; the benefit is that the site reads as the work product of a firm that exists, which is the genre’s entire job. A real-client engagement would replace every example with the firm’s actual record — the structure carries over unchanged.

State-bar advertising compliance as static prose, not a structured disclaimer block. Every state bar requires some version of “attorney advertising; prior results do not guarantee a similar outcome” on a firm’s public-facing site, and the schema.org-perfect answer is a structured disclosure block that renders the right text per jurisdiction and emits the compliance metadata most state bars are starting to look for. For a portfolio demo, a paragraph in the footer covers the requirement at 5% of the effort. The structured-compliance upgrade is a clean future addition when a real engagement spans multiple jurisdictions and the firm cares about audit trail.

Outcomes

  • Five-page professional-services site live at lawfirm.wp.philiprehberger.com, end-to-end provisioned via the platform’s provision-demo.sh script
  • Lighthouse: 99 / 96 / 100 / 92 (perf / a11y / best-practices / SEO) on the homepage with placeholder photography. Matches the platform’s ceiling without per-demo perf tuning — the chassis’s asset hygiene continues to do the work
  • Greenfield-to-live in approximately five hours including the per-demo theme, the full five-page seed with substantive legal-domain content, the case-study writeup, and the hub Project registration. No new shared block, consistent with the deliberate deferral above
  • First in the Tier 1 professional-services batch (lawfirm, roofing, dental, coach, give). Establishes the “no new block, use core composition” pattern as a valid platform move when premature abstraction would cost more than it saves — documented here so the dental and coach builds can lean on the same call
  • Confirms the per-demo-theme split as the standard pattern across the platform now (shop, pulsar, hillcrest, winebar, saltcedar, bench, blockset, northbound, lawfirm — nine for nine). Identity lives in the demo, primitives live in the platform, neither side has to compromise

Tagged

Industry:
Builder:
Theme:
Features: ,

Facts

Perf

A11y

SEO

BP

Build time: hours