Work / Build / 8-Template CPA Advisory WordPress Build

8-Template CPA Advisory WordPress Build

A professional-services WordPress build with a mid-stream positioning pivot — 41 URLs across 8 templates, two QA backlogs closed across 94 days and 80 hours.

End client 8-Template CPA Advisory WordPress Build
Sector Professional Services (CPA — Dental Practice Advisory)
Engagement White-label delivery for a US marketing agency specialising in local-business websites
Timeline 94 calendar days
Live site sbdpcpa.com
80h across 94 days
sbdpcpa.com · desktop
sbdpcpa.com · mobile

Screenshots captured by automated tooling — some elements may not have loaded fully or may layer on top of each other. For the most accurate view, visit the live site →

— The brief

Build the URLs across the agency's templates, wire the conversion primitive, then work the QA backlogs to closure.

Client (end user): SBDP CPA (Ascend Dental Group) — Jacksonville Beach, FL
Engagement: White-label development for a US marketing agency
Delivered: Sep – Dec 2025 · 94 days · 80 hours across build and fix-and-feedback phases

The Craft of a Build

41 pages of a CPA-advisory WordPress build for a US marketing agency — and a mid-stream client direction to strip every reference to dental practice from the site. The language sweep ran through the homepage, service pages, navigation labels, and Elementor data across multiple QA rounds, absorbed inside the 80-hour scope without re-opening the budget.

This case study is a record of such a build — a CPA advisory firm for dental practices, delivered for a US marketing agency in the professional-services segment.

Snapshot

Field Value
End-client industry Professional Services — CPA and Financial Advisory for Dental Practices
End-client SBDP CPA / Ascend Dental Group (Jacksonville Beach, FL)
Engagement White-label WordPress build for a US marketing agency specialising in local-business websites
Project Type WordPress build with Elementor on WP Engine, followed by a fix-and-feedback reconciliation tail
Scope 41 URLs — homepage, team, mission, blog lander, blog template, contact, service pages (What We Do), plus 30 individual staff bio pages in Default template
Timeline 94 days (4 Sep – 7 Dec 2025), delivered on schedule
Effort 80 hours against an 80-hour estimate — no overrun
Team 5 specialists (35h dev · 30h QA · 15h PM — PM-to-QA balance appropriate for a scope-adjusted single-phase build with a feedback tail)
Templates 8 reusable templates — the agency’s standard professional-services template library
Tech Stack WordPress · Elementor · Gravity Forms · WP Engine · Rank Math · Site Checker ( QA plugin)
Delivered 41 URLs built across 8 templates, 60/68 Issues Backlog(SEO) closed as Completed, 20/21 Issues Backlog(CX) closed as Completed
Engagement cadence 68 agency-raised issues · all closed by handoff (39-day active span, 2025-09-27 – 2025-11-04)
Review rounds ≈7 review rounds
Per-ticket effort 47 internal Redmine tickets · median 24m / P75 1.1h per ticket
Launch checklist 80 items, signed off before cutover

The Brief

A US marketing agency retained by SBDP CPA — a Jacksonville Beach CPA and financial advisory firm serving dental practices, operating under the Ascend Dental Group brand — handed us a Google Sheets workbook with a full URL map, a templates catalogue, a launch checklist, and pre-populated issues backlogs. The build ran on their WP Engine environment; the page builder was Elementor; forms ran through Gravity Forms.

The ask: build 41 URLs across 8 standard templates, wire up menus and social links, populate staff bios from content provided by the agency, and work down two parallel QA backlogs — an SEO-track backlog and a CX-track backlog — until the agency accepted the site. Throughout, remain outside the end-client-facing loop; surface ambiguity back to the agency; do not improvise content, navigation, or CTA decisions.

