24-Page Dental Template — Blog URL Migration
24-page dental template customisation — 24 URLs, 10 templates, blog URL migration, 74+ QA items closed in 49h. Agency Figma, on-schedule delivery.
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 →
Rebuild the site on a new stack. Implement the spec. Don't improvise. Hand it back ready for cutover.
Client (end user): Futch Dental — a US dental practice based in Reno, NV
Engagement: White-label template customisation for a US marketing agency
Delivered: July 2025 · ~70 days · 49 hours · 24 URLs · on schedule
The Craft of Template Customisation
Twenty-four pages for a Reno dental practice, mapped against a Figma spec across 10 reusable templates on a Kinsta-hosted branded template — with a blog URL restructure folded in: the lander moved from /about/our-blog/ to /blog/, two indexed posts with it. Post-launch, a content accuracy pass surfaced copy that misrepresented the practice’s actual services; fixing distributed strings without introducing new inconsistencies was the discipline the QA loop was held to.
Snapshot
| Field | Value |
|---|---|
| End-client industry | Healthcare — General Dentistry |
| End-client | Futch Dental (Reno, NV dental practice) |
| Engagement | White-label template customisation for a US marketing agency specialising in local-business websites |
| Project Type | WordPress template customisation (agency’s branded template + per-page Figma design on Kinsta) |
| Scope | 24 URLs — homepage, about, doctor bio, services lander, 10 service pages, 4 default pages (new patients, technology, reviews, office gallery), before/after gallery, contact, blog lander + 2 blog posts |
| URL migration | Blog lander moved /about/our-blog/ → /blog/; 2 existing blog posts moved under /blog/ path |
| Timeline | ~70 days (May – July 2025), on schedule |
| Effort | 49 hours across development, QA iterations, PM, and post-launch fixes |
| Team | 3 specialists |
| Templates | 10 reusable templates provided by the agency, all applied across the 24 pages |
| Tech Stack | WordPress · Elementor · Kinsta hosting · Figma-driven per-page design · Site Checker (xaverPRO QA plugin) |
| QA discipline | 74+ tracked SEO + CX issues reconciled in the agency’s backlog across a 39-item launch checklist |
| Engagement cadence | 73 agency-raised issues · all closed by handoff (43-day active span, 2025-05-30 – 2025-07-11) |
| Review rounds | ≈5 review rounds across the 70-day calendar window |
| Per-ticket effort | 19 internal Redmine tickets · median 10m / P75 20m per ticket |
| Launch checklist | 38 items, signed off before cutover |
The Brief
A US marketing agency handed us a Figma design for Futch Dental and access to their branded Kinsta-hosted template. The agency had handled the upstream work: client requirements gathering, Figma production, content sourcing, and hosting setup. What they needed from us was faithful execution — map the Figma design onto the template, page by page, then work through the agency’s issue backlog until sign-off.
The engagement covered 24 URLs across the practice’s full site — homepage, service pages for Futch Dental’s core procedures (emergency dentistry, Invisalign, implants, crowns, fillings, root canal, dentures, teeth whitening, cosmetic dentistry, and night guards), supporting pages (new patients, technology, reviews, office gallery, before/after gallery), doctor bio, about pages, contact, and blog. Alongside the template customisation, the blog section required a URL restructure: the existing blog lander lived at /about/our-blog/ and needed to move to /blog/, with two existing blog posts migrated from their root-level slugs into the /blog/ subdirectory.
The risk this engagement carried was specific to the post-launch content accuracy pass. After the agency’s initial QA cleared structural and design-fidelity issues, a second round surfaced content that did not accurately reflect the practice’s actual services — including marketing copy that overstated same-day treatment capability, Invisalign FAQ language that could mislead patients, and a reference to an after-hours answering service the practice no longer offered. For a dental practice competing in a local market, copy that misrepresents what the office actually does is a credibility liability, not just a QA finding. Executing those corrections cleanly — across globally repeated strings and within specific service pages — required careful scoping to avoid introducing new inconsistencies while fixing the old ones.
Risk context. For a dental practice competing in a local market, copy that misrepresents what the office actually does is a credibility liability, not just a QA finding. After structural QA cleared design-fidelity issues, a second pass surfaced content that overstated same-day treatment capability, included Invisalign FAQ language that could mislead patients, and referenced an after-hours answering service the practice no longer offered. The risk in a post-handoff content correction round is propagation: fixing one instance of a distributed string without catching the others, or scoping a correction too narrowly and introducing a new inconsistency while closing the old one.
How We Did It
1. Figma-as-contract, template-as-canvas. The Figma file was the design spec. The branded template was the underlying page structure. Our job was to reconcile the two page by page — where the template’s default layout matched the Figma, we kept it; where the Figma required a deviation, we customised. No design decisions originated on our side.
2. Blog URL restructure alongside template customisation. The Futch Dental engagement was not a greenfield build — the practice had an existing blog with posts indexed at root-level slugs that needed migration into the /blog/ subdirectory. The agency’s sitemap spec called for these to move under /blog/ to match the new navigation architecture. This URL restructure ran in parallel with the template customisation, adding a redirect and navigation-link layer to what would otherwise be a pure template-mapping exercise. Both the blog lander and the existing posts were mapped to their respective templates (Blog Lander and Blog) and confirmed returning HTTP 200 on staging before handoff.
3. QA cycle at template-customisation scale. A clean template customisation is not “build once, review once”. It is “build, QA, adjust, QA, adjust”. This project tracked 74+ line items across the agency’s SEO and CX issue backlogs — with the SEO backlog alone carrying 74 rows — plus a 39-item launch checklist. Some issues were design-fidelity corrections (duplicate heading tags on cosmetic dentistry, redundant CTA blocks on service pages, missing nav link for the blog lander); others, addressed in post-launch rounds, required rewriting specific copy strings to match the practice’s real service scope. The limitation was that structural QA — design fidelity, HTML correctness — could not verify whether the content accurately described what the practice actually offered; that check needed domain knowledge the tooling layer does not provide. We chose to handle those corrections as individual per-string tasks — replacing ‘same day treatment’ globally, removing the glass ionomer fillings section entirely, rewriting the Invisalign FAQ to match actual treatment parameters — rather than a single bulk copy rewrite, because the inaccuracies mixed globally distributed phrases and page-specific claims that each needed independent verification before sign-off.
The principle is constant: on a templated build, the QA loop is where the value is delivered. A shorter loop means a weaker match — either to the Figma or to the practice’s actual information.
4. Customisation without drift. Every change we made to the agency’s branded template was documented against the Figma reference. No customisation “leaked” into the shared template components. The engagement closed with the per-client overrides isolated and the shared template layer intact.
5. Cross-device verification. Customisations were QA’d across Chrome, Firefox, Safari, and Edge on desktop, tablet, and mobile viewports. Each QA round targeted the pages affected by that round’s delta, not the full site — keeping coverage tight without losing breadth.
Content accuracy was the discipline this engagement turned on. Structural QA cleared at initial handoff; the post-launch round surfaced what tooling cannot catch — copy that misrepresented the practice’s actual services. Each correction ran as a discrete Redmine task, verified before close, because a fix that introduced a new inconsistency while closing the old one would have made the round pointless.
Operational Integrity at handoff
Post-handoff review surfaced three accuracy failures structural QA cannot catch: ‘same day treatment’ distributed across FAQ and emergency-dentistry pages (the practice can book same-day but not complete treatment same day); Invisalign FAQ copy with non-clinical phrasing and wrong tray-wear duration; and a glass ionomer fillings section for a service the practice does not offer — each fixed as a discrete task. 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.
Customisations stayed in the per-client overrides; the agency’s shared template components were not modified.
Results
| Metric | Outcome |
|---|---|
| URLs delivered | 24 — homepage, 10 service pages, doctor bio, 2 about pages, 4 default pages, before/after gallery, contact, blog lander + 2 blog posts |
| Blog URL migration | Blog lander and 2 existing posts migrated to /blog/ path — HTTP 200 confirmed on all |
| Templates applied | 10 of 10 reusable templates built and mapped across the 24 pages |
| Launch checklist | 39 items signed off |
| QA / SEO issues tracked + resolved | 74+ items reconciled across the agency’s SEO and CX issue-backlog tabs |
| Post-launch content fixes | Global string replacements + per-page copy corrections executed as discrete Redmine tasks through July 2025 |
| Timeline | ~70 days, delivered on schedule |
| Effort | 49 hours across development, QA, PM, and post-launch fix rounds |
| Team | 3 specialists |
| Hosting handoff | Live on the agency’s Kinsta template environment |
| Page health at handoff | 24 / 24 staging URLs returned HTTP 200 in the sitemap audit |
The outcome, restated plainly: the agency’s Figma was implemented against their branded template across 24 pages and 10 templates, with a blog URL restructure, over approximately 70 calendar days, inside the estimated hours.
Process
| Phase | Duration | Outcome |
|---|---|---|
| Brief & estimation | ~2 days | Figma reviewed, template access confirmed, scope agreed — 27h dev + 10h QA estimated |
| Customisation development | ~2 weeks | Page-by-page template customisation to match Figma; blog URL restructure included |
| QA iterations (concurrent) | ~4 weeks | 74+ issue-backlog items logged and resolved; agency sign-off at initial handoff |
| Post-launch content fixes | ~6 weeks | Content accuracy corrections (copy replacements, service scope fixes) executed as discrete tasks |
| Delivery | July 2025 | Site live on Kinsta; post-launch fix log closed |
Development and QA ran concurrently — characteristic of template-customisation work, where no single QA phase closes cleanly; the loop runs until the agency signs off. Post-launch rounds addressed content accuracy items that emerged only after the live site was under full editorial review.
Team
Delivery team
- Nikita Tumasevic — lead developer (template customisation, Figma-to-layout mapping, blog URL restructure)
- Pavel Sazhin — QA lead (issue-backlog review, design-fidelity verification, fix rounds)
- Anton Hersun, xaverPRO — project lead (estimation, agency-side communication, post-launch coordination, sign-off)
The partner agency’s design, content, client communication, and hosting configuration remained entirely upstream of our work. Our team was not visible to the practice. Requests came in through the agency’s shared issue tracker; nothing moved to “done” until the agency-side reviewer confirmed it.
For agencies with a branded template system
First engagement is calibration — typically a single site build or customisation at fixed hours, with sign-off per task before close. If that pace fits your pipeline, send a sample Figma and your template. We will return a fixed-hours quote within 24 hours. No cost for the review. 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 →
Site Checker runs before the agency sees anything.
Before handoff, every staging build runs through Site Checker — the WordPress QA plugin we built and maintain. It is a fail-zero gate: nothing goes to the agency with an open failure. Warnings are reviewed and judged non-blocking; the agency gets a clean slate to run their own QA layer against, not a staging site with known issues in the queue.