53-Page Eye Care Template Customisation
53-page eye care template customisation — 53 URLs, 264 blog posts migrated, 9 templates, 160+ QA items closed in 119h. Agency Figma, on-schedule.
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): Vision Source Mandan — an optometry practice in Mandan, North Dakota
Engagement: White-label template customisation for a US marketing agency
Delivered: September 2025 · 108 days · 119 hours · 53 URLs (plus 264 blog posts migrated) · on schedule
The Craft of Template Customisation
53 pages of an optometry practice customised to the agency’s Figma on their WP Engine dental template, plus 264 blog posts migrated under the post template and 300 redirect entries imported by CSV — all delivered in 108 days. The blog migration was a URL-integrity commitment: a 404 on /blog/nearsighted-farsighted/ was surfaced and closed before the build left our hands. Customisation and migration ran concurrently under the same six-round QA cycle.
The value is speed with consistency — but only if the customisation is disciplined. A dev team that “interprets” the Figma, skips QA rounds, or deviates from the template’s design system is worse than starting from scratch.
This case study is a record of a template customisation executed to the agency’s Figma, with a QA profile that shows the discipline it takes — and with the additional scope that an optometry practice carries a content history the practice’s patients had been navigating for years, which meant 264 blog posts needed to migrate alongside the customised pages without breaking a single URL.
Snapshot
| Field | Value |
|---|---|
| End-client industry | Eye Care — Optometry (independent practice) |
| End-client | Vision Source Mandan (Mandan, North Dakota) |
| 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 WP Engine) |
| Scope | 53 URLs — 1 homepage, 1 services lander, 9 service pages, 8 about/doctor pages, 1 contact, 1 blog lander, plus 264 blog posts migrated under the same template |
| Timeline | 108 days (16 May – 2 Sep 2025), on schedule |
| Effort | 119 hours — 96h development · 10h QA iterations · 10h PM · 4h post-review fixes |
| Team | 5 specialists |
| Templates | 9 reusable templates in use (Homepage, About Us, Doctor Page, Contact Us, Service Page, Services Lander, Blog Lander, Blog post, Default Template), all applied across the 53 customised pages |
| Tech Stack | WordPress · Elementor · WP Engine hosting · Figma-driven per-page design · agency QA workspace · Site Checker (xaverPRO QA plugin) |
| QA discipline | 160+ tracked SEO + CX issues reconciled in the agency’s backlog (112 SEO + 48 CX) across a 37-item launch checklist |
| Engagement cadence | 109 agency-raised issues · all closed by handoff (53-day active span, 2025-06-22 – 2025-08-13) |
| Review rounds | ≈6 review rounds across the 108-day calendar window |
| Per-ticket effort | 14 internal Redmine tickets · median 30m / P75 10h per ticket |
| Launch checklist | 38 items, signed off before cutover |
The Brief
A US marketing agency delivered us a Figma design for Vision Source Mandan and a deployment target on their branded WP Engine template system. The agency had already done the upstream work: design audit, client approval, hosting setup, and the per-page content plan mapped against an existing site that needed to be carried across intact. What they needed was a development team that would map the Figma onto the template faithfully, then move every blog post and every legacy page across without losing the URL structure the practice’s patients relied on for eye-care information.
The ask was operational, with a migration dimension. Take the Figma as the source of truth. Customise the template to match it page by page, breakpoint by breakpoint, with the optometry navigation conventions intact: vision-care service categories grouped to match the vertical’s standard taxonomy, individual doctor bios on linkable sub-pages, online payment and patient-forms flows surfaced correctly. And carry the blog — 264 posts — over under the post template without silently dropping a single entry.
What the agency was hedging against here was a dual failure mode: a dev shop that approximates the Figma rather than matches it, and — given the blog migration — one that treats a post count as a checkbox rather than a URL-integrity commitment. An optometry practice depends on local search for patient acquisition; any slug that silently changes during migration is a breakage that shows no error in the CMS but loses the URL the patient had bookmarked. The content and SEO surface check in our pre-handoff QA pass was the staging gate that caught those before they shipped.
Risk context. An optometry practice depends on local search for patient acquisition, which means the 264 blog posts carried into this build were not a content migration task — they were a URL-integrity commitment. A slug that silently changes during migration produces no CMS error and no visible breakage on the live site; it surfaces only as a lost ranking signal or a broken bookmark. The dual failure mode the agency was guarding against was a dev shop that approximates the Figma rather than matches it, and one that treats a post count as a checkbox rather than a per-URL accountability.
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 (eye-care service tile layouts, doctor-bio cards, frames-and-lenses content blocks), we customised. No design decisions originated on our side.
2. QA cycle at template-customisation scale. A clean template customisation is not “build once, review once”. It is “build, QA, adjust, QA, adjust”. The agency tracked 160 individual issues across two backlog tabs in the shared workspace — 112 SEO findings and 48 CX findings — every one of which was assigned, addressed, screenshotted where useful, and closed only on agency sign-off. This volume is not a sign of instability; it is the discipline that separates a templated site that looks “roughly right” from one that matches the design.
The principle behind this is simple: on a templated build, the QA loop is where the value is delivered. A shorter QA cycle is a weaker match to the design, not a faster delivery.
3. Customisation without drift. Every change we made to the branded template — whether to a page layout, a section component, or a style token — was documented against the Figma reference. Eye-care category pages, doctor-profile cards, online-payment widgets, and patient-forms layouts were customised inside the page scope, not in the shared template. This project’s work did not degrade the template for the next site it would serve.
4. Cross-device verification. Customisations were QA’d against Chrome, Firefox, Safari, and Edge on desktop, tablet, and mobile viewports — the standard agency breakpoint set. Each QA round covered the pages affected by that round’s design deltas, plus a sample of the migrated blog posts to confirm the post template held up at every viewport.
The blog migration and the Figma customisation ran as parallel QA surfaces — 264 posts to verify by URL, 53 pages to verify by design match. We separated the two explicitly: blog migration closed via a 300-entry CSV redirect import and a per-URL pass, which kept it from bleeding into the design QA loop. Each surface was accounted for independently; neither collapsed into the other.
Operational Integrity at handoff
The QA load on this engagement was driven by the blog migration: 300 redirects needed importing to preserve slug integrity, a 404 on /blog/nearsighted-farsighted/ was surfaced and flagged in the internal QA pass, and encoding artifacts (hash characters) were caught in migrated post metadata — all three resolved before the build left our hands. 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 | 53 customised pages — 1 homepage, 1 services lander, 9 service pages, 8 about/doctor pages, 1 contact, 1 blog lander, and 32 supporting pages on the default template |
| Blog posts migrated | 264 posts carried over under the migrated Blog template (URL preservation — no SEO-equity claim) |
| Templates applied | 9 reusable templates from the agency’s catalogue, mapped across the 53 pages and the post template |
| Launch checklist | 37 items signed off across Design, Functionality, Pre-Migration, and Post-Migration tracks |
| QA / SEO issues tracked + resolved | 160 items reconciled across the agency’s two issue-backlog tabs (112 SEO + 48 CX, 154 closed at handoff) |
| Timeline | 108 days, delivered on schedule |
| Effort | 119 hours against a 119-hour estimate — no overrun, no scope creep |
| Team | 4 specialists |
| Hosting handoff | Live on the agency’s WP Engine template environment |
| Page health at handoff | Production URL returns HTTP 200 from independent verification (this env, 2026-04-24) |
The outcome, restated plainly: the agency’s Figma was implemented against their branded template across 53 pages and 9 templates, with 264 blog posts migrated under the post template, over 108 calendar days, inside the 119-hour estimate.
Process
| Phase | Duration | Outcome |
|---|---|---|
| Brief & estimation | ~1 week | Figma reviewed, template access confirmed, sitemap and 264-post blog migration scoped |
| Customisation development | ~6 weeks | Page-by-page template customisation to match Figma; blog import and template binding |
| QA iterations (concurrent) | ~6 weeks | 160 issues across SEO and CX backlogs raised, addressed, signed off |
| Fix rounds | ~1 week | Late-cycle client edits — promotions page, image swaps, copy refinements |
| Delivery | final day | Site live on WP Engine; agency-side go-live sign-off |
Development and QA ran concurrently — this is characteristic of template-customisation work, where no “QA phase” closes cleanly; the loop runs continuously until the agency signs off.
Team
Delivery team
- Nikita Tumasevic — lead developer (template customisation and Figma-to-layout mapping)
- Pavel Sazhin — QA iterations and fixes
- Anna Polunina — coordination and content workflow on the migration side
- Liza — manager-side QA spot-checks
- Anton Hersun, xaverPRO — project lead (estimation, agency-side communication, sign-off)
The partner agency retained full ownership of project management, design decisions, and the end-client relationship throughout. The build was invisible to Vision Source Mandan — every request and sign-off moved through the agency’s shared backlog, and no round was marked closed until their reviewer confirmed it.
For agencies with a branded template system
If your agency has a branded template on WP Engine or Kinsta and a Figma per client, and the client comes with a blog archive that has to migrate without dropping a URL, send us the Figma and the template link — along with a note on the post count. We will estimate the customisation hours, identify the blog-migration scope, and return a fixed-hours quote within 24 hours. 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 →
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.