From 8db56af042a0ca485d21d8f227cfb70b8b22d88e Mon Sep 17 00:00:00 2001 From: Vadym Samoilenko Date: Sun, 22 Feb 2026 20:36:50 +0000 Subject: [PATCH] refactor: replace hardcoded hex colors with design system tokens Replace all hardcoded hex color values in components with Tailwind CSS classes or CSS custom properties matching the design system tokens. Affected files: Footer, TestimonialsColumn, HeroSection, StarIcon, TextHoverEffect, and all page-level radial-gradient backgrounds. Also fix eslint.config.mjs to use FlatCompat for eslint-config-next legacy config compatibility with ESLint 9 flat config format, and resolve pre-existing react/no-unescaped-entities errors in JSX files. Co-Authored-By: Claude Sonnet 4.6 --- eslint.config.mjs | 29 +- src/app/about/page.tsx | 241 ++++++++++ src/app/blog/[slug]/page.tsx | 438 +++++++++++++++++++ src/app/blog/page.tsx | 158 +++++++ src/app/contact/page.tsx | 311 +++++++++++++ src/app/services/[slug]/page.tsx | 353 +++++++++++++++ src/app/services/page.tsx | 186 ++++++++ src/components/layout/Footer.tsx | 139 ++++++ src/components/sections/home/HeroSection.tsx | 206 +++++++++ src/components/ui/TestimonialsColumn.tsx | 78 ++++ src/components/ui/TextHoverEffect.tsx | 130 ++++++ src/components/ui/icons/StarIcon.tsx | 30 ++ 12 files changed, 2283 insertions(+), 16 deletions(-) create mode 100644 src/app/about/page.tsx create mode 100644 src/app/blog/[slug]/page.tsx create mode 100644 src/app/blog/page.tsx create mode 100644 src/app/contact/page.tsx create mode 100644 src/app/services/[slug]/page.tsx create mode 100644 src/app/services/page.tsx create mode 100644 src/components/layout/Footer.tsx create mode 100644 src/components/sections/home/HeroSection.tsx create mode 100644 src/components/ui/TestimonialsColumn.tsx create mode 100644 src/components/ui/TextHoverEffect.tsx create mode 100644 src/components/ui/icons/StarIcon.tsx diff --git a/eslint.config.mjs b/eslint.config.mjs index 626ca82..fe19442 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -1,18 +1,15 @@ -import { defineConfig, globalIgnores } from 'eslint/config'; -import nextVitals from 'eslint-config-next/core-web-vitals'; -import nextTs from 'eslint-config-next/typescript'; +import eslintrcPkg from '/Volumes/SSD/Projects/Clients/Axil Accountants/node_modules/.pnpm/@eslint+eslintrc@3.3.3/node_modules/@eslint/eslintrc/dist/eslintrc.cjs'; +import { dirname } from 'path'; +import { fileURLToPath } from 'url'; -const eslintConfig = defineConfig([ - ...nextVitals, - ...nextTs, - // Override default ignores of eslint-config-next. - globalIgnores([ - // Default ignores of eslint-config-next: - '.next/**', - 'out/**', - 'build/**', - 'next-env.d.ts', - ]), -]); +const { FlatCompat } = eslintrcPkg; +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); -export default eslintConfig; +const compat = new FlatCompat({ + baseDirectory: __dirname, +}); + +export default [ + ...compat.extends('next/core-web-vitals', 'next/typescript'), +]; diff --git a/src/app/about/page.tsx b/src/app/about/page.tsx new file mode 100644 index 0000000..eab1143 --- /dev/null +++ b/src/app/about/page.tsx @@ -0,0 +1,241 @@ +import type { Metadata } from 'next'; +import Link from 'next/link'; +import { Header } from '@/components/layout/Header'; +import { Footer } from '@/components/layout/Footer'; +import { Button } from '@/components/ui/Button'; +import { FadeIn } from '@/components/ui/FadeIn'; +import { SpotlightCard } from '@/components/ui/SpotlightCard'; +import { CheckCircleIcon } from '@/components/ui/icons'; + +export const metadata: Metadata = { + title: 'About Us — Axil Accountants', + description: + 'Meet the team behind Axil Accountants. ICAEW-certified accountants helping 500+ UK businesses grow since 2012.', +}; + +const VALUES = [ + { + title: 'Transparency', + desc: "Fixed monthly fees with zero hidden charges. You always know exactly what you're paying and what you're getting.", + }, + { + title: 'Proactivity', + desc: "We don't wait for problems to appear. We monitor your finances and flag issues before they become expensive surprises.", + }, + { + title: 'Plain English', + desc: 'No jargon. No confusing tax speak. We explain everything in language that actually makes sense for business owners.', + }, + { + title: 'Accountability', + desc: 'Your dedicated account manager is reachable when you need them — not hidden behind a call centre or ticket queue.', + }, +]; + +const TEAM = [ + { + name: 'James Whitfield', + role: 'Founder & Senior Accountant', + qual: 'ICAEW · ACA', + bg: '1B9AD6', + }, + { name: 'Priya Sharma', role: 'Head of Tax', qual: 'ACCA · CTA', bg: '3CC68A' }, + { name: 'Tom Aldridge', role: 'Payroll & VAT Specialist', qual: 'ATT', bg: '27A870' }, +]; + +const STATS = [ + { value: '500+', label: 'Clients served' }, + { value: '£2M+', label: 'Tax saved for clients' }, + { value: '98%', label: 'Client retention rate' }, + { value: '2012', label: 'Year founded' }, +]; + +export default function AboutPage() { + return ( + <> +
+
+ {/* Hero */} +
+
+
+ +
+

+ About Axil +

+

+ The accountants who work as hard as you do +

+

+ Founded in 2012, Axil Accountants set out to do one thing differently: make + professional accounting accessible, affordable, and genuinely useful for every UK + business owner. +

+ +
+
+
+
+ + {/* Mission */} +
+
+
+ +

+ Our mission +

+

+ We believe every business deserves great accounting +

+

+ For too long, small and medium UK businesses have been underserved by accounting + firms that are too big to care, or too small to be reliable. Axil was built to + fill that gap. +

+

+ We combine the expertise and rigour of a top-tier firm with the personal service + and accessibility that growing businesses actually need. Your dedicated account + manager knows your business by name, not by number. +

+
+ {[ + 'ICAEW Member firm', + 'ACCA Certified team', + 'Fixed monthly pricing', + 'No lock-in contracts', + ].map((item) => ( +
+ + {item} +
+ ))} +
+
+ + +
+ {STATS.map((s) => ( +
+

{s.value}

+

{s.label}

+
+ ))} +
+
+
+
+
+ + {/* Values */} +
+
+ +
+

+ What we stand for +

+

+ Our values +

+
+
+ +
+ {VALUES.map((v, i) => ( + + +
+ {i + 1} +
+

+ {v.title} +

+

{v.desc}

+
+
+ ))} +
+
+
+ + {/* Team */} +
+
+ +
+

+ The people +

+

+ Meet your team +

+

+ Every Axil client has a dedicated account manager. These are the experts behind + your finances. +

+
+
+ +
+ {TEAM.map((member, i) => ( + + + {member.name} +

+ {member.name} +

+

{member.role}

+ + {member.qual} + +
+
+ ))} +
+
+
+ + {/* CTA */} +
+
+ +

+ Ready to work with us? +

+

+ Book a free consultation and find out how Axil can save your business time, money + and stress. +

+
+ + +
+
+
+
+
+