Add complete project files
|
|
@ -0,0 +1,12 @@
|
|||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
module.exports = {
|
||||
extends: ['next/core-web-vitals'],
|
||||
rules: {
|
||||
'@next/next/no-img-element': 'off',
|
||||
'prefer-const': 'error',
|
||||
'no-var': 'error',
|
||||
},
|
||||
};
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
* text=auto eol=lf
|
||||
*.{cmd,[cC][mM][dD]} text eol=crlf
|
||||
*.{bat,[bB][aA][tT]} text eol=crlf
|
||||
*.{js,jsx,ts,tsx,json,css,scss,md} text eol=lf
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main, develop]
|
||||
pull_request:
|
||||
branches: [main]
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [18.x, 20.x]
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'npm'
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Run linting
|
||||
run: npm run lint
|
||||
|
||||
- name: Run type checking
|
||||
run: npm run type-check
|
||||
|
||||
- name: Check formatting
|
||||
run: npm run format:check
|
||||
|
||||
- name: Build application
|
||||
run: npm run build
|
||||
|
||||
deploy:
|
||||
needs: test
|
||||
runs-on: ubuntu-latest
|
||||
if: github.ref == 'refs/heads/main'
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Use Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20.x'
|
||||
cache: 'npm'
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Build application
|
||||
run: npm run build
|
||||
env:
|
||||
SITE_URL: ${{ secrets.SITE_URL }}
|
||||
CONTACT_TO_EMAIL: ${{ secrets.CONTACT_TO_EMAIL }}
|
||||
|
||||
# Add deployment steps here based on your hosting provider
|
||||
# Example for Vercel:
|
||||
# - name: Deploy to Vercel
|
||||
# uses: amondnet/vercel-action@v25
|
||||
# with:
|
||||
# vercel-token: ${{ secrets.VERCEL_TOKEN }}
|
||||
# vercel-org-id: ${{ secrets.ORG_ID }}
|
||||
# vercel-project-id: ${{ secrets.PROJECT_ID }}
|
||||
# vercel-args: '--prod'
|
||||
|
|
@ -0,0 +1,87 @@
|
|||
# Dependencies
|
||||
node_modules/
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
|
||||
# Next.js
|
||||
.next/
|
||||
out/
|
||||
build/
|
||||
dist/
|
||||
|
||||
# Environment variables
|
||||
.env
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
|
||||
# Vercel
|
||||
.vercel
|
||||
|
||||
# TypeScript
|
||||
*.tsbuildinfo
|
||||
next-env.d.ts
|
||||
|
||||
# IDE
|
||||
.vscode/
|
||||
.idea/
|
||||
*.swp
|
||||
*.swo
|
||||
|
||||
# OS
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
|
||||
# Runtime data
|
||||
pids
|
||||
*.pid
|
||||
*.seed
|
||||
*.pid.lock
|
||||
|
||||
# Coverage directory used by tools like istanbul
|
||||
coverage/
|
||||
|
||||
# Dependency directories
|
||||
jspm_packages/
|
||||
|
||||
# Optional npm cache directory
|
||||
.npm
|
||||
|
||||
# Optional eslint cache
|
||||
.eslintcache
|
||||
|
||||
# Microbundle cache
|
||||
.rpt2_cache/
|
||||
.rts2_cache_cjs/
|
||||
.rts2_cache_es/
|
||||
.rts2_cache_umd/
|
||||
|
||||
# Optional REPL history
|
||||
.node_repl_history
|
||||
|
||||
# Output of 'npm pack'
|
||||
*.tgz
|
||||
|
||||
# Yarn Integrity file
|
||||
.yarn-integrity
|
||||
|
||||
# parcel-bundler cache (https://parceljs.org/)
|
||||
.cache
|
||||
.parcel-cache
|
||||
|
||||
# Stores VSCode versions used for testing VSCode extensions
|
||||
.vscode-test
|
||||
|
||||
# yarn v2
|
||||
.yarn/cache
|
||||
.yarn/unplugged
|
||||
.yarn/build-state.yml
|
||||
.yarn/install-state.gz
|
||||
.pnp.*
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
#!/usr/bin/env sh
|
||||
. "$(dirname -- "$0")/_/husky.sh"
|
||||
|
||||
npx lint-staged
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
node_modules
|
||||
.next
|
||||
build
|
||||
dist
|
||||
public
|
||||
*.min.js
|
||||
*.min.css
|
||||
package-lock.json
|
||||
yarn.lock
|
||||
pnpm-lock.yaml
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"semi": true,
|
||||
"trailingComma": "es5",
|
||||
"singleQuote": true,
|
||||
"printWidth": 80,
|
||||
"tabWidth": 2,
|
||||
"useTabs": false
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
# Multi-stage build for production
|
||||
FROM node:22-alpine AS deps
|
||||
WORKDIR /app
|
||||
COPY package*.json ./
|
||||
RUN npm ci --only=production
|
||||
|
||||
FROM node:22-alpine AS builder
|
||||
WORKDIR /app
|
||||
COPY package*.json ./
|
||||
RUN npm ci
|
||||
COPY . .
|
||||
RUN npm run build
|
||||
|
||||
FROM node:22-alpine AS runner
|
||||
WORKDIR /app
|
||||
|
||||
ENV NODE_ENV=production
|
||||
ENV PORT=3000
|
||||
|
||||
# Create non-root user
|
||||
RUN addgroup --system --gid 1001 nodejs
|
||||
RUN adduser --system --uid 1001 nextjs
|
||||
|
||||
# Copy built application
|
||||
COPY --from=builder /app/public ./public
|
||||
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
|
||||
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
|
||||
|
||||
USER nextjs
|
||||
|
||||
EXPOSE 3000
|
||||
|
||||
ENV PORT=3000
|
||||
ENV HOSTNAME="0.0.0.0"
|
||||
|
||||
# Health check
|
||||
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
||||
CMD curl -f http://localhost:3000/api/health || exit 1
|
||||
|
||||
CMD ["node", "server.js"]
|
||||
|
|
@ -0,0 +1,307 @@
|
|||
import type { Metadata } from 'next';
|
||||
import { CTASection } from '@/components/cta-section';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'About Hampton, Brown & Associates, PC',
|
||||
description: 'Learn about our team of experienced CPAs and our commitment to helping clients achieve their economic goals through federal tax services and financial planning in Corpus Christi, Texas.',
|
||||
openGraph: {
|
||||
title: 'About Hampton, Brown & Associates, PC',
|
||||
description: 'Learn about our team of experienced CPAs and our commitment to helping clients achieve their economic goals.',
|
||||
images: ['/images/about-partners.jpg'],
|
||||
},
|
||||
};
|
||||
|
||||
export default function AboutPage() {
|
||||
return (
|
||||
<>
|
||||
{/* Hero */}
|
||||
<section className="bg-navy py-16 sm:py-24">
|
||||
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
|
||||
<h1 className="text-4xl font-bold tracking-tight text-cloud sm:text-5xl mb-6">
|
||||
About Hampton, Brown & Associates
|
||||
</h1>
|
||||
<p className="text-xl text-cloud/90 max-w-3xl mx-auto mb-8">
|
||||
Three decades of trusted CPA services, built on clear communication, ethical practices, and genuine commitment to our clients' financial success.
|
||||
</p>
|
||||
<button className="bg-cloud text-navy px-8 py-3 rounded-lg font-semibold hover:bg-cloud/90 transition-colors border-2 border-cloud">
|
||||
Learn More About Our Team
|
||||
</button>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* Our Story Section */}
|
||||
<section className="bg-cloud py-16 sm:py-20">
|
||||
<div className="mx-auto max-w-7xl px-4 lg:px-6">
|
||||
<div className="grid grid-cols-1 lg:grid-cols-2 gap-16 items-center">
|
||||
<div>
|
||||
<h2 className="text-3xl font-bold tracking-tight text-ink sm:text-4xl mb-6">
|
||||
Our Story
|
||||
</h2>
|
||||
<div className="space-y-6 text-lg text-slate">
|
||||
<p>
|
||||
Founded in 1992 by Jerry Hampton and Cheryl Brown, Hampton, Brown & Associates began with a simple mission: to provide Corpus Christi businesses and individuals with proactive, planning-focused accounting and financial services.
|
||||
</p>
|
||||
<p>
|
||||
Over three decades later, we've built our reputation on clear communication, ethical practices, and a genuine commitment to our clients' financial success. We don't just prepare your taxes—we help you plan for the future.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="bg-sand p-8 rounded-lg text-center">
|
||||
<div className="flex items-center justify-center mb-4">
|
||||
<div className="flex h-16 w-16 items-center justify-center rounded-full bg-teal">
|
||||
<svg className="h-8 w-8 text-cloud" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z" />
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
<div className="text-4xl font-bold text-teal mb-2">32+</div>
|
||||
<div className="text-lg font-semibold text-ink">Years of Service</div>
|
||||
<div className="text-slate">Established 1992</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* Our Values Section */}
|
||||
<section className="bg-sand py-16 sm:py-20">
|
||||
<div className="mx-auto max-w-7xl px-4 lg:px-6">
|
||||
<div className="text-center mb-16">
|
||||
<h2 className="text-3xl font-bold tracking-tight text-ink sm:text-4xl mb-4">
|
||||
Our Values
|
||||
</h2>
|
||||
<p className="text-lg text-slate max-w-3xl mx-auto">
|
||||
These core principles guide everything we do and every relationship we build.
|
||||
</p>
|
||||
</div>
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-8">
|
||||
<div className="bg-cloud p-8 rounded-lg text-center">
|
||||
<div className="flex items-center justify-center mb-4">
|
||||
<div className="flex h-12 w-12 items-center justify-center rounded-full bg-teal">
|
||||
<svg className="h-6 w-6 text-cloud" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z" />
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
<h3 className="text-xl font-semibold text-ink mb-3">Planning-First Approach</h3>
|
||||
<p className="text-slate">
|
||||
We believe in proactive planning rather than reactive solutions. Every strategy is designed with your long-term success in mind.
|
||||
</p>
|
||||
</div>
|
||||
<div className="bg-cloud p-8 rounded-lg text-center">
|
||||
<div className="flex items-center justify-center mb-4">
|
||||
<div className="flex h-12 w-12 items-center justify-center rounded-full bg-teal">
|
||||
<svg className="h-6 w-6 text-cloud" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z" />
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
<h3 className="text-xl font-semibold text-ink mb-3">Clear Communication</h3>
|
||||
<p className="text-slate">
|
||||
No jargon, no confusion. We explain complex financial matters in plain English so you can make informed decisions.
|
||||
</p>
|
||||
</div>
|
||||
<div className="bg-cloud p-8 rounded-lg text-center">
|
||||
<div className="flex items-center justify-center mb-4">
|
||||
<div className="flex h-12 w-12 items-center justify-center rounded-full bg-teal">
|
||||
<svg className="h-6 w-6 text-cloud" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z" />
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
<h3 className="text-xl font-semibold text-ink mb-3">Ethical Standards</h3>
|
||||
<p className="text-slate">
|
||||
Our commitment to integrity and professional ethics guides every client relationship and business decision we make.
|
||||
</p>
|
||||
</div>
|
||||
<div className="bg-cloud p-8 rounded-lg text-center">
|
||||
<div className="flex items-center justify-center mb-4">
|
||||
<div className="flex h-12 w-12 items-center justify-center rounded-full bg-teal">
|
||||
<svg className="h-6 w-6 text-cloud" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z" />
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
<h3 className="text-xl font-semibold text-ink mb-3">Responsive Service</h3>
|
||||
<p className="text-slate">
|
||||
When you need us, we're here. Quick response times and proactive communication are fundamental to our service.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* Our Journey Timeline */}
|
||||
<section className="bg-cloud py-16 sm:py-20">
|
||||
<div className="mx-auto max-w-7xl px-4 lg:px-6">
|
||||
<div className="text-center mb-16">
|
||||
<h2 className="text-3xl font-bold tracking-tight text-ink sm:text-4xl mb-4">
|
||||
Our Journey
|
||||
</h2>
|
||||
<p className="text-lg text-slate max-w-3xl mx-auto">
|
||||
Three decades of growth, service, and commitment to our clients.
|
||||
</p>
|
||||
</div>
|
||||
<div className="space-y-8">
|
||||
<div className="flex items-start space-x-6">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-12 w-12 items-center justify-center rounded-full bg-teal text-cloud font-bold">
|
||||
1992
|
||||
</div>
|
||||
</div>
|
||||
<div className="bg-sand p-6 rounded-lg flex-1">
|
||||
<h3 className="text-xl font-semibold text-ink mb-2">Firm Founded</h3>
|
||||
<p className="text-slate">
|
||||
Jerry Hampton and Cheryl Brown established the firm with a vision to provide comprehensive CPA services to Corpus Christi.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex items-start space-x-6">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-12 w-12 items-center justify-center rounded-full bg-teal text-cloud font-bold">
|
||||
2000
|
||||
</div>
|
||||
</div>
|
||||
<div className="bg-sand p-6 rounded-lg flex-1">
|
||||
<h3 className="text-xl font-semibold text-ink mb-2">Expanded Services</h3>
|
||||
<p className="text-slate">
|
||||
Added estate planning and financial advisory services to better serve our growing client base.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex items-start space-x-6">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-12 w-12 items-center justify-center rounded-full bg-teal text-cloud font-bold">
|
||||
2010
|
||||
</div>
|
||||
</div>
|
||||
<div className="bg-sand p-6 rounded-lg flex-1">
|
||||
<h3 className="text-xl font-semibold text-ink mb-2">500+ Clients</h3>
|
||||
<p className="text-slate">
|
||||
Reached milestone of serving over 500 individual and business clients throughout South Texas.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex items-start space-x-6">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-12 w-12 items-center justify-center rounded-full bg-teal text-cloud font-bold">
|
||||
2024
|
||||
</div>
|
||||
</div>
|
||||
<div className="bg-sand p-6 rounded-lg flex-1">
|
||||
<h3 className="text-xl font-semibold text-ink mb-2">Continued Excellence</h3>
|
||||
<p className="text-slate">
|
||||
Over three decades of trusted service with a commitment to innovation and client success.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* Leadership Team */}
|
||||
<section className="bg-sand py-16 sm:py-20">
|
||||
<div className="mx-auto max-w-7xl px-4 lg:px-6">
|
||||
<div className="text-center mb-16">
|
||||
<h2 className="text-3xl font-bold tracking-tight text-ink sm:text-4xl mb-4">
|
||||
Leadership Team
|
||||
</h2>
|
||||
<p className="text-lg text-slate max-w-3xl mx-auto">
|
||||
Meet the experienced CPAs who founded and continue to lead our firm.
|
||||
</p>
|
||||
</div>
|
||||
<div className="grid grid-cols-1 lg:grid-cols-2 gap-8">
|
||||
<div className="bg-cloud p-8 rounded-lg text-center">
|
||||
<div className="flex items-center justify-center mb-6">
|
||||
<div className="flex h-20 w-20 items-center justify-center rounded-full bg-teal text-2xl font-bold text-cloud">
|
||||
JH
|
||||
</div>
|
||||
</div>
|
||||
<h3 className="text-2xl font-bold text-ink mb-2">Jerry Hampton, CPA</h3>
|
||||
<p className="text-teal font-semibold mb-4">Managing Partner & Founder</p>
|
||||
<p className="text-slate mb-6">
|
||||
With over 30 years of experience in public accounting, Jerry specializes in complex tax strategies and business advisory services. His expertise helps clients minimize tax liability while maximizing their economic potential.
|
||||
</p>
|
||||
<div className="space-y-2 text-sm text-slate">
|
||||
<div className="flex items-center justify-center">
|
||||
<div className="w-2 h-2 bg-teal rounded-full mr-3"></div>
|
||||
CPA License: Texas State Board
|
||||
</div>
|
||||
<div className="flex items-center justify-center">
|
||||
<div className="w-2 h-2 bg-teal rounded-full mr-3"></div>
|
||||
AICPA Member
|
||||
</div>
|
||||
<div className="flex items-center justify-center">
|
||||
<div className="w-2 h-2 bg-teal rounded-full mr-3"></div>
|
||||
Specializes in Business Tax Planning
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="bg-cloud p-8 rounded-lg text-center">
|
||||
<div className="flex items-center justify-center mb-6">
|
||||
<div className="flex h-20 w-20 items-center justify-center rounded-full bg-teal text-2xl font-bold text-cloud">
|
||||
CB
|
||||
</div>
|
||||
</div>
|
||||
<h3 className="text-2xl font-bold text-ink mb-2">Cheryl Brown, CPA</h3>
|
||||
<p className="text-teal font-semibold mb-4">Partner & Founder</p>
|
||||
<p className="text-slate mb-6">
|
||||
Cheryl brings extensive expertise in estate planning, individual tax preparation, and financial planning. Her client-focused approach ensures personalized solutions that align with each client's unique goals and circumstances.
|
||||
</p>
|
||||
<div className="space-y-2 text-sm text-slate">
|
||||
<div className="flex items-center justify-center">
|
||||
<div className="w-2 h-2 bg-teal rounded-full mr-3"></div>
|
||||
CPA License: Texas State Board
|
||||
</div>
|
||||
<div className="flex items-center justify-center">
|
||||
<div className="w-2 h-2 bg-teal rounded-full mr-3"></div>
|
||||
Estate Planning Specialist
|
||||
</div>
|
||||
<div className="flex items-center justify-center">
|
||||
<div className="w-2 h-2 bg-teal rounded-full mr-3"></div>
|
||||
Personal Financial Planning
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* Mission Section */}
|
||||
<section className="bg-cloud py-16 sm:py-20">
|
||||
<div className="mx-auto max-w-7xl px-4 lg:px-6">
|
||||
<div className="text-center">
|
||||
<h2 className="text-3xl font-bold tracking-tight text-ink sm:text-4xl mb-6">
|
||||
Our Mission
|
||||
</h2>
|
||||
<p className="text-lg text-slate max-w-4xl mx-auto mb-8">
|
||||
To provide exceptional accounting, tax, and financial planning services through proactive planning, clear communication, and unwavering commitment to our clients' long-term financial success.
|
||||
</p>
|
||||
<div className="flex flex-col sm:flex-row gap-4 justify-center">
|
||||
<button className="bg-navy text-cloud px-8 py-3 rounded-lg font-semibold hover:bg-navy/90 transition-colors">
|
||||
Experience the Difference
|
||||
</button>
|
||||
<button className="border-2 border-navy text-navy px-8 py-3 rounded-lg font-semibold hover:bg-navy hover:text-cloud transition-colors">
|
||||
Meet Our Team
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<CTASection
|
||||
title="Ready to Work with Our Team?"
|
||||
description="Schedule a consultation with our experienced CPAs and discover how we can help you achieve your financial goals."
|
||||
primaryCta={{
|
||||
text: 'Schedule Consultation',
|
||||
href: '/contact',
|
||||
icon: 'phone',
|
||||
}}
|
||||
secondaryCta={{
|
||||
text: 'Learn About Our Services',
|
||||
href: '/services/public-accounting',
|
||||
}}
|
||||
variant="dark"
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,91 @@
|
|||
import { NextRequest, NextResponse } from 'next/server';
|
||||
import { contactFormSchema } from '@/lib/validations';
|
||||
import { Resend } from 'resend';
|
||||
|
||||
// Simple in-memory rate limiting (in production, use Redis or similar)
|
||||
const rateLimitMap = new Map<string, { count: number; resetTime: number }>();
|
||||
|
||||
const RATE_LIMIT_WINDOW = 60 * 1000; // 1 minute
|
||||
const RATE_LIMIT_MAX = 5; // 5 requests per minute
|
||||
|
||||
function checkRateLimit(ip: string): boolean {
|
||||
const now = Date.now();
|
||||
const record = rateLimitMap.get(ip);
|
||||
|
||||
if (!record || now > record.resetTime) {
|
||||
rateLimitMap.set(ip, { count: 1, resetTime: now + RATE_LIMIT_WINDOW });
|
||||
return true;
|
||||
}
|
||||
|
||||
if (record.count >= RATE_LIMIT_MAX) {
|
||||
return false;
|
||||
}
|
||||
|
||||
record.count++;
|
||||
return true;
|
||||
}
|
||||
|
||||
export async function POST(request: NextRequest) {
|
||||
try {
|
||||
// Rate limiting
|
||||
const ip = request.ip || request.headers.get('x-forwarded-for') || 'unknown';
|
||||
if (!checkRateLimit(ip)) {
|
||||
return NextResponse.json(
|
||||
{ error: 'Too many requests. Please try again later.' },
|
||||
{ status: 429 }
|
||||
);
|
||||
}
|
||||
|
||||
// Parse and validate request body
|
||||
const body = await request.json();
|
||||
const validatedData = contactFormSchema.parse(body);
|
||||
|
||||
// Log in development
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
console.log('Contact form submission:', validatedData);
|
||||
}
|
||||
|
||||
// Send email in production if Resend is configured
|
||||
if (process.env.NODE_ENV === 'production' && process.env.RESEND_API_KEY && process.env.CONTACT_TO_EMAIL) {
|
||||
try {
|
||||
const resend = new Resend(process.env.RESEND_API_KEY);
|
||||
|
||||
await resend.emails.send({
|
||||
from: 'Hamton Brown CPA <noreply@hamtonbrown.com>',
|
||||
to: process.env.CONTACT_TO_EMAIL,
|
||||
subject: `New Contact Form Submission from ${validatedData.name}`,
|
||||
html: `
|
||||
<h2>New Contact Form Submission</h2>
|
||||
<p><strong>Name:</strong> ${validatedData.name}</p>
|
||||
<p><strong>Email:</strong> ${validatedData.email}</p>
|
||||
${validatedData.phone ? `<p><strong>Phone:</strong> ${validatedData.phone}</p>` : ''}
|
||||
<p><strong>Message:</strong></p>
|
||||
<p>${validatedData.message}</p>
|
||||
`,
|
||||
});
|
||||
} catch (emailError) {
|
||||
console.error('Failed to send email:', emailError);
|
||||
// Don't fail the request if email fails
|
||||
}
|
||||
}
|
||||
|
||||
return NextResponse.json(
|
||||
{ message: 'Thank you for your message. We will get back to you soon.' },
|
||||
{ status: 200 }
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('Contact form error:', error);
|
||||
|
||||
if (error instanceof Error && error.name === 'ZodError') {
|
||||
return NextResponse.json(
|
||||
{ error: 'Invalid form data. Please check your inputs.' },
|
||||
{ status: 400 }
|
||||
);
|
||||
}
|
||||
|
||||
return NextResponse.json(
|
||||
{ error: 'Internal server error. Please try again later.' },
|
||||
{ status: 500 }
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,157 @@
|
|||
import type { Metadata } from 'next';
|
||||
import Image from 'next/image';
|
||||
import { Mail, Phone, MapPin, Clock } from 'lucide-react';
|
||||
import { ContactForm } from '@/components/contact-form';
|
||||
import { CTASection } from '@/components/cta-section';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Contact Us',
|
||||
description: 'Get in touch with Hamton Brown CPA for professional tax and financial services in Corpus Christi, Texas. Schedule a consultation today.',
|
||||
openGraph: {
|
||||
title: 'Contact Us',
|
||||
description: 'Get in touch with Hamton Brown CPA for professional tax and financial services.',
|
||||
images: ['/images/contact-exterior.jpg'],
|
||||
},
|
||||
};
|
||||
|
||||
export default function ContactPage() {
|
||||
return (
|
||||
<>
|
||||
{/* Hero */}
|
||||
<section className="bg-navy py-16 sm:py-24">
|
||||
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
|
||||
<h1 className="text-4xl font-bold tracking-tight text-cloud sm:text-5xl mb-6">
|
||||
Get in Touch
|
||||
</h1>
|
||||
<p className="text-xl text-cloud/90 max-w-3xl mx-auto mb-8">
|
||||
Ready to start your tax planning journey? Contact us today to schedule a consultation or ask any questions about our services.
|
||||
</p>
|
||||
<button className="bg-cloud text-navy px-8 py-3 rounded-lg font-semibold hover:bg-cloud/90 transition-colors border-2 border-cloud">
|
||||
Schedule a Consultation
|
||||
</button>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="bg-cloud py-24 sm:py-32">
|
||||
<div className="mx-auto max-w-7xl px-6 lg:px-8">
|
||||
<div className="mx-auto max-w-2xl lg:max-w-none">
|
||||
<div className="grid grid-cols-1 gap-16 lg:grid-cols-2 lg:gap-24">
|
||||
<div>
|
||||
<h2 className="text-3xl font-bold tracking-tight text-ink sm:text-4xl">
|
||||
Contact Information
|
||||
</h2>
|
||||
<p className="mt-6 text-lg leading-8 text-slate">
|
||||
We're here to help with all your tax and financial needs. Reach out to us through any of the methods below.
|
||||
</p>
|
||||
<div className="mt-8 space-y-6">
|
||||
<div className="flex items-center space-x-4">
|
||||
<div className="flex h-10 w-10 items-center justify-center rounded-lg bg-navy">
|
||||
<Phone className="h-5 w-5 text-cloud" />
|
||||
</div>
|
||||
<div>
|
||||
<p className="text-sm font-medium text-slate">Phone</p>
|
||||
<p className="text-lg font-semibold text-ink">(361) 888-7711</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex items-center space-x-4">
|
||||
<div className="flex h-10 w-10 items-center justify-center rounded-lg bg-navy">
|
||||
<Mail className="h-5 w-5 text-cloud" />
|
||||
</div>
|
||||
<div>
|
||||
<p className="text-sm font-medium text-slate">Email</p>
|
||||
<p className="text-lg font-semibold text-ink">info@hamptonbrown.com</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex items-center space-x-4">
|
||||
<div className="flex h-10 w-10 items-center justify-center rounded-lg bg-navy">
|
||||
<MapPin className="h-5 w-5 text-cloud" />
|
||||
</div>
|
||||
<div>
|
||||
<p className="text-sm font-medium text-slate">Address</p>
|
||||
<p className="text-lg font-semibold text-ink">711 N. Carancahua St, Suite 800</p>
|
||||
<p className="text-slate">Corpus Christi, TX 78401-0545</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex items-center space-x-4">
|
||||
<div className="flex h-10 w-10 items-center justify-center rounded-lg bg-navy">
|
||||
<Clock className="h-5 w-5 text-cloud" />
|
||||
</div>
|
||||
<div>
|
||||
<p className="text-sm font-medium text-slate">Business Hours</p>
|
||||
<p className="text-lg font-semibold text-ink">Monday - Friday</p>
|
||||
<p className="text-slate">9:00 AM - 5:00 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="mt-8 p-6 bg-sand rounded-lg">
|
||||
<h3 className="text-lg font-semibold text-ink mb-2">Free Consultation</h3>
|
||||
<p className="text-sm text-slate">
|
||||
Schedule a free 30-minute consultation to discuss your tax and financial needs. No obligation, just professional advice to help you make informed decisions.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<ContactForm />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="bg-sand py-24 sm:py-32">
|
||||
<div className="mx-auto max-w-7xl px-6 lg:px-8">
|
||||
<div className="mx-auto max-w-2xl lg:max-w-none">
|
||||
<div className="grid grid-cols-1 gap-16 lg:grid-cols-2 lg:gap-24">
|
||||
<div>
|
||||
<h2 className="text-3xl font-bold tracking-tight text-ink sm:text-4xl">
|
||||
Visit Our Office
|
||||
</h2>
|
||||
<p className="mt-6 text-lg leading-8 text-slate">
|
||||
Located in the heart of Corpus Christi, our office is easily accessible and provides a comfortable environment for confidential discussions about your financial matters.
|
||||
</p>
|
||||
<div className="mt-8 space-y-4">
|
||||
<div>
|
||||
<h3 className="text-lg font-semibold text-ink">Parking</h3>
|
||||
<p className="text-slate">Free parking available in our building's parking garage</p>
|
||||
</div>
|
||||
<div>
|
||||
<h3 className="text-lg font-semibold text-ink">Accessibility</h3>
|
||||
<p className="text-slate">Our office is fully accessible with elevator access and ADA-compliant facilities</p>
|
||||
</div>
|
||||
<div>
|
||||
<h3 className="text-lg font-semibold text-ink">Appointments</h3>
|
||||
<p className="text-slate">We recommend scheduling appointments in advance to ensure we can give you our full attention</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="relative">
|
||||
<Image
|
||||
src="/images/contact-office.jpg"
|
||||
alt="Professional office interior with clean desk setup"
|
||||
width={600}
|
||||
height={400}
|
||||
className="rounded-lg shadow-lg"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<CTASection
|
||||
title="Ready to Get Started?"
|
||||
description="Don't wait until tax season to start planning. Contact us today and take the first step toward better financial management."
|
||||
primaryCta={{
|
||||
text: 'Schedule Consultation',
|
||||
href: '/contact',
|
||||
icon: 'phone',
|
||||
}}
|
||||
secondaryCta={{
|
||||
text: 'Learn About Our Services',
|
||||
href: '/services/tax-planning',
|
||||
}}
|
||||
variant="dark"
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,133 @@
|
|||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
@layer base {
|
||||
:root {
|
||||
--background: 0 0% 100%;
|
||||
--foreground: 222.2 84% 4.9%;
|
||||
--card: 0 0% 100%;
|
||||
--card-foreground: 222.2 84% 4.9%;
|
||||
--popover: 0 0% 100%;
|
||||
--popover-foreground: 222.2 84% 4.9%;
|
||||
--primary: 221.2 83.2% 53.3%;
|
||||
--primary-foreground: 210 40% 98%;
|
||||
--secondary: 210 40% 96%;
|
||||
--secondary-foreground: 222.2 84% 4.9%;
|
||||
--muted: 210 40% 96%;
|
||||
--muted-foreground: 215.4 16.3% 46.9%;
|
||||
--accent: 210 40% 96%;
|
||||
--accent-foreground: 222.2 84% 4.9%;
|
||||
--destructive: 0 84.2% 60.2%;
|
||||
--destructive-foreground: 210 40% 98%;
|
||||
--border: 214.3 31.8% 91.4%;
|
||||
--input: 214.3 31.8% 91.4%;
|
||||
--ring: 221.2 83.2% 53.3%;
|
||||
--radius: 0.5rem;
|
||||
}
|
||||
|
||||
.dark {
|
||||
--background: 222.2 84% 4.9%;
|
||||
--foreground: 210 40% 98%;
|
||||
--card: 222.2 84% 4.9%;
|
||||
--card-foreground: 210 40% 98%;
|
||||
--popover: 222.2 84% 4.9%;
|
||||
--popover-foreground: 210 40% 98%;
|
||||
--primary: 217.2 91.2% 59.8%;
|
||||
--primary-foreground: 222.2 84% 4.9%;
|
||||
--secondary: 217.2 32.6% 17.5%;
|
||||
--secondary-foreground: 210 40% 98%;
|
||||
--muted: 217.2 32.6% 17.5%;
|
||||
--muted-foreground: 215 20.2% 65.1%;
|
||||
--accent: 217.2 32.6% 17.5%;
|
||||
--accent-foreground: 210 40% 98%;
|
||||
--destructive: 0 62.8% 30.6%;
|
||||
--destructive-foreground: 210 40% 98%;
|
||||
--border: 217.2 32.6% 17.5%;
|
||||
--input: 217.2 32.6% 17.5%;
|
||||
--ring: 224.3 76.3% 94.1%;
|
||||
}
|
||||
}
|
||||
|
||||
@layer base {
|
||||
* {
|
||||
@apply border-border;
|
||||
}
|
||||
body {
|
||||
@apply bg-background text-foreground;
|
||||
font-feature-settings: "rlig" 1, "calt" 1;
|
||||
}
|
||||
}
|
||||
|
||||
@layer components {
|
||||
.container {
|
||||
@apply mx-auto max-w-7xl px-4 sm:px-6 lg:px-8;
|
||||
}
|
||||
|
||||
.prose {
|
||||
@apply max-w-none;
|
||||
}
|
||||
|
||||
.prose h1 {
|
||||
@apply text-4xl font-bold text-ink mb-6;
|
||||
}
|
||||
|
||||
.prose h2 {
|
||||
@apply text-3xl font-bold text-ink mb-4 mt-8;
|
||||
}
|
||||
|
||||
.prose h3 {
|
||||
@apply text-2xl font-semibold text-ink mb-3 mt-6;
|
||||
}
|
||||
|
||||
.prose p {
|
||||
@apply text-slate mb-4 leading-relaxed;
|
||||
}
|
||||
|
||||
.prose ul {
|
||||
@apply list-disc list-inside mb-4 space-y-2;
|
||||
}
|
||||
|
||||
.prose li {
|
||||
@apply text-slate;
|
||||
}
|
||||
|
||||
.prose a {
|
||||
@apply text-navy hover:text-teal transition-colors;
|
||||
}
|
||||
}
|
||||
|
||||
/* Accessibility improvements */
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
*,
|
||||
*::before,
|
||||
*::after {
|
||||
animation-duration: 0.01ms !important;
|
||||
animation-iteration-count: 1 !important;
|
||||
transition-duration: 0.01ms !important;
|
||||
scroll-behavior: auto !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* Focus styles */
|
||||
.focus-visible:focus {
|
||||
outline: 2px solid #0F2740;
|
||||
outline-offset: 2px;
|
||||
}
|
||||
|
||||
/* Skip link */
|
||||
.skip-link {
|
||||
position: absolute;
|
||||
top: -40px;
|
||||
left: 6px;
|
||||
background: #0F2740;
|
||||
color: white;
|
||||
padding: 8px;
|
||||
text-decoration: none;
|
||||
border-radius: 4px;
|
||||
z-index: 1000;
|
||||
}
|
||||
|
||||
.skip-link:focus {
|
||||
top: 6px;
|
||||
}
|
||||
|
|
@ -0,0 +1,156 @@
|
|||
import type { Metadata } from 'next';
|
||||
import { Inter } from 'next/font/google';
|
||||
import './globals.css';
|
||||
import { SiteHeader } from '@/components/site-header';
|
||||
import { SiteFooter } from '@/components/site-footer';
|
||||
|
||||
const inter = Inter({ subsets: ['latin'] });
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: {
|
||||
default: 'Hampton, Brown & Associates, PC - Professional Tax Services in Corpus Christi',
|
||||
template: '%s | Hampton, Brown & Associates, PC',
|
||||
},
|
||||
description: 'Expert federal income and estate tax services, financial planning, and goal-oriented strategies in Corpus Christi, Texas. Helping clients achieve their economic goals through proactive planning.',
|
||||
keywords: ['CPA', 'tax preparation', 'tax planning', 'Corpus Christi', 'Texas', 'accounting', 'tax services', 'estate tax', 'federal tax', 'financial planning'],
|
||||
authors: [{ name: 'Hampton, Brown & Associates, PC' }],
|
||||
creator: 'Hampton, Brown & Associates, PC',
|
||||
publisher: 'Hampton, Brown & Associates, PC',
|
||||
formatDetection: {
|
||||
email: false,
|
||||
address: false,
|
||||
telephone: false,
|
||||
},
|
||||
metadataBase: new URL(process.env.SITE_URL || 'https://hamptonbrown.com'),
|
||||
alternates: {
|
||||
canonical: '/',
|
||||
},
|
||||
openGraph: {
|
||||
type: 'website',
|
||||
locale: 'en_US',
|
||||
url: '/',
|
||||
title: 'Hampton, Brown & Associates, PC - Professional Tax Services in Corpus Christi',
|
||||
description: 'Expert federal income and estate tax services, financial planning, and goal-oriented strategies in Corpus Christi, Texas.',
|
||||
siteName: 'Hampton, Brown & Associates, PC',
|
||||
images: [
|
||||
{
|
||||
url: '/images/home-hero.jpg',
|
||||
width: 1200,
|
||||
height: 630,
|
||||
alt: 'Hampton, Brown & Associates office in Corpus Christi',
|
||||
},
|
||||
],
|
||||
},
|
||||
twitter: {
|
||||
card: 'summary_large_image',
|
||||
title: 'Hampton, Brown & Associates, PC - Professional Tax Services in Corpus Christi',
|
||||
description: 'Expert federal income and estate tax services, financial planning, and goal-oriented strategies in Corpus Christi, Texas.',
|
||||
images: ['/images/home-hero.jpg'],
|
||||
},
|
||||
robots: {
|
||||
index: true,
|
||||
follow: true,
|
||||
googleBot: {
|
||||
index: true,
|
||||
follow: true,
|
||||
'max-video-preview': -1,
|
||||
'max-image-preview': 'large',
|
||||
'max-snippet': -1,
|
||||
},
|
||||
},
|
||||
verification: {
|
||||
google: 'your-google-verification-code',
|
||||
},
|
||||
};
|
||||
|
||||
const jsonLd = {
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'AccountingService',
|
||||
name: 'Hampton, Brown & Associates, PC',
|
||||
description: 'Expert federal income and estate tax services, financial planning, and goal-oriented strategies in Corpus Christi, Texas',
|
||||
url: 'https://hamptonbrown.com',
|
||||
telephone: '+1-361-888-7711',
|
||||
email: 'info@hamptonbrown.com',
|
||||
address: {
|
||||
'@type': 'PostalAddress',
|
||||
streetAddress: '711 N. Carancahua St, Suite 800',
|
||||
addressLocality: 'Corpus Christi',
|
||||
addressRegion: 'TX',
|
||||
postalCode: '78401-0545',
|
||||
addressCountry: 'US',
|
||||
},
|
||||
geo: {
|
||||
'@type': 'GeoCoordinates',
|
||||
latitude: 27.8006,
|
||||
longitude: -97.3964,
|
||||
},
|
||||
openingHours: 'Mo-Fr 09:00-17:00',
|
||||
priceRange: '$$',
|
||||
areaServed: {
|
||||
'@type': 'City',
|
||||
name: 'Corpus Christi',
|
||||
},
|
||||
serviceArea: {
|
||||
'@type': 'City',
|
||||
name: 'Corpus Christi',
|
||||
},
|
||||
hasOfferCatalog: {
|
||||
'@type': 'OfferCatalog',
|
||||
name: 'Tax Services',
|
||||
itemListElement: [
|
||||
{
|
||||
'@type': 'Offer',
|
||||
itemOffered: {
|
||||
'@type': 'Service',
|
||||
name: 'Tax Planning',
|
||||
description: 'Strategic year-round tax planning to minimize your tax burden',
|
||||
},
|
||||
},
|
||||
{
|
||||
'@type': 'Offer',
|
||||
itemOffered: {
|
||||
'@type': 'Service',
|
||||
name: 'Income Tax Preparation',
|
||||
description: 'Comprehensive individual and business tax return preparation',
|
||||
},
|
||||
},
|
||||
{
|
||||
'@type': 'Offer',
|
||||
itemOffered: {
|
||||
'@type': 'Service',
|
||||
name: 'Estate Tax Planning',
|
||||
description: 'Comprehensive estate planning to protect your legacy',
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
children,
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
return (
|
||||
<html lang="en" className="scroll-smooth">
|
||||
<head>
|
||||
<script
|
||||
type="application/ld+json"
|
||||
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
|
||||
/>
|
||||
</head>
|
||||
<body className={inter.className}>
|
||||
<a href="#main-content" className="skip-link">
|
||||
Skip to main content
|
||||
</a>
|
||||
<div className="min-h-screen flex flex-col">
|
||||
<SiteHeader />
|
||||
<main id="main-content" className="flex-1">
|
||||
{children}
|
||||
</main>
|
||||
<SiteFooter />
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,143 @@
|
|||
import type { Metadata } from 'next';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Privacy Policy',
|
||||
description: 'Privacy policy for Hamton Brown CPA. Learn how we collect, use, and protect your personal information.',
|
||||
};
|
||||
|
||||
export default function PrivacyPage() {
|
||||
return (
|
||||
<div className="bg-sand py-24 sm:py-32">
|
||||
<div className="mx-auto max-w-4xl px-6 lg:px-8">
|
||||
<div className="mx-auto max-w-2xl">
|
||||
<h1 className="text-3xl font-bold tracking-tight text-ink sm:text-4xl">
|
||||
Privacy Policy
|
||||
</h1>
|
||||
<p className="mt-6 text-lg leading-8 text-slate">
|
||||
Last updated: {new Date().toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' })}
|
||||
</p>
|
||||
|
||||
<div className="prose prose-lg mt-12">
|
||||
<h2>Introduction</h2>
|
||||
<p>
|
||||
Hamton Brown CPA ("we," "our," or "us") is committed to protecting your privacy. This Privacy Policy explains how we collect, use, disclose, and safeguard your information when you visit our website or use our services.
|
||||
</p>
|
||||
|
||||
<h2>Information We Collect</h2>
|
||||
<h3>Personal Information</h3>
|
||||
<p>
|
||||
We may collect personal information that you voluntarily provide to us when you:
|
||||
</p>
|
||||
<ul>
|
||||
<li>Contact us through our website forms</li>
|
||||
<li>Schedule consultations or appointments</li>
|
||||
<li>Engage our services</li>
|
||||
<li>Subscribe to our newsletter</li>
|
||||
<li>Upload documents through our secure portal</li>
|
||||
</ul>
|
||||
<p>
|
||||
This information may include your name, email address, phone number, mailing address, and other contact information.
|
||||
</p>
|
||||
|
||||
<h3>Tax and Financial Information</h3>
|
||||
<p>
|
||||
As part of our tax preparation and financial services, we may collect sensitive information including:
|
||||
</p>
|
||||
<ul>
|
||||
<li>Social Security numbers</li>
|
||||
<li>Tax identification numbers</li>
|
||||
<li>Financial account information</li>
|
||||
<li>Income and expense records</li>
|
||||
<li>Business financial statements</li>
|
||||
</ul>
|
||||
|
||||
<h3>Automatically Collected Information</h3>
|
||||
<p>
|
||||
When you visit our website, we may automatically collect certain information about your device, including:
|
||||
</p>
|
||||
<ul>
|
||||
<li>IP address</li>
|
||||
<li>Browser type and version</li>
|
||||
<li>Operating system</li>
|
||||
<li>Pages visited and time spent</li>
|
||||
<li>Referring website</li>
|
||||
</ul>
|
||||
|
||||
<h2>How We Use Your Information</h2>
|
||||
<p>We use the information we collect to:</p>
|
||||
<ul>
|
||||
<li>Provide and maintain our services</li>
|
||||
<li>Process and prepare tax returns</li>
|
||||
<li>Communicate with you about our services</li>
|
||||
<li>Send important updates and notifications</li>
|
||||
<li>Improve our website and services</li>
|
||||
<li>Comply with legal and regulatory requirements</li>
|
||||
</ul>
|
||||
|
||||
<h2>Information Sharing and Disclosure</h2>
|
||||
<p>
|
||||
We do not sell, trade, or otherwise transfer your personal information to third parties without your consent, except in the following circumstances:
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>Service Providers:</strong> We may share information with trusted third-party service providers who assist us in operating our business and providing services to you.</li>
|
||||
<li><strong>Legal Requirements:</strong> We may disclose information when required by law or to protect our rights and safety.</li>
|
||||
<li><strong>Business Transfers:</strong> In the event of a merger, acquisition, or sale of assets, your information may be transferred as part of the transaction.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Data Security</h2>
|
||||
<p>
|
||||
We implement appropriate technical and organizational security measures to protect your personal information against unauthorized access, alteration, disclosure, or destruction. These measures include:
|
||||
</p>
|
||||
<ul>
|
||||
<li>Encryption of sensitive data</li>
|
||||
<li>Secure data transmission protocols</li>
|
||||
<li>Access controls and authentication</li>
|
||||
<li>Regular security assessments</li>
|
||||
<li>Employee training on data protection</li>
|
||||
</ul>
|
||||
|
||||
<h2>Your Rights</h2>
|
||||
<p>You have the right to:</p>
|
||||
<ul>
|
||||
<li>Access and review your personal information</li>
|
||||
<li>Request corrections to inaccurate information</li>
|
||||
<li>Request deletion of your personal information</li>
|
||||
<li>Opt out of marketing communications</li>
|
||||
<li>File a complaint with relevant authorities</li>
|
||||
</ul>
|
||||
|
||||
<h2>Cookies and Tracking Technologies</h2>
|
||||
<p>
|
||||
Our website may use cookies and similar tracking technologies to enhance your experience. You can control cookie settings through your browser preferences.
|
||||
</p>
|
||||
|
||||
<h2>Third-Party Links</h2>
|
||||
<p>
|
||||
Our website may contain links to third-party websites. We are not responsible for the privacy practices or content of these external sites.
|
||||
</p>
|
||||
|
||||
<h2>Children's Privacy</h2>
|
||||
<p>
|
||||
Our services are not intended for children under 13 years of age. We do not knowingly collect personal information from children under 13.
|
||||
</p>
|
||||
|
||||
<h2>Changes to This Privacy Policy</h2>
|
||||
<p>
|
||||
We may update this Privacy Policy from time to time. We will notify you of any material changes by posting the new policy on our website and updating the "Last updated" date.
|
||||
</p>
|
||||
|
||||
<h2>Contact Us</h2>
|
||||
<p>
|
||||
If you have any questions about this Privacy Policy or our privacy practices, please contact us:
|
||||
</p>
|
||||
<ul>
|
||||
<li>Email: contact@hamtonbrown.com</li>
|
||||
<li>Phone: (361) 555-0123</li>
|
||||
<li>Address: 123 Business Street, Corpus Christi, TX 78401</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,130 @@
|
|||
import type { Metadata } from 'next';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Terms of Service',
|
||||
description: 'Terms of service for Hamton Brown CPA. Read our terms and conditions for using our website and services.',
|
||||
};
|
||||
|
||||
export default function TermsPage() {
|
||||
return (
|
||||
<div className="bg-sand py-24 sm:py-32">
|
||||
<div className="mx-auto max-w-4xl px-6 lg:px-8">
|
||||
<div className="mx-auto max-w-2xl">
|
||||
<h1 className="text-3xl font-bold tracking-tight text-ink sm:text-4xl">
|
||||
Terms of Service
|
||||
</h1>
|
||||
<p className="mt-6 text-lg leading-8 text-slate">
|
||||
Last updated: {new Date().toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' })}
|
||||
</p>
|
||||
|
||||
<div className="prose prose-lg mt-12">
|
||||
<h2>Agreement to Terms</h2>
|
||||
<p>
|
||||
By accessing and using the website and services of Hamton Brown CPA ("we," "our," or "us"), you accept and agree to be bound by the terms and provision of this agreement. If you do not agree to abide by the above, please do not use this service.
|
||||
</p>
|
||||
|
||||
<h2>Description of Services</h2>
|
||||
<p>
|
||||
Hamton Brown CPA provides professional tax preparation, tax planning, financial planning, and business advisory services. Our services include but are not limited to:
|
||||
</p>
|
||||
<ul>
|
||||
<li>Individual and business tax return preparation</li>
|
||||
<li>Tax planning and strategy development</li>
|
||||
<li>Estate tax planning</li>
|
||||
<li>Financial planning and advisory</li>
|
||||
<li>Business consulting services</li>
|
||||
</ul>
|
||||
|
||||
<h2>Use License</h2>
|
||||
<p>
|
||||
Permission is granted to temporarily download one copy of the materials (information or software) on Hamton Brown CPA's website for personal, non-commercial transitory viewing only. This is the grant of a license, not a transfer of title, and under this license you may not:
|
||||
</p>
|
||||
<ul>
|
||||
<li>Modify or copy the materials</li>
|
||||
<li>Use the materials for any commercial purpose or for any public display</li>
|
||||
<li>Attempt to reverse engineer any software contained on the website</li>
|
||||
<li>Remove any copyright or other proprietary notations from the materials</li>
|
||||
<li>Transfer the materials to another person or "mirror" the materials on any other server</li>
|
||||
</ul>
|
||||
|
||||
<h2>Client Responsibilities</h2>
|
||||
<p>As a client, you agree to:</p>
|
||||
<ul>
|
||||
<li>Provide accurate and complete information</li>
|
||||
<li>Respond promptly to our requests for additional information</li>
|
||||
<li>Review and approve all work before filing</li>
|
||||
<li>Pay fees in accordance with our pricing schedule</li>
|
||||
<li>Maintain the confidentiality of your account information</li>
|
||||
</ul>
|
||||
|
||||
<h2>Professional Standards</h2>
|
||||
<p>
|
||||
We are committed to maintaining the highest professional standards in accordance with:
|
||||
</p>
|
||||
<ul>
|
||||
<li>American Institute of Certified Public Accountants (AICPA) Code of Professional Conduct</li>
|
||||
<li>Internal Revenue Service (IRS) Circular 230</li>
|
||||
<li>State board of accountancy regulations</li>
|
||||
<li>Applicable federal and state laws and regulations</li>
|
||||
</ul>
|
||||
|
||||
<h2>Limitation of Liability</h2>
|
||||
<p>
|
||||
In no event shall Hamton Brown CPA or its suppliers be liable for any damages (including, without limitation, damages for loss of data or profit, or due to business interruption) arising out of the use or inability to use the materials on our website, even if we or our authorized representative has been notified orally or in writing of the possibility of such damage.
|
||||
</p>
|
||||
|
||||
<h2>Disclaimer</h2>
|
||||
<p>
|
||||
The materials on Hamton Brown CPA's website are provided on an 'as is' basis. We make no warranties, expressed or implied, and hereby disclaim and negate all other warranties including without limitation, implied warranties or conditions of merchantability, fitness for a particular purpose, or non-infringement of intellectual property or other violation of rights.
|
||||
</p>
|
||||
|
||||
<h2>Accuracy of Materials</h2>
|
||||
<p>
|
||||
The materials appearing on Hamton Brown CPA's website could include technical, typographical, or photographic errors. We do not warrant that any of the materials on our website are accurate, complete, or current. We may make changes to the materials contained on our website at any time without notice.
|
||||
</p>
|
||||
|
||||
<h2>Links</h2>
|
||||
<p>
|
||||
Hamton Brown CPA has not reviewed all of the sites linked to its website and is not responsible for the contents of any such linked site. The inclusion of any link does not imply endorsement by Hamton Brown CPA of the site. Use of any such linked website is at the user's own risk.
|
||||
</p>
|
||||
|
||||
<h2>Modifications</h2>
|
||||
<p>
|
||||
We may revise these terms of service for our website at any time without notice. By using this website, you are agreeing to be bound by the then current version of these Terms of Service.
|
||||
</p>
|
||||
|
||||
<h2>Governing Law</h2>
|
||||
<p>
|
||||
These terms and conditions are governed by and construed in accordance with the laws of the State of Texas and you irrevocably submit to the exclusive jurisdiction of the courts in that state or location.
|
||||
</p>
|
||||
|
||||
<h2>Privacy Policy</h2>
|
||||
<p>
|
||||
Your privacy is important to us. Please review our Privacy Policy, which also governs your use of the website, to understand our practices.
|
||||
</p>
|
||||
|
||||
<h2>Contact Information</h2>
|
||||
<p>
|
||||
If you have any questions about these Terms of Service, please contact us:
|
||||
</p>
|
||||
<ul>
|
||||
<li>Email: contact@hamtonbrown.com</li>
|
||||
<li>Phone: (361) 555-0123</li>
|
||||
<li>Address: 123 Business Street, Corpus Christi, TX 78401</li>
|
||||
</ul>
|
||||
|
||||
<h2>Severability</h2>
|
||||
<p>
|
||||
If any provision of these Terms of Service is found to be unenforceable or invalid, that provision will be limited or eliminated to the minimum extent necessary so that the Terms of Service will otherwise remain in full force and effect and enforceable.
|
||||
</p>
|
||||
|
||||
<h2>Entire Agreement</h2>
|
||||
<p>
|
||||
These Terms of Service constitute the entire agreement between you and Hamton Brown CPA regarding the use of our website and services, superseding any prior agreements between you and us relating to your use of our website or services.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,105 @@
|
|||
import type { Metadata } from 'next';
|
||||
import { Hero } from '@/components/hero';
|
||||
import { ProcessSteps } from '@/components/process-steps';
|
||||
import { ServiceCard } from '@/components/service-card';
|
||||
import { TrustPanel } from '@/components/trust-panel';
|
||||
import { Testimonial } from '@/components/testimonial';
|
||||
import { CTASection } from '@/components/cta-section';
|
||||
import { getAllServices } from '@/data/services';
|
||||
import testimonials from '@/data/testimonials.json';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Hampton, Brown & Associates, PC - Professional Tax Planning & Financial Services',
|
||||
description: 'Expert federal income and estate tax services, financial planning, and goal-oriented strategies in Corpus Christi. Helping clients achieve their economic goals through proactive planning.',
|
||||
keywords: 'CPA, tax planning, tax preparation, Corpus Christi, financial planning, business advisory, estate tax, federal tax',
|
||||
openGraph: {
|
||||
title: 'Hampton, Brown & Associates, PC - Professional Tax Services',
|
||||
description: 'Expert federal income and estate tax services and financial planning in Corpus Christi',
|
||||
images: ['/images/home-hero.jpg'],
|
||||
},
|
||||
};
|
||||
|
||||
export default function HomePage() {
|
||||
const services = getAllServices();
|
||||
const featuredTestimonials = testimonials.slice(0, 3);
|
||||
|
||||
return (
|
||||
<main>
|
||||
<Hero
|
||||
title="Achieving Your Economic Goals Through Strategic Planning"
|
||||
subtitle="At Hampton, Brown & Associates, we assist our clients with their tax and accounting needs and achieving economic goals. Our primary tool is providing Federal income and estate tax services and financial planning in a manner that permits our clients to control the tax impact on their economic environment to the maximum extent possible."
|
||||
ctaText="Schedule a Consultation"
|
||||
ctaHref="/contact"
|
||||
imageSrc="/images/home-hero.jpg"
|
||||
imageAlt="Professional desk setup with tax planning documents and organized workspace"
|
||||
/>
|
||||
|
||||
<ProcessSteps />
|
||||
|
||||
<section className="py-16 bg-sand">
|
||||
<div className="container mx-auto px-4 lg:px-6">
|
||||
<div className="text-center mb-12">
|
||||
<h2 className="text-3xl font-bold tracking-tight text-ink sm:text-4xl mb-4">
|
||||
Our Services
|
||||
</h2>
|
||||
<p className="text-lg text-slate max-w-3xl mx-auto">
|
||||
Public accounting, federal income tax, estate tax planning, financial planning, and advisory services
|
||||
</p>
|
||||
</div>
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
|
||||
{services.map((service) => (
|
||||
<ServiceCard
|
||||
key={service.id}
|
||||
title={service.title}
|
||||
description={service.description}
|
||||
image={service.image}
|
||||
imageAlt={`${service.title} service`}
|
||||
href={`/services/${service.slug}`}
|
||||
features={service.features.slice(0, 3)}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<TrustPanel />
|
||||
|
||||
<section className="py-16 bg-cloud">
|
||||
<div className="container mx-auto px-4 lg:px-6">
|
||||
<div className="text-center mb-12">
|
||||
<h2 className="text-3xl font-bold tracking-tight text-ink sm:text-4xl mb-4">
|
||||
Client Commitment
|
||||
</h2>
|
||||
<p className="text-lg text-slate max-w-3xl mx-auto">
|
||||
We ask for the assistance and cooperation from clients to permit us to be as effective as possible in helping clients accomplish their goals
|
||||
</p>
|
||||
</div>
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
|
||||
{featuredTestimonials.map((testimonial) => (
|
||||
<Testimonial
|
||||
key={testimonial.id}
|
||||
quote={testimonial.quote}
|
||||
author={testimonial.author}
|
||||
role={testimonial.role}
|
||||
rating={testimonial.rating}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<CTASection
|
||||
title="Ready to Achieve Your Economic Goals?"
|
||||
description="If you are willing to become involved in goal setting, commit the time and resources necessary to proceed towards your goals, and be part of an effective communication effort, then you are exactly the type of client that our firm wishes to attract, serve and retain."
|
||||
primaryCta={{
|
||||
text: "Schedule a Consultation",
|
||||
href: "/contact"
|
||||
}}
|
||||
secondaryCta={{
|
||||
text: "Learn About Our Planning Process",
|
||||
href: "/about"
|
||||
}}
|
||||
/>
|
||||
</main>
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,228 @@
|
|||
import type { Metadata } from 'next';
|
||||
import Image from 'next/image';
|
||||
import { Hero } from '@/components/hero';
|
||||
import { SecureUpload } from '@/components/secure-upload';
|
||||
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
|
||||
import { Button } from '@/components/ui/button';
|
||||
import { CTASection } from '@/components/cta-section';
|
||||
import { Upload, CreditCard, FileText, Shield } from 'lucide-react';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Client Resources',
|
||||
description: 'Secure document upload and payment portal for Hamton Brown CPA clients. Access your account and manage your tax documents safely.',
|
||||
openGraph: {
|
||||
title: 'Client Resources',
|
||||
description: 'Secure document upload and payment portal for Hamton Brown CPA clients.',
|
||||
images: ['/images/resources-hero.jpg'],
|
||||
},
|
||||
};
|
||||
|
||||
export default function ResourcesPage() {
|
||||
return (
|
||||
<>
|
||||
<Hero
|
||||
title="Client Resources & Secure Portal"
|
||||
subtitle="Access your account, upload documents securely, and manage payments through our client portal. Your information is protected with bank-level security."
|
||||
ctaText="Access Portal"
|
||||
ctaHref="#portal"
|
||||
imageSrc="/images/resources-hero.jpg"
|
||||
imageAlt="Abstract tech-meets-trust visual of a laptop showing a secure upload UI with a subtle lock icon"
|
||||
/>
|
||||
|
||||
<section id="portal" className="bg-cloud py-24 sm:py-32">
|
||||
<div className="mx-auto max-w-7xl px-6 lg:px-8">
|
||||
<div className="mx-auto max-w-2xl text-center">
|
||||
<h2 className="text-3xl font-bold tracking-tight text-ink sm:text-4xl">
|
||||
Secure Client Portal
|
||||
</h2>
|
||||
<p className="mt-6 text-lg leading-8 text-slate">
|
||||
Manage your tax documents and payments securely through our encrypted client portal.
|
||||
</p>
|
||||
</div>
|
||||
<div className="mx-auto mt-16 max-w-2xl">
|
||||
<SecureUpload />
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="bg-sand py-24 sm:py-32">
|
||||
<div className="mx-auto max-w-7xl px-6 lg:px-8">
|
||||
<div className="mx-auto max-w-2xl text-center">
|
||||
<h2 className="text-3xl font-bold tracking-tight text-ink sm:text-4xl">
|
||||
Additional Resources
|
||||
</h2>
|
||||
<p className="mt-6 text-lg leading-8 text-slate">
|
||||
Access helpful tools and information to make your tax preparation process easier.
|
||||
</p>
|
||||
</div>
|
||||
<div className="mx-auto mt-16 grid max-w-2xl grid-cols-1 gap-8 sm:mt-20 lg:mx-0 lg:max-w-none lg:grid-cols-3">
|
||||
<Card>
|
||||
<CardHeader>
|
||||
<div className="flex h-10 w-10 items-center justify-center rounded-lg bg-navy">
|
||||
<CreditCard className="h-5 w-5 text-cloud" />
|
||||
</div>
|
||||
<CardTitle>Payment Portal</CardTitle>
|
||||
<CardDescription>
|
||||
Make secure payments for our services online
|
||||
</CardDescription>
|
||||
</CardHeader>
|
||||
<CardContent>
|
||||
<p className="text-sm text-slate mb-4">
|
||||
Pay your invoices securely through our encrypted payment portal. We accept all major credit cards and bank transfers.
|
||||
</p>
|
||||
<Button asChild className="w-full">
|
||||
<a href="#payment">
|
||||
Make Payment
|
||||
</a>
|
||||
</Button>
|
||||
</CardContent>
|
||||
</Card>
|
||||
|
||||
<Card>
|
||||
<CardHeader>
|
||||
<div className="flex h-10 w-10 items-center justify-center rounded-lg bg-navy">
|
||||
<FileText className="h-5 w-5 text-cloud" />
|
||||
</div>
|
||||
<CardTitle>Document Checklist</CardTitle>
|
||||
<CardDescription>
|
||||
Download our tax preparation checklist
|
||||
</CardDescription>
|
||||
</CardHeader>
|
||||
<CardContent>
|
||||
<p className="text-sm text-slate mb-4">
|
||||
Get organized with our comprehensive tax document checklist. Know exactly what documents you need for your tax preparation.
|
||||
</p>
|
||||
<Button asChild className="w-full">
|
||||
<a href="#checklist">
|
||||
Download Checklist
|
||||
</a>
|
||||
</Button>
|
||||
</CardContent>
|
||||
</Card>
|
||||
|
||||
<Card>
|
||||
<CardHeader>
|
||||
<div className="flex h-10 w-10 items-center justify-center rounded-lg bg-navy">
|
||||
<Shield className="h-5 w-5 text-cloud" />
|
||||
</div>
|
||||
<CardTitle>Security Information</CardTitle>
|
||||
<CardDescription>
|
||||
Learn about our security measures
|
||||
</CardDescription>
|
||||
</CardHeader>
|
||||
<CardContent>
|
||||
<p className="text-sm text-slate mb-4">
|
||||
Understand how we protect your sensitive information with enterprise-grade encryption and security protocols.
|
||||
</p>
|
||||
<Button asChild className="w-full">
|
||||
<a href="#security">
|
||||
Learn More
|
||||
</a>
|
||||
</Button>
|
||||
</CardContent>
|
||||
</Card>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="bg-cloud py-24 sm:py-32">
|
||||
<div className="mx-auto max-w-7xl px-6 lg:px-8">
|
||||
<div className="mx-auto max-w-2xl lg:max-w-none">
|
||||
<div className="grid grid-cols-1 gap-16 lg:grid-cols-2 lg:gap-24">
|
||||
<div>
|
||||
<h2 className="text-3xl font-bold tracking-tight text-ink sm:text-4xl">
|
||||
Security & Privacy
|
||||
</h2>
|
||||
<p className="mt-6 text-lg leading-8 text-slate">
|
||||
Your privacy and security are our top priorities. We use industry-leading encryption and security measures to protect your sensitive information.
|
||||
</p>
|
||||
<div className="mt-8 space-y-4">
|
||||
<div className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-6 w-6 items-center justify-center rounded-full bg-teal">
|
||||
<svg className="h-4 w-4 text-cloud" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd" />
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
<p className="ml-3 text-base text-slate">256-bit SSL encryption for all data transmission</p>
|
||||
</div>
|
||||
<div className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-6 w-6 items-center justify-center rounded-full bg-teal">
|
||||
<svg className="h-4 w-4 text-cloud" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd" />
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
<p className="ml-3 text-base text-slate">Secure cloud storage with redundant backups</p>
|
||||
</div>
|
||||
<div className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-6 w-6 items-center justify-center rounded-full bg-teal">
|
||||
<svg className="h-4 w-4 text-cloud" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd" />
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
<p className="ml-3 text-base text-slate">Access controls and audit logging</p>
|
||||
</div>
|
||||
<div className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-6 w-6 items-center justify-center rounded-full bg-teal">
|
||||
<svg className="h-4 w-4 text-cloud" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd" />
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
<p className="ml-3 text-base text-slate">Compliance with IRS security requirements</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="bg-sand p-8 rounded-lg">
|
||||
<h3 className="text-xl font-semibold text-ink mb-4">Need Help?</h3>
|
||||
<p className="text-slate mb-6">
|
||||
Having trouble accessing the portal or uploading documents? Our support team is here to help.
|
||||
</p>
|
||||
<div className="space-y-4">
|
||||
<div className="flex items-center text-sm text-slate">
|
||||
<div className="w-2 h-2 bg-teal rounded-full mr-3"></div>
|
||||
Technical support available
|
||||
</div>
|
||||
<div className="flex items-center text-sm text-slate">
|
||||
<div className="w-2 h-2 bg-teal rounded-full mr-3"></div>
|
||||
Step-by-step instructions
|
||||
</div>
|
||||
<div className="flex items-center text-sm text-slate">
|
||||
<div className="w-2 h-2 bg-teal rounded-full mr-3"></div>
|
||||
Secure alternative methods
|
||||
</div>
|
||||
</div>
|
||||
<Button asChild className="w-full mt-6">
|
||||
<a href="/contact">
|
||||
Contact Support
|
||||
</a>
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<CTASection
|
||||
title="Questions About Our Portal?"
|
||||
description="Contact us if you need help accessing your account or have questions about our secure document upload process."
|
||||
primaryCta={{
|
||||
text: 'Contact Support',
|
||||
href: '/contact',
|
||||
icon: 'phone',
|
||||
}}
|
||||
secondaryCta={{
|
||||
text: 'Learn About Our Services',
|
||||
href: '/services/tax-planning',
|
||||
}}
|
||||
variant="dark"
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,189 @@
|
|||
import type { Metadata } from 'next';
|
||||
import Image from 'next/image';
|
||||
import { Hero } from '@/components/hero';
|
||||
import { Testimonial } from '@/components/testimonial';
|
||||
import { CTASection } from '@/components/cta-section';
|
||||
import testimonialsData from '@/data/testimonials.json';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Client Reviews & Testimonials',
|
||||
description: 'Read what our clients have to say about Hamton Brown CPA. Real testimonials from satisfied clients about our tax and financial services.',
|
||||
openGraph: {
|
||||
title: 'Client Reviews & Testimonials',
|
||||
description: 'Read what our clients have to say about Hamton Brown CPA.',
|
||||
images: ['/images/reviews-bg.jpg'],
|
||||
},
|
||||
};
|
||||
|
||||
export default function ReviewsPage() {
|
||||
return (
|
||||
<>
|
||||
<Hero
|
||||
title="What Our Clients Say"
|
||||
subtitle="Don't just take our word for it. Here's what our clients have to say about their experience with Hamton Brown CPA. Real testimonials from real people we've helped."
|
||||
ctaText="Read All Reviews"
|
||||
ctaHref="#testimonials"
|
||||
imageSrc="/images/reviews-bg.jpg"
|
||||
imageAlt="Soft-focus office background with bokeh lights, navy-teal accent object on desk"
|
||||
/>
|
||||
|
||||
<section id="testimonials" className="bg-cloud py-24 sm:py-32">
|
||||
<div className="mx-auto max-w-7xl px-6 lg:px-8">
|
||||
<div className="mx-auto max-w-2xl text-center">
|
||||
<h2 className="text-3xl font-bold tracking-tight text-ink sm:text-4xl">
|
||||
Client Testimonials
|
||||
</h2>
|
||||
<p className="mt-6 text-lg leading-8 text-slate">
|
||||
Our clients trust us with their most important financial matters. Here's what they have to say about their experience.
|
||||
</p>
|
||||
</div>
|
||||
<div className="mx-auto mt-16 grid max-w-2xl grid-cols-1 gap-8 sm:mt-20 lg:mx-0 lg:max-w-none lg:grid-cols-2">
|
||||
{testimonialsData.map((testimonial) => (
|
||||
<Testimonial
|
||||
key={testimonial.id}
|
||||
quote={testimonial.quote}
|
||||
author={testimonial.author}
|
||||
role={testimonial.role}
|
||||
rating={testimonial.rating}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="bg-sand py-24 sm:py-32">
|
||||
<div className="mx-auto max-w-7xl px-6 lg:px-8">
|
||||
<div className="mx-auto max-w-2xl lg:max-w-none">
|
||||
<div className="grid grid-cols-1 gap-16 lg:grid-cols-2 lg:gap-24">
|
||||
<div>
|
||||
<h2 className="text-3xl font-bold tracking-tight text-ink sm:text-4xl">
|
||||
Why Clients Choose Us
|
||||
</h2>
|
||||
<p className="mt-6 text-lg leading-8 text-slate">
|
||||
Our clients consistently choose us for our expertise, personalized service, and commitment to their financial success. Here are the key reasons why they trust us.
|
||||
</p>
|
||||
<div className="mt-8 space-y-6">
|
||||
<div className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-6 w-6 items-center justify-center rounded-full bg-teal">
|
||||
<svg className="h-4 w-4 text-cloud" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd" />
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
<div className="ml-3">
|
||||
<h3 className="text-lg font-semibold text-ink">Expert Knowledge</h3>
|
||||
<p className="text-slate">Our team stays current with the latest tax laws and regulations to provide the best advice.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-6 w-6 items-center justify-center rounded-full bg-teal">
|
||||
<svg className="h-4 w-4 text-cloud" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd" />
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
<div className="ml-3">
|
||||
<h3 className="text-lg font-semibold text-ink">Personalized Service</h3>
|
||||
<p className="text-slate">We take the time to understand your unique situation and develop customized strategies.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-6 w-6 items-center justify-center rounded-full bg-teal">
|
||||
<svg className="h-4 w-4 text-cloud" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd" />
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
<div className="ml-3">
|
||||
<h3 className="text-lg font-semibold text-ink">Transparent Communication</h3>
|
||||
<p className="text-slate">We explain complex tax concepts in plain English and keep you informed every step of the way.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-6 w-6 items-center justify-center rounded-full bg-teal">
|
||||
<svg className="h-4 w-4 text-cloud" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd" />
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
<div className="ml-3">
|
||||
<h3 className="text-lg font-semibold text-ink">Proven Results</h3>
|
||||
<p className="text-slate">Our clients consistently save money on taxes and achieve their financial goals.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="bg-cloud p-8 rounded-lg">
|
||||
<h3 className="text-xl font-semibold text-ink mb-4">Our Commitment</h3>
|
||||
<p className="text-slate mb-6">
|
||||
We're committed to providing exceptional service and building long-term relationships with our clients. Your success is our success.
|
||||
</p>
|
||||
<div className="space-y-4">
|
||||
<div className="flex items-center text-sm text-slate">
|
||||
<div className="w-2 h-2 bg-teal rounded-full mr-3"></div>
|
||||
Free initial consultation
|
||||
</div>
|
||||
<div className="flex items-center text-sm text-slate">
|
||||
<div className="w-2 h-2 bg-teal rounded-full mr-3"></div>
|
||||
Year-round support and guidance
|
||||
</div>
|
||||
<div className="flex items-center text-sm text-slate">
|
||||
<div className="w-2 h-2 bg-teal rounded-full mr-3"></div>
|
||||
Transparent pricing with no hidden fees
|
||||
</div>
|
||||
<div className="flex items-center text-sm text-slate">
|
||||
<div className="w-2 h-2 bg-teal rounded-full mr-3"></div>
|
||||
Secure handling of sensitive information
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="bg-navy py-24 sm:py-32">
|
||||
<div className="mx-auto max-w-7xl px-6 lg:px-8">
|
||||
<div className="mx-auto max-w-2xl text-center">
|
||||
<h2 className="text-3xl font-bold tracking-tight text-cloud sm:text-4xl">
|
||||
Ready to Join Our Satisfied Clients?
|
||||
</h2>
|
||||
<p className="mt-6 text-lg leading-8 text-slate-300">
|
||||
Experience the difference that professional, personalized tax and financial services can make for you and your family.
|
||||
</p>
|
||||
<div className="mt-10 flex items-center justify-center gap-x-6">
|
||||
<a
|
||||
href="/contact"
|
||||
className="rounded-md bg-teal px-3.5 py-2.5 text-sm font-semibold text-cloud shadow-sm hover:bg-teal/90 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-teal"
|
||||
>
|
||||
Schedule Consultation
|
||||
</a>
|
||||
<a href="/services/tax-planning" className="text-sm font-semibold leading-6 text-cloud hover:text-teal transition-colors">
|
||||
Learn More <span aria-hidden="true">→</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<CTASection
|
||||
title="Start Your Success Story"
|
||||
description="Join our community of satisfied clients and discover how we can help you achieve your financial goals."
|
||||
primaryCta={{
|
||||
text: 'Schedule Consultation',
|
||||
href: '/contact',
|
||||
icon: 'phone',
|
||||
}}
|
||||
secondaryCta={{
|
||||
text: 'Learn About Our Services',
|
||||
href: '/services/tax-planning',
|
||||
}}
|
||||
variant="dark"
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,186 @@
|
|||
import type { Metadata } from 'next';
|
||||
import { CTASection } from '@/components/cta-section';
|
||||
import Image from 'next/image';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Advisory Services',
|
||||
description: 'Strategic advisory services to help you achieve your business and economic goals.',
|
||||
openGraph: {
|
||||
title: 'Advisory Services',
|
||||
description: 'Strategic advisory services to help you achieve your business and economic goals.',
|
||||
images: ['/images/service-advisory.jpg'],
|
||||
},
|
||||
};
|
||||
|
||||
export default function AdvisoryServicesPage() {
|
||||
return (
|
||||
<>
|
||||
{/* Hero */}
|
||||
<section className="bg-navy py-16 sm:py-24">
|
||||
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
|
||||
<h1 className="text-4xl font-bold tracking-tight text-cloud sm:text-5xl mb-6">
|
||||
Advisory Services
|
||||
</h1>
|
||||
<p className="text-xl text-cloud/90 max-w-3xl mx-auto mb-8">
|
||||
Expert business advisory services to help you make informed decisions and optimize your business performance.
|
||||
</p>
|
||||
<button className="bg-cloud text-navy px-8 py-3 rounded-lg font-semibold hover:bg-cloud/90 transition-colors border-2 border-cloud">
|
||||
Schedule a Consultation
|
||||
</button>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="bg-cloud py-16 sm:py-20">
|
||||
<div className="mx-auto max-w-7xl px-4 lg:px-6">
|
||||
<div className="mx-auto max-w-2xl lg:max-w-none">
|
||||
<div className="grid grid-cols-1 gap-16 lg:grid-cols-2 lg:gap-24">
|
||||
<div>
|
||||
<div className="flex items-center mb-6">
|
||||
<div className="flex h-12 w-12 items-center justify-center rounded-lg bg-navy mr-4">
|
||||
<svg className="h-6 w-6 text-cloud" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z" />
|
||||
</svg>
|
||||
</div>
|
||||
<div>
|
||||
<h1 className="text-3xl font-bold tracking-tight text-ink sm:text-4xl">
|
||||
Advisory Services
|
||||
</h1>
|
||||
<p className="text-lg text-teal">Strategic Business Guidance</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p className="text-lg leading-8 text-slate mb-8">
|
||||
Expert business advisory services to help you make informed decisions and optimize your business performance.
|
||||
</p>
|
||||
|
||||
<div className="grid grid-cols-1 lg:grid-cols-2 gap-8">
|
||||
<div>
|
||||
<h3 className="text-lg font-semibold text-ink mb-4">What We Do</h3>
|
||||
<ul className="space-y-3">
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-2 w-2 items-center justify-center rounded-full bg-teal mt-2 mr-3"></div>
|
||||
</div>
|
||||
<span className="text-slate">Business valuation services</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-2 w-2 items-center justify-center rounded-full bg-teal mt-2 mr-3"></div>
|
||||
</div>
|
||||
<span className="text-slate">Financial analysis and reporting</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-2 w-2 items-center justify-center rounded-full bg-teal mt-2 mr-3"></div>
|
||||
</div>
|
||||
<span className="text-slate">Strategic planning facilitation</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-2 w-2 items-center justify-center rounded-full bg-teal mt-2 mr-3"></div>
|
||||
</div>
|
||||
<span className="text-slate">Performance improvement consulting</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-2 w-2 items-center justify-center rounded-full bg-teal mt-2 mr-3"></div>
|
||||
</div>
|
||||
<span className="text-slate">Merger and acquisition support</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-2 w-2 items-center justify-center rounded-full bg-teal mt-2 mr-3"></div>
|
||||
</div>
|
||||
<span className="text-slate">Cash flow management</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h3 className="text-lg font-semibold text-ink mb-4">Outcomes</h3>
|
||||
<ul className="space-y-3">
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<svg className="h-5 w-5 text-green-500 mt-0.5 mr-3" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd" />
|
||||
</svg>
|
||||
</div>
|
||||
<span className="text-slate">Data-driven business decisions</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<svg className="h-5 w-5 text-green-500 mt-0.5 mr-3" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd" />
|
||||
</svg>
|
||||
</div>
|
||||
<span className="text-slate">Improved operational efficiency</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<svg className="h-5 w-5 text-green-500 mt-0.5 mr-3" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd" />
|
||||
</svg>
|
||||
</div>
|
||||
<span className="text-slate">Enhanced business value</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<svg className="h-5 w-5 text-green-500 mt-0.5 mr-3" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd" />
|
||||
</svg>
|
||||
</div>
|
||||
<span className="text-slate">Strategic competitive advantage</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="mt-8">
|
||||
<button className="bg-navy text-cloud px-6 py-3 rounded-lg font-semibold hover:bg-navy/90 transition-colors flex items-center">
|
||||
Learn More About Advisory Services
|
||||
<svg className="ml-2 h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 5l7 7-7 7" />
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="relative">
|
||||
<div className="bg-sand p-8 rounded-lg shadow-lg">
|
||||
<div className="flex items-center justify-center mb-6">
|
||||
<div className="h-48 w-48 border rounded-lg overflow-hidden">
|
||||
<Image
|
||||
src="/images/service-advisory.jpg"
|
||||
alt="Advisory Services"
|
||||
width={192}
|
||||
height={192}
|
||||
className="h-full w-full object-cover"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<h2 className="text-2xl font-bold text-ink text-center mb-2">Advisory Services</h2>
|
||||
<p className="text-teal text-center">Strategic Business Guidance</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<CTASection
|
||||
title="Ready to Get Started?"
|
||||
description="Contact Hampton, Brown & Associates today to discuss your needs and learn how our comprehensive CPA services can help you achieve your financial goals."
|
||||
primaryCta={{
|
||||
text: 'Schedule Free Consultation',
|
||||
href: '/contact',
|
||||
icon: 'phone',
|
||||
}}
|
||||
secondaryCta={{
|
||||
text: 'Call (361) 888-7711',
|
||||
href: 'tel:+1-361-888-7711',
|
||||
}}
|
||||
variant="dark"
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,186 @@
|
|||
import type { Metadata } from 'next';
|
||||
import { CTASection } from '@/components/cta-section';
|
||||
import Image from 'next/image';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Estate Tax Planning Services',
|
||||
description: 'Comprehensive estate tax planning to protect your legacy and minimize estate taxes.',
|
||||
openGraph: {
|
||||
title: 'Estate Tax Planning Services',
|
||||
description: 'Comprehensive estate tax planning to protect your legacy and minimize estate taxes.',
|
||||
images: ['/images/service-estate-tax.jpg'],
|
||||
},
|
||||
};
|
||||
|
||||
export default function EstateTaxPlanningPage() {
|
||||
return (
|
||||
<>
|
||||
{/* Hero */}
|
||||
<section className="bg-navy py-16 sm:py-24">
|
||||
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
|
||||
<h1 className="text-4xl font-bold tracking-tight text-cloud sm:text-5xl mb-6">
|
||||
Estate Tax Planning Services
|
||||
</h1>
|
||||
<p className="text-xl text-cloud/90 max-w-3xl mx-auto mb-8">
|
||||
Comprehensive estate planning strategies to minimize estate taxes and ensure your wealth transfers efficiently to future generations.
|
||||
</p>
|
||||
<button className="bg-cloud text-navy px-8 py-3 rounded-lg font-semibold hover:bg-cloud/90 transition-colors border-2 border-cloud">
|
||||
Schedule a Consultation
|
||||
</button>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="bg-cloud py-16 sm:py-20">
|
||||
<div className="mx-auto max-w-7xl px-4 lg:px-6">
|
||||
<div className="mx-auto max-w-2xl lg:max-w-none">
|
||||
<div className="grid grid-cols-1 gap-16 lg:grid-cols-2 lg:gap-24">
|
||||
<div>
|
||||
<div className="flex items-center mb-6">
|
||||
<div className="flex h-12 w-12 items-center justify-center rounded-lg bg-navy mr-4">
|
||||
<svg className="h-6 w-6 text-cloud" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z" />
|
||||
</svg>
|
||||
</div>
|
||||
<div>
|
||||
<h1 className="text-3xl font-bold tracking-tight text-ink sm:text-4xl">
|
||||
Estate Tax Planning
|
||||
</h1>
|
||||
<p className="text-lg text-teal">Protect and Transfer Your Wealth</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p className="text-lg leading-8 text-slate mb-8">
|
||||
Comprehensive estate planning strategies to minimize estate taxes and ensure your wealth transfers efficiently to future generations.
|
||||
</p>
|
||||
|
||||
<div className="grid grid-cols-1 lg:grid-cols-2 gap-8">
|
||||
<div>
|
||||
<h3 className="text-lg font-semibold text-ink mb-4">What We Do</h3>
|
||||
<ul className="space-y-3">
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-2 w-2 items-center justify-center rounded-full bg-teal mt-2 mr-3"></div>
|
||||
</div>
|
||||
<span className="text-slate">Estate tax reduction strategies</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-2 w-2 items-center justify-center rounded-full bg-teal mt-2 mr-3"></div>
|
||||
</div>
|
||||
<span className="text-slate">Business succession planning</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-2 w-2 items-center justify-center rounded-full bg-teal mt-2 mr-3"></div>
|
||||
</div>
|
||||
<span className="text-slate">Trust structure design and implementation</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-2 w-2 items-center justify-center rounded-full bg-teal mt-2 mr-3"></div>
|
||||
</div>
|
||||
<span className="text-slate">Gift tax planning and compliance</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-2 w-2 items-center justify-center rounded-full bg-teal mt-2 mr-3"></div>
|
||||
</div>
|
||||
<span className="text-slate">Charitable giving strategies</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-2 w-2 items-center justify-center rounded-full bg-teal mt-2 mr-3"></div>
|
||||
</div>
|
||||
<span className="text-slate">Generation-skipping transfer tax planning</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h3 className="text-lg font-semibold text-ink mb-4">Outcomes</h3>
|
||||
<ul className="space-y-3">
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<svg className="h-5 w-5 text-green-500 mt-0.5 mr-3" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd" />
|
||||
</svg>
|
||||
</div>
|
||||
<span className="text-slate">Minimized estate tax liability</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<svg className="h-5 w-5 text-green-500 mt-0.5 mr-3" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd" />
|
||||
</svg>
|
||||
</div>
|
||||
<span className="text-slate">Smooth wealth transfer to heirs</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<svg className="h-5 w-5 text-green-500 mt-0.5 mr-3" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd" />
|
||||
</svg>
|
||||
</div>
|
||||
<span className="text-slate">Protected family business interests</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<svg className="h-5 w-5 text-green-500 mt-0.5 mr-3" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd" />
|
||||
</svg>
|
||||
</div>
|
||||
<span className="text-slate">Optimized charitable giving impact</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="mt-8">
|
||||
<button className="bg-navy text-cloud px-6 py-3 rounded-lg font-semibold hover:bg-navy/90 transition-colors flex items-center">
|
||||
Learn More About Estate Tax Planning
|
||||
<svg className="ml-2 h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 5l7 7-7 7" />
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="relative">
|
||||
<div className="bg-sand p-8 rounded-lg shadow-lg">
|
||||
<div className="flex items-center justify-center mb-6">
|
||||
<div className="h-48 w-48 border rounded-lg overflow-hidden">
|
||||
<Image
|
||||
src="/images/service-estate-tax.jpg"
|
||||
alt="Estate Tax Planning"
|
||||
width={192}
|
||||
height={192}
|
||||
className="h-full w-full object-cover"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<h2 className="text-2xl font-bold text-ink text-center mb-2">Estate Tax Planning</h2>
|
||||
<p className="text-teal text-center">Protect and Transfer Your Wealth</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<CTASection
|
||||
title="Ready to Get Started?"
|
||||
description="Contact Hampton, Brown & Associates today to discuss your needs and learn how our comprehensive CPA services can help you achieve your financial goals."
|
||||
primaryCta={{
|
||||
text: 'Schedule Free Consultation',
|
||||
href: '/contact',
|
||||
icon: 'phone',
|
||||
}}
|
||||
secondaryCta={{
|
||||
text: 'Call (361) 888-7711',
|
||||
href: 'tel:+1-361-888-7711',
|
||||
}}
|
||||
variant="dark"
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,158 @@
|
|||
import type { Metadata } from 'next';
|
||||
import { CTASection } from '@/components/cta-section';
|
||||
import Image from 'next/image';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Federal Income Tax Services',
|
||||
description: 'Comprehensive federal income tax services including preparation, planning, and strategic tax management.',
|
||||
openGraph: {
|
||||
title: 'Federal Income Tax Services',
|
||||
description: 'Comprehensive federal income tax services for individuals and businesses.',
|
||||
images: ['/images/service-income-tax.jpg'],
|
||||
},
|
||||
};
|
||||
|
||||
export default function FederalIncomeTaxPage() {
|
||||
return (
|
||||
<>
|
||||
{/* Hero */}
|
||||
<section className="bg-navy py-16 sm:py-24">
|
||||
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
|
||||
<h1 className="text-4xl font-bold tracking-tight text-cloud sm:text-5xl mb-6">
|
||||
Federal Income Tax Services
|
||||
</h1>
|
||||
<p className="text-xl text-cloud/90 max-w-3xl mx-auto mb-8">
|
||||
Complete tax preparation services combined with proactive tax planning strategies to minimize your liability and maximize savings.
|
||||
</p>
|
||||
<button className="bg-cloud text-navy px-8 py-3 rounded-lg font-semibold hover:bg-cloud/90 transition-colors border-2 border-cloud">
|
||||
Schedule a Consultation
|
||||
</button>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="bg-cloud py-16 sm:py-20">
|
||||
<div className="mx-auto max-w-7xl px-4 lg:px-6">
|
||||
<div className="mx-auto max-w-2xl lg:max-w-none">
|
||||
<div className="grid grid-cols-1 gap-16 lg:grid-cols-2 lg:gap-24">
|
||||
<div>
|
||||
<div className="flex items-center mb-6">
|
||||
<div className="flex h-12 w-12 items-center justify-center rounded-lg bg-navy mr-4">
|
||||
<svg className="h-6 w-6 text-cloud" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 7h6m0 10v-3m-3 3h.01M9 17h.01M9 14h.01M12 14h.01M15 11h.01M12 11h.01M9 11h.01M7 21h10a2 2 0 002-2V5a2 2 0 00-2-2H7a2 2 0 00-2 2v14a2 2 0 002 2z" />
|
||||
</svg>
|
||||
</div>
|
||||
<div>
|
||||
<h1 className="text-3xl font-bold tracking-tight text-ink sm:text-4xl">
|
||||
Federal Income Tax
|
||||
</h1>
|
||||
<p className="text-lg text-teal">Tax Preparation & Strategic Planning</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p className="text-lg leading-8 text-slate mb-8">
|
||||
Complete tax preparation services combined with proactive tax planning strategies to minimize your liability and maximize savings.
|
||||
</p>
|
||||
|
||||
<div className="grid grid-cols-1 lg:grid-cols-2 gap-8">
|
||||
<div>
|
||||
<h3 className="text-lg font-semibold text-ink mb-4">What We Do</h3>
|
||||
<ul className="space-y-3">
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-2 w-2 items-center justify-center rounded-full bg-teal mt-2 mr-3"></div>
|
||||
</div>
|
||||
<span className="text-slate">Quarterly estimated tax calculations</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-2 w-2 items-center justify-center rounded-full bg-teal mt-2 mr-3"></div>
|
||||
</div>
|
||||
<span className="text-slate">Multi-state tax return preparation</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-2 w-2 items-center justify-center rounded-full bg-teal mt-2 mr-3"></div>
|
||||
</div>
|
||||
<span className="text-slate">Tax audit representation and support</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-2 w-2 items-center justify-center rounded-full bg-teal mt-2 mr-3"></div>
|
||||
</div>
|
||||
<span className="text-slate">Tax resolution services</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h3 className="text-lg font-semibold text-ink mb-4">Outcomes</h3>
|
||||
<ul className="space-y-3">
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<svg className="h-5 w-5 text-green-500 mt-0.5 mr-3" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd" />
|
||||
</svg>
|
||||
</div>
|
||||
<span className="text-slate">Peace of mind during tax season</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<svg className="h-5 w-5 text-green-500 mt-0.5 mr-3" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd" />
|
||||
</svg>
|
||||
</div>
|
||||
<span className="text-slate">Professional audit support if needed</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="mt-8">
|
||||
<button className="bg-navy text-cloud px-6 py-3 rounded-lg font-semibold hover:bg-navy/90 transition-colors flex items-center">
|
||||
Learn More About Federal Income Tax
|
||||
<svg className="ml-2 h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 5l7 7-7 7" />
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="relative">
|
||||
<div className="bg-sand p-8 rounded-lg shadow-lg">
|
||||
<div className="flex items-center justify-center mb-6">
|
||||
<div className="h-48 w-48 border rounded-lg overflow-hidden">
|
||||
<Image
|
||||
src="/images/service-income-tax.jpg"
|
||||
alt="Federal Income Tax"
|
||||
width={192}
|
||||
height={192}
|
||||
className="h-full w-full object-cover"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<h2 className="text-2xl font-bold text-ink text-center mb-2">Federal Income Tax</h2>
|
||||
<p className="text-teal text-center">Tax Preparation & Strategic Planning</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<CTASection
|
||||
title="Ready to Get Started?"
|
||||
description="Contact Hampton, Brown & Associates today to discuss your needs and learn how our comprehensive CPA services can help you achieve your financial goals."
|
||||
primaryCta={{
|
||||
text: 'Schedule Free Consultation',
|
||||
href: '/contact',
|
||||
icon: 'phone',
|
||||
}}
|
||||
secondaryCta={{
|
||||
text: 'Call (361) 888-7711',
|
||||
href: 'tel:+1-361-888-7711',
|
||||
}}
|
||||
variant="dark"
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,186 @@
|
|||
import type { Metadata } from 'next';
|
||||
import { CTASection } from '@/components/cta-section';
|
||||
import Image from 'next/image';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Financial Planning Services',
|
||||
description: 'Comprehensive financial planning to help you achieve your economic goals and control your financial environment.',
|
||||
openGraph: {
|
||||
title: 'Financial Planning Services',
|
||||
description: 'Comprehensive financial planning to help you achieve your economic goals and control your financial environment.',
|
||||
images: ['/images/service-financial-planning.jpg'],
|
||||
},
|
||||
};
|
||||
|
||||
export default function FinancialPlanningPage() {
|
||||
return (
|
||||
<>
|
||||
{/* Hero */}
|
||||
<section className="bg-navy py-16 sm:py-24">
|
||||
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
|
||||
<h1 className="text-4xl font-bold tracking-tight text-cloud sm:text-5xl mb-6">
|
||||
Financial Planning Services
|
||||
</h1>
|
||||
<p className="text-xl text-cloud/90 max-w-3xl mx-auto mb-8">
|
||||
Comprehensive financial planning services to help you achieve your long-term goals and build lasting wealth.
|
||||
</p>
|
||||
<button className="bg-cloud text-navy px-8 py-3 rounded-lg font-semibold hover:bg-cloud/90 transition-colors border-2 border-cloud">
|
||||
Schedule a Consultation
|
||||
</button>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="bg-cloud py-16 sm:py-20">
|
||||
<div className="mx-auto max-w-7xl px-4 lg:px-6">
|
||||
<div className="mx-auto max-w-2xl lg:max-w-none">
|
||||
<div className="grid grid-cols-1 gap-16 lg:grid-cols-2 lg:gap-24">
|
||||
<div>
|
||||
<div className="flex items-center mb-6">
|
||||
<div className="flex h-12 w-12 items-center justify-center rounded-lg bg-navy mr-4">
|
||||
<svg className="h-6 w-6 text-cloud" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M13 7h8m0 0v8m0-8l-8 8-4-4-6 6" />
|
||||
</svg>
|
||||
</div>
|
||||
<div>
|
||||
<h1 className="text-3xl font-bold tracking-tight text-ink sm:text-4xl">
|
||||
Financial Planning
|
||||
</h1>
|
||||
<p className="text-lg text-teal">Build and Protect Your Financial Future</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p className="text-lg leading-8 text-slate mb-8">
|
||||
Comprehensive financial planning services to help you achieve your long-term goals and build lasting wealth.
|
||||
</p>
|
||||
|
||||
<div className="grid grid-cols-1 lg:grid-cols-2 gap-8">
|
||||
<div>
|
||||
<h3 className="text-lg font-semibold text-ink mb-4">What We Do</h3>
|
||||
<ul className="space-y-3">
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-2 w-2 items-center justify-center rounded-full bg-teal mt-2 mr-3"></div>
|
||||
</div>
|
||||
<span className="text-slate">Retirement planning and projections</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-2 w-2 items-center justify-center rounded-full bg-teal mt-2 mr-3"></div>
|
||||
</div>
|
||||
<span className="text-slate">Investment strategy development</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-2 w-2 items-center justify-center rounded-full bg-teal mt-2 mr-3"></div>
|
||||
</div>
|
||||
<span className="text-slate">Cash flow analysis and budgeting</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-2 w-2 items-center justify-center rounded-full bg-teal mt-2 mr-3"></div>
|
||||
</div>
|
||||
<span className="text-slate">Risk management and insurance planning</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-2 w-2 items-center justify-center rounded-full bg-teal mt-2 mr-3"></div>
|
||||
</div>
|
||||
<span className="text-slate">Education funding strategies</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="flex h-2 w-2 items-center justify-center rounded-full bg-teal mt-2 mr-3"></div>
|
||||
</div>
|
||||
<span className="text-slate">Debt management and optimization</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h3 className="text-lg font-semibold text-ink mb-4">Outcomes</h3>
|
||||
<ul className="space-y-3">
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<svg className="h-5 w-5 text-green-500 mt-0.5 mr-3" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd" />
|
||||
</svg>
|
||||
</div>
|
||||
<span className="text-slate">Clear path to retirement goals</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<svg className="h-5 w-5 text-green-500 mt-0.5 mr-3" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd" />
|
||||
</svg>
|
||||
</div>
|
||||
<span className="text-slate">Optimized investment portfolio</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<svg className="h-5 w-5 text-green-500 mt-0.5 mr-3" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd" />
|
||||
</svg>
|
||||
</div>
|
||||
<span className="text-slate">Improved cash flow management</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<div className="flex-shrink-0">
|
||||
<svg className="h-5 w-5 text-green-500 mt-0.5 mr-3" fill="currentColor" viewBox="0 0 20 20">
|
||||
<path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd" />
|
||||
</svg>
|
||||
</div>
|
||||
<span className="text-slate">Protected against financial risks</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="mt-8">
|
||||
<button className="bg-navy text-cloud px-6 py-3 rounded-lg font-semibold hover:bg-navy/90 transition-colors flex items-center">
|
||||
Learn More About Financial Planning
|
||||
<svg className="ml-2 h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 5l7 7-7 7" />
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="relative">
|
||||
<div className="bg-sand p-8 rounded-lg shadow-lg">
|
||||
<div className="flex items-center justify-center mb-6">
|
||||
<div className="h-48 w-48 border rounded-lg overflow-hidden">
|
||||
<Image
|
||||
src="/images/service-financial-planning.jpg"
|
||||
alt="Financial Planning"
|
||||
width={192}
|
||||
height={192}
|
||||
className="h-full w-full object-cover"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<h2 className="text-2xl font-bold text-ink text-center mb-2">Financial Planning</h2>
|
||||
<p className="text-teal text-center">Build and Protect Your Financial Future</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<CTASection
|
||||
title="Ready to Get Started?"
|
||||
description="Contact Hampton, Brown & Associates today to discuss your needs and learn how our comprehensive CPA services can help you achieve your financial goals."
|
||||
primaryCta={{
|
||||
text: 'Schedule Free Consultation',
|
||||
href: '/contact',
|
||||
icon: 'phone',
|
||||
}}
|
||||
secondaryCta={{
|
||||
text: 'Call (361) 888-7711',
|
||||
href: 'tel:+1-361-888-7711',
|
||||
}}
|
||||
variant="dark"
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,164 @@
|
|||
import ServiceSection from "@/components/ServiceSection";
|
||||
|
||||
export const metadata = {
|
||||
title: "Services",
|
||||
description: "Comprehensive CPA services overview.",
|
||||
};
|
||||
|
||||
const services = [
|
||||
{
|
||||
slug: "federal-income-tax",
|
||||
title: "Federal Income Tax",
|
||||
subtitle: "Tax Preparation & Strategic Planning",
|
||||
blurb:
|
||||
"Complete tax preparation services combined with proactive planning to minimize liability and maximize savings.",
|
||||
whatWeDo: [
|
||||
"Individual & business tax returns",
|
||||
"Year-round tax planning",
|
||||
"Quarterly estimated taxes",
|
||||
"Multi-state filings",
|
||||
"Audit representation",
|
||||
"Tax resolution services",
|
||||
],
|
||||
outcomes: [
|
||||
"Reduced tax liability",
|
||||
"Accurate, compliant filings",
|
||||
"Peace of mind during tax season",
|
||||
"Professional audit support",
|
||||
],
|
||||
iconName: "calculator",
|
||||
image: "/images/service-income-tax.jpg",
|
||||
},
|
||||
{
|
||||
slug: "estate-tax-planning",
|
||||
title: "Estate Tax Planning",
|
||||
subtitle: "Protect and Transfer Your Wealth",
|
||||
blurb:
|
||||
"Comprehensive strategies to minimize estate taxes and transfer wealth efficiently to future generations.",
|
||||
whatWeDo: [
|
||||
"Estate tax reduction strategies",
|
||||
"Business succession planning",
|
||||
"Trust design & implementation",
|
||||
"Gift tax planning",
|
||||
"Charitable giving strategies",
|
||||
"GST tax planning",
|
||||
],
|
||||
outcomes: [
|
||||
"Minimized estate tax burden",
|
||||
"Smooth transfer to heirs",
|
||||
"Protected family business interests",
|
||||
"Optimized charitable impact",
|
||||
],
|
||||
iconName: "shield",
|
||||
image: "/images/service-estate-tax.jpg",
|
||||
},
|
||||
{
|
||||
slug: "financial-planning",
|
||||
title: "Financial Planning",
|
||||
subtitle: "Build and Protect Your Financial Future",
|
||||
blurb:
|
||||
"Goal-based financial planning to align investments, cash flow, and risk management with your long-term objectives.",
|
||||
whatWeDo: [
|
||||
"Retirement projections",
|
||||
"Investment strategy",
|
||||
"Cash-flow & budgeting",
|
||||
"Risk & insurance planning",
|
||||
"Education funding",
|
||||
"Debt optimization",
|
||||
],
|
||||
outcomes: [
|
||||
"Clear path to retirement",
|
||||
"Optimized portfolio",
|
||||
"Improved cash flow",
|
||||
"Protection against risks",
|
||||
],
|
||||
iconName: "trend-up",
|
||||
image: "/images/service-financial-planning.jpg",
|
||||
},
|
||||
{
|
||||
slug: "public-accounting",
|
||||
title: "Public Accounting",
|
||||
subtitle: "Professional Assurance Services",
|
||||
blurb:
|
||||
"Independent assurance for credible financial statements and stronger business controls.",
|
||||
whatWeDo: [
|
||||
"Financial statement audits",
|
||||
"Reviews & compilations",
|
||||
"Internal control assessments",
|
||||
"Fraud risk evaluation",
|
||||
"Compliance testing",
|
||||
"Management recommendations",
|
||||
],
|
||||
outcomes: [
|
||||
"Enhanced financial credibility",
|
||||
"Improved internal controls",
|
||||
"Better access to capital",
|
||||
"Regulatory assurance",
|
||||
],
|
||||
iconName: "document",
|
||||
image: "/images/service-tax-planning.jpg",
|
||||
},
|
||||
{
|
||||
slug: "advisory",
|
||||
title: "Advisory Services",
|
||||
subtitle: "Strategic Business Guidance",
|
||||
blurb:
|
||||
"Data-driven advice to make informed decisions and optimize performance.",
|
||||
whatWeDo: [
|
||||
"Business valuation",
|
||||
"Financial analysis & reporting",
|
||||
"Strategic planning facilitation",
|
||||
"Performance improvement",
|
||||
"M&A support",
|
||||
"Cash-flow management",
|
||||
],
|
||||
outcomes: [
|
||||
"Confident decisions",
|
||||
"Operational efficiency",
|
||||
"Enhanced business value",
|
||||
"Competitive advantage",
|
||||
],
|
||||
iconName: "users",
|
||||
image: "/images/service-advisory.jpg",
|
||||
},
|
||||
];
|
||||
|
||||
export default function ServicesPage() {
|
||||
return (
|
||||
<main>
|
||||
{/* Hero */}
|
||||
<section className="bg-navy py-16 sm:py-24">
|
||||
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
|
||||
<h1 className="text-4xl font-bold tracking-tight text-cloud sm:text-5xl mb-6">
|
||||
Comprehensive CPA Services for Your Success
|
||||
</h1>
|
||||
<p className="text-xl text-cloud/90 max-w-3xl mx-auto mb-8">
|
||||
From tax preparation to strategic planning, we provide the expertise and guidance you need.
|
||||
</p>
|
||||
<button className="bg-cloud text-navy px-8 py-3 rounded-lg font-semibold hover:bg-cloud/90 transition-colors border-2 border-cloud">
|
||||
Schedule a Consultation
|
||||
</button>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* Services */}
|
||||
{services.map((service, index) => (
|
||||
<ServiceSection key={service.slug} service={service} index={index} />
|
||||
))}
|
||||
|
||||
{/* Bottom CTA */}
|
||||
<section className="py-16 sm:py-24">
|
||||
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
|
||||
<h2 className="text-2xl font-semibold">Ready to Get Started?</h2>
|
||||
<p className="mt-3">
|
||||
Contact us today to learn how our services can help you achieve your goals.
|
||||
</p>
|
||||
<div className="mt-6 flex flex-col sm:flex-row gap-3 justify-center">
|
||||
<a href="/contact" className="px-5 py-3 border rounded-md">Schedule Free Consultation</a>
|
||||
<a href="tel:+13618887711" className="px-5 py-3 border rounded-md">Call (361) 888-7711</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,126 @@
|
|||
import type { Metadata } from 'next';
|
||||
import { CTASection } from '@/components/cta-section';
|
||||
import { services } from '@/data/services';
|
||||
import Image from 'next/image';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Services - Hampton, Brown & Associates, PC',
|
||||
description: 'Comprehensive CPA services including public accounting, federal income tax, estate tax planning, financial planning, and advisory services.',
|
||||
openGraph: {
|
||||
title: 'Services - Hampton, Brown & Associates, PC',
|
||||
description: 'Comprehensive CPA services for individuals and businesses.',
|
||||
images: ['/images/service-tax-planning.jpg'],
|
||||
},
|
||||
};
|
||||
|
||||
export default function PublicAccountingPage() {
|
||||
const service = services.find(s => s.id === 'public-accounting');
|
||||
|
||||
if (!service) {
|
||||
return <div>Service not found</div>;
|
||||
}
|
||||
|
||||
return (
|
||||
<main>
|
||||
{/* Hero */}
|
||||
<section className="bg-navy py-16 sm:py-24">
|
||||
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
|
||||
<h1 className="text-4xl font-bold tracking-tight text-cloud sm:text-5xl mb-6">
|
||||
Public Accounting Services
|
||||
</h1>
|
||||
<p className="text-xl text-cloud/90 max-w-3xl mx-auto mb-8">
|
||||
Professional assurance services providing credibility and assurance for your financial statements and business operations.
|
||||
</p>
|
||||
<button className="bg-cloud text-navy px-8 py-3 rounded-lg font-semibold hover:bg-cloud/90 transition-colors border-2 border-cloud">
|
||||
Schedule a Consultation
|
||||
</button>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* Service Detail */}
|
||||
<section className="py-16 sm:py-20">
|
||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||
<div className="grid grid-cols-1 lg:grid-cols-2 gap-10 lg:gap-16">
|
||||
{/* Text column */}
|
||||
<div>
|
||||
<div className="flex items-center gap-3 mb-4">
|
||||
<div className="flex h-16 w-16 items-center justify-center rounded-lg bg-navy mr-4">
|
||||
<Image
|
||||
src="/images/service-tax-planning.jpg"
|
||||
alt="Public Accounting"
|
||||
width={64}
|
||||
height={64}
|
||||
className="h-12 w-12 object-cover rounded"
|
||||
/>
|
||||
</div>
|
||||
<div className="text-sm">Professional Assurance Services</div>
|
||||
</div>
|
||||
<h2 className="text-2xl font-semibold">Public Accounting</h2>
|
||||
<p className="mt-3">
|
||||
Independent assurance for credible financial statements and stronger business controls.
|
||||
</p>
|
||||
|
||||
<div className="mt-8 grid grid-cols-1 sm:grid-cols-2 gap-8">
|
||||
<div>
|
||||
<h3 className="font-medium mb-2">What We Do</h3>
|
||||
<ul className="list-disc pl-5 space-y-1">
|
||||
<li>Financial statement audits</li>
|
||||
<li>Reviews & compilations</li>
|
||||
<li>Internal control assessments</li>
|
||||
<li>Fraud risk evaluation</li>
|
||||
<li>Compliance testing</li>
|
||||
<li>Management recommendations</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h3 className="font-medium mb-2">Outcomes</h3>
|
||||
<ul className="list-disc pl-5 space-y-1">
|
||||
<li>Enhanced financial credibility</li>
|
||||
<li>Improved internal controls</li>
|
||||
<li>Better access to capital</li>
|
||||
<li>Regulatory assurance</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="mt-8">
|
||||
<a href="/services" className="inline-block px-4 py-2 border rounded-md">
|
||||
View All Services
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Visual card */}
|
||||
<div className="border rounded-xl p-8 flex flex-col items-center justify-center text-center">
|
||||
<div className="mb-6 h-48 w-48 border rounded-lg overflow-hidden">
|
||||
<Image
|
||||
src="/images/service-tax-planning.jpg"
|
||||
alt="Public Accounting"
|
||||
width={192}
|
||||
height={192}
|
||||
className="h-full w-full object-cover"
|
||||
/>
|
||||
</div>
|
||||
<div className="text-xl font-medium">Public Accounting</div>
|
||||
<div className="text-sm text-gray-600">Professional Assurance Services</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* Bottom CTA */}
|
||||
<section className="py-16 sm:py-24">
|
||||
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
|
||||
<h2 className="text-2xl font-semibold">Ready to Get Started?</h2>
|
||||
<p className="mt-3">
|
||||
Contact us today to learn how our services can help you achieve your goals.
|
||||
</p>
|
||||
<div className="mt-6 flex flex-col sm:flex-row gap-3 justify-center">
|
||||
<a href="/contact" className="px-5 py-3 border rounded-md">Schedule Free Consultation</a>
|
||||
<a href="tel:+13618887711" className="px-5 py-3 border rounded-md">Call (361) 888-7711</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,106 @@
|
|||
import type { Metadata } from 'next';
|
||||
import { Hero } from '@/components/hero';
|
||||
import { ProcessSteps } from '@/components/process-steps';
|
||||
import { ServiceCard } from '@/components/service-card';
|
||||
import { Testimonial } from '@/components/testimonial';
|
||||
import { TrustPanel } from '@/components/trust-panel';
|
||||
import { CTASection } from '@/components/cta-section';
|
||||
import { getAllServices } from '@/data/services';
|
||||
import testimonialsData from '@/data/testimonials.json';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Professional Tax Planning & Preparation Services',
|
||||
description: 'Strategic year-round tax planning and professional tax preparation services in Corpus Christi, Texas. Save money and reduce stress with our comprehensive tax solutions.',
|
||||
openGraph: {
|
||||
title: 'Professional Tax Planning & Preparation Services',
|
||||
description: 'Strategic year-round tax planning and professional tax preparation services in Corpus Christi, Texas.',
|
||||
images: ['/images/home-hero.jpg'],
|
||||
},
|
||||
};
|
||||
|
||||
export default function TaxPlanningPage() {
|
||||
const services = getAllServices();
|
||||
const testimonials = testimonialsData.slice(0, 3);
|
||||
|
||||
return (
|
||||
<>
|
||||
<Hero
|
||||
title="Strategic Tax Planning That Saves You Money"
|
||||
subtitle="Professional tax planning and preparation services in Corpus Christi. We help individuals and businesses minimize their tax burden through year-round strategic planning and expert preparation."
|
||||
ctaText="Book Your Consultation"
|
||||
ctaHref="/contact"
|
||||
imageSrc="/images/home-hero.jpg"
|
||||
imageAlt="Two CPAs in a sunlit Corpus Christi office reviewing a year-round tax plan on a laptop, neat desk with calendar and organized folders"
|
||||
/>
|
||||
|
||||
<ProcessSteps />
|
||||
|
||||
<section className="bg-sand py-24 sm:py-32">
|
||||
<div className="mx-auto max-w-7xl px-6 lg:px-8">
|
||||
<div className="mx-auto max-w-2xl text-center">
|
||||
<h2 className="text-3xl font-bold tracking-tight text-ink sm:text-4xl">
|
||||
Comprehensive Tax Services
|
||||
</h2>
|
||||
<p className="mt-6 text-lg leading-8 text-slate">
|
||||
From strategic planning to expert preparation, we provide the full spectrum of tax services to meet your needs.
|
||||
</p>
|
||||
</div>
|
||||
<div className="mx-auto mt-16 grid max-w-2xl grid-cols-1 gap-8 sm:mt-20 lg:mx-0 lg:max-w-none lg:grid-cols-3">
|
||||
{services.map((service) => (
|
||||
<ServiceCard
|
||||
key={service.id}
|
||||
title={service.title}
|
||||
description={service.description}
|
||||
image={service.image}
|
||||
imageAlt={`${service.title} service`}
|
||||
href={`/services/${service.slug}`}
|
||||
features={service.features}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<TrustPanel />
|
||||
|
||||
<section className="bg-cloud py-24 sm:py-32">
|
||||
<div className="mx-auto max-w-7xl px-6 lg:px-8">
|
||||
<div className="mx-auto max-w-2xl text-center">
|
||||
<h2 className="text-3xl font-bold tracking-tight text-ink sm:text-4xl">
|
||||
What Our Clients Say
|
||||
</h2>
|
||||
<p className="mt-6 text-lg leading-8 text-slate">
|
||||
Don't just take our word for it. Here's what our clients have to say about their experience.
|
||||
</p>
|
||||
</div>
|
||||
<div className="mx-auto mt-16 grid max-w-2xl grid-cols-1 gap-8 sm:mt-20 lg:mx-0 lg:max-w-none lg:grid-cols-3">
|
||||
{testimonials.map((testimonial) => (
|
||||
<Testimonial
|
||||
key={testimonial.id}
|
||||
quote={testimonial.quote}
|
||||
author={testimonial.author}
|
||||
role={testimonial.role}
|
||||
rating={testimonial.rating}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<CTASection
|
||||
title="Ready to Optimize Your Tax Strategy?"
|
||||
description="Schedule a consultation with our tax experts and discover how we can help you save money and reduce stress."
|
||||
primaryCta={{
|
||||
text: 'Book Your Consultation',
|
||||
href: '/contact',
|
||||
icon: 'phone',
|
||||
}}
|
||||
secondaryCta={{
|
||||
text: 'Learn About Our Process',
|
||||
href: '/about',
|
||||
}}
|
||||
variant="dark"
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,96 @@
|
|||
import React from "react";
|
||||
import Image from "next/image";
|
||||
|
||||
type Service = {
|
||||
slug: string;
|
||||
title: string;
|
||||
subtitle: string;
|
||||
blurb: string;
|
||||
whatWeDo: string[];
|
||||
outcomes: string[];
|
||||
iconName?: string;
|
||||
image?: string;
|
||||
};
|
||||
|
||||
type Props = {
|
||||
service: Service;
|
||||
index: number;
|
||||
};
|
||||
|
||||
export default function ServiceSection({ service, index }: Props) {
|
||||
const isReversed = index % 2 === 1;
|
||||
|
||||
return (
|
||||
<section id={service.slug} className="py-16 sm:py-20">
|
||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||
<div
|
||||
className={`grid grid-cols-1 lg:grid-cols-2 gap-10 lg:gap-16 ${
|
||||
isReversed ? "lg:[&>*:first-child]:order-2" : ""
|
||||
}`}
|
||||
>
|
||||
{/* Text column */}
|
||||
<div>
|
||||
<div className="flex items-center gap-3 mb-4">
|
||||
{service.image && (
|
||||
<div className="flex h-16 w-16 items-center justify-center rounded-lg bg-navy mr-4">
|
||||
<Image
|
||||
src={service.image}
|
||||
alt={service.title}
|
||||
width={64}
|
||||
height={64}
|
||||
className="h-12 w-12 object-cover rounded"
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
<div className="text-sm">{service.subtitle}</div>
|
||||
</div>
|
||||
<h2 className="text-2xl font-semibold">{service.title}</h2>
|
||||
<p className="mt-3">{service.blurb}</p>
|
||||
|
||||
<div className="mt-8 grid grid-cols-1 sm:grid-cols-2 gap-8">
|
||||
<div>
|
||||
<h3 className="font-medium mb-2">What We Do</h3>
|
||||
<ul className="list-disc pl-5 space-y-1">
|
||||
{service.whatWeDo.map((item) => (
|
||||
<li key={item}>{item}</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h3 className="font-medium mb-2">Outcomes</h3>
|
||||
<ul className="list-disc pl-5 space-y-1">
|
||||
{service.outcomes.map((item) => (
|
||||
<li key={item}>{item}</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="mt-8">
|
||||
<a href={`/services/${service.slug}`} className="inline-block px-4 py-2 border rounded-md">
|
||||
Learn More About {service.title}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Visual card */}
|
||||
<div className="border rounded-xl p-8 flex flex-col items-center justify-center text-center">
|
||||
{service.image && (
|
||||
<div className="mb-4 h-24 w-24 border rounded-lg overflow-hidden">
|
||||
<Image
|
||||
src={service.image}
|
||||
alt={service.title}
|
||||
width={96}
|
||||
height={96}
|
||||
className="h-full w-full object-cover"
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
<div className="text-lg font-medium">{service.title}</div>
|
||||
<div className="text-sm text-gray-600">{service.subtitle}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
import Link from 'next/link';
|
||||
import { ChevronRight, Home } from 'lucide-react';
|
||||
|
||||
interface BreadcrumbItem {
|
||||
label: string;
|
||||
href?: string;
|
||||
}
|
||||
|
||||
interface BreadcrumbsProps {
|
||||
items: BreadcrumbItem[];
|
||||
}
|
||||
|
||||
export function Breadcrumbs({ items }: BreadcrumbsProps) {
|
||||
return (
|
||||
<nav className="flex" aria-label="Breadcrumb">
|
||||
<ol className="flex items-center space-x-2">
|
||||
<li>
|
||||
<Link
|
||||
href="/"
|
||||
className="text-slate-500 hover:text-navy transition-colors"
|
||||
>
|
||||
<Home className="h-4 w-4" />
|
||||
<span className="sr-only">Home</span>
|
||||
</Link>
|
||||
</li>
|
||||
{items.map((item, index) => (
|
||||
<li key={index} className="flex items-center">
|
||||
<ChevronRight className="h-4 w-4 text-slate-400" />
|
||||
{item.href ? (
|
||||
<Link
|
||||
href={item.href}
|
||||
className="ml-2 text-sm text-slate-500 hover:text-navy transition-colors"
|
||||
>
|
||||
{item.label}
|
||||
</Link>
|
||||
) : (
|
||||
<span className="ml-2 text-sm font-medium text-ink">
|
||||
{item.label}
|
||||
</span>
|
||||
)}
|
||||
</li>
|
||||
))}
|
||||
</ol>
|
||||
</nav>
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,187 @@
|
|||
'use client';
|
||||
|
||||
import { useState } from 'react';
|
||||
import { Button } from '@/components/ui/button';
|
||||
import { Input } from '@/components/ui/input';
|
||||
import { Textarea } from '@/components/ui/textarea';
|
||||
import { CheckCircle, AlertCircle } from 'lucide-react';
|
||||
|
||||
interface ContactFormData {
|
||||
name: string;
|
||||
email: string;
|
||||
phone?: string;
|
||||
message: string;
|
||||
}
|
||||
|
||||
export function ContactForm() {
|
||||
const [isSubmitting, setIsSubmitting] = useState(false);
|
||||
const [submitStatus, setSubmitStatus] = useState<'idle' | 'success' | 'error'>('idle');
|
||||
const [formData, setFormData] = useState<ContactFormData>({
|
||||
name: '',
|
||||
email: '',
|
||||
phone: '',
|
||||
message: '',
|
||||
});
|
||||
const [errors, setErrors] = useState<Partial<ContactFormData>>({});
|
||||
|
||||
const validateForm = (): boolean => {
|
||||
const newErrors: Partial<ContactFormData> = {};
|
||||
|
||||
if (!formData.name.trim()) {
|
||||
newErrors.name = 'Name is required';
|
||||
}
|
||||
|
||||
if (!formData.email.trim()) {
|
||||
newErrors.email = 'Email is required';
|
||||
} else if (!/\S+@\S+\.\S+/.test(formData.email)) {
|
||||
newErrors.email = 'Email is invalid';
|
||||
}
|
||||
|
||||
if (!formData.message.trim()) {
|
||||
newErrors.message = 'Message is required';
|
||||
}
|
||||
|
||||
setErrors(newErrors);
|
||||
return Object.keys(newErrors).length === 0;
|
||||
};
|
||||
|
||||
const handleSubmit = async (e: React.FormEvent) => {
|
||||
e.preventDefault();
|
||||
|
||||
if (!validateForm()) {
|
||||
return;
|
||||
}
|
||||
|
||||
setIsSubmitting(true);
|
||||
setSubmitStatus('idle');
|
||||
|
||||
try {
|
||||
const response = await fetch('/api/contact', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify(formData),
|
||||
});
|
||||
|
||||
if (response.ok) {
|
||||
setSubmitStatus('success');
|
||||
setFormData({ name: '', email: '', phone: '', message: '' });
|
||||
} else {
|
||||
setSubmitStatus('error');
|
||||
}
|
||||
} catch (error) {
|
||||
setSubmitStatus('error');
|
||||
} finally {
|
||||
setIsSubmitting(false);
|
||||
}
|
||||
};
|
||||
|
||||
const handleInputChange = (field: keyof ContactFormData, value: string) => {
|
||||
setFormData(prev => ({ ...prev, [field]: value }));
|
||||
if (errors[field]) {
|
||||
setErrors(prev => ({ ...prev, [field]: undefined }));
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="max-w-2xl mx-auto">
|
||||
{submitStatus === 'success' && (
|
||||
<div className="mb-6 p-4 bg-green-50 border border-green-200 rounded-md">
|
||||
<div className="flex items-center">
|
||||
<CheckCircle className="h-5 w-5 text-green-600 mr-2" />
|
||||
<p className="text-green-800">
|
||||
Thank you for your message! We'll get back to you within 24 hours.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
{submitStatus === 'error' && (
|
||||
<div className="mb-6 p-4 bg-red-50 border border-red-200 rounded-md">
|
||||
<div className="flex items-center">
|
||||
<AlertCircle className="h-5 w-5 text-red-600 mr-2" />
|
||||
<p className="text-red-800">
|
||||
There was an error sending your message. Please try again or call us directly.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
<form onSubmit={handleSubmit} className="space-y-6">
|
||||
<div>
|
||||
<label htmlFor="name" className="block text-sm font-medium text-ink mb-2">
|
||||
Full Name *
|
||||
</label>
|
||||
<Input
|
||||
id="name"
|
||||
type="text"
|
||||
value={formData.name}
|
||||
onChange={(e) => handleInputChange('name', e.target.value)}
|
||||
className={errors.name ? 'border-red-500' : ''}
|
||||
placeholder="Your full name"
|
||||
/>
|
||||
{errors.name && (
|
||||
<p className="mt-1 text-sm text-red-600">{errors.name}</p>
|
||||
)}
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label htmlFor="email" className="block text-sm font-medium text-ink mb-2">
|
||||
Email Address *
|
||||
</label>
|
||||
<Input
|
||||
id="email"
|
||||
type="email"
|
||||
value={formData.email}
|
||||
onChange={(e) => handleInputChange('email', e.target.value)}
|
||||
className={errors.email ? 'border-red-500' : ''}
|
||||
placeholder="your.email@example.com"
|
||||
/>
|
||||
{errors.email && (
|
||||
<p className="mt-1 text-sm text-red-600">{errors.email}</p>
|
||||
)}
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label htmlFor="phone" className="block text-sm font-medium text-ink mb-2">
|
||||
Phone Number (Optional)
|
||||
</label>
|
||||
<Input
|
||||
id="phone"
|
||||
type="tel"
|
||||
value={formData.phone}
|
||||
onChange={(e) => handleInputChange('phone', e.target.value)}
|
||||
placeholder="(555) 123-4567"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label htmlFor="message" className="block text-sm font-medium text-ink mb-2">
|
||||
Message *
|
||||
</label>
|
||||
<Textarea
|
||||
id="message"
|
||||
value={formData.message}
|
||||
onChange={(e) => handleInputChange('message', e.target.value)}
|
||||
className={errors.message ? 'border-red-500' : ''}
|
||||
placeholder="Tell us about your tax needs..."
|
||||
rows={5}
|
||||
/>
|
||||
{errors.message && (
|
||||
<p className="mt-1 text-sm text-red-600">{errors.message}</p>
|
||||
)}
|
||||
</div>
|
||||
|
||||
<Button
|
||||
type="submit"
|
||||
disabled={isSubmitting}
|
||||
className="w-full"
|
||||
size="lg"
|
||||
>
|
||||
{isSubmitting ? 'Sending...' : 'Send Message'}
|
||||
</Button>
|
||||
</form>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,71 @@
|
|||
import Link from 'next/link';
|
||||
import { Button } from '@/components/ui/button';
|
||||
import { Phone, Mail } from 'lucide-react';
|
||||
|
||||
interface CTASectionProps {
|
||||
title: string;
|
||||
description: string;
|
||||
primaryCta: {
|
||||
text: string;
|
||||
href: string;
|
||||
icon?: 'phone' | 'mail';
|
||||
};
|
||||
secondaryCta?: {
|
||||
text: string;
|
||||
href: string;
|
||||
};
|
||||
variant?: 'default' | 'dark';
|
||||
}
|
||||
|
||||
export function CTASection({
|
||||
title,
|
||||
description,
|
||||
primaryCta,
|
||||
secondaryCta,
|
||||
variant = 'default',
|
||||
}: CTASectionProps) {
|
||||
const isDark = variant === 'dark';
|
||||
const bgClass = isDark ? 'bg-navy' : 'bg-teal';
|
||||
const textClass = isDark ? 'text-cloud' : 'text-cloud';
|
||||
|
||||
const getIcon = () => {
|
||||
if (primaryCta.icon === 'phone') return <Phone className="mr-2 h-4 w-4" />;
|
||||
if (primaryCta.icon === 'mail') return <Mail className="mr-2 h-4 w-4" />;
|
||||
return null;
|
||||
};
|
||||
|
||||
return (
|
||||
<div className={`${bgClass} py-16 sm:py-20`}>
|
||||
<div className="mx-auto max-w-7xl px-4 lg:px-6">
|
||||
<div className="mx-auto max-w-2xl text-center">
|
||||
<h2 className={`text-3xl font-bold tracking-tight ${textClass} sm:text-4xl`}>
|
||||
{title}
|
||||
</h2>
|
||||
<p className={`mt-6 text-lg leading-8 ${isDark ? 'text-slate-300' : 'text-slate-100'}`}>
|
||||
{description}
|
||||
</p>
|
||||
<div className="mt-8 flex items-center justify-center gap-x-6">
|
||||
<Button
|
||||
asChild
|
||||
size="lg"
|
||||
variant={isDark ? 'secondary' : 'default'}
|
||||
>
|
||||
<Link href={primaryCta.href}>
|
||||
{getIcon()}
|
||||
{primaryCta.text}
|
||||
</Link>
|
||||
</Button>
|
||||
{secondaryCta && (
|
||||
<Link
|
||||
href={secondaryCta.href}
|
||||
className={`text-sm font-semibold leading-6 ${textClass} hover:opacity-80 transition-opacity`}
|
||||
>
|
||||
{secondaryCta.text} <span aria-hidden="true">→</span>
|
||||
</Link>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
import Link from 'next/link';
|
||||
import Image from 'next/image';
|
||||
import { Button } from '@/components/ui/button';
|
||||
|
||||
interface HeroProps {
|
||||
title: string;
|
||||
subtitle: string;
|
||||
ctaText: string;
|
||||
ctaHref: string;
|
||||
imageSrc: string;
|
||||
imageAlt: string;
|
||||
reverse?: boolean;
|
||||
}
|
||||
|
||||
export function Hero({
|
||||
title,
|
||||
subtitle,
|
||||
ctaText,
|
||||
ctaHref,
|
||||
imageSrc,
|
||||
imageAlt,
|
||||
reverse = false,
|
||||
}: HeroProps) {
|
||||
return (
|
||||
<div className="relative isolate overflow-hidden bg-navy">
|
||||
<div className="mx-auto max-w-7xl px-4 pb-16 pt-8 sm:pb-24 lg:flex lg:px-6 lg:py-24">
|
||||
<div className={`mx-auto max-w-2xl flex-shrink-0 lg:mx-0 lg:max-w-xl lg:pt-8 ${reverse ? 'lg:order-2' : ''}`}>
|
||||
<div className="mt-16 sm:mt-20 lg:mt-12">
|
||||
<Link href="/contact" className="inline-flex space-x-6">
|
||||
<span className="rounded-full bg-teal/10 px-3 py-1 text-sm font-semibold leading-6 text-teal ring-1 ring-inset ring-teal/10">
|
||||
Book Your Consultation
|
||||
</span>
|
||||
</Link>
|
||||
</div>
|
||||
<h1 className="mt-10 text-4xl font-bold tracking-tight text-cloud sm:text-6xl">
|
||||
{title}
|
||||
</h1>
|
||||
<p className="mt-6 text-lg leading-8 text-cloud/90">
|
||||
{subtitle}
|
||||
</p>
|
||||
<div className="mt-10 flex items-center gap-x-6">
|
||||
<Button asChild size="lg">
|
||||
<Link href={ctaHref}>
|
||||
{ctaText}
|
||||
</Link>
|
||||
</Button>
|
||||
<Link href="/about" className="text-sm font-semibold leading-6 text-cloud hover:text-cloud/80 transition-colors">
|
||||
Learn more <span aria-hidden="true">→</span>
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
<div className={`mx-auto mt-12 flex max-w-2xl sm:mt-16 lg:ml-8 lg:mr-0 lg:mt-0 lg:max-w-none lg:flex-none xl:ml-20 ${reverse ? 'lg:order-1' : ''}`}>
|
||||
<div className="max-w-2xl flex-none sm:max-w-3xl lg:max-w-none">
|
||||
<Image
|
||||
src={imageSrc}
|
||||
alt={imageAlt}
|
||||
width={1200}
|
||||
height={800}
|
||||
className="w-[40rem] rounded-md bg-white/5 shadow-2xl ring-1 ring-white/10"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
import { Calendar, Upload, CheckCircle } from 'lucide-react';
|
||||
|
||||
const steps = [
|
||||
{
|
||||
id: 1,
|
||||
name: 'Book',
|
||||
description: 'Schedule your consultation with our tax experts',
|
||||
icon: Calendar,
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
name: 'Prepare',
|
||||
description: 'Securely upload your documents and we prepare your returns',
|
||||
icon: Upload,
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
name: 'Delivered',
|
||||
description: 'Receive your completed returns with detailed explanations',
|
||||
icon: CheckCircle,
|
||||
},
|
||||
];
|
||||
|
||||
export function ProcessSteps() {
|
||||
return (
|
||||
<div className="bg-cloud py-16 sm:py-20">
|
||||
<div className="mx-auto max-w-7xl px-4 lg:px-6">
|
||||
<div className="mx-auto max-w-2xl text-center">
|
||||
<h2 className="text-3xl font-bold tracking-tight text-ink sm:text-4xl">
|
||||
Simple 3-Step Process
|
||||
</h2>
|
||||
<p className="mt-6 text-lg leading-8 text-slate">
|
||||
We make tax preparation straightforward and stress-free. Here's how we work together to get your taxes done right.
|
||||
</p>
|
||||
</div>
|
||||
<div className="mx-auto mt-12 max-w-2xl sm:mt-16 lg:mt-20 lg:max-w-none">
|
||||
<dl className="grid max-w-xl grid-cols-1 gap-x-8 gap-y-16 lg:max-w-none lg:grid-cols-3">
|
||||
{steps.map((step) => (
|
||||
<div key={step.id} className="flex flex-col">
|
||||
<dt className="flex items-center gap-x-3 text-base font-semibold leading-7 text-ink">
|
||||
<div className="flex h-10 w-10 items-center justify-center rounded-lg bg-navy">
|
||||
<step.icon className="h-6 w-6 text-cloud" aria-hidden="true" />
|
||||
</div>
|
||||
Step {step.id}: {step.name}
|
||||
</dt>
|
||||
<dd className="mt-4 flex flex-auto flex-col text-base leading-7 text-slate">
|
||||
<p className="flex-auto">{step.description}</p>
|
||||
</dd>
|
||||
</div>
|
||||
))}
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,115 @@
|
|||
'use client';
|
||||
|
||||
import { useState } from 'react';
|
||||
import { Upload, File, X, CheckCircle } from 'lucide-react';
|
||||
import { Button } from '@/components/ui/button';
|
||||
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
|
||||
|
||||
export function SecureUpload() {
|
||||
const [files, setFiles] = useState<File[]>([]);
|
||||
const [isUploading, setIsUploading] = useState(false);
|
||||
|
||||
const handleFileSelect = (event: React.ChangeEvent<HTMLInputElement>) => {
|
||||
const selectedFiles = Array.from(event.target.files || []);
|
||||
setFiles(prev => [...prev, ...selectedFiles]);
|
||||
};
|
||||
|
||||
const removeFile = (index: number) => {
|
||||
setFiles(prev => prev.filter((_, i) => i !== index));
|
||||
};
|
||||
|
||||
const handleUpload = async () => {
|
||||
setIsUploading(true);
|
||||
// TODO: Implement actual file upload to S3 or similar service
|
||||
// This is a stub implementation
|
||||
await new Promise(resolve => setTimeout(resolve, 2000));
|
||||
setIsUploading(false);
|
||||
setFiles([]);
|
||||
};
|
||||
|
||||
return (
|
||||
<Card className="max-w-2xl mx-auto">
|
||||
<CardHeader>
|
||||
<CardTitle>Secure Document Upload</CardTitle>
|
||||
<CardDescription>
|
||||
Upload your tax documents securely. All files are encrypted and stored safely.
|
||||
</CardDescription>
|
||||
</CardHeader>
|
||||
<CardContent className="space-y-6">
|
||||
<div className="border-2 border-dashed border-slate-300 rounded-lg p-6 text-center">
|
||||
<Upload className="mx-auto h-12 w-12 text-slate-400" />
|
||||
<div className="mt-4">
|
||||
<label htmlFor="file-upload" className="cursor-pointer">
|
||||
<span className="text-sm font-medium text-navy hover:text-teal">
|
||||
Click to upload
|
||||
</span>
|
||||
<span className="text-slate-500"> or drag and drop</span>
|
||||
</label>
|
||||
<input
|
||||
id="file-upload"
|
||||
name="file-upload"
|
||||
type="file"
|
||||
multiple
|
||||
className="sr-only"
|
||||
onChange={handleFileSelect}
|
||||
accept=".pdf,.jpg,.jpeg,.png,.doc,.docx"
|
||||
/>
|
||||
</div>
|
||||
<p className="text-xs text-slate-500 mt-2">
|
||||
PDF, JPG, PNG, DOC up to 10MB each
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{files.length > 0 && (
|
||||
<div className="space-y-3">
|
||||
<h4 className="font-medium text-ink">Selected Files:</h4>
|
||||
{files.map((file, index) => (
|
||||
<div key={index} className="flex items-center justify-between p-3 bg-sand rounded-lg">
|
||||
<div className="flex items-center space-x-3">
|
||||
<File className="h-5 w-5 text-navy" />
|
||||
<div>
|
||||
<p className="text-sm font-medium text-ink">{file.name}</p>
|
||||
<p className="text-xs text-slate">
|
||||
{(file.size / 1024 / 1024).toFixed(2)} MB
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<button
|
||||
onClick={() => removeFile(index)}
|
||||
className="text-slate-400 hover:text-red-500"
|
||||
>
|
||||
<X className="h-4 w-4" />
|
||||
</button>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
|
||||
<div className="bg-blue-50 border border-blue-200 rounded-lg p-4">
|
||||
<div className="flex items-start space-x-3">
|
||||
<CheckCircle className="h-5 w-5 text-blue-600 mt-0.5" />
|
||||
<div className="text-sm text-blue-800">
|
||||
<p className="font-medium">Secure & Private</p>
|
||||
<p className="mt-1">
|
||||
Your documents are encrypted and stored securely. Only authorized personnel can access your files.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<Button
|
||||
onClick={handleUpload}
|
||||
disabled={files.length === 0 || isUploading}
|
||||
className="w-full"
|
||||
size="lg"
|
||||
>
|
||||
{isUploading ? 'Uploading...' : 'Upload Documents'}
|
||||
</Button>
|
||||
|
||||
<p className="text-xs text-slate-500 text-center">
|
||||
Note: This is a demo interface. In production, this would integrate with a secure file storage service.
|
||||
</p>
|
||||
</CardContent>
|
||||
</Card>
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
import Link from 'next/link';
|
||||
import Image from 'next/image';
|
||||
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
|
||||
import { Button } from '@/components/ui/button';
|
||||
import { ArrowRight } from 'lucide-react';
|
||||
|
||||
interface ServiceCardProps {
|
||||
title: string;
|
||||
description: string;
|
||||
image: string;
|
||||
imageAlt: string;
|
||||
href: string;
|
||||
features?: string[];
|
||||
}
|
||||
|
||||
export function ServiceCard({ title, description, image, imageAlt, href, features }: ServiceCardProps) {
|
||||
return (
|
||||
<Card className="overflow-hidden hover:shadow-lg transition-shadow">
|
||||
<div className="aspect-square relative">
|
||||
<Image
|
||||
src={image}
|
||||
alt={imageAlt}
|
||||
fill
|
||||
className="object-cover"
|
||||
/>
|
||||
</div>
|
||||
<CardHeader>
|
||||
<CardTitle className="text-xl">{title}</CardTitle>
|
||||
<CardDescription className="text-base">{description}</CardDescription>
|
||||
</CardHeader>
|
||||
<CardContent>
|
||||
{features && (
|
||||
<ul className="space-y-2 mb-6">
|
||||
{features.slice(0, 3).map((feature, index) => (
|
||||
<li key={index} className="flex items-center text-sm text-slate">
|
||||
<div className="w-1.5 h-1.5 bg-teal rounded-full mr-2" />
|
||||
{feature}
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
)}
|
||||
<Button asChild className="w-full">
|
||||
<Link href={href}>
|
||||
Learn More
|
||||
<ArrowRight className="ml-2 h-4 w-4" />
|
||||
</Link>
|
||||
</Button>
|
||||
</CardContent>
|
||||
</Card>
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,123 @@
|
|||
import Link from 'next/link';
|
||||
import { Mail, Phone, MapPin, Clock } from 'lucide-react';
|
||||
|
||||
const navigation = {
|
||||
services: [
|
||||
{ name: 'Public Accounting', href: '/services/public-accounting' },
|
||||
{ name: 'Federal Income Tax', href: '/services/federal-income-tax' },
|
||||
{ name: 'Estate Tax Planning', href: '/services/estate-tax-planning' },
|
||||
{ name: 'Financial Planning', href: '/services/financial-planning' },
|
||||
{ name: 'Advisory Services', href: '/services/advisory' },
|
||||
],
|
||||
company: [
|
||||
{ name: 'About', href: '/about' },
|
||||
{ name: 'Pricing', href: '/pricing' },
|
||||
{ name: 'Reviews', href: '/reviews' },
|
||||
{ name: 'Contact', href: '/contact' },
|
||||
],
|
||||
legal: [
|
||||
{ name: 'Privacy Policy', href: '/legal/privacy' },
|
||||
{ name: 'Terms of Service', href: '/legal/terms' },
|
||||
],
|
||||
};
|
||||
|
||||
export function SiteFooter() {
|
||||
return (
|
||||
<footer className="bg-navy text-cloud" aria-labelledby="footer-heading">
|
||||
<h2 id="footer-heading" className="sr-only">
|
||||
Footer
|
||||
</h2>
|
||||
<div className="mx-auto max-w-7xl px-4 pb-6 pt-12 sm:pt-16 lg:px-6 lg:pt-20">
|
||||
<div className="xl:grid xl:grid-cols-3 xl:gap-8">
|
||||
<div className="space-y-8">
|
||||
<div className="text-2xl font-bold">Hampton, Brown & Associates, PC</div>
|
||||
<p className="text-sm leading-6 text-slate-300">
|
||||
Expert federal income and estate tax services, financial planning, and goal-oriented strategies in Corpus Christi, Texas.
|
||||
We assist our clients with their tax and accounting needs and achieving economic goals.
|
||||
</p>
|
||||
<div className="space-y-4">
|
||||
<div className="flex items-center space-x-3">
|
||||
<MapPin className="h-5 w-5 text-teal" />
|
||||
<span className="text-sm">Corpus Christi, TX</span>
|
||||
</div>
|
||||
<div className="flex items-center space-x-3">
|
||||
<Phone className="h-5 w-5 text-teal" />
|
||||
<span className="text-sm">(361) 888-7711</span>
|
||||
</div>
|
||||
<div className="flex items-center space-x-3">
|
||||
<Mail className="h-5 w-5 text-teal" />
|
||||
<span className="text-sm">info@hamptonbrown.com</span>
|
||||
</div>
|
||||
<div className="flex items-center space-x-3">
|
||||
<Clock className="h-5 w-5 text-teal" />
|
||||
<span className="text-sm">Mon-Fri 9AM-5PM</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="mt-16 grid grid-cols-2 gap-8 xl:col-span-2 xl:mt-0">
|
||||
<div className="md:grid md:grid-cols-2 md:gap-8">
|
||||
<div>
|
||||
<h3 className="text-sm font-semibold leading-6">Services</h3>
|
||||
<ul role="list" className="mt-6 space-y-4">
|
||||
{navigation.services.map((item) => (
|
||||
<li key={item.name}>
|
||||
<Link href={item.href} className="text-sm leading-6 text-slate-300 hover:text-cloud transition-colors">
|
||||
{item.name}
|
||||
</Link>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
<div className="mt-10 md:mt-0">
|
||||
<h3 className="text-sm font-semibold leading-6">Company</h3>
|
||||
<ul role="list" className="mt-6 space-y-4">
|
||||
{navigation.company.map((item) => (
|
||||
<li key={item.name}>
|
||||
<Link href={item.href} className="text-sm leading-6 text-slate-300 hover:text-cloud transition-colors">
|
||||
{item.name}
|
||||
</Link>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div className="md:grid md:grid-cols-2 md:gap-8">
|
||||
<div>
|
||||
<h3 className="text-sm font-semibold leading-6">Legal</h3>
|
||||
<ul role="list" className="mt-6 space-y-4">
|
||||
{navigation.legal.map((item) => (
|
||||
<li key={item.name}>
|
||||
<Link href={item.href} className="text-sm leading-6 text-slate-300 hover:text-cloud transition-colors">
|
||||
{item.name}
|
||||
</Link>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
<div className="mt-10 md:mt-0">
|
||||
<h3 className="text-sm font-semibold leading-6">Resources</h3>
|
||||
<ul role="list" className="mt-6 space-y-4">
|
||||
<li>
|
||||
<Link href="/resources" className="text-sm leading-6 text-slate-300 hover:text-cloud transition-colors">
|
||||
Secure Upload
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link href="/resources" className="text-sm leading-6 text-slate-300 hover:text-cloud transition-colors">
|
||||
Payment Portal
|
||||
</Link>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="mt-12 border-t border-slate-700 pt-6 sm:mt-16 lg:mt-20">
|
||||
<p className="text-xs leading-5 text-slate-400">
|
||||
© {new Date().getFullYear()} Hampton, Brown & Associates, PC. All rights reserved.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,107 @@
|
|||
'use client';
|
||||
|
||||
import Link from 'next/link';
|
||||
import { useState } from 'react';
|
||||
import { Menu, X, Phone } from 'lucide-react';
|
||||
import { Button } from '@/components/ui/button';
|
||||
|
||||
const navigation = [
|
||||
{ name: 'Services', href: '/services' },
|
||||
{ name: 'About', href: '/about' },
|
||||
{ name: 'Resources', href: '/resources' },
|
||||
{ name: 'Reviews', href: '/reviews' },
|
||||
{ name: 'Contact', href: '/contact' },
|
||||
];
|
||||
|
||||
export function SiteHeader() {
|
||||
const [mobileMenuOpen, setMobileMenuOpen] = useState(false);
|
||||
|
||||
return (
|
||||
<header className="bg-cloud shadow-sm">
|
||||
<nav className="mx-auto flex max-w-7xl items-center justify-between p-4 lg:px-6" aria-label="Global">
|
||||
<div className="flex lg:flex-1">
|
||||
<Link href="/" className="-m-1.5 p-1.5">
|
||||
<span className="sr-only">Hampton Brown & Associates, PC</span>
|
||||
<div className="text-2xl font-bold text-navy">Hampton Brown & Associates, PC</div>
|
||||
</Link>
|
||||
</div>
|
||||
<div className="flex lg:hidden">
|
||||
<button
|
||||
type="button"
|
||||
className="-m-2.5 inline-flex items-center justify-center rounded-md p-2.5 text-slate"
|
||||
onClick={() => setMobileMenuOpen(true)}
|
||||
>
|
||||
<span className="sr-only">Open main menu</span>
|
||||
<Menu className="h-6 w-6" aria-hidden="true" />
|
||||
</button>
|
||||
</div>
|
||||
<div className="hidden lg:flex lg:gap-x-12">
|
||||
{navigation.map((item) => (
|
||||
<Link
|
||||
key={item.name}
|
||||
href={item.href}
|
||||
className="text-sm font-semibold leading-6 text-ink hover:text-navy transition-colors"
|
||||
>
|
||||
{item.name}
|
||||
</Link>
|
||||
))}
|
||||
</div>
|
||||
<div className="hidden lg:flex lg:flex-1 lg:justify-end">
|
||||
<Button asChild>
|
||||
<Link href="/contact">
|
||||
<Phone className="mr-2 h-4 w-4" />
|
||||
Book a Call
|
||||
</Link>
|
||||
</Button>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
{/* Mobile menu */}
|
||||
{mobileMenuOpen && (
|
||||
<div className="lg:hidden">
|
||||
<div className="fixed inset-0 z-50" />
|
||||
<div className="fixed inset-y-0 right-0 z-50 w-full overflow-y-auto bg-cloud px-6 py-6 sm:max-w-sm sm:ring-1 sm:ring-slate-900/10">
|
||||
<div className="flex items-center justify-between">
|
||||
<Link href="/" className="-m-1.5 p-1.5">
|
||||
<span className="sr-only">Hampton Brown & Associates, PC</span>
|
||||
<div className="text-2xl font-bold text-navy">Hampton Brown & Associates, PC</div>
|
||||
</Link>
|
||||
<button
|
||||
type="button"
|
||||
className="-m-2.5 rounded-md p-2.5 text-slate"
|
||||
onClick={() => setMobileMenuOpen(false)}
|
||||
>
|
||||
<span className="sr-only">Close menu</span>
|
||||
<X className="h-6 w-6" aria-hidden="true" />
|
||||
</button>
|
||||
</div>
|
||||
<div className="mt-6 flow-root">
|
||||
<div className="-my-6 divide-y divide-slate-500/10">
|
||||
<div className="space-y-2 py-6">
|
||||
{navigation.map((item) => (
|
||||
<Link
|
||||
key={item.name}
|
||||
href={item.href}
|
||||
className="-mx-3 block rounded-lg px-3 py-2 text-base font-semibold leading-7 text-ink hover:bg-sand"
|
||||
onClick={() => setMobileMenuOpen(false)}
|
||||
>
|
||||
{item.name}
|
||||
</Link>
|
||||
))}
|
||||
</div>
|
||||
<div className="py-6">
|
||||
<Button asChild className="w-full">
|
||||
<Link href="/contact">
|
||||
<Phone className="mr-2 h-4 w-4" />
|
||||
Book a Call
|
||||
</Link>
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</header>
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
import { Star } from 'lucide-react';
|
||||
import { Card, CardContent } from '@/components/ui/card';
|
||||
|
||||
interface TestimonialProps {
|
||||
quote: string;
|
||||
author: string;
|
||||
role: string;
|
||||
rating: number;
|
||||
}
|
||||
|
||||
export function Testimonial({ quote, author, role, rating }: TestimonialProps) {
|
||||
return (
|
||||
<Card className="bg-sand border-0">
|
||||
<CardContent className="p-6">
|
||||
<div className="flex mb-4">
|
||||
{[...Array(5)].map((_, i) => (
|
||||
<Star
|
||||
key={i}
|
||||
className={`h-5 w-5 ${
|
||||
i < rating ? 'text-yellow-400 fill-current' : 'text-slate-300'
|
||||
}`}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
<blockquote className="text-lg font-medium text-ink mb-4">
|
||||
"{quote}"
|
||||
</blockquote>
|
||||
<div className="flex items-center">
|
||||
<div className="flex-shrink-0">
|
||||
<div className="w-10 h-10 bg-navy rounded-full flex items-center justify-center">
|
||||
<span className="text-cloud font-semibold text-sm">
|
||||
{author.split(' ').map(n => n[0]).join('')}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div className="ml-3">
|
||||
<p className="text-sm font-semibold text-ink">{author}</p>
|
||||
<p className="text-sm text-slate">{role}</p>
|
||||
</div>
|
||||
</div>
|
||||
</CardContent>
|
||||
</Card>
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
import { Shield, Lock, CheckCircle } from 'lucide-react';
|
||||
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
|
||||
|
||||
const trustFeatures = [
|
||||
{
|
||||
icon: Shield,
|
||||
title: 'Bank-Level Security',
|
||||
description: 'Your data is protected with enterprise-grade encryption',
|
||||
},
|
||||
{
|
||||
icon: Lock,
|
||||
title: 'Secure Client Portal',
|
||||
description: 'Private, password-protected access to your documents',
|
||||
},
|
||||
{
|
||||
icon: CheckCircle,
|
||||
title: 'IRS Certified',
|
||||
description: 'Our preparers are IRS certified and stay current with tax law',
|
||||
},
|
||||
];
|
||||
|
||||
export function TrustPanel() {
|
||||
return (
|
||||
<div className="bg-navy py-16 sm:py-20">
|
||||
<div className="mx-auto max-w-7xl px-4 lg:px-6">
|
||||
<div className="mx-auto max-w-2xl text-center">
|
||||
<h2 className="text-3xl font-bold tracking-tight text-cloud sm:text-4xl">
|
||||
Your Security & Trust Are Our Priority
|
||||
</h2>
|
||||
<p className="mt-6 text-lg leading-8 text-slate-300">
|
||||
We understand the sensitive nature of your financial information. That's why we've implemented the highest security standards to protect your data.
|
||||
</p>
|
||||
</div>
|
||||
<div className="mx-auto mt-12 max-w-2xl sm:mt-16 lg:mt-20 lg:max-w-none">
|
||||
<dl className="grid max-w-xl grid-cols-1 gap-x-8 gap-y-16 lg:max-w-none lg:grid-cols-3">
|
||||
{trustFeatures.map((feature) => (
|
||||
<Card key={feature.title} className="bg-slate-800 border-slate-700">
|
||||
<CardHeader>
|
||||
<div className="flex h-12 w-12 items-center justify-center rounded-lg bg-teal">
|
||||
<feature.icon className="h-6 w-6 text-cloud" aria-hidden="true" />
|
||||
</div>
|
||||
<CardTitle className="text-cloud">{feature.title}</CardTitle>
|
||||
</CardHeader>
|
||||
<CardContent>
|
||||
<CardDescription className="text-slate-300">
|
||||
{feature.description}
|
||||
</CardDescription>
|
||||
</CardContent>
|
||||
</Card>
|
||||
))}
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
import * as React from 'react';
|
||||
import { cva, type VariantProps } from 'class-variance-authority';
|
||||
|
||||
import { cn } from '@/lib/utils';
|
||||
|
||||
const badgeVariants = cva(
|
||||
'inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',
|
||||
{
|
||||
variants: {
|
||||
variant: {
|
||||
default:
|
||||
'border-transparent bg-navy text-cloud hover:bg-navy/80',
|
||||
secondary:
|
||||
'border-transparent bg-teal text-cloud hover:bg-teal/80',
|
||||
destructive:
|
||||
'border-transparent bg-red-500 text-cloud hover:bg-red-500/80',
|
||||
outline: 'text-navy',
|
||||
},
|
||||
},
|
||||
defaultVariants: {
|
||||
variant: 'default',
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
export interface BadgeProps
|
||||
extends React.HTMLAttributes<HTMLDivElement>,
|
||||
VariantProps<typeof badgeVariants> {}
|
||||
|
||||
function Badge({ className, variant, ...props }: BadgeProps) {
|
||||
return (
|
||||
<div className={cn(badgeVariants({ variant }), className)} {...props} />
|
||||
);
|
||||
}
|
||||
|
||||
export { Badge, badgeVariants };
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
import * as React from 'react';
|
||||
import { Slot } from '@radix-ui/react-slot';
|
||||
import { cva, type VariantProps } from 'class-variance-authority';
|
||||
|
||||
import { cn } from '@/lib/utils';
|
||||
|
||||
const buttonVariants = cva(
|
||||
'inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',
|
||||
{
|
||||
variants: {
|
||||
variant: {
|
||||
default: 'bg-navy text-cloud hover:bg-navy/90',
|
||||
destructive:
|
||||
'bg-destructive text-destructive-foreground hover:bg-destructive/90',
|
||||
outline:
|
||||
'border border-input bg-background hover:bg-accent hover:text-accent-foreground',
|
||||
secondary:
|
||||
'bg-teal text-cloud hover:bg-teal/90',
|
||||
ghost: 'hover:bg-accent hover:text-accent-foreground',
|
||||
link: 'text-navy underline-offset-4 hover:underline',
|
||||
},
|
||||
size: {
|
||||
default: 'h-10 px-4 py-2',
|
||||
sm: 'h-9 rounded-md px-3',
|
||||
lg: 'h-11 rounded-md px-8',
|
||||
icon: 'h-10 w-10',
|
||||
},
|
||||
},
|
||||
defaultVariants: {
|
||||
variant: 'default',
|
||||
size: 'default',
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
export interface ButtonProps
|
||||
extends React.ButtonHTMLAttributes<HTMLButtonElement>,
|
||||
VariantProps<typeof buttonVariants> {
|
||||
asChild?: boolean;
|
||||
}
|
||||
|
||||
const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
|
||||
({ className, variant, size, asChild = false, ...props }, ref) => {
|
||||
const Comp = asChild ? Slot : 'button';
|
||||
return (
|
||||
<Comp
|
||||
className={cn(buttonVariants({ variant, size, className }))}
|
||||
ref={ref}
|
||||
{...props}
|
||||
/>
|
||||
);
|
||||
}
|
||||
);
|
||||
Button.displayName = 'Button';
|
||||
|
||||
export { Button, buttonVariants };
|
||||
|
|
@ -0,0 +1,79 @@
|
|||
import * as React from 'react';
|
||||
|
||||
import { cn } from '@/lib/utils';
|
||||
|
||||
const Card = React.forwardRef<
|
||||
HTMLDivElement,
|
||||
React.HTMLAttributes<HTMLDivElement>
|
||||
>(({ className, ...props }, ref) => (
|
||||
<div
|
||||
ref={ref}
|
||||
className={cn(
|
||||
'rounded-lg border border-slate-200 bg-cloud text-ink shadow-sm',
|
||||
className
|
||||
)}
|
||||
{...props}
|
||||
/>
|
||||
));
|
||||
Card.displayName = 'Card';
|
||||
|
||||
const CardHeader = React.forwardRef<
|
||||
HTMLDivElement,
|
||||
React.HTMLAttributes<HTMLDivElement>
|
||||
>(({ className, ...props }, ref) => (
|
||||
<div
|
||||
ref={ref}
|
||||
className={cn('flex flex-col space-y-1.5 p-6', className)}
|
||||
{...props}
|
||||
/>
|
||||
));
|
||||
CardHeader.displayName = 'CardHeader';
|
||||
|
||||
const CardTitle = React.forwardRef<
|
||||
HTMLParagraphElement,
|
||||
React.HTMLAttributes<HTMLHeadingElement>
|
||||
>(({ className, ...props }, ref) => (
|
||||
<h3
|
||||
ref={ref}
|
||||
className={cn(
|
||||
'text-2xl font-semibold leading-none tracking-tight text-navy',
|
||||
className
|
||||
)}
|
||||
{...props}
|
||||
/>
|
||||
));
|
||||
CardTitle.displayName = 'CardTitle';
|
||||
|
||||
const CardDescription = React.forwardRef<
|
||||
HTMLParagraphElement,
|
||||
React.HTMLAttributes<HTMLParagraphElement>
|
||||
>(({ className, ...props }, ref) => (
|
||||
<p
|
||||
ref={ref}
|
||||
className={cn('text-sm text-slate', className)}
|
||||
{...props}
|
||||
/>
|
||||
));
|
||||
CardDescription.displayName = 'CardDescription';
|
||||
|
||||
const CardContent = React.forwardRef<
|
||||
HTMLDivElement,
|
||||
React.HTMLAttributes<HTMLDivElement>
|
||||
>(({ className, ...props }, ref) => (
|
||||
<div ref={ref} className={cn('p-6 pt-0', className)} {...props} />
|
||||
));
|
||||
CardContent.displayName = 'CardContent';
|
||||
|
||||
const CardFooter = React.forwardRef<
|
||||
HTMLDivElement,
|
||||
React.HTMLAttributes<HTMLDivElement>
|
||||
>(({ className, ...props }, ref) => (
|
||||
<div
|
||||
ref={ref}
|
||||
className={cn('flex items-center p-6 pt-0', className)}
|
||||
{...props}
|
||||
/>
|
||||
));
|
||||
CardFooter.displayName = 'CardFooter';
|
||||
|
||||
export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
import * as React from 'react';
|
||||
|
||||
import { cn } from '@/lib/utils';
|
||||
|
||||
export interface InputProps
|
||||
extends React.InputHTMLAttributes<HTMLInputElement> {}
|
||||
|
||||
const Input = React.forwardRef<HTMLInputElement, InputProps>(
|
||||
({ className, type, ...props }, ref) => {
|
||||
return (
|
||||
<input
|
||||
type={type}
|
||||
className={cn(
|
||||
'flex h-10 w-full rounded-md border border-slate-200 bg-cloud px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-slate-500 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-navy focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',
|
||||
className
|
||||
)}
|
||||
ref={ref}
|
||||
{...props}
|
||||
/>
|
||||
);
|
||||
}
|
||||
);
|
||||
Input.displayName = 'Input';
|
||||
|
||||
export { Input };
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
import * as React from 'react';
|
||||
|
||||
import { cn } from '@/lib/utils';
|
||||
|
||||
export interface TextareaProps
|
||||
extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}
|
||||
|
||||
const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(
|
||||
({ className, ...props }, ref) => {
|
||||
return (
|
||||
<textarea
|
||||
className={cn(
|
||||
'flex min-h-[80px] w-full rounded-md border border-slate-200 bg-cloud px-3 py-2 text-sm ring-offset-background placeholder:text-slate-500 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-navy focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',
|
||||
className
|
||||
)}
|
||||
ref={ref}
|
||||
{...props}
|
||||
/>
|
||||
);
|
||||
}
|
||||
);
|
||||
Textarea.displayName = 'Textarea';
|
||||
|
||||
export { Textarea };
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
# Image Generation Prompts for Hamton Brown CPA Website
|
||||
|
||||
## Home / Landing "/tax-planning/"
|
||||
|
||||
### Hero (primary) – Universal:
|
||||
"Two CPAs in a sunlit Corpus Christi office reviewing a year-round tax plan on a laptop, neat desk with calendar and organized folders, confident and approachable expressions, deep navy-teal accents on stationery, large clean wall for headline space, authentic documentary look, natural coastal light, high detail — no handshake pose, no calculator close-up"
|
||||
|
||||
### Hero – Midjourney v6:
|
||||
"Two CPAs in a bright Corpus Christi office, reviewing a year-round tax plan on a laptop, organized desk, calendar on wall, deep navy-teal accents, generous negative space, editorial documentary photo, shallow depth of field, natural coastal light, realistic skin tones, high detail, 50mm — no handshake, no calculator close-up, no cheesy stock --ar 3:2 --v 6 --stylize 80"
|
||||
|
||||
### Hero – SDXL:
|
||||
"photo of CPAs in a bright office, reviewing a tax plan on a laptop, organized desk, wall calendar, deep navy-teal accents, generous negative space, documentary style, natural light, shallow depth of field, realistic skin, high detail, 50mm, professional color grading ++NEG: handshake, calculator close-up, gavel, watermark ++CFG:7 ++Steps:35 ++Sampler:DPM++"
|
||||
|
||||
### Process Graphic (Book → Prepare → Delivered) – Universal:
|
||||
"Three minimal line-icon panels in one image: 1) calendar with checkmark (Book), 2) secure folder upload icon (Prepare), 3) stamped document or envelope (Delivered). Flat vector, navy-teal primary, neutral background, consistent stroke weight, ample padding, modern financial icon set, accessible contrast, export as transparent PNG"
|
||||
|
||||
### Process Graphic – Midjourney (vector style):
|
||||
"minimal line icons set, three panels 'Book', 'Prepare', 'Delivered', navy-teal on light neutral, flat vector, consistent stroke weight, modern financial style, high contrast, clean grids, ample negative space — no gradients --ar 3:2 --v 6 --style raw"
|
||||
|
||||
### Trust/Detail (office + security cue) – Universal:
|
||||
"Close, elegant detail of a secure client portal screen on a laptop with a subtle lock icon reflection, navy-teal accent in the UI, tidy desk, soft natural light, shallow depth of field, copy space on right — no visible brand names, no hands shaking"
|
||||
|
||||
### Services Cards (square set of 5, Universal pattern; swap subject):
|
||||
"Square card photo, [Tax Planning | Income Tax Preparation | Estate Tax Planning | Financial Planning | Advisory], authentic office context, one clear subject (document review, e-file confirmation, estate folder, retirement planning chart, advisory meeting notes), navy-teal stationery accent, soft natural light, clean background, centered composition, copy space top/bottom — no calculator macro, no cliché props"
|
||||
|
||||
## Service Pages
|
||||
|
||||
### Tax Planning – Hero:
|
||||
"CPA presenting a simple year-round tax roadmap on a wall display, quarterly milestones visible (Q1–Q4), client listening, navy-teal markers, bright window light, generous negative space, documentary style — no handshake"
|
||||
|
||||
### Tax Planning – Detail:
|
||||
"Flat lay of organized tax planning kit: quarterly estimate sheet, sticky notes, pen, tidy folder with navy-teal tab, soft top-down light, ample whitespace — no messy desk, no cash"
|
||||
|
||||
### Income Tax Preparation – Hero:
|
||||
"CPA reviewing a finalized 1040 return on screen with e-file confirmation banner, client beside them, calm smiles, tidy office, navy-teal accent, clean background for headline — no calculator close-up"
|
||||
|
||||
### Income Tax Preparation – Detail:
|
||||
"Printer tray with neatly stacked signed pages and an e-file confirmation slip, shallow depth of field, neutral background, soft natural light — no visible PII"
|
||||
|
||||
### Estate Tax Planning – Hero:
|
||||
"Professional meeting with an older client and adult child discussing estate documents, calm respectful tone, discreet folder labeled 'Estate Plan', warm afternoon light, navy-teal accent, dignified documentary style — no staged handshake"
|
||||
|
||||
### Estate Tax Planning – Detail:
|
||||
"Close shot of neatly arranged estate binder tabs (assets, gifting, filings), premium paper texture, soft side light, copy space — no brand logos"
|
||||
|
||||
### Financial Planning – Hero:
|
||||
"CPA walking a client through a retirement projection chart on a laptop, tidy table, plant in background, soft daylight, navy-teal accent lines, optimistic but grounded mood — no stock-trader vibe"
|
||||
|
||||
### Financial Planning – Detail:
|
||||
"Minimal still life: notebook with simple chart arrows, pen, glasses, navy-teal ribbon bookmark, bright neutral backdrop, overhead composition"
|
||||
|
||||
### Advisory – Hero:
|
||||
"Whiteboard strategy session: KPIs and simple cash-flow arrows, two professionals discussing options, clean lettering, navy-teal markers, large blank area for headline, natural light — no clutter"
|
||||
|
||||
### Advisory – Detail:
|
||||
"Close shot of a tidy notebook page with action items checkboxes, navy-teal tick marks, soft desk texture, shallow depth of field"
|
||||
|
||||
## About
|
||||
|
||||
### Partners/Team:
|
||||
"Formal yet friendly portrait of two partners in the office, natural smiles, business-casual, navy-teal accent in background décor, shallow depth of field, neutral wall, generous negative space — no crossed-arms trope"
|
||||
|
||||
### Office Environment:
|
||||
"Wide, welcoming shot of reception/meeting area with natural light, minimal décor, navy-teal accent, clean signage space, distortion-free 35–50mm look"
|
||||
|
||||
## Pricing/Plans – Hero:
|
||||
"Transparent, calming still life: neatly stacked estimate sheets with a clear 'No-Surprise Fees' note card, navy-teal clip, soft daylight, plenty of whitespace for overlay text — no coins, no piggy bank"
|
||||
|
||||
## Resources (Secure Pay & Upload) – Hero:
|
||||
"Abstract tech-meets-trust visual: close shot of a laptop showing a secure upload UI with a subtle lock icon, navy-teal progress bar, clean background, copy space — no brand names, no fake padlocks"
|
||||
|
||||
## Reviews/Proof – Background Plate:
|
||||
"Soft-focus office background with bokeh lights, navy-teal accent object on desk, large uniform negative space for overlaying testimonial text, warm neutral tones — no people in frame"
|
||||
|
||||
## Contact
|
||||
|
||||
### Exterior / Location Cue:
|
||||
"Corpus Christi downtown exterior near office building, golden hour, tasteful depth, subtle navy-teal overlay element, wide area of sky or wall for overlay text — no signage close-ups with legible trademarks"
|
||||
|
||||
### Map-Friendly Backdrop:
|
||||
"Simple textured paper or light desk surface with a printed map snippet blurred, navy-teal pushpin, large blank space for contact details"
|
||||
|
||||
## Legal (Privacy/Terms) – Minimal Texture:
|
||||
"Ultra-clean paper texture with soft side light, faint navy-teal edge accent, high negative space, subtle shadow gradient — purely minimal, no props"
|
||||
|
|
@ -0,0 +1,92 @@
|
|||
import { Service } from '@/lib/validations';
|
||||
|
||||
export const services: Service[] = [
|
||||
{
|
||||
id: 'public-accounting',
|
||||
title: 'Public Accounting',
|
||||
description: 'Comprehensive public accounting services to help you maintain accurate financial records and meet regulatory requirements.',
|
||||
slug: 'public-accounting',
|
||||
image: '/images/service-tax-planning.jpg',
|
||||
heroImage: '/images/service-tax-planning.jpg',
|
||||
detailImage: '/images/service-tax-planning.jpg',
|
||||
features: [
|
||||
'Financial statement preparation',
|
||||
'Bookkeeping and record keeping',
|
||||
'Audit support and preparation',
|
||||
'Internal control systems',
|
||||
'Compliance and regulatory guidance',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'federal-income-tax',
|
||||
title: 'Federal Income Tax',
|
||||
description: 'Comprehensive federal income tax services including preparation, planning, and strategic tax management.',
|
||||
slug: 'federal-income-tax',
|
||||
image: '/images/service-income-tax.jpg',
|
||||
heroImage: '/images/service-income-tax.jpg',
|
||||
detailImage: '/images/service-income-tax.jpg',
|
||||
features: [
|
||||
'Individual tax return preparation',
|
||||
'Business tax return preparation',
|
||||
'Tax planning and strategy',
|
||||
'E-filing and direct deposit',
|
||||
'Audit support and representation',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'estate-tax-planning',
|
||||
title: 'Estate Tax Planning',
|
||||
description: 'Comprehensive estate tax planning to protect your legacy and minimize estate taxes.',
|
||||
slug: 'estate-tax-planning',
|
||||
image: '/images/service-estate-tax.jpg',
|
||||
heroImage: '/images/service-estate-tax.jpg',
|
||||
detailImage: '/images/service-estate-tax.jpg',
|
||||
features: [
|
||||
'Estate tax analysis and planning',
|
||||
'Trust planning and administration',
|
||||
'Gift tax strategies',
|
||||
'Succession planning',
|
||||
'Estate tax return preparation',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'financial-planning',
|
||||
title: 'Financial Planning',
|
||||
description: 'Comprehensive financial planning to help you achieve your economic goals and control your financial environment.',
|
||||
slug: 'financial-planning',
|
||||
image: '/images/service-financial-planning.jpg',
|
||||
heroImage: '/images/service-financial-planning.jpg',
|
||||
detailImage: '/images/service-financial-planning.jpg',
|
||||
features: [
|
||||
'Economic goal setting',
|
||||
'Investment strategy',
|
||||
'Risk management',
|
||||
'Cash flow analysis',
|
||||
'Goal-based financial planning',
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'advisory',
|
||||
title: 'Advisory Services',
|
||||
description: 'Strategic advisory services to help you achieve your business and economic goals.',
|
||||
slug: 'advisory',
|
||||
image: '/images/service-advisory.jpg',
|
||||
heroImage: '/images/service-advisory.jpg',
|
||||
detailImage: '/images/service-advisory.jpg',
|
||||
features: [
|
||||
'Business structure analysis',
|
||||
'Financial statement analysis',
|
||||
'Cash flow management',
|
||||
'Economic goal development',
|
||||
'Business planning and strategy',
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
export function getServiceBySlug(slug: string): Service | undefined {
|
||||
return services.find((service) => service.slug === slug);
|
||||
}
|
||||
|
||||
export function getAllServices(): Service[] {
|
||||
return services;
|
||||
}
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
[
|
||||
{
|
||||
"id": "1",
|
||||
"quote": "Hamton Brown CPA transformed our tax planning approach. Their year-round strategy saved us over $15,000 in taxes last year alone.",
|
||||
"author": "Sarah Johnson",
|
||||
"role": "Small Business Owner",
|
||||
"rating": 5
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"quote": "Professional, responsive, and incredibly knowledgeable. They made our complex estate tax planning feel straightforward and manageable.",
|
||||
"author": "Michael Chen",
|
||||
"role": "Retired Executive",
|
||||
"rating": 5
|
||||
},
|
||||
{
|
||||
"id": "3",
|
||||
"quote": "The team at Hamton Brown goes above and beyond. They don't just prepare taxes—they help us understand our financial picture.",
|
||||
"author": "Lisa Rodriguez",
|
||||
"role": "Restaurant Owner",
|
||||
"rating": 5
|
||||
},
|
||||
{
|
||||
"id": "4",
|
||||
"quote": "After years of struggling with tax preparation, finding Hamton Brown was a game-changer. Clear communication and transparent pricing.",
|
||||
"author": "David Thompson",
|
||||
"role": "Freelance Consultant",
|
||||
"rating": 5
|
||||
},
|
||||
{
|
||||
"id": "5",
|
||||
"quote": "Their business advisory services helped us restructure our company and save significantly on taxes while improving our cash flow.",
|
||||
"author": "Jennifer Williams",
|
||||
"role": "Tech Startup Founder",
|
||||
"rating": 5
|
||||
},
|
||||
{
|
||||
"id": "6",
|
||||
"quote": "Trustworthy, professional, and results-driven. Hamton Brown has been our trusted financial partner for over five years.",
|
||||
"author": "Robert Davis",
|
||||
"role": "Real Estate Investor",
|
||||
"rating": 5
|
||||
}
|
||||
]
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
version: '3.8'
|
||||
|
||||
services:
|
||||
# Development service
|
||||
app-dev:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
ports:
|
||||
- "3000:3000"
|
||||
volumes:
|
||||
- .:/app
|
||||
- /app/node_modules
|
||||
- /app/.next
|
||||
environment:
|
||||
- NODE_ENV=development
|
||||
command: npm run dev
|
||||
profiles:
|
||||
- dev
|
||||
|
||||
# Production service
|
||||
app-prod:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
ports:
|
||||
- "3000:3000"
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- SITE_URL=${SITE_URL:-https://hamtonbrown.com}
|
||||
- CONTACT_TO_EMAIL=${CONTACT_TO_EMAIL:-contact@hamtonbrown.com}
|
||||
- RESEND_API_KEY=${RESEND_API_KEY}
|
||||
restart: unless-stopped
|
||||
profiles:
|
||||
- prod
|
||||
|
||||
networks:
|
||||
default:
|
||||
name: hamtonbrown-network
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
# Site Configuration
|
||||
SITE_URL=https://hamtonbrown.com
|
||||
CONTACT_TO_EMAIL=contact@hamtonbrown.com
|
||||
|
||||
# Email Service (Resend)
|
||||
RESEND_API_KEY=your_resend_api_key_here
|
||||
|
||||
# Development
|
||||
NODE_ENV=development
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
// TODO: Implement internationalization
|
||||
// This file is a placeholder for future i18n implementation
|
||||
// Consider using next-intl or react-i18next for multi-language support
|
||||
|
||||
export const defaultLocale = 'en';
|
||||
export const supportedLocales = ['en'] as const;
|
||||
|
||||
export type Locale = typeof supportedLocales[number];
|
||||
|
||||
export function getLocaleFromPath(pathname: string): Locale {
|
||||
// TODO: Implement locale detection from pathname
|
||||
return defaultLocale;
|
||||
}
|
||||
|
||||
export function getLocalizedPath(pathname: string, locale: Locale): string {
|
||||
// TODO: Implement localized path generation
|
||||
return pathname;
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
import { type ClassValue, clsx } from 'clsx';
|
||||
import { twMerge } from 'tailwind-merge';
|
||||
|
||||
export function cn(...inputs: ClassValue[]) {
|
||||
return twMerge(clsx(inputs));
|
||||
}
|
||||
|
||||
export function formatPhoneNumber(phone: string): string {
|
||||
const cleaned = phone.replace(/\D/g, '');
|
||||
const match = cleaned.match(/^(\d{3})(\d{3})(\d{4})$/);
|
||||
if (match) {
|
||||
return `(${match[1]}) ${match[2]}-${match[3]}`;
|
||||
}
|
||||
return phone;
|
||||
}
|
||||
|
||||
export function formatCurrency(amount: number): string {
|
||||
return new Intl.NumberFormat('en-US', {
|
||||
style: 'currency',
|
||||
currency: 'USD',
|
||||
}).format(amount);
|
||||
}
|
||||
|
||||
export function slugify(text: string): string {
|
||||
return text
|
||||
.toLowerCase()
|
||||
.replace(/[^\w\s-]/g, '')
|
||||
.replace(/[\s_-]+/g, '-')
|
||||
.replace(/^-+|-+$/g, '');
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
import { z } from 'zod';
|
||||
|
||||
export const contactFormSchema = z.object({
|
||||
name: z.string().min(2, 'Name must be at least 2 characters'),
|
||||
email: z.string().email('Please enter a valid email address'),
|
||||
phone: z.string().optional(),
|
||||
message: z.string().min(10, 'Message must be at least 10 characters'),
|
||||
});
|
||||
|
||||
export const serviceSchema = z.object({
|
||||
id: z.string(),
|
||||
title: z.string(),
|
||||
description: z.string(),
|
||||
slug: z.string(),
|
||||
image: z.string(),
|
||||
heroImage: z.string(),
|
||||
detailImage: z.string(),
|
||||
features: z.array(z.string()),
|
||||
});
|
||||
|
||||
export type ContactFormData = z.infer<typeof contactFormSchema>;
|
||||
export type Service = z.infer<typeof serviceSchema>;
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
/** @type {import('next-sitemap').IConfig} */
|
||||
module.exports = {
|
||||
siteUrl: process.env.SITE_URL || 'https://hamptonbrown.com',
|
||||
generateRobotsTxt: true,
|
||||
generateIndexSitemap: false,
|
||||
exclude: ['/api/*'],
|
||||
robotsTxtOptions: {
|
||||
policies: [
|
||||
{
|
||||
userAgent: '*',
|
||||
allow: '/',
|
||||
disallow: ['/api/', '/admin/'],
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
/** @type {import('next').NextConfig} */
|
||||
const nextConfig = {
|
||||
images: {
|
||||
domains: [],
|
||||
},
|
||||
// Removed rewrite rule - homepage will be at root (/)
|
||||
// async rewrites() {
|
||||
// return [
|
||||
// {
|
||||
// source: '/',
|
||||
// destination: '/tax-planning',
|
||||
// },
|
||||
// ];
|
||||
// },
|
||||
};
|
||||
|
||||
export default nextConfig;
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
{
|
||||
"name": "hamptonbrown-associates",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
"build": "next build",
|
||||
"start": "next start",
|
||||
"lint": "next lint",
|
||||
"type-check": "tsc --noEmit",
|
||||
"format": "prettier --write .",
|
||||
"format:check": "prettier --check .",
|
||||
"prepare": "husky install"
|
||||
},
|
||||
"dependencies": {
|
||||
"@hookform/resolvers": "^3.3.2",
|
||||
"@radix-ui/react-slot": "^1.0.2",
|
||||
"class-variance-authority": "^0.7.0",
|
||||
"clsx": "^2.0.0",
|
||||
"lucide-react": "^0.294.0",
|
||||
"next": "14.0.4",
|
||||
"next-sitemap": "^4.2.3",
|
||||
"react": "^18.2.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"react-hook-form": "^7.48.2",
|
||||
"resend": "^2.1.0",
|
||||
"tailwind-merge": "^2.0.0",
|
||||
"tailwindcss-animate": "^1.0.7",
|
||||
"zod": "^3.22.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^20.10.0",
|
||||
"@types/react": "^18.2.39",
|
||||
"@types/react-dom": "^18.2.17",
|
||||
"autoprefixer": "^10.4.16",
|
||||
"eslint": "^8.54.0",
|
||||
"eslint-config-next": "14.0.4",
|
||||
"husky": "^8.0.3",
|
||||
"lint-staged": "^15.2.0",
|
||||
"postcss": "^8.4.32",
|
||||
"prettier": "^3.1.0",
|
||||
"tailwindcss": "^3.3.6",
|
||||
"typescript": "^5.3.2"
|
||||
},
|
||||
"lint-staged": {
|
||||
"*.{js,jsx,ts,tsx}": [
|
||||
"eslint --fix",
|
||||
"prettier --write"
|
||||
],
|
||||
"*.{json,md}": [
|
||||
"prettier --write"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
module.exports = {
|
||||
plugins: {
|
||||
tailwindcss: {},
|
||||
autoprefixer: {},
|
||||
},
|
||||
};
|
||||
|
After Width: | Height: | Size: 1.1 MiB |
|
After Width: | Height: | Size: 2.1 MiB |
|
After Width: | Height: | Size: 2.1 MiB |
|
After Width: | Height: | Size: 2.3 MiB |
|
After Width: | Height: | Size: 2.1 MiB |
|
After Width: | Height: | Size: 2.1 MiB |
|
After Width: | Height: | Size: 1.4 MiB |
|
After Width: | Height: | Size: 2.2 MiB |
|
After Width: | Height: | Size: 2.3 MiB |
|
After Width: | Height: | Size: 2.2 MiB |
|
|
@ -0,0 +1,10 @@
|
|||
User-agent: *
|
||||
Allow: /
|
||||
|
||||
# Sitemap
|
||||
Sitemap: https://hamptonbrown.com/sitemap.xml
|
||||
|
||||
# Disallow admin and API routes
|
||||
Disallow: /api/
|
||||
Disallow: /_next/
|
||||
Disallow: /admin/
|
||||
|
|
@ -0,0 +1,83 @@
|
|||
import type { Config } from 'tailwindcss';
|
||||
|
||||
const config: Config = {
|
||||
content: [
|
||||
'./pages/**/*.{js,ts,jsx,tsx,mdx}',
|
||||
'./components/**/*.{js,ts,jsx,tsx,mdx}',
|
||||
'./app/**/*.{js,ts,jsx,tsx,mdx}',
|
||||
],
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
border: 'hsl(var(--border))',
|
||||
input: 'hsl(var(--input))',
|
||||
ring: 'hsl(var(--ring))',
|
||||
background: 'hsl(var(--background))',
|
||||
foreground: 'hsl(var(--foreground))',
|
||||
primary: {
|
||||
DEFAULT: 'hsl(var(--primary))',
|
||||
foreground: 'hsl(var(--primary-foreground))',
|
||||
},
|
||||
secondary: {
|
||||
DEFAULT: 'hsl(var(--secondary))',
|
||||
foreground: 'hsl(var(--secondary-foreground))',
|
||||
},
|
||||
destructive: {
|
||||
DEFAULT: 'hsl(var(--destructive))',
|
||||
foreground: 'hsl(var(--destructive-foreground))',
|
||||
},
|
||||
muted: {
|
||||
DEFAULT: 'hsl(var(--muted))',
|
||||
foreground: 'hsl(var(--muted-foreground))',
|
||||
},
|
||||
accent: {
|
||||
DEFAULT: 'hsl(var(--accent))',
|
||||
foreground: 'hsl(var(--accent-foreground))',
|
||||
},
|
||||
popover: {
|
||||
DEFAULT: 'hsl(var(--popover))',
|
||||
foreground: 'hsl(var(--popover-foreground))',
|
||||
},
|
||||
card: {
|
||||
DEFAULT: 'hsl(var(--card))',
|
||||
foreground: 'hsl(var(--card-foreground))',
|
||||
},
|
||||
navy: '#0F2740',
|
||||
teal: '#157A85',
|
||||
ink: '#0F1320',
|
||||
sand: '#F6F7F8',
|
||||
cloud: '#FFFFFF',
|
||||
slate: '#6B7280',
|
||||
},
|
||||
fontFamily: {
|
||||
sans: [
|
||||
'system-ui',
|
||||
'-apple-system',
|
||||
'BlinkMacSystemFont',
|
||||
'Segoe UI',
|
||||
'Roboto',
|
||||
'Helvetica Neue',
|
||||
'Arial',
|
||||
'sans-serif',
|
||||
],
|
||||
},
|
||||
animation: {
|
||||
'fade-in': 'fadeIn 0.5s ease-in-out',
|
||||
'slide-up': 'slideUp 0.3s ease-out',
|
||||
},
|
||||
keyframes: {
|
||||
fadeIn: {
|
||||
'0%': { opacity: '0' },
|
||||
'100%': { opacity: '1' },
|
||||
},
|
||||
slideUp: {
|
||||
'0%': { transform: 'translateY(10px)', opacity: '0' },
|
||||
'100%': { transform: 'translateY(0)', opacity: '1' },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
plugins: [require('tailwindcss-animate')],
|
||||
};
|
||||
|
||||
export default config;
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"lib": ["dom", "dom.iterable", "es6"],
|
||||
"allowJs": true,
|
||||
"skipLibCheck": true,
|
||||
"strict": true,
|
||||
"noEmit": true,
|
||||
"esModuleInterop": true,
|
||||
"module": "esnext",
|
||||
"moduleResolution": "bundler",
|
||||
"resolveJsonModule": true,
|
||||
"isolatedModules": true,
|
||||
"jsx": "preserve",
|
||||
"incremental": true,
|
||||
"plugins": [
|
||||
{
|
||||
"name": "next"
|
||||
}
|
||||
],
|
||||
"baseUrl": ".",
|
||||
"paths": {
|
||||
"@/*": ["./*"]
|
||||
}
|
||||
},
|
||||
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
|
||||
"exclude": ["node_modules"]
|
||||
}
|
||||