- Ran `npx shadcn@latest migrate cn`: swaps clsx + tailwind-merge for cn
- Import cn from "cn" everywhere (matches what `shadcn add` now writes)
and remove the src/lib/utils.js re-export shim
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Components (added via the shadcn MCP/CLI):
- Navbar: NavigationMenu on desktop, Sheet on mobile; drops
Navbar.module.css and the hand-rolled slide-down menu
- Buttons: shadcn Button via a shared ContactButtons component
(replaces Button.js and its CSS module)
- Card for price cards, testimonials, the business block and plan;
Table for prices; Input/Textarea/Label/NativeSelect/RadioGroup and
Alert in the quote form; Separator in the footer
- Components import cn from @/lib/utils (not the new "cn" package);
accordion moved to the unified radix-ui package
Design tweaks:
- Geist Sans is actually applied (font variables were on <body>, but
Tailwind reads them on <html>, so the site fell back to system fonts)
- Theme primary set to the existing brand blue; slightly smaller radius
- Balanced, tighter heading tracking; muted secondary text
- 44px contact buttons; 16px FAQ text; tighter homepage spacing
- Full-width selects with 16px text on phones (no iOS zoom)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- Map is a titled iframe (accessibility); drop @next/third-parties
- "Services" nav toggle is a real button with aria-expanded (SEO
crawlable-anchors, accessibility)
- Hero images use default quality; page-header image is preloaded (LCP)
- Mobile services submenu no longer clips its last item
Mobile Lighthouse: / 94/100/100/100, /services/computer-repair
96/100/100/100, /areas/henderson 97/100/100/100, /contact 95/100/100/100
(performance/accessibility/best practices/SEO).
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- Contact page: Call/Text/WhatsApp at the top, hours, drop-off address,
service area, map, and the quote form
- Quote form: device, problem, preferred contact; email required, phone
optional; labels wired to inputs; _gotcha honeypot; AJAX submit to
form.taxi with an inline "same day during business hours" message and
an error fallback (still posts normally without JavaScript)
- Analytics hooks for click_call, click_text, click_email,
submit_quote_form and click_google_reviews; no-ops until Plausible
is installed
- /review redirects (307) to the Google review link
- Maps embed moved to one MapEmbed component
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- /pricing: full price list, no-fix-no-fee terms, travel and payments
- /about: first-person page from confirmed facts, links to area pages
- /areas/[suburb]: Te Atatū Peninsula, Te Atatū South, Henderson and
Massey, generated from src/lib/areas.js with suburb-specific copy
- /windows-10: options page with free Windows 11 check; October 2028
used for business Extended Security Updates
- /business: $65/month plan (2 hours, no lock-in, no rollover)
- Nav gains Pricing/About and Business/Windows 10 links; footer rebuilt
with address, hours and links; homepage links areas, /business and
a Windows 10 banner; sitemap includes all new routes
- Mobile menu hides by its own height (fixes overflow with more links);
hamburger now used below 900px so the link row never overlaps
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- ServicePage template: H1 with service + area, intro with Call/Text
above the fold, What I fix, Pricing, How it works, Why choose me,
a testimonial, FAQs (with FAQPage schema), CTA band, related services
- Service copy moved to src/lib/services.js, rewritten in first person
with owner-confirmed jobs and prices only; removes the "team of
technicians", "preferred choice", Mac and motherboard claims
- FaqList and CtaBand extracted and shared with the homepage
- Button gains primary/outlineDark variants; responsive page-header H1
- Compact Chatwoot bubble on phones so it doesn't cover CTAs
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- Hero says what and where, with No fix no fee / $35 diagnosis, Call and
Text CTAs, and the real Google rating
- Common fixes grid with owner-confirmed labour prices, linking to
service pages
- How it works, About (first person), testimonials, areas served with
map, a short business IT block, rewritten FAQ and a final CTA band
- Sticky Call/Text bar on mobile (site-wide); Chatwoot bubble moved above it
- Button renders a link when given href (no more button-inside-link)
- Business facts (prices, rating, testimonials, contact links) in site.js
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- Per-page titles, descriptions, canonicals, Open Graph/Twitter tags
via a shared pageMetadata() helper; metadataBase on the root layout
- Sitemap generated from a route list on the canonical non-www host;
robots.txt points to it; /services removed
- One H1 per page; decorative images get empty alt text
- JSON-LD: site-wide ComputerRepairService, FAQPage on the homepage,
Service on each service page
- FAQ answers are now server-rendered (forceMount) so the schema matches
the HTML; fixed the nested payment FAQ item
- Drop web design (page, nav link, homepage card and FAQs); 301 the old URL
- Remove GA, Facebook Pixel and Vercel Analytics/Speed Insights
- Fix tel: links (+640211... -> +64211...)
- Add og-image.png and logo.png
Co-Authored-By: Claude Opus 5.5 <[email protected]>