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.
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 →
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 (xaverPRO 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, xaverPRO — 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.
Don't have a spec yet? Send a one-paragraph description — we'll come back with the questions worth asking. Send a description →