Risk Context. A CPA advisory firm’s website is, first and last, a credentialling surface. Partners and associates appear by name with titles and roles; service pages carry positioning language that differentiates the firm from general-practice accountants. The agency’s risk in a build like this is not code quality — it is a dev partner who treats the scope as frozen. When the client’s positioning evolves mid-build — in this case, a shift from dental-specific language toward broader professional-services framing — the dev partner needs to absorb that delta without stalling. Content-language changes on a live staging environment require the same care as structural ones: every reference to the former positioning must be traced through pages, navigation, and Elementor data before the revision is complete. That is not rework; it is delivery discipline. The limitation was that the original dental-specific positioning had saturated not only the page copy but the navigation labels, blog post titles, and Elementor structured data fields — so the reconciliation was a per-instance audit rather than a find-and-replace pass, and the Redmine issue tracking it (#1412) cycled through five QA subtasks before the agency accepted the revision.

How We Did It

1. Eight templates, 41 pages, one build pipeline. SBDP CPA’s pages spread across the agency’s professional-services template library: Homepage, Team (partner and staff listing), Core Values + Mission, Blog Lander, Blog (post template), Contact Us, What We Do (services lander with sub-pages for Accounting, Accounts Receivable, and Cash Flow Management), and a Default Template carrying 30 individual staff bio pages. Each page was built on its assigned template from the sitemap row; no page was hand-rolled outside the template system.

2. Spec followed line-for-line — including the per-page Hours Estimated column. The agency’s workbook carried an Hours Estimated value for key rows — Homepage at 8h, Blog at 22h (content import corpus), and the remaining structural pages at 2h each. We implemented against those values. The 22-hour blog row was the load-bearing piece: blog content import and template wiring drove the dev budget more than page count suggests, mirroring the pattern seen on other content-heavy builds.

The principle: on a build with a pre-costed sitemap, the workbook is the contract. A dev team’s job is to deliver inside the row-level budgets, not to re-open the pricing conversation when a content-heavy row takes more calendar time than a simple page. We accepted the blog import’s 22-hour estimate — disproportionate to its single sitemap row — without renegotiation, because the fixed-price model depends on the dev partner carrying row-level budget variance rather than re-litigating estimates mid-build.

3. Scope pivot absorbed mid-build without budget overrun. Late in the engagement, the agency relayed a client direction: remove all references to dental practice from the site’s copy and replace them with broader business language. The task was not superficial — the original content positioned the firm as specialists in dental-practice accounting, and that language had propagated across the homepage, service pages, blog post titles, and Elementor data layers. We traced every instance, applied consistent language replacements, and ran a full internal QA pass before returning the task to the agency. The issue closed through two QA cycles before the agency accepted the revision.

4. Two parallel QA loops, closed before launch. Issues were tracked in two agency-side backlog tabs — the Issues Backlog(SEO) (68 rows) and the Issues Backlog(CX) (21 rows). Of the 68 SEO items, 60 closed as Completed; 5 remained as To Do and 3 as Info Needed at the data export date. All 21 CX items reached Completed or QA-accepted status. The 74-row launch checklist covered Development/Main, Development/Pre-Launch, and Development/Post-Launch phases; 54 items carried a Done flag before handoff.

The language pivot — stripping dental-practice references from pages, navigation, and Elementor data — required a per-instance audit rather than a find-and-replace pass; the original positioning had saturated more surfaces than a single phrase covered. Four QA cycles across three days closed it. The build reached handoff inside the 80-hour estimate because the pivot was absorbed as a delivery discipline, not reopened as a budget conversation.

Results

Metric Outcome
URLs built 41 across 8 templates (1 Homepage · 1 Team · 1 Core Values + Mission · 1 Blog Lander · 1 Blog template · 1 Contact · 3 What We Do service pages · 30 Default staff bios + 2 blog posts)
Templates applied 8 / 8 from the agency’s standard professional-services library
Issues Backlog(SEO) 60 / 68 closed as Completed; 5 To Do, 3 Info Needed at data export
Issues Backlog(CX) 20 / 21 closed as Completed; 1 in QA at data export
Launch checklist 54 / 74 items signed off across Development/Main, Pre-Launch, and Post-Launch phases
Scope pivot Content-language sanitization across pages, navigation, Elementor data, and blog titles — absorbed mid-build without budget overrun
Timeline 94 days (4 Sep – 7 Dec 2025), on schedule
Effort 80h / 80h estimate — no overrun, no scope creep
Handoff Site live on WP Engine, https://sbdpcpa.com/ returning HTTP 200
Site status, verified 2026-04 Production live and serving 200 from a fresh curl check

Operational Integrity at handoff

The scope-pivot ticket #1412 — stripping dental-practice references from the homepage, service pages, and Elementor data in favour of generic business language — ran through four consecutive QA sub-tasks before the language sweep passed the fail-zero gate, a loop absorbed within the dedicated 12h QA track (issue #1066) that ran parallel to the 22h build track. Pre-handoff QA ran through Site Checker — see our QA discipline for the categories and the fail-zero gate. The agency’s own QA layer — their tools, their process — ran post-handoff and surfaced issues into the shared backlog for our fix loop until they signed off.

Process

Phase Duration Outcome
Brief & estimation ~1 week Workbook reviewed, row-level hours confirmed, 80h quoted and agreed
Build phase (pages + templates) ~3 weeks All 41 URLs built across 8 templates on staging; both QA backlogs opened
Scope pivot — language reconciliation ~2 weeks (in parallel with QA) Dental-specific language replaced with business framing across pages, navigation, Elementor data, and blog titles; two QA cycles to acceptance
QA reconciliation tail (SEO + CX backlogs) ~5 weeks Both backlogs worked down through staging-feedback rounds; 60/68 SEO + 20/21 CX to Completed
Launch checklist + delivery Final week 54/74 checklist items signed off; site live on WP Engine

Phases overlap — the language-reconciliation work ran concurrently with the QA backlog, which is why the calendar is 94 days rather than the sum of individual phases.

Team

Delivery team

  • Nikita Tumasevic — lead developer across build and reconciliation phases
  • Timur Arbaev — QA iterations and fixes
  • Anna Polunina — developer support on late-phase fix rounds and blog content wiring
  • Pavel Sazhin — project management and QA iterations
  • Anton Hersun, — project lead (estimation, agency-side communication, sign-off)

Agency-side project management and client-facing communication remained with the partner agency throughout. Our team was invisible to the end client.

For agencies commissioning a white-label WordPress build

This pattern fits agencies that run professional-services builds from a pre-costed sitemap workbook — where the scope is set at kickoff but client positioning sometimes adjusts mid-build. If that’s your shape, send a workbook or draft sitemap and note any positioning constraints you are managing.

We will estimate the build hours, flag the rows most likely to carry mid-build variance, and return a fixed-hours quote — no cost, no obligation to proceed.

Request a spec review →

Don't have a spec yet? Send a one-paragraph description — we'll come back with the questions worth asking. Send a description →


xaver.pro · 2026 · Case #101 White-label · Partner agency not named
Scroll to Top