diff --git a/src/app/about/page.js b/src/app/about/page.js new file mode 100644 index 0000000..bc570f9 --- /dev/null +++ b/src/app/about/page.js @@ -0,0 +1,86 @@ +import Link from "next/link"; +import HeaderSm from "../components/HeaderSm"; +import CtaBand from "../components/CtaBand"; +import { business, pageMetadata } from "@/lib/site"; +import { areas } from "@/lib/areas"; + +export const metadata = pageMetadata({ + title: "About John | Te Atatu Computers", + description: + "Te Atatu Computers is John, a local computer repairer on Te Atatū Peninsula. One person, straight answers and a price before any work starts.", + path: "/about", +}); + +const areaSlugs = Object.fromEntries(areas.map(({ name, slug }) => [name, slug])); + +export default function AboutPage() { + return ( +
+ + +
+

+ Te Atatu Computers is me, {business.ownerName}. I fix laptops and + PCs, upgrade slow computers, remove viruses and help homes and small + businesses with their IT, from my base on Te Atatū Peninsula. +

+

+ Because it's just me, the person you call or text is the person + who fixes your computer. There's no front desk and no call + centre, and you won't have to explain the problem twice. +

+

+ I keep things simple: a $35 diagnosis, a clear price before I start, + and if I can't fix it, you don't pay the diagnosis fee. +

+
+ +
+

How I work

+
    +
  • + Drop-off at {business.address.street},{" "} + {business.address.suburb}, by appointment. +
  • +
  • + Onsite visits and pickup across my service area, + with a travel fee based on distance. +
  • +
  • + Remote support for software problems. +
  • +
  • + Hours: Monday to Friday, 9am to 6pm. Weekends by + appointment. +
  • +
  • + I work on Windows laptops and PCs, Chromebooks and custom-built + computers. I don't repair Apple devices. +
  • +
+
+ +
+

Where I work

+
    + {business.serviceArea.map((name) => ( +
  • + {areaSlugs[name] ? ( + + {name} + + ) : ( + name + )} +
  • + ))} +
+
+ + +
+ ); +} diff --git a/src/app/areas/[suburb]/page.js b/src/app/areas/[suburb]/page.js new file mode 100644 index 0000000..c9f341a --- /dev/null +++ b/src/app/areas/[suburb]/page.js @@ -0,0 +1,131 @@ +import Link from "next/link"; +import { notFound } from "next/navigation"; +import { ArrowRight, MessageSquare, Phone } from "lucide-react"; +import HeaderSm from "../../components/HeaderSm"; +import Button from "../../components/Button"; +import CtaBand from "../../components/CtaBand"; +import FaqList from "../../components/FaqList"; +import JsonLd from "../../components/JsonLd"; +import { areas, getArea } from "@/lib/areas"; +import { services } from "@/lib/services"; +import { business, links, pageMetadata, serviceSchema } from "@/lib/site"; + +export const dynamicParams = false; + +export function generateStaticParams() { + return areas.map(({ slug }) => ({ suburb: slug })); +} + +export async function generateMetadata({ params }) { + const area = getArea((await params).suburb); + return pageMetadata({ + title: `Computer Repair ${area.name} | Te Atatu Computers`, + description: `Laptop & PC repairs, upgrades, virus removal and IT support in ${area.name}. $35 diagnosis, no fix no fee. Call or text ${business.phone}.`, + path: `/areas/${area.slug}`, + }); +} + +export default async function AreaPage({ params }) { + const area = getArea((await params).suburb); + if (!area) notFound(); + + const faqs = [ + area.faq, + { + question: "How much will it cost?", + answer: + "A diagnosis is $35, and if I can't fix it you don't pay it. Labour is $35 an hour and parts are extra. I'll tell you the cost before I start.", + }, + ]; + + return ( +
+ + + +
+

{area.intro}

+
+ + +
+
+ +
+

+ Getting your computer to me +

+

{area.gettingThere}

+

+ I work Monday to Friday, 9am to 6pm, and weekends by appointment. + Most repairs are done within 24–48 hours, although this isn't + guaranteed. +

+
+ +
+

+ What I can help with in {area.name} +

+
    + {Object.entries(services).map(([slug, service]) => ( +
  • + + {service.name} +
  • + ))} +
+

+ See all prices on the{" "} + + pricing page + + . I don't repair Apple devices. +

+
+ +
+

Questions

+ +
+ + + +
+

Other areas I serve

+
    + {areas + .filter(({ slug }) => slug !== area.slug) + .map(({ slug, name }) => ( +
  • + + {name} + +
  • + ))} +
+
+
+ ); +} diff --git a/src/app/business/page.js b/src/app/business/page.js new file mode 100644 index 0000000..eaae0f6 --- /dev/null +++ b/src/app/business/page.js @@ -0,0 +1,159 @@ +import Link from "next/link"; +import { Check, MessageSquare, Phone } from "lucide-react"; +import HeaderSm from "../components/HeaderSm"; +import Button from "../components/Button"; +import CtaBand from "../components/CtaBand"; +import FaqList from "../components/FaqList"; +import JsonLd from "../components/JsonLd"; +import { + business, + businessPlan, + links, + pageMetadata, + serviceSchema, +} from "@/lib/site"; + +const page = { + title: "Small Business IT Support Plan West Auckland", + description: + "IT support for West Auckland small businesses: $65 a month for 2 hours of remote or onsite help. No lock-in. Wi-Fi, email, Microsoft 365, backups.", + path: "/business", +}; + +export const metadata = pageMetadata(page); + +const covered = [ + "Wi-Fi, routers and network problems", + "Email setup and problems", + "Microsoft 365 and Google Workspace accounts", + "Printers and scanners", + "New computer setup and moving files across", + "Backups for your business files", + "Security basics: antivirus, updates and passwords", + "Software installation and everyday troubleshooting", +]; + +const faqs = [ + { + question: "What happens if I need more than 2 hours in a month?", + answer: + "Extra time is charged at the normal $35 an hour.", + }, + { + question: "Do unused hours carry over?", + answer: + "No. The 2 hours are for that month and don't roll over to the next one.", + }, + { + question: "Is there a contract?", + answer: "No lock-in. You can cancel any time.", + }, + { + question: "Do I have to be on the plan?", + answer: + "No. You can also book support whenever you need it at $35 an hour, onsite or remote.", + }, +]; + +export default function BusinessPage() { + return ( +
+ + + +
+

+ Most small businesses don't need a full-time IT person. They + need someone local to call when the Wi-Fi drops, email stops + working or a new staff member needs a laptop set up. +

+

+ I support small businesses around Te Atatū and West Auckland, onsite + or remotely. You deal with me directly, every time. +

+
+ + +
+
+ +
+
+

Business IT plan

+

+ + {businessPlan.price} + {" "} + a month +

+
    + {businessPlan.includes.map((item) => ( +
  • +
  • + ))} +
+

{businessPlan.terms}

+
+

+ Prefer to pay as you go? Support is $35 an hour, onsite or remote. +

+
+ +
+

What's covered

+
    + {covered.map((item) => ( +
  • +
  • + ))} +
+

+ Hardware repairs and upgrades are covered too. Parts are extra. See{" "} + + IT support + {" "} + and{" "} + + computer repairs + + . +

+
+ +
+

Questions

+ +
+ + +
+ ); +} diff --git a/src/app/components/Footer.js b/src/app/components/Footer.js index 3f804e7..d6f4849 100644 --- a/src/app/components/Footer.js +++ b/src/app/components/Footer.js @@ -1,43 +1,94 @@ +import Link from "next/link"; +import { Mail, MapPin, Phone } from "lucide-react"; +import { business, links } from "@/lib/site"; +import { services } from "@/lib/services"; +import { areas } from "@/lib/areas"; + +const pages = [ + { href: "/pricing", label: "Pricing" }, + { href: "/business", label: "Business IT plans" }, + { href: "/windows-10", label: "Windows 10 help" }, + { href: "/about", label: "About" }, + { href: "/contact", label: "Contact" }, +]; + export default function Footer() { + const { address } = business; return ( -