Swaps logo-axil.png for logo-axil.jpg (official logo with blue A
lettermark, green bar chart icon and AXIL ACCOUNTANTS wordmark).
Updates Header and Footer references accordingly.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add Server Action (actions.ts) sending to info@ and anastasia@axilaccountants.co.uk
- Add ContactForm client component with useActionState, loading and success states
- Replace static HTML form (action="#") with live ContactForm component
- Add @eslint/eslintrc as direct devDependency (fix ESLint resolution on Node.js 25)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Server uses Traefik (traefik-public network) with Cloudflare DNS
cert resolver. Nginx not needed. Add Traefik labels to app service,
connect to traefik-public + internal networks, remove nginx/certbot.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
tsx v4 + Node.js 22 ESM does not handle extensionless .ts imports.
instrumentation.ts uses compiled/bundled code — no resolution issues.
Migrations run automatically before first request on every app start.
Removes external migrator container approach entirely.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Build stage runs pnpm build which changes ESM resolution context.
New migrator stage has deps+src only — clean env for tsx/payload migrate.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Runner stage is minimal — no pnpm. Add migrator service using
build target which has full node_modules + pnpm.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Block body prevents implicit return of HTMLButtonElement | null,
fixing TS error in stricter React ref type checking.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- New /courses page with 5 course cards (Interview Ready, Self
Assessment, Payroll, QuickBooks, Xero) with thumbnail images,
pricing, includes checklists, and enrol CTAs
- Added course images to public/courses/ and Assets/
- Contact page: updated email, phone (07440 594192), address
(Suite 29 Beaufort Court E14 9XL), hours, and added Courses
option to the "I'm interested in" select field
- Header: added Courses to desktop nav and mobile dock
(GraduationCap icon) between Services and Blog
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- services/page.tsx: remove duplicate 'Talk to us' (both went to /contact);
fix 'Book Free Consultation' missing href; swap to BeamButton for consistency
- about/page.tsx: remove 'Contact Us' button duplicating BeamButton on same page;
remove now-unused Button import
- contact/page.tsx: replace "directly in our calendar" with call-back copy
since no calendar integration exists yet
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- ProcessSection: 'Get started' href /services → /contact
- BlogPreviewSection: fix invalid <Link> nested inside <Button> (was <button><a>)
- ContactPage: 'Book free consultation' sidebar button now href="#contact-form"
with matching id on the form element (was unclickable — no href)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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 <noreply@anthropic.com>