Phase 3: service pages on a shared template
- 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]>
This commit is contained in:
1 parent
7043b47de1
commit
40d3a08050
13 files changed
+502
-236
No files matched your search
@@ -3,7 +3,7 @@ import styles from "./Button.module.css";
|
|||||||
|
|
||||||
// Renders a link when given href (internal paths use next/link), otherwise a button.
|
// Renders a link when given href (internal paths use next/link), otherwise a button.
|
||||||
export default function Button({ children, onClick, href, variant }) {
|
export default function Button({ children, onClick, href, variant }) {
|
||||||
const className = `${styles.button} ${variant === "outline" ? styles.outline : ""}`;
|
const className = `${styles.button} ${variant ? styles[variant] : ""}`;
|
||||||
if (href?.startsWith("/")) {
|
if (href?.startsWith("/")) {
|
||||||
return <Link href={href} className={className}>{children}</Link>;
|
return <Link href={href} className={className}>{children}</Link>;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,3 +24,14 @@
|
|||||||
color: white;
|
color: white;
|
||||||
box-shadow: inset 0 0 0 2px white;
|
box-shadow: inset 0 0 0 2px white;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.primary {
|
||||||
|
background-color: var(--color-sky-800);
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.outlineDark {
|
||||||
|
background-color: transparent;
|
||||||
|
color: var(--color-sky-800);
|
||||||
|
box-shadow: inset 0 0 0 2px var(--color-sky-800);
|
||||||
|
}
|
||||||
@@ -9,7 +9,8 @@ class ChatwootWidget extends React.Component {
|
|||||||
hideMessageBubble: false,
|
hideMessageBubble: false,
|
||||||
position: "right", // This can be left or right
|
position: "right", // This can be left or right
|
||||||
locale: "en", // Language to be set
|
locale: "en", // Language to be set
|
||||||
type: "expanded_bubble", // [standard, expanded_bubble]
|
// Small round bubble on phones so it doesn't cover the page's buttons.
|
||||||
|
type: window.innerWidth < 768 ? "standard" : "expanded_bubble", // [standard, expanded_bubble]
|
||||||
};
|
};
|
||||||
|
|
||||||
// Paste the script from inbox settings except the <script> tag
|
// Paste the script from inbox settings except the <script> tag
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
import { MessageCircle, MessageSquare, Phone } from "lucide-react";
|
||||||
|
import Button from "./Button";
|
||||||
|
import { business, links } from "@/lib/site";
|
||||||
|
|
||||||
|
export default function CtaBand({ quoteHref = "/contact" }) {
|
||||||
|
return (
|
||||||
|
<section className="bg-sky-900 text-white py-16">
|
||||||
|
<div className="container mx-auto text-center">
|
||||||
|
<h2 className="text-3xl font-bold mb-4">Get your computer sorted</h2>
|
||||||
|
<p className="mb-8">
|
||||||
|
Call or text now, or send the details and I'll get back to you
|
||||||
|
with a quote.
|
||||||
|
</p>
|
||||||
|
<div className="flex flex-col sm:flex-row flex-wrap justify-center gap-3">
|
||||||
|
<Button href={links.tel}>
|
||||||
|
<Phone aria-hidden="true" />
|
||||||
|
Call {business.phone}
|
||||||
|
</Button>
|
||||||
|
<Button href={links.sms} variant="outline">
|
||||||
|
<MessageSquare aria-hidden="true" />
|
||||||
|
Text me
|
||||||
|
</Button>
|
||||||
|
<Button href={links.whatsapp} variant="outline">
|
||||||
|
<MessageCircle aria-hidden="true" />
|
||||||
|
WhatsApp
|
||||||
|
</Button>
|
||||||
|
<Button href={quoteHref} variant="outline">
|
||||||
|
Get a quote
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
import JsonLd from "./JsonLd";
|
||||||
|
import { faqSchema } from "@/lib/site";
|
||||||
|
import {
|
||||||
|
Accordion,
|
||||||
|
AccordionContent,
|
||||||
|
AccordionItem,
|
||||||
|
AccordionTrigger,
|
||||||
|
} from "@/components/ui/accordion";
|
||||||
|
|
||||||
|
// FAQ accordion plus matching FAQPage JSON-LD. Answers stay in the HTML.
|
||||||
|
export default function FaqList({ faqs }) {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<JsonLd data={faqSchema(faqs)} />
|
||||||
|
<Accordion className="mb-8">
|
||||||
|
{faqs.map(({ question, answer, list }, i) => (
|
||||||
|
<AccordionItem key={question} value={`item-${i + 1}`}>
|
||||||
|
<AccordionTrigger>{question}</AccordionTrigger>
|
||||||
|
<AccordionContent>
|
||||||
|
{answer}
|
||||||
|
{list && (
|
||||||
|
<ul className="list-disc pl-6 my-2">
|
||||||
|
{list.map((item) => (
|
||||||
|
<li key={item}>{item}</li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
)}
|
||||||
|
</AccordionContent>
|
||||||
|
</AccordionItem>
|
||||||
|
))}
|
||||||
|
</Accordion>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -20,7 +20,7 @@ export default function HeaderSm({ text }) {
|
|||||||
<div className={styles.textbox}>
|
<div className={styles.textbox}>
|
||||||
<div className="container mx-auto">
|
<div className="container mx-auto">
|
||||||
<div className={styles.textboxInner}>
|
<div className={styles.textboxInner}>
|
||||||
<h1 className="text-4xl font-bold">{text}</h1>
|
<h1 className="text-2xl md:text-4xl font-bold">{text}</h1>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -0,0 +1,182 @@
|
|||||||
|
import Link from "next/link";
|
||||||
|
import { ArrowRight, Check, MessageSquare, Phone } from "lucide-react";
|
||||||
|
import HeaderSm from "./HeaderSm";
|
||||||
|
import Button from "./Button";
|
||||||
|
import CtaBand from "./CtaBand";
|
||||||
|
import FaqList from "./FaqList";
|
||||||
|
import JsonLd from "./JsonLd";
|
||||||
|
import { business, links, pageMetadata, serviceSchema } from "@/lib/site";
|
||||||
|
import { services } from "@/lib/services";
|
||||||
|
|
||||||
|
const promises = [
|
||||||
|
{
|
||||||
|
title: "No fix, no fee",
|
||||||
|
text: "If I can't fix it, you don't pay the $35 diagnosis.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Price before I start",
|
||||||
|
text: "I'll tell you what's wrong and what it costs before any work begins.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "You deal with me",
|
||||||
|
text: "The person you talk to is the person fixing your computer.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Local to Te Atatū",
|
||||||
|
text: "Based on Te Atatū Peninsula, serving West Auckland and the CBD.",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
export function serviceMetadata(slug) {
|
||||||
|
const { title, description } = services[slug];
|
||||||
|
return pageMetadata({ title, description, path: `/services/${slug}` });
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function ServicePage({ slug }) {
|
||||||
|
const service = services[slug];
|
||||||
|
const path = `/services/${slug}`;
|
||||||
|
const testimonial = business.testimonials.find(
|
||||||
|
({ name }) => name === service.testimonial
|
||||||
|
);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<JsonLd
|
||||||
|
data={serviceSchema({
|
||||||
|
name: service.name,
|
||||||
|
description: service.description,
|
||||||
|
path,
|
||||||
|
})}
|
||||||
|
/>
|
||||||
|
<HeaderSm text={service.h1} />
|
||||||
|
|
||||||
|
<section className="container mx-auto max-w-3xl mb-16">
|
||||||
|
{service.intro.map((p) => (
|
||||||
|
<p key={p} className="text-lg mb-4">
|
||||||
|
{p}
|
||||||
|
</p>
|
||||||
|
))}
|
||||||
|
<div className="flex flex-col sm:flex-row gap-3 mt-6">
|
||||||
|
<Button href={links.tel} variant="primary">
|
||||||
|
<Phone aria-hidden="true" />
|
||||||
|
Call {business.phone}
|
||||||
|
</Button>
|
||||||
|
<Button href={links.sms} variant="outlineDark">
|
||||||
|
<MessageSquare aria-hidden="true" />
|
||||||
|
Text me
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="container mx-auto max-w-3xl mb-16">
|
||||||
|
<h2 className="text-3xl font-bold mb-4">What I fix</h2>
|
||||||
|
<ul className="space-y-2">
|
||||||
|
{service.fixes.map((fix) => (
|
||||||
|
<li key={fix} className="flex gap-2">
|
||||||
|
<Check
|
||||||
|
aria-hidden="true"
|
||||||
|
className="size-5 shrink-0 mt-0.5 text-sky-800"
|
||||||
|
/>
|
||||||
|
{fix}
|
||||||
|
</li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
{service.fixesNote && <p className="mt-4">{service.fixesNote}</p>}
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="container mx-auto max-w-3xl mb-16">
|
||||||
|
<h2 className="text-3xl font-bold mb-4">Pricing</h2>
|
||||||
|
<table className="w-full mb-4 text-left">
|
||||||
|
<tbody>
|
||||||
|
{service.prices.map(({ item, price }) => (
|
||||||
|
<tr key={item} className="border-b">
|
||||||
|
<th scope="row" className="py-3 pr-4 font-normal">
|
||||||
|
{item}
|
||||||
|
</th>
|
||||||
|
<td className="py-3 font-bold text-sky-800">{price}</td>
|
||||||
|
</tr>
|
||||||
|
))}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<p className="mb-2">
|
||||||
|
The diagnosis is $35. If I can't fix it, you don't pay it.
|
||||||
|
Once I know what's wrong, I'll tell you what the repair will
|
||||||
|
cost before I start. If you decide not to go ahead, the $35 still
|
||||||
|
applies.
|
||||||
|
</p>
|
||||||
|
<p className="text-slate-600">
|
||||||
|
Labour is $35 an hour. Parts are extra.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="container mx-auto max-w-3xl mb-16">
|
||||||
|
<h2 className="text-3xl font-bold mb-4">How it works</h2>
|
||||||
|
<ul className="list-disc pl-6 space-y-2 mb-4">
|
||||||
|
<li>
|
||||||
|
<strong>Drop-off:</strong> bring it to {business.address.street},{" "}
|
||||||
|
{business.address.suburb}, by appointment.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<strong>Pickup or onsite:</strong> I can collect it or come to you
|
||||||
|
anywhere in my service area. The travel fee depends on distance.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<strong>Remote:</strong> many software problems can be fixed over
|
||||||
|
the internet.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<p>
|
||||||
|
Most repairs are done within 24–48 hours, although this isn't
|
||||||
|
guaranteed. Parts that need ordering usually take about a week. I
|
||||||
|
work Monday to Friday, 9am to 6pm, and weekends by appointment.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="bg-slate-100 py-16 mb-16">
|
||||||
|
<div className="container mx-auto max-w-3xl">
|
||||||
|
<h2 className="text-3xl font-bold mb-6">Why choose me</h2>
|
||||||
|
<ul className="grid grid-cols-1 sm:grid-cols-2 gap-6">
|
||||||
|
{promises.map(({ title, text }) => (
|
||||||
|
<li key={title}>
|
||||||
|
<h3 className="font-bold text-lg mb-1">{title}</h3>
|
||||||
|
<p>{text}</p>
|
||||||
|
</li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
{testimonial && (
|
||||||
|
<figure className="mt-8 rounded-lg border bg-white p-6">
|
||||||
|
<blockquote className="mb-3">
|
||||||
|
“{testimonial.quote}”
|
||||||
|
</blockquote>
|
||||||
|
<figcaption className="font-bold">{testimonial.name}</figcaption>
|
||||||
|
</figure>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="container mx-auto max-w-3xl mb-16">
|
||||||
|
<h2 className="text-3xl font-bold mb-4">Questions</h2>
|
||||||
|
<FaqList faqs={service.faqs} />
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<CtaBand />
|
||||||
|
|
||||||
|
<section className="container mx-auto max-w-3xl py-16">
|
||||||
|
<h2 className="text-2xl font-bold mb-4">Related services</h2>
|
||||||
|
<ul className="space-y-2">
|
||||||
|
{service.related.map((related) => (
|
||||||
|
<li key={related}>
|
||||||
|
<Link
|
||||||
|
href={`/services/${related}`}
|
||||||
|
className="inline-flex items-center gap-1 font-bold text-sky-800 hover:underline"
|
||||||
|
>
|
||||||
|
{services[related].name}
|
||||||
|
<ArrowRight aria-hidden="true" className="size-4" />
|
||||||
|
</Link>
|
||||||
|
</li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
+5
-55
@@ -5,15 +5,10 @@ import bgimage from "./assets/header-bg.jpg";
|
|||||||
import Button from "./components/Button";
|
import Button from "./components/Button";
|
||||||
import { GoogleMapsEmbed } from "@next/third-parties/google";
|
import { GoogleMapsEmbed } from "@next/third-parties/google";
|
||||||
import ContactForm from "./components/ContactForm";
|
import ContactForm from "./components/ContactForm";
|
||||||
import JsonLd from "./components/JsonLd";
|
import FaqList from "./components/FaqList";
|
||||||
import { pageMetadata, faqSchema, business, links } from "@/lib/site";
|
import CtaBand from "./components/CtaBand";
|
||||||
|
import { pageMetadata, business, links } from "@/lib/site";
|
||||||
import { homeFaqs } from "@/lib/faqs";
|
import { homeFaqs } from "@/lib/faqs";
|
||||||
import {
|
|
||||||
Accordion,
|
|
||||||
AccordionContent,
|
|
||||||
AccordionItem,
|
|
||||||
AccordionTrigger,
|
|
||||||
} from "@/components/ui/accordion";
|
|
||||||
import {
|
import {
|
||||||
ArrowRight,
|
ArrowRight,
|
||||||
Briefcase,
|
Briefcase,
|
||||||
@@ -22,7 +17,6 @@ import {
|
|||||||
HardDrive,
|
HardDrive,
|
||||||
Laptop,
|
Laptop,
|
||||||
MapPin,
|
MapPin,
|
||||||
MessageCircle,
|
|
||||||
MessageSquare,
|
MessageSquare,
|
||||||
Monitor,
|
Monitor,
|
||||||
MonitorCog,
|
MonitorCog,
|
||||||
@@ -337,58 +331,14 @@ export default function Home() {
|
|||||||
className="container mx-auto max-w-3xl mb-32 scroll-mt-20"
|
className="container mx-auto max-w-3xl mb-32 scroll-mt-20"
|
||||||
id="faq"
|
id="faq"
|
||||||
>
|
>
|
||||||
<JsonLd data={faqSchema(homeFaqs)} />
|
|
||||||
<h2 className="text-center text-3xl font-bold mb-8">
|
<h2 className="text-center text-3xl font-bold mb-8">
|
||||||
Frequently asked questions
|
Frequently asked questions
|
||||||
</h2>
|
</h2>
|
||||||
<Accordion className="mb-8">
|
<FaqList faqs={homeFaqs} />
|
||||||
{homeFaqs.map(({ question, answer, list }, i) => (
|
|
||||||
<AccordionItem key={question} value={`item-${i + 1}`}>
|
|
||||||
<AccordionTrigger>{question}</AccordionTrigger>
|
|
||||||
<AccordionContent>
|
|
||||||
{answer}
|
|
||||||
{list && (
|
|
||||||
<ul className="list-disc pl-6 my-2">
|
|
||||||
{list.map((item) => (
|
|
||||||
<li key={item}>{item}</li>
|
|
||||||
))}
|
|
||||||
</ul>
|
|
||||||
)}
|
|
||||||
</AccordionContent>
|
|
||||||
</AccordionItem>
|
|
||||||
))}
|
|
||||||
</Accordion>
|
|
||||||
<SectionCta />
|
<SectionCta />
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section className="bg-sky-900 text-white py-16">
|
<CtaBand quoteHref="#quote" />
|
||||||
<div className="container mx-auto text-center">
|
|
||||||
<h2 className="text-3xl font-bold mb-4">
|
|
||||||
Get your computer sorted
|
|
||||||
</h2>
|
|
||||||
<p className="mb-8">
|
|
||||||
Call or text now, or send the details and I'll get back to
|
|
||||||
you with a quote.
|
|
||||||
</p>
|
|
||||||
<div className="flex flex-col sm:flex-row flex-wrap justify-center gap-3">
|
|
||||||
<Button href={links.tel}>
|
|
||||||
<Phone aria-hidden="true" />
|
|
||||||
Call {business.phone}
|
|
||||||
</Button>
|
|
||||||
<Button href={links.sms} variant="outline">
|
|
||||||
<MessageSquare aria-hidden="true" />
|
|
||||||
Text me
|
|
||||||
</Button>
|
|
||||||
<Button href={links.whatsapp} variant="outline">
|
|
||||||
<MessageCircle aria-hidden="true" />
|
|
||||||
WhatsApp
|
|
||||||
</Button>
|
|
||||||
<Button href="#quote" variant="outline">
|
|
||||||
Get a quote
|
|
||||||
</Button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
<section
|
<section
|
||||||
id="quote"
|
id="quote"
|
||||||
className="container mx-auto max-w-2xl py-16 scroll-mt-20"
|
className="container mx-auto max-w-2xl py-16 scroll-mt-20"
|
||||||
|
|||||||
@@ -1,51 +1,7 @@
|
|||||||
import HeaderSm from "../../components/HeaderSm";
|
import ServicePage, { serviceMetadata } from "../../components/ServicePage";
|
||||||
import JsonLd from "../../components/JsonLd";
|
|
||||||
import { pageMetadata, serviceSchema } from "@/lib/site";
|
|
||||||
|
|
||||||
const page = {
|
export const metadata = serviceMetadata("computer-repair");
|
||||||
title: "Laptop & PC Repair Te Atatū & West Auckland",
|
|
||||||
description:
|
|
||||||
"Cracked screens, dead laptops, PCs that won't boot and Windows faults. Upfront pricing and honest advice from your local tech in Te Atatū.",
|
|
||||||
path: "/services/computer-repair",
|
|
||||||
};
|
|
||||||
|
|
||||||
export const metadata = pageMetadata(page);
|
export default function Page() {
|
||||||
|
return <ServicePage slug="computer-repair" />;
|
||||||
export default function Home() {
|
|
||||||
return (
|
|
||||||
<div style={{ marginBottom: "30em" }}>
|
|
||||||
<JsonLd
|
|
||||||
data={serviceSchema({
|
|
||||||
name: "Computer & Laptop Repair",
|
|
||||||
description: page.description,
|
|
||||||
path: page.path,
|
|
||||||
})}
|
|
||||||
/>
|
|
||||||
<HeaderSm text="Computer & Laptop Repairs" />
|
|
||||||
<section className="container mx-auto mb">
|
|
||||||
<h2 className="text-2xl mb-4">Professional Computer Repairs</h2>
|
|
||||||
<p>
|
|
||||||
Te Atatu Computers is your trusted destination for expert laptop repairs
|
|
||||||
in Auckland. We specialize in providing top-quality repair services,
|
|
||||||
tackling a wide range of issues—from routine maintenance to intricate
|
|
||||||
laptop screen repairs. With a team of skilled technicians armed with
|
|
||||||
advanced tools and extensive experience, we ensure every repair is
|
|
||||||
carried out with precision and care. Our dedication to excellence has
|
|
||||||
made us the preferred choice for laptop repairs in Auckland. Whether
|
|
||||||
you're dealing with a cracked screen, a faulty keyboard, or software
|
|
||||||
issues, we excel in diagnosing and resolving all types of laptop
|
|
||||||
challenges. We're committed to offering fast, reliable, and
|
|
||||||
cost-effective solutions, ensuring your device is returned in perfect
|
|
||||||
working order. In addition to laptops, we handle PC, Mac, and hardware
|
|
||||||
repairs, covering issues like viruses, spyware, and software
|
|
||||||
malfunctions. From component replacements to motherboard
|
|
||||||
repairs—thanks to our in-house motherboard specialist—Te Atatu Computers
|
|
||||||
is equipped to address any problem with efficiency and
|
|
||||||
professionalism. Choose Te Atatu Computers for a seamless repair
|
|
||||||
experience where quality craftsmanship and customer satisfaction are
|
|
||||||
always our top priorities.
|
|
||||||
</p>
|
|
||||||
</section>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
@@ -1,45 +1,7 @@
|
|||||||
import HeaderSm from "../../components/HeaderSm";
|
import ServicePage, { serviceMetadata } from "../../components/ServicePage";
|
||||||
import JsonLd from "../../components/JsonLd";
|
|
||||||
import { pageMetadata, serviceSchema } from "@/lib/site";
|
|
||||||
|
|
||||||
const page = {
|
export const metadata = serviceMetadata("computer-upgrades");
|
||||||
title: "SSD Upgrades & PC Speed-Up | Te Atatu Computers",
|
|
||||||
description:
|
|
||||||
"Slow computer? An SSD and RAM upgrade can make it feel new for a fraction of the cost of a new PC. Local upgrades in Te Atatū, West Auckland.",
|
|
||||||
path: "/services/computer-upgrades",
|
|
||||||
};
|
|
||||||
|
|
||||||
export const metadata = pageMetadata(page);
|
export default function Page() {
|
||||||
|
return <ServicePage slug="computer-upgrades" />;
|
||||||
export default function Home() {
|
|
||||||
return (
|
|
||||||
<div style={{ marginBottom: "30em" }}>
|
|
||||||
<JsonLd
|
|
||||||
data={serviceSchema({
|
|
||||||
name: "Computer Upgrades & Speed-Up",
|
|
||||||
description: page.description,
|
|
||||||
path: page.path,
|
|
||||||
})}
|
|
||||||
/>
|
|
||||||
<HeaderSm text="Computer & Laptop Upgrades/Speedup" />
|
|
||||||
<section className="container mx-auto mb">
|
|
||||||
<h2 className="text-2xl mb-4">Computer & Laptop Upgrades/Speedup</h2>
|
|
||||||
<p>
|
|
||||||
Upgrading a slow computer can significantly improve its performance or
|
|
||||||
storage capacity and extend its lifespan. At Te Atatu Computers, we do
|
|
||||||
profesional computer upgrades, wheather you need more storage or have
|
|
||||||
a slow device. Increasing the RAM allows your system to handle more
|
|
||||||
tasks simultaneously, reducing lag and boosting speed. Replacing an
|
|
||||||
old hard drive (HDD) with a solid-state drive (SSD) can dramatically
|
|
||||||
decrease boot times and make file access much faster, thanks to the
|
|
||||||
SSD's superior data transfer speeds. Additionally, optimizing your
|
|
||||||
Windows operating system—by removing unnecessary startup programs,
|
|
||||||
updating drivers, and cleaning up system files—can further enhance
|
|
||||||
your computer's responsiveness. These upgrades are cost-effective
|
|
||||||
solutions to breathe new life into your device and improve your
|
|
||||||
productivity.
|
|
||||||
</p>
|
|
||||||
</section>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
@@ -1,51 +1,7 @@
|
|||||||
import HeaderSm from "../../components/HeaderSm";
|
import ServicePage, { serviceMetadata } from "../../components/ServicePage";
|
||||||
import JsonLd from "../../components/JsonLd";
|
|
||||||
import { pageMetadata, serviceSchema } from "@/lib/site";
|
|
||||||
|
|
||||||
const page = {
|
export const metadata = serviceMetadata("it-support");
|
||||||
title: "Home & Small Business IT Support West Auckland",
|
|
||||||
description:
|
|
||||||
"Onsite and remote IT support for homes and small businesses: Wi-Fi, email, backups, security and new-PC setup.",
|
|
||||||
path: "/services/it-support",
|
|
||||||
};
|
|
||||||
|
|
||||||
export const metadata = pageMetadata(page);
|
export default function Page() {
|
||||||
|
return <ServicePage slug="it-support" />;
|
||||||
export default function Home() {
|
|
||||||
return (
|
|
||||||
<div style={{ marginBottom: "30em" }}>
|
|
||||||
<JsonLd
|
|
||||||
data={serviceSchema({
|
|
||||||
name: "IT Support",
|
|
||||||
description: page.description,
|
|
||||||
path: page.path,
|
|
||||||
})}
|
|
||||||
/>
|
|
||||||
<HeaderSm text="IT Support" />
|
|
||||||
<section className="container mx-auto mb">
|
|
||||||
<h2 className="text-2xl mb-4">IT Support</h2>
|
|
||||||
<p>
|
|
||||||
At Te Atatu Computers, we specialize in providing personalized IT
|
|
||||||
support tailored to the needs of individuals and small businesses.
|
|
||||||
Whether you're dealing with a sluggish computer, software glitches, or
|
|
||||||
networking issues, our experienced technicians are here to help. We
|
|
||||||
offer on-site and remote support, ensuring minimal disruption to your
|
|
||||||
day-to-day activities. From troubleshooting and repairs to software
|
|
||||||
installations and system upgrades, we provide comprehensive solutions
|
|
||||||
to keep your technology running smoothly. Our goal is to simplify
|
|
||||||
technology for you, so you can focus on what matters most. <br /><br />
|
|
||||||
For small businesses, we understand that reliable IT systems are
|
|
||||||
essential for productivity and growth. Te Atatu Computers offers a
|
|
||||||
range of services, including network setup, data backup solutions, and
|
|
||||||
cybersecurity protection, to safeguard your operations. We can also
|
|
||||||
assist with cloud services and ensure your systems are up to date for
|
|
||||||
maximum efficiency. Our team takes the time to understand your unique
|
|
||||||
business requirements, providing proactive support and expert advice
|
|
||||||
to help you thrive in today's digital landscape. With Te Atatu
|
|
||||||
Computers, you get more than just IT support—you gain a trusted
|
|
||||||
technology partner.
|
|
||||||
</p>
|
|
||||||
</section>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
@@ -1,43 +1,7 @@
|
|||||||
import HeaderSm from "../../components/HeaderSm";
|
import ServicePage, { serviceMetadata } from "../../components/ServicePage";
|
||||||
import JsonLd from "../../components/JsonLd";
|
|
||||||
import { pageMetadata, serviceSchema } from "@/lib/site";
|
|
||||||
|
|
||||||
const page = {
|
export const metadata = serviceMetadata("virus-removal");
|
||||||
title: "Virus & Malware Removal West Auckland",
|
|
||||||
description:
|
|
||||||
"Pop-ups, scams, slow or hacked PC? I'll clean it up, keep your files safe and help stop it happening again. Based in Te Atatū.",
|
|
||||||
path: "/services/virus-removal",
|
|
||||||
};
|
|
||||||
|
|
||||||
export const metadata = pageMetadata(page);
|
export default function Page() {
|
||||||
|
return <ServicePage slug="virus-removal" />;
|
||||||
export default function Home() {
|
|
||||||
return (
|
|
||||||
<div style={{ marginBottom: "30em" }}>
|
|
||||||
<JsonLd
|
|
||||||
data={serviceSchema({
|
|
||||||
name: "Virus & Malware Removal",
|
|
||||||
description: page.description,
|
|
||||||
path: page.path,
|
|
||||||
})}
|
|
||||||
/>
|
|
||||||
<HeaderSm text="Virus Removal" />
|
|
||||||
<section className="container mx-auto mb">
|
|
||||||
<h2 className="text-2xl mb-4">Virus & Malware Removal</h2>
|
|
||||||
<p>
|
|
||||||
Te Atatu Computers specializes in efficient and thorough virus removal
|
|
||||||
services for Windows devices, ensuring your computer is free from
|
|
||||||
harmful malware, spyware, and ransomware. Our experienced technicians
|
|
||||||
use advanced tools to identify and eliminate threats while
|
|
||||||
safeguarding your valuable data. We also perform a comprehensive
|
|
||||||
system check to ensure there are no lingering vulnerabilities,
|
|
||||||
restoring your device to optimal performance. Additionally, we provide
|
|
||||||
advice on enhancing your system's security, including installing
|
|
||||||
reliable antivirus software and adopting safe browsing habits, to help
|
|
||||||
prevent future infections. With Te Atatu Computers, you can trust your
|
|
||||||
device is in expert hands.
|
|
||||||
</p>
|
|
||||||
</section>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,216 @@
|
|||||||
|
// Content for the service pages, rendered by components/ServicePage.js.
|
||||||
|
// Only owner-confirmed facts: see PLAN.md owner inputs before adding claims.
|
||||||
|
|
||||||
|
export const services = {
|
||||||
|
"computer-repair": {
|
||||||
|
name: "Computer & Laptop Repair",
|
||||||
|
navLabel: "Computer & laptop repairs",
|
||||||
|
title: "Laptop & PC Repair Te Atatū & West Auckland",
|
||||||
|
description:
|
||||||
|
"Cracked screens, dead laptops, PCs that won't boot and Windows faults. Upfront pricing and honest advice from your local tech in Te Atatū.",
|
||||||
|
h1: "Laptop & PC Repair in Te Atatū & West Auckland",
|
||||||
|
intro: [
|
||||||
|
"Laptop won't turn on? Screen cracked, keyboard dead, or Windows stuck on a loading screen? I fix Windows laptops, desktop PCs and Chromebooks from Te Atatū Peninsula, for people all over West Auckland.",
|
||||||
|
"You'll deal with me directly, from the first call to handing your computer back. I'll find out what's wrong, tell you the cost, and only start once you're happy with the price.",
|
||||||
|
],
|
||||||
|
fixes: [
|
||||||
|
"Cracked, flickering or black laptop screens",
|
||||||
|
"Laptops and PCs that won't turn on or won't start Windows",
|
||||||
|
"Batteries that won't hold charge",
|
||||||
|
"Laptops that won't charge, including faulty charging ports",
|
||||||
|
"Broken or unresponsive keyboards",
|
||||||
|
"Overheating, loud fans and sudden shutdowns (dust clean, fan replacement, fresh thermal paste)",
|
||||||
|
"Liquid spills: clean-up and assessment",
|
||||||
|
"Windows errors, blue screens and failed updates",
|
||||||
|
"Recovering files from a computer that won't start",
|
||||||
|
],
|
||||||
|
fixesNote:
|
||||||
|
"I don't repair Apple devices. That includes MacBooks, iMacs, iPhones and iPads.",
|
||||||
|
prices: [
|
||||||
|
{ item: "Diagnosis", price: "$35" },
|
||||||
|
{ item: "Laptop screen replacement", price: "from $35 + the screen" },
|
||||||
|
{ item: "Battery, charging port or keyboard", price: "from $35 + parts" },
|
||||||
|
{ item: "Other repairs (labour)", price: "$35 an hour" },
|
||||||
|
{ item: "Windows reinstall", price: "from $45" },
|
||||||
|
],
|
||||||
|
faqs: [
|
||||||
|
{
|
||||||
|
question: "Do you repair MacBooks or other Apple devices?",
|
||||||
|
answer:
|
||||||
|
"No. I only work on Windows laptops and PCs, Chromebooks and custom-built computers.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
question: "What happens if you can't fix it?",
|
||||||
|
answer:
|
||||||
|
"You don't pay the $35 diagnosis fee. If I can fix it but you decide not to go ahead, the $35 is charged.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
question: "How long does a repair take?",
|
||||||
|
answer:
|
||||||
|
"Most repairs are done within 24–48 hours, although this isn't guaranteed. If a part such as a screen or battery needs ordering, it usually takes about a week to arrive. I'll give you an estimate after the diagnosis.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
question: "My laptop got wet. What should I do?",
|
||||||
|
answer:
|
||||||
|
"Turn it off straight away, unplug the charger and don't try to switch it back on. Get in touch as soon as you can so I can clean it up and check for damage.",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
testimonial: "Irwin",
|
||||||
|
related: ["computer-upgrades", "virus-removal", "it-support"],
|
||||||
|
},
|
||||||
|
|
||||||
|
"computer-upgrades": {
|
||||||
|
name: "Computer Upgrades & Speed-Up",
|
||||||
|
navLabel: "Upgrades & speed-up",
|
||||||
|
title: "SSD Upgrades & PC Speed-Up | Te Atatu Computers",
|
||||||
|
description:
|
||||||
|
"Slow computer? An SSD and RAM upgrade can make it feel new for a fraction of the cost of a new PC. Local upgrades in Te Atatū, West Auckland.",
|
||||||
|
h1: "SSD Upgrades & PC Speed-Up in Te Atatū & West Auckland",
|
||||||
|
intro: [
|
||||||
|
"Does your computer take forever to start, freeze when you open a few tabs, or sit with the disk light flashing? Very often the fix isn't a new computer. It's swapping an old hard drive for an SSD, adding more memory, or clearing out the software slowing Windows down.",
|
||||||
|
"I do upgrades from Te Atatū Peninsula for homes and businesses across West Auckland. If an upgrade isn't worth it for your computer, I'll tell you before you spend anything.",
|
||||||
|
],
|
||||||
|
fixes: [
|
||||||
|
"SSD upgrades: replacing an old hard drive with a solid-state drive for much faster start-up and loading",
|
||||||
|
"Cloning your old drive to the new SSD, so everything stays exactly as it was, just faster",
|
||||||
|
"RAM upgrades so your computer can handle more at once",
|
||||||
|
"Windows clean-ups: startup programs, drivers and unnecessary software",
|
||||||
|
"Fresh Windows reinstalls",
|
||||||
|
"Windows 11 upgrades for eligible PCs",
|
||||||
|
"Graphics card upgrades for desktop PCs",
|
||||||
|
"Custom PC builds: I'll help you pick the parts and build it",
|
||||||
|
],
|
||||||
|
prices: [
|
||||||
|
{ item: "SSD upgrade", price: "from $45 + the drive" },
|
||||||
|
{ item: "Windows reinstall", price: "from $45" },
|
||||||
|
{ item: "Moving files to a new drive or PC", price: "from $45" },
|
||||||
|
{ item: "RAM, graphics card and Windows 11 upgrades", price: "from $35 + parts" },
|
||||||
|
{ item: "Custom PC build (labour)", price: "from $35" },
|
||||||
|
],
|
||||||
|
faqs: [
|
||||||
|
{
|
||||||
|
question: "Will I lose my files and programs with an SSD upgrade?",
|
||||||
|
answer:
|
||||||
|
"No, not if you don't want to. I can clone your old drive onto the new SSD, so your files, programs and settings stay as they were. If you'd rather start fresh, I can do a clean Windows install instead.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
question: "Is it worth upgrading, or should I buy a new computer?",
|
||||||
|
answer:
|
||||||
|
"It depends on the computer. An SSD and more RAM can make an older machine feel much quicker for far less than a new one. If an upgrade won't help much, I'll tell you before you spend anything.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
question: "Can my computer run Windows 11?",
|
||||||
|
answer:
|
||||||
|
"Some older PCs can't officially run Windows 11. I can check yours and upgrade it if it's eligible. If it isn't, I'll talk you through your options.",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
testimonial: "Irwin",
|
||||||
|
related: ["computer-repair", "it-support", "virus-removal"],
|
||||||
|
},
|
||||||
|
|
||||||
|
"virus-removal": {
|
||||||
|
name: "Virus & Malware Removal",
|
||||||
|
navLabel: "Virus removal",
|
||||||
|
title: "Virus & Malware Removal West Auckland",
|
||||||
|
description:
|
||||||
|
"Pop-ups, scams, slow or hacked PC? I'll clean it up, usually without losing your files, and help stop it happening again. Based in Te Atatū.",
|
||||||
|
h1: "Virus & Malware Removal in Te Atatū & West Auckland",
|
||||||
|
intro: [
|
||||||
|
"Pop-ups that won't go away? A browser that keeps sending you to strange sites, a \"your computer is infected\" warning with a phone number, or a PC that's suddenly slow? These are common signs of malware or a scam, and they can usually be cleaned up.",
|
||||||
|
"I remove viruses and malware from Windows computers, usually without wiping the computer, so your files stay where they are. Then I'll show you how to avoid it happening again.",
|
||||||
|
],
|
||||||
|
fixes: [
|
||||||
|
"Viruses, malware, spyware and adware",
|
||||||
|
"Fake virus warnings and scam pop-ups",
|
||||||
|
"Browser hijacks: changed home pages, unwanted toolbars and search engines",
|
||||||
|
"Computers used by a scammer through remote access",
|
||||||
|
"Checking for anything left behind once the infection is removed",
|
||||||
|
"Setting up reliable antivirus protection",
|
||||||
|
"Advice on safer browsing, email and passwords",
|
||||||
|
],
|
||||||
|
fixesNote:
|
||||||
|
"If an infection is too deep to clean safely, I'll back up your files and reinstall Windows. I'll always tell you before I do this.",
|
||||||
|
prices: [
|
||||||
|
{ item: "Diagnosis", price: "$35" },
|
||||||
|
{ item: "Virus and malware removal", price: "from $35" },
|
||||||
|
{ item: "Windows reinstall (if needed)", price: "from $45" },
|
||||||
|
],
|
||||||
|
faqs: [
|
||||||
|
{
|
||||||
|
question: "Will I lose my files?",
|
||||||
|
answer:
|
||||||
|
"Usually not. Most infections can be removed without wiping the computer. If a reinstall is needed, I'll back up your files first and tell you before I start.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
question: "I let a scammer onto my computer. What should I do?",
|
||||||
|
answer:
|
||||||
|
"Disconnect the computer from the internet, and call your bank if you shared any banking or card details. From another device, change your important passwords, starting with email and banking. Then get in touch and I'll check the computer and remove anything the scammer installed.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
question: "Can you remove a virus remotely?",
|
||||||
|
answer:
|
||||||
|
"Sometimes. Remote support works well for many software problems. If the infection is stopping remote access or needs a closer look, I'll get you to drop the computer off or I'll come to you.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
question: "Do you remove viruses from Macs?",
|
||||||
|
answer: "No, I don't work on Apple devices. I only work on Windows computers.",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
testimonial: "Marlies",
|
||||||
|
related: ["computer-repair", "it-support", "computer-upgrades"],
|
||||||
|
},
|
||||||
|
|
||||||
|
"it-support": {
|
||||||
|
name: "IT Support",
|
||||||
|
navLabel: "IT support",
|
||||||
|
title: "Home & Small Business IT Support West Auckland",
|
||||||
|
description:
|
||||||
|
"Onsite and remote IT support for homes and small businesses: Wi-Fi, email, backups, security and new-PC setup.",
|
||||||
|
h1: "Home & Small Business IT Support in West Auckland",
|
||||||
|
intro: [
|
||||||
|
"Wi-Fi dropping out, email not syncing, a printer that won't print, or a new computer you need set up? I help homes and small businesses around Te Atatū and West Auckland with everyday IT problems, onsite or remotely.",
|
||||||
|
"There's no call centre. You get the person who'll actually do the work, and you pay for the time you need.",
|
||||||
|
],
|
||||||
|
fixes: [
|
||||||
|
"Wi-Fi and network setup: routers, mesh Wi-Fi and weak signal",
|
||||||
|
"Email setup and problems (Outlook, Gmail and others)",
|
||||||
|
"Microsoft 365 and Google Workspace setup for small businesses",
|
||||||
|
"Printer and scanner setup and troubleshooting",
|
||||||
|
"New computer setup, including moving files from your old one",
|
||||||
|
"Backups, so you don't lose photos or business files",
|
||||||
|
"Security basics: antivirus, updates and safer passwords",
|
||||||
|
"Software installation and configuration",
|
||||||
|
"Remote help for software problems, without leaving home or the office",
|
||||||
|
],
|
||||||
|
prices: [
|
||||||
|
{ item: "Onsite or remote support", price: "$35 an hour" },
|
||||||
|
{ item: "Onsite travel fee", price: "Depends on distance. Ask for a quote." },
|
||||||
|
{ item: "Moving files to a new computer", price: "from $45" },
|
||||||
|
{ item: "New computer setup", price: "from $35" },
|
||||||
|
],
|
||||||
|
faqs: [
|
||||||
|
{
|
||||||
|
question: "Do you support small businesses?",
|
||||||
|
answer:
|
||||||
|
"Yes. I help small businesses with networks, email, Microsoft 365 and Google Workspace, backups, printers and new computers, onsite or remotely, at $35 an hour.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
question: "How does remote support work?",
|
||||||
|
answer:
|
||||||
|
"With your permission, I connect to your computer over the internet and fix the problem from here. It works for most software problems. Hardware problems need an onsite visit or a drop-off.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
question: "Do you charge for coming to me?",
|
||||||
|
answer:
|
||||||
|
"Yes, there's a travel fee for onsite visits, based on distance. Get in touch with your suburb and I'll give you a quote.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
question: "Can you set up my new computer and move my files across?",
|
||||||
|
answer:
|
||||||
|
"Yes. Moving files to a new computer starts from $45, and I can set up your email, printer and software while I'm at it.",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
testimonial: "Marlies",
|
||||||
|
related: ["computer-repair", "computer-upgrades", "virus-removal"],
|
||||||
|
},
|
||||||
|
};
|
||||||
Reference in new issue
Block a user