29-Page Eye Care Template Customisation
A template-to-Figma customisation for an optometry practice — 29 URLs on 10 templates, 107+ tracked QA items closed over 151 days and 73 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 →
Rebuild the site on a new stack. Implement the spec. Don't improvise. Hand it back ready for cutover.
Client (end user): Advanced Eye Care Professionals — an optometry practice in Lakeville, Minnesota
Engagement: White-label template customisation for a US marketing agency
Delivered: February 2026 · 151 days · 73 hours · 29 URLs · on schedule
The Craft of Template Customisation
29 pages of an optometry practice on a Kinsta template system mapped to the agency’s Figma across 10 templates — with URL preservation as the baseline constraint for a single-doctor practice whose patients navigated the same dry-eye treatment and vision-care paths for years. The agency held the design and the redirect list; we held the per-page execution, the QA cycle across 107+ tracked SEO and CX items, and the staging gate that confirmed every patient-facing slug was intact before handoff.
Snapshot
| Field | Value |
|---|---|
| End-client industry | Eye Care — Optometry (independent practice) |
| End-client | Advanced Eye Care Professionals (Lakeville, MN) |
| 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 | 29 URLs — homepage, dry-eye treatment lander + sub-pages, vision care products lander + service pages, about, doctor bio, contact, patient resources, insurance information, blog lander, and supporting pages |
| Timeline | 151 days (4 Sep 2025 – 2 Feb 2026), on schedule |
| Effort | 73 hours — development, QA iterations, and project management |
| Team | 6 specialists |
| Templates | 10 reusable templates in use, all applied across the 29 pages |
| Tech Stack | WordPress · Elementor · Kinsta hosting · Figma-driven per-page design · agency AutoQA (Links / Email / Content AI checks) · Site Checker (xaverPRO QA plugin) |
| QA discipline | 107+ tracked SEO + CX issues reconciled in the agency’s backlog across an 84-item launch checklist |
| Engagement cadence | 57 agency-raised issues · all closed by handoff (28-day active span, 2025-09-24 – 2025-10-21) |
| Review rounds | ≈9 review rounds across the 151-day calendar window |
| Per-ticket effort | 125 internal Redmine tickets · median 2m / P75 22m per ticket |
| Launch checklist | 39 items, signed off before cutover |
The Brief
A US marketing agency delivered us a Figma design for Advanced Eye Care Professionals and a deployment target on their branded Kinsta-hosted template system. The agency had already done the upstream work: per-page content documents in Google Docs, a detailed sitemap mapping legacy URLs to the new template structure, and a Figma that applied the agency’s design system to the optometry vertical’s standard service taxonomy. What they needed was a team to map that Figma onto the template faithfully and preserve every URL the practice’s patients had been using.
The ask carried a URL-preservation constraint that shapes how template customisation work is evaluated on an eye care project. Advanced Eye Care Professionals runs a patient audience in Lakeville with years of local-search history — patients searching for dry eye treatment, comprehensive eye exams, contact lenses, and pediatric eye care return to URLs they have bookmarked or found via search. A template customisation that silently migrates a slug (/vision-care-products/contacts/ renamed, /dry-eye-treatment/optilight-for-dry-eye-treatment/ dropped) is not a visible failure in the CMS — it shows 404 only when the patient tries to follow the link they saved. The agency was hedging against exactly that: a dev team that remaps the URL structure for editorial convenience without treating every slug as a patient-facing commitment.
The optometry service taxonomy on this site — dry eye treatment (with OptiLight and TearCare sub-pages), comprehensive eye exams, contact lenses, emergency care, eye disease treatment (cataracts, diabetic retinopathy, glaucoma, AMD), myopia control, lenses and frames, pediatric eye care, and InfantSEE — is the vertical’s standard set. The doctor bio page for Amy M. Rudser, O.D., the practice’s founder and primary optometrist, sat under the /about-us/doctors-staff/ path the practice had maintained for years. Preserving that, along with every service URL, was the staging gate we needed to clear before handoff.
Risk context. An established optometry practice has a URL surface its patients have been navigating for years — bookmarked dry-eye treatment pages, saved appointment-booking paths, local-search results pointing at slugs the practice did not choose but cannot easily abandon. A template customisation that silently renames or restructures those slugs for editorial convenience does not register as an error in the CMS. It registers as a 404 the next time a patient follows a saved link. For Advanced Eye Care Professionals, the patient-facing URL contract covered not just the homepage but every service sub-page in a multi-level service taxonomy — and the doctor bio path that patients had been using since the practice opened. Treating every one of those slugs as a commitment, not a default, was the baseline requirement before any other customisation work began.
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 (the dry-eye treatment lander’s specialist content blocks, the appointment booking section on the patient resources page, the insurance information page’s carrier-logo grid), we customised. No design decisions originated on our side.
2. URL-integrity as a customisation discipline. On an eye care project with an existing patient audience, the sitemap is not just a content inventory — it is a URL contract. Every page’s destination slug was confirmed against the legacy site and preserved in the new template structure. The workbook’s sitemap tab carried both old URLs and staging URLs side by side; QA on any page where those diverged was a critical item, not a styling note. The content and SEO surface check in our Site Checker pre-handoff pass — meta titles, slug verification, canonical settings — was the staging gate that confirmed URL-level integrity before we shipped.
3. QA cycle at template-customisation scale. A clean template customisation is not “build once, review once”. It is “build, QA, adjust, QA, adjust”. Of the 125 tasks tracked on this project, 88 were QA iterations — individual rounds where the agency flagged design and content deltas, we reviewed, fixed, and returned the build for another review. The agency tracked 107+ items across two issue-backlog tabs (57 SEO findings and 50 CX findings), reconciled through the shared workspace until sign-off.
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. A limitation the QA cycle exposed early was that the agency had not provided content documents for every page in the sitemap; where those gaps surfaced in the backlog, we migrated the missing copy from the practice’s live site rather than blocking the iteration queue on documents that might not arrive within the iteration window.
4. 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. Doctor-bio card layouts, patient-form sections, insurance-carrier logo blocks, and dry-eye sub-page content structures were customised inside the page scope rather than applied as template-level overrides — we chose page-scoped customisation because the agency’s shared template components are reused across multiple client sites, and overriding a shared component for one project would alter the layout baseline for every subsequent build that inherits it. Nothing propagated into the agency’s shared template components; the next Eye Care site built on this template inherits no side effects from this project’s customisation.
5. 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, not the whole site, which is how a templated build stays efficient without losing coverage.
The structural tension on this build was template defaults against patient-facing slugs that had been in search results for years. We confirmed each destination URL against the workbook’s side-by-side old-URL and staging-URL columns, page by page. The agency caught the XML sitemap as inaccessible in their final pre-launch check — that fix, cleared before cutover, was the last gate the URL contract had to pass.
Operational Integrity at handoff
The insurance information page was the QA load-centre for this engagement — the agency backlog logged 31 insurance-related items covering wholesale section removals, FAQ rewrites, carrier-logo corrections, and header and paragraph copy replacements; the agency’s final pre-launch check also caught the XML sitemap as inaccessible (Redmine #1223), which was fixed and cleared before cutover. 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 | 29 — 1 homepage, 1 dry-eye treatment lander, 2 dry-eye sub-pages, 1 vision care products lander, 9 service pages, 1 eye disease lander + 4 eye disease sub-pages, 1 about, 1 doctor bio, 1 contact, 1 patient resources lander, 1 insurance information page, 1 blog lander, and supporting pages |
| Templates applied | 10 of 10 reusable templates built and mapped across the 29 pages (Homepage, About Us, Doctor Page, Contact Us, Service Page, Services Lander, Blog Lander, Default Template, Patients Lander, Patients page) |
| Launch checklist | 84 items signed off |
| QA / SEO + CX issues tracked + resolved | 107+ items reconciled across the agency’s two issue-backlog tabs (57 SEO + 50 CX) |
| Redmine QA iterations | 88 of 125 tasks (70%) tracked at the iteration level |
| Timeline | 151 days, delivered on schedule |
| Effort | 73 hours — no overrun, no scope creep |
| Team | 4 specialists |
| Hosting handoff | Live on the agency’s Kinsta template environment |
| Page health at handoff | Production URL returns HTTP 200 from independent verification (this env, 2026-04-25) |
The outcome, restated plainly: the agency’s Figma was implemented against their branded template across 29 pages and 10 templates, over 151 calendar days, inside the 73-hour estimate — with every patient-facing URL from the prior site preserved.
Process
| Phase | Duration | Outcome |
|---|---|---|
| Brief & estimation | ~1 week | Figma reviewed, template access confirmed, sitemap and URL preservation scope agreed |
| Customisation development | ~3 weeks | Page-by-page template customisation to match Figma; dry-eye and service-page taxonomy built |
| QA iterations (concurrent) | ~14 weeks | 88 QA rounds logged; each closed only on agency sign-off |
| Fix rounds | ~4 weeks | Post-review corrections including menu items, insurance content, booking CTA placement |
| Delivery | final day | Site live on Kinsta; 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
- Pavel Sazhin — QA iterations and fixes
- Anna Polunina — template customisation support and QA
- Evgeniy Karpov — developer (template customisation and Figma-to-layout mapping)
- Timur Arbaev — developer support and QA review
- Anton Hersun, xaverPRO — project lead (estimation, agency-side communication, sign-off)
Agency-side project management, design decisions, and the end-client relationship remained with the partner agency from start to finish. Advanced Eye Care Professionals did not interact with our team — every customisation request and sign-off moved through the agency’s shared issue backlog. No round was closed until the agency-side reviewer confirmed it.
For agencies with a branded template system
This engagement fits agencies whose template system runs on Kinsta and whose clients bring years of existing URL history — service sub-pages, specialty-care landing pages, or a patient-facing taxonomy that cannot be silently renamed. If that’s your shape, send a sample Figma and a sitemap that maps your old URLs to staging.
We will estimate the customisation hours, identify any URL or design risks before kickoff, 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 →
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.