+ Book your tax, insurance, or bookkeeping appointment
+
+
+ Choose a convenient time for an in‑person or virtual appointment.
+ Use the form below to tell us what you need and which office you
+ prefer, and we'll follow up to confirm the details.
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
diff --git a/src/app/contact/page.tsx b/src/app/contact/page.tsx
new file mode 100644
index 0000000..f7e5520
--- /dev/null
+++ b/src/app/contact/page.tsx
@@ -0,0 +1,43 @@
+import { ContactForm } from "@/components/contact-form";
+import { LocationsSection } from "@/components/locations-section";
+
+export default function ContactPage() {
+ return (
+
+
+
+
+
+ Contact
+
+
+ We're here to help
+
+
+ Have a question about your taxes, insurance, or bookkeeping? Send
+ us a message and our team will respond as soon as possible.
+
+
+
+
+
+
+ Phone & email
+
+
+ You can also reach us by phone or email using the office
+ details below.
+
+
+ For time‑sensitive questions during tax season, calling one of
+ our offices is usually the fastest way to get help.
+
+
+
+
+
+
+
+ );
+}
+
diff --git a/src/app/globals.css b/src/app/globals.css
index a8da733..53d78b4 100644
--- a/src/app/globals.css
+++ b/src/app/globals.css
@@ -121,9 +121,14 @@
@apply border-border outline-ring/50;
}
body {
+ font-family: var(--font-sans), system-ui, -apple-system, sans-serif;
@apply bg-background text-foreground;
}
html {
- @apply font-sans;
+ font-family: var(--font-sans), system-ui, -apple-system, sans-serif;
}
+}
+
+.font-serif {
+ font-family: var(--font-display), "Playfair Display", serif;
}
\ No newline at end of file
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index f7fa87e..e86f5a7 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -1,20 +1,24 @@
import type { Metadata } from "next";
-import { Geist, Geist_Mono } from "next/font/google";
+import { Inter, Playfair_Display } from "next/font/google";
import "./globals.css";
+import { SiteHeader } from "@/components/site-header";
+import { SiteFooter } from "@/components/site-footer";
+import { FloatingCallButton } from "@/components/floating-call-button";
-const geistSans = Geist({
- variable: "--font-geist-sans",
+const sans = Inter({
subsets: ["latin"],
+ variable: "--font-sans",
});
-const geistMono = Geist_Mono({
- variable: "--font-geist-mono",
+export const playfair = Playfair_Display({
subsets: ["latin"],
+ variable: "--font-display",
});
export const metadata: Metadata = {
- title: "Create Next App",
- description: "Generated by create next app",
+ title: "Ghion Financial — Tax, Insurance & Bookkeeping",
+ description:
+ "Ghion Financial provides trusted income tax preparation, insurance services, and bookkeeping for individuals, families, and businesses across Virginia and Maryland.",
};
export default function RootLayout({
@@ -25,9 +29,14 @@ export default function RootLayout({
return (
- {children}
+
+
+ {children}
+
+
+
);
diff --git a/src/app/page.tsx b/src/app/page.tsx
index 295f8fd..e222f56 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -1,65 +1,17 @@
-import Image from "next/image";
+import { Hero } from "@/components/hero";
+import { ServicesSection } from "@/components/services-section";
+import { AppointmentCards } from "@/components/appointment-cards";
+import { LocationsSection } from "@/components/locations-section";
+import { ReviewsSection } from "@/components/reviews-section";
export default function Home() {
return (
-
-
-
-
-
- To get started, edit the page.tsx file.
-
-
- Looking for a starting point or more instructions? Head over to{" "}
-
- Templates
- {" "}
- or the{" "}
-
- Learning
- {" "}
- center.
-
+ <>
+
+
+
+
+
+ >
);
}
diff --git a/src/components/appointment-cards.tsx b/src/components/appointment-cards.tsx
new file mode 100644
index 0000000..e8ff6f9
--- /dev/null
+++ b/src/components/appointment-cards.tsx
@@ -0,0 +1,76 @@
+import Link from "next/link";
+import { offices } from "@/lib/site-config";
+import { Button } from "@/components/ui/button";
+
+export function AppointmentCards() {
+ return (
+
+
+
+
+
+ Book an appointment in minutes
+
+
+ Choose the office that is most convenient for you. We offer
+ in‑person and virtual appointments for tax preparation,
+ insurance, and bookkeeping.
+
+
+
+ Serving Virginia & Maryland clients year‑round.
+
+ This space is reserved for an embedded scheduling tool (such as
+ Calendly or a similar service). For now, please use the form on this
+ page or call one of our offices to request an appointment time.
+
+
+ );
+}
+
diff --git a/src/components/floating-call-button.tsx b/src/components/floating-call-button.tsx
new file mode 100644
index 0000000..b1145f6
--- /dev/null
+++ b/src/components/floating-call-button.tsx
@@ -0,0 +1,22 @@
+"use client";
+
+import { offices } from "@/lib/site-config";
+
+export function FloatingCallButton() {
+ const vaOffice = offices.find((o) => o.id === "va");
+
+ if (!vaOffice) return null;
+
+ return (
+
+
+
+
+ Call Ghion Financial
+
+ );
+}
+
diff --git a/src/components/hero.tsx b/src/components/hero.tsx
new file mode 100644
index 0000000..d4ce4c2
--- /dev/null
+++ b/src/components/hero.tsx
@@ -0,0 +1,65 @@
+import Link from "next/link";
+import { Button } from "@/components/ui/button";
+
+export function Hero() {
+ return (
+
+
+
+
+ Tax & Insurance Experts in the DMV
+
+
+
+ TAX & CPA
+
+
+ BOOKKEEPING
+
+
+ + SERVICES
+
+
+
+ At Ghion Financial, we help individuals, families, and businesses
+ with accurate income tax preparation, smart insurance choices, and
+ reliable bookkeeping so you can focus on what matters most.
+
+
+
+
+
+
+
+
+ Why clients choose us
+
+
+
+
15Y+
+
Experience in tax & CPA services
+
+
+
150+
+
Businesses & families supported
+
+
+
+ Serving clients across Virginia and Maryland with in‑person and
+ virtual appointments.
+
+
+
+
+ );
+}
+
diff --git a/src/components/locations-section.tsx b/src/components/locations-section.tsx
new file mode 100644
index 0000000..60bf162
--- /dev/null
+++ b/src/components/locations-section.tsx
@@ -0,0 +1,77 @@
+import { offices } from "@/lib/site-config";
+
+export function LocationsSection() {
+ return (
+
+
+
+
+
+ Visit one of our offices
+
+
+ Convenient locations in Virginia and Maryland, with options for
+ virtual appointments if you prefer to meet online.
+
+
+ );
+}
+
diff --git a/src/components/services-section.tsx b/src/components/services-section.tsx
new file mode 100644
index 0000000..179c54c
--- /dev/null
+++ b/src/components/services-section.tsx
@@ -0,0 +1,71 @@
+export function ServicesSection() {
+ const services = [
+ {
+ id: "tax",
+ title: "Income Tax Preparation",
+ description:
+ "Accurate, timely filing for individuals, families, and small businesses with a focus on maximizing your refund and staying compliant.",
+ bullets: ["Personal & business returns", "Multi‑state and amended returns"],
+ },
+ {
+ id: "insurance",
+ title: "Insurance Services",
+ description:
+ "Guidance on selecting health, life, and other insurance coverage that fits your needs and budget.",
+ bullets: ["Health & ObamaCare guidance", "Coverage tailored to your situation"],
+ },
+ {
+ id: "bookkeeping",
+ title: "Bookkeeping Services",
+ description:
+ "Reliable bookkeeping that keeps your records organized and ready when tax time comes.",
+ bullets: ["Monthly reports", "Small business friendly"],
+ },
+ ];
+
+ return (
+
+
+
+
+ Services tailored to your financial life
+
+
+ Whether you are filing as an individual, supporting your family, or
+ running a business, Ghion Financial provides services designed to
+ meet you where you are.
+
+
+
+ {services.map((service) => (
+
+
+
+ {service.title}
+
+
+ {service.description}
+
+
+ {service.bullets.map((item) => (
+
• {item}
+ ))}
+
+
+
+ Book an appointment to get started →
+
+
+ ))}
+
+
+
+ );
+}
+
diff --git a/src/components/site-footer.tsx b/src/components/site-footer.tsx
new file mode 100644
index 0000000..ff37991
--- /dev/null
+++ b/src/components/site-footer.tsx
@@ -0,0 +1,89 @@
+import Link from "next/link";
+import { offices } from "@/lib/site-config";
+
+export function SiteFooter() {
+ return (
+
+ );
+}
+
diff --git a/src/components/site-header.tsx b/src/components/site-header.tsx
new file mode 100644
index 0000000..4d3cab6
--- /dev/null
+++ b/src/components/site-header.tsx
@@ -0,0 +1,111 @@
+"use client";
+
+import Link from "next/link";
+import { useState } from "react";
+import { offices } from "@/lib/site-config";
+import { Button } from "@/components/ui/button";
+
+export function SiteHeader() {
+ const vaOffice = offices.find((o) => o.id === "va");
+ const [open, setOpen] = useState(false);
+
+ return (
+
+