Choice Insurance Website

A modern, high-performance insurance website built with Next.js, TypeScript, and Tailwind CSS. Optimized for speed, accessibility, and SEO.
π Table of Contents
π Quick Start
Prerequisites
- Node.js 20.x or higher
- pnpm (recommended) or npm
Setup
-
Clone and setup the project:
git clone <repository-url>
cd choice-insurance-website
pnpm run setup
```bash
-
Start development server:
-
Open your browser:
Navigate to http://localhost:3000
π Available Scripts
Development
pnpm run dev
- Start development server with Turbopack
pnpm run setup
- Initial project setup for new developers
Building & Testing
pnpm run build
- Standard production build
pnpm run build:optimize
- Optimized build with pre/post checks
pnpm run test:build
- Clean build for testing
pnpm run start
- Start production server locally
Code Quality
pnpm run lint
- Run ESLint
pnpm run lint:fix
- Fix ESLint issues automatically
pnpm run format
- Format code with Prettier
pnpm run format:check
- Check code formatting
pnpm run type-check
- TypeScript type checking
Maintenance
pnpm run clean
- Remove build artifacts
pnpm run clean:all
- Remove build artifacts and node_modules
pnpm run analyze
- Analyze bundle size
ποΈ Build & Deploy Process
Local Development Build
# Quick build
pnpm run build
# Optimized build with all checks
pnpm run build:optimize
# Test build (clean + build)
pnpm run test:build
Prebuild Process
The project includes automated quality checks before each build:
# Prebuild script runs automatically before 'pnpm run build'
pnpm run prebuild # Runs: lint + type-check + validate-pwa
Prebuild Steps:
- ESLint: Code quality and style checking
- TypeScript: Type checking for type safety
- PWA Validation: Ensures Progressive Web App configuration is valid
This ensures that only high-quality, properly typed code gets deployed to production.
Netlify Deployment
The project is configured for automatic deployment on Netlify:
- Automatic Deployment: Push to
main
branch triggers production deployment
- Preview Deployments: Pull requests create preview deployments
-
Build Command:
pnpm install --frozen-lockfile && pnpm run print-versions && pnpm run build
- Publish Directory:
.next
Netlify Configuration (netlify.toml
)
This project includes a netlify.toml
file at the root to control build, environment, headers, plugins, and redirects. Key settings:
- Node Version: 20, PNPM Version: 10.12.1
- Build Cache: Enabled for Next.js (
NEXT_CACHE=true
)
- Memory Optimization: Node options set for increased memory
- Asset Caching: Long-term cache headers for static assets
- Security: Strict security headers set for all routes
- Plugins: Includes
@netlify/plugin-nextjs
and netlify-plugin-bundle-env
for bundling environment variables into functions
- SPA Redirect: All routes fallback to
/index.html
for client-side routing
Example snippet:
[build]
base = "."
command = "pnpm install --frozen-lockfile && pnpm run print-versions && pnpm run build"
publish = ".next"
[build.environment]
NODE_VERSION = "20"
PNPM_VERSION = "10.12.1"
NEXT_CACHE = "true"
NODE_OPTIONS = "--max-old-space-size=4096"
[functions]
directory = "netlify/functions"
[[plugins]]
package = "@netlify/plugin-nextjs"
[[plugins]]
package = "netlify-plugin-bundle-env"
[plugins.inputs]
directories = ["netlify/functions"]
include = [
"NEXT_PUBLIC_API_URL",
"NEXT_PUBLIC_FIREBASE_KEY",
"NEXT_PUBLIC_SENTRY_DSN"
]
mask = true
[[redirects]]
from = "/*"
to = "/index.html"
status = 200
Environment Variables
Create a .env.local
file (use the template created by pnpm run setup
):
# Required
NEXT_PUBLIC_API_URL=your_api_url
NEXT_PUBLIC_SITE_URL=your_site_url
# Optional
NEXT_PUBLIC_GA4_ID=your_google_analytics_4_id
NEXT_PUBLIC_GTM_ID=your_google_tag_manager_id
NEXT_PUBLIC_FIREBASE_KEY=your_firebase_key
NEXT_PUBLIC_SENTRY_DSN=your_sentry_dsn
Note: The netlify-plugin-bundle-env
bundles certain environment variables for use in Netlify functions. Add any variables to both your .env.local
and the include
list in netlify.toml
if they are needed in serverless functions.
π οΈ Tech Stack
- Framework: Next.js 15.3.3
- Language: TypeScript
- Styling: Tailwind CSS
- UI Components: Radix UI
- Package Manager: pnpm
- Deployment: Netlify
- CI/CD: GitHub Actions (optional)
π― Navigation Features
Recent Updates & Fixes
Latest Updates (January 2025)
PWA & Service Worker Enhancements
- Issue: Service worker not properly controlling start_url and pages for PWA compliance
- Solution: Complete PWA optimization for Lighthouse compliance
- Changes Made:
- Service Worker Registration: Immediate registration on page load with proper scope (
/
)
- Enhanced Caching: Improved cache management with proper expiration times
- Start URL Control: Service worker now properly controls all pages including start_url
- Offline Support: Enhanced offline page with better UX
- Version Management: Added API endpoint for cache version checking
- Files Updated:
src/app/layout.tsx
- Service worker registration improvements
public/sw.js
- Enhanced caching strategy and client control
src/app/api/version/route.ts
- Version checking endpoint
- Benefits:
- β
Passes PWA baseline requirements
- β
Better offline experience
- β
Improved cache management
- β
Proper service worker scope control
Viewport & Mobile Optimization
- Issue: Viewport sizing issues causing content overflow on mobile
- Solution: Comprehensive viewport and responsive fixes
- Changes Made:
- CSS Fixes: Added
overflow-x: hidden
to prevent horizontal scrolling
- Viewport Meta: Enhanced viewport configuration with
viewportFit: 'cover'
- Container Sizing: Proper max-width and overflow handling
- Theme Color: Updated to brand color
#42615A
for consistent theming
- Files Updated:
src/app/globals.css
- Viewport and responsive CSS fixes
src/app/layout.tsx
- Enhanced viewport configuration
- Benefits:
- β
No horizontal scrolling on mobile
- β
Proper viewport sizing
- β
Consistent theme color in address bar
- β
Better mobile experience
Accessibility Improvements
- Issue: Non-descriptive link text and small tap targets failing accessibility audits
- Solution: Comprehensive accessibility enhancements
- Changes Made:
- Descriptive Links: Changed βRead Moreβ to βRead Full Articleβ with aria-labels
- Tap Target Sizing: Increased all interactive elements to 48x48px minimum
- Focus Management: Added proper focus states with ring indicators
- Category Tags: Enhanced clickable category tags with proper sizing
- Button Styling: Improved button contrast and visual feedback
- Files Updated:
src/components/blog/FeaturedBlogPosts.tsx
src/app/blog/page.tsx
src/app/blog/category/[category]/page.tsx
src/components/blog/RelatedPosts.tsx
- Benefits:
- β
All links have descriptive text for screen readers
- β
All tap targets meet 48x48px accessibility standard
- β
Better focus management for keyboard navigation
- β
Improved mobile touch experience
- Issue: Services dropdown still closing too quickly despite previous fixes
- Solution: Maximum timing delays with pointer event prevention
- Changes Made:
- Radix Delays: Increased to 10000ms (10 seconds) for both
delayDuration
and skipDelayDuration
- Trigger Timeout: Increased to 8000ms (8 seconds) when leaving Services button
- Content Timeout: Increased to 7000ms (7 seconds) when leaving dropdown content
- Wrapper Timeout: Increased to 6000ms (6 seconds) for wrapper area protection
- Pointer Events: Added
onPointerEnter
and onPointerLeave
to prevent default Radix behavior
- Custom Control: Now relies entirely on custom mouse handlers instead of Radix defaults
- Files Updated:
src/components/layout/Header.tsx
- Maximum timing with pointer event prevention
- Benefits:
- β
10 full seconds to navigate from Services button to dropdown items
- β
Multiple safety layers with maximum generous timing
- β
Pointer event prevention stops default quick-close behavior
- β
Completely eliminates premature closures
- β
Optimal user experience with reliable dropdown navigation
Brand Palette Integration
- Issue: Brand palette component was commented out
- Solution: Restored brand palette for design consistency
- Changes Made:
- Component Restoration: Uncommented BrandPalette import and usage
- Debug Access: Available via
?debug=palette
URL parameter
- Color Documentation: Complete brand color reference with usage guidelines
- Files Updated:
src/app/layout.tsx
- Restored BrandPalette component
- Benefits:
- β
Easy access to brand colors for developers
- β
Consistent color usage across site
- β
Design system documentation
Previous Updates (December 2024)
- Issue: Navigation dropdown was closing too quickly when moving mouse between elements
- Solution: Increased
skipDelayDuration
from 300ms to 3000ms in Header.tsx
- Location:
src/components/layout/Header.tsx
line 42
- Impact: Improved user experience with more forgiving navigation timing
- Issue: Homepage service cards had inconsistent heights due to varying content lengths
- Solution: Applied flexbox layout with consistent height distribution
- Changes Made:
- Added
flex h-full flex-col
to Card components
- Added
flex flex-1 flex-col items-center justify-between
to CardContent
- Location:
src/app/page.tsx
lines 110-119
- Result: All service cards now have uniform height with buttons aligned at bottom
- Issue: Unbalanced layout with first column having 2 services, second column having 6 services
- Solution: Redistributed services for better visual balance
- Changes:
- Before: First column (All Services + 2 services), Second column (6 services)
- After: First column (All Services + 3 services), Second column (5 services)
- Implementation: Modified
slice(0, 2)
to slice(0, 3)
and slice(2)
to slice(3)
- Location:
src/components/layout/Header.tsx
lines 111 and 130
- Issue: Service buttons in dropdown had inconsistent heights
- Solution: Applied consistent minimum height and flexbox centering
- Changes: Added
min-h-[80px] flex flex-col justify-center
to all service buttons
- CSS Conflict Fix: Removed conflicting
block
class that was conflicting with flex
- Location:
src/components/layout/Header.tsx
lines 115 and 134
- Issue: Navigation dropdown appeared to be floating without proper background
- Solution: Enhanced background styling for better visibility
- Changes:
- Changed from
bg-brand-teal-blue
to bg-white
for better contrast
- Enhanced shadow from
shadow-lg
to shadow-xl
- Updated text color to
text-brand-black
for readability
- Location:
src/components/layout/Header.tsx
line 91
- Issue: Inconsistent icon references and missing comprehensive favicon support
- Solution: Optimized meta icons configuration for better browser and PWA support
- Changes Made:
- Layout.tsx Icons: Enhanced icon configuration with multiple formats
- Added proper favicon.ico support with correct MIME type
- Added SVG icon support for modern browsers
- Included comprehensive PNG icon sizes (16x16, 32x32, 96x96, 144x144, 192x192, 512x512)
- Added Safari mask-icon with brand color
- Optimized Apple touch icon configuration
- Manifest.json: Fixed PWA manifest with correct file paths
- Updated icon references to use existing files in
/icons/
directory
- Fixed shortcuts to use proper icon paths
- Ensured maskable icons for better PWA experience
- Locations:
src/app/layout.tsx
lines 45-87
public/manifest.json
lines 15-55, 62-93
- Benefits:
- Better favicon display across all browsers
- Improved PWA installation experience
- Consistent branding across all platforms
- Enhanced SEO with proper meta icons
Services Dropdown Gradient Enhancement (January 2025)
- Enhancement: Added beautiful teal-to-white gradient background to dropdown container
- Implementation:
bg-gradient-to-br from-brand-teal-blue via-white to-brand-teal-blue/50
- Visual Effect:
- Top-left: Full teal blue (
#A7C9CA
)
- Center: Pure white (
#FFFFFF
)
- Bottom-right: Semi-transparent teal (50% opacity)
- Direction: Diagonal bottom-right gradient for modern depth
- Benefits:
- Modern Appearance: Contemporary gradient design
- Visual Depth: Creates subtle 3D effect
- Brand Consistency: Uses brand teal blue colors
- Professional Look: Elegant transition from teal to white
- Location:
src/components/layout/Header.tsx
line 93
- Cache-Bust: v4.5 - Service buttons optimized to 68px height for perfect text display
The website features a sophisticated dropdown navigation menu for the Services section with complete custom styling specifications implemented.
Last Updated: January 21, 2025 - Complete styling specifications documented and implemented
π¨ Complete Styling Specifications
- Background:
#42615A
(Deep Forest Green)
- Text Color:
#FFFFFF
(White)
- Hover Background:
#A7C9CA
(Teal Blue)
- Hover Text:
#000000
(Black)
- Dimensions: 36px height (
h-9
), auto-width (w-max
)
- Padding: 16px horizontal, 8px vertical (
px-4 py-2
)
- Typography: 14px (
text-sm
), 500 weight (font-medium
)
- Border Radius: 6px (
rounded-md
)
Dropdown Container
- Background: Beautiful teal-to-white gradient (
bg-gradient-to-br from-brand-teal-blue via-white to-brand-teal-blue/50
)
- From:
#A7C9CA
(Teal Blue) - Top-left corner
- Via:
#FFFFFF
(White) - Center transition
- To:
rgba(167, 201, 202, 0.5)
(Teal Blue 50% opacity) - Bottom-right corner
- Direction: Bottom-right diagonal gradient (
to-br
)
- Border: 1px solid
#8BB5B7
(Teal Blue Dark)
- Border Radius: 8px (
rounded-lg
)
- Shadow:
shadow-lg
(0 10px 15px -3px rgba(0, 0, 0, 0.1))
- Padding: 16px (
p-4
)
- Gap: 8px (
gap-2
)
- Responsive Width:
- Mobile: 400px (
w-[400px]
)
- Medium: 500px (
md:w-[500px]
)
- Large: 600px (
lg:w-[600px]
)
- Grid: Single column on mobile, 2 columns on medium+ (
md:grid-cols-2
)
- Background:
#42615A
(Deep Forest Green)
- Text Color:
#FFFFFF
(White)
- Hover Background:
rgba(66, 97, 90, 0.9)
(90% opacity)
- Border: 1px solid
#42615A
- Border Radius: 8px (
rounded-lg
)
- Padding: 24px (
p-6
)
- Width: Takes up full column width (190-290px depending on screen)
- Height:
flex-1
= Expands to fill available space (120-140px)
- Flex:
flex-1
(expands to fill available space)
- Transitions:
transition-all duration-200
(200ms)
- Hover Effects:
- Shadow:
hover:shadow-lg
- Scale:
hover:scale-[1.02]
(2% increase)
- Typography:
- Title: 18px font-bold (
text-lg font-bold
)
- Description: 14px with 90% opacity (
text-sm text-brand-white/90
)
- Default State:
- Background:
#42615A
(Deep Forest Green)
- Text Color:
#FFFFFF
(White)
- Border: 1px solid
#42615A
(Deep Forest Green)
- Shadow:
shadow-md
(medium shadow)
- Hover State:
- Background:
rgba(66, 97, 90, 0.9)
(Deep Forest Green 90% opacity)
- Text Color:
#FFFFFF
(White)
- Border: 1px solid
#42615A
- Shadow:
hover:shadow-lg
(large shadow)
- Scale:
hover:scale-[1.02]
(2% increase)
- Dimensions: Fixed height 68px (
h-[68px]
) - Optimized for perfect text display
- Padding: 16px (
p-4
) - Enhanced from previous 12px
- Gap: 12px (
gap-3
) between buttons - Improved spacing
- Border Radius: 8px (
rounded-lg
)
- Transitions:
transition-all duration-200
(200ms)
- Typography:
- Service Name: 14px font-medium (
text-sm font-medium
)
- Description: 12px (
text-xs
)
- Color Transitions: Black to white on hover with group hover classes
- Issue: Service buttons were transparent by default, only turning dark green on hover
- Solution: Made service buttons dark green by default for better prominence
- Changes:
- Default State: Dark green background (
bg-brand-deep-forest-green
) with white text
- Enhanced Sizing: Increased height from 56px to 68px (
h-[68px]
) for perfect text display
- Better Padding: Upgraded from
p-3
to p-4
for more comfortable spacing
- Improved Gap: Increased grid gap from
gap-2
to gap-3
for better separation
- Enhanced Shadow: Added default
shadow-md
with hover:shadow-lg
- Refined Hover: Subtle opacity change (
hover:bg-brand-deep-forest-green/90
)
- Benefits:
- Better Visibility: Dark green buttons stand out prominently
- Consistent Branding: Matches βAll Servicesβ header button styling
- Improved UX: Buttons are immediately recognizable as clickable
- Professional Look: Enhanced spacing and shadows for premium feel
- Location:
src/components/layout/Header.tsx
lines 110-126
Brand Color Palette
brand: {
white: "#FFFFFF",
"teal-blue": "#A7C9CA",
"teal-blue-dark": "#8BB5B7",
"deep-forest-green": "#42615A",
"warm-beige-coral": "#DD8B66",
"warm-beige-coral-dark": "#C77A52",
black: "#000000",
}
Responsive Behavior
- Mobile (< 768px): Single column, 400px width
- Tablet (768px+): Two columns, 500px width
- Desktop (1024px+): Two columns, 600px width
- Navigation Menu: Hidden on mobile, visible on large screens (
hidden lg:flex
)
Animation & Transitions
- Duration: 200ms for all transitions
- Easing: Default CSS easing
- Hover Scale: 1.02 (2% increase)
- Color Transitions: Smooth color changes on hover/focus
- Shadow Transitions: Smooth shadow appearance on hover
Accessibility Features
- Focus States: Proper focus styling with
focus:
variants
- Outline:
outline-none
with custom focus styles
- Select:
select-none
to prevent text selection
- ARIA: Proper semantic structure with navigation roles
Design & Branding
- Brand Colors: Uses Choice Insurance brand colors consistently throughout all elements
- Professional Styling: Clean, modern design with subtle shadows and smooth transitions
- Consistent Theming: All hover states and interactions follow brand guidelines
Layout & Structure
[Services βΌ] β Trigger button
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β [All Services - Large Button] β [Health Insurance] β
β β [Life Insurance] β
β [Medicare Advantage] β [Final Expense] β
β [Medicare Supplement] β [Cancer/Illness] β
β β [Hospital Indem.] β
β β [Annuities] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Technical Implementation
- Framework: Built with Radix UI NavigationMenu for accessibility
- Positioning: Absolutely positioned dropdown anchored to trigger button
- Responsive Dimensions:
- Mobile: 400px width, single column
- Tablet: 500px width, 2-column grid
- Desktop: 600px width, 2-column grid
- Layout: CSS Grid with responsive breakpoints (
md:grid-cols-2
)
- Responsive: Hidden on mobile/tablet (uses mobile menu instead)
- Touch-Friendly: Hover events disabled on touch devices
- Animation: Smooth transitions with 200ms duration and scale transforms
User Experience Features
- Hover Activation: Opens on mouse enter, closes on mouse leave
- Forgiving Navigation: 3000ms delay (
skipDelayDuration
) prevents accidental closure when moving between elements
- Keyboard Navigation: Full keyboard accessibility support
- Visual Feedback: Smooth transitions and hover effects
- Consistent Anchoring: Dropdown always appears directly below trigger
- No Layout Shifts: Fixed positioning prevents content jumping
Service Categories Included
- All Services (prominent main button)
- Health Insurance
- Life Insurance
- Medicare Advantage
- Medicare Supplement
- Final Expense
- Cancer/Critical Illness
- Hospital Indemnity
- Annuities
Code Location & Implementation
- Component:
src/components/layout/Header.tsx
- Navigation Data:
src/constants/navigation.ts
- Styling: Tailwind CSS with brand color utilities
- Key Implementation Details:
- Uses
NavigationMenuTrigger
with custom brand styling
- Container uses responsive grid:
grid w-[400px] md:w-[500px] md:grid-cols-2 lg:w-[600px]
- βAll Servicesβ button uses
flex-1
to expand and fill available space
- Individual service buttons use
group
classes for hover state management
- All buttons include
transform hover:scale-[1.02]
for subtle hover animations
- Color transitions managed with
group-hover:
prefixes for nested elements
- Navigation root configured with
skipDelayDuration={3000}
for forgiving user interaction
Customization
To modify the dropdown menu:
- Add/Remove Services: Edit
FOOTER_LINKS.services
in src/constants/navigation.ts
- Change Colors: Update brand colors in
tailwind.config.js
- Adjust Layout: Modify grid structure in
Header.tsx
- Update Dimensions: Change
w-[600px]
class for different width
Browser Support
- Modern Browsers: Full support with all features
- Legacy Browsers: Graceful degradation with basic functionality
- Mobile Devices: Replaced with mobile-optimized menu
π Project Structure
βββ src/
β βββ app/ # Next.js app directory
β βββ components/ # Reusable components
β βββ lib/ # Utility functions
β βββ hooks/ # Custom React hooks
β βββ types/ # TypeScript type definitions
β βββ constants/ # App constants
βββ public/ # Static assets
βββ content/ # Content files (blog, etc.)
βββ scripts/ # Build and utility scripts
βββ netlify/ # Netlify functions
βββ .github/ # GitHub Actions workflows
- Script Optimization: Intelligent script loading strategies
- Critical CSS: Automated critical CSS generation
- Image Optimization: Next.js Image component with Sharp
- Bundle Analysis: Built-in bundle size analysis
- Caching: Optimized caching headers for static assets
π§ Development Workflow
- Start Development:
pnpm run dev
- Make Changes: Edit files with hot reload
- Check Code Quality:
pnpm run lint && pnpm run type-check
- Format Code:
pnpm run format
- Test Build:
pnpm run test:build
- Deploy: Push to repository (auto-deploys via Netlify)
π Code Quality
- ESLint: Configured with Next.js and TypeScript rules
- Prettier: Code formatting with Tailwind CSS plugin
- TypeScript: Strict type checking
- Pre-build Checks: Automated linting and type checking before builds
π€ Contributing
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature
- Make your changes
- Run quality checks:
pnpm run lint && pnpm run type-check
- Commit your changes:
git commit -m 'Add amazing feature'
- Push to the branch:
git push origin feature/amazing-feature
- Open a Pull Request
π§ Troubleshooting
Common Issues & Solutions
Problem: Navigation dropdown closes too quickly
- Solution: Check
skipDelayDuration
in Header.tsx
(should be 3000ms)
- Location:
src/components/layout/Header.tsx
line 42
Problem: Navigation menu appears floating without background
- Solution: Ensure proper background classes are applied
- Check:
bg-white text-brand-black shadow-xl
on dropdown container
- Location:
src/components/layout/Header.tsx
line 91
Problem: CSS conflicts in Tailwind classes
- Solution: Remove conflicting classes (e.g.,
block
+ flex
)
- Check: Service button classes should use
flex
without block
- Location:
src/components/layout/Header.tsx
lines 115, 134
Layout Issues
Problem: Service cards have inconsistent heights
- Solution: Apply flexbox layout with height distribution
- Required Classes:
- Card:
flex h-full flex-col
- CardContent:
flex flex-1 flex-col items-center justify-between
- Location:
src/app/page.tsx
Problem: Unbalanced dropdown menu layout
- Solution: Redistribute services between columns
- Current Setup: First column (3 services), Second column (5 services)
- Modify:
slice(0, 3)
and slice(3)
in service mapping
- Location:
src/components/layout/Header.tsx
Development Issues
Problem: Build fails with TypeScript errors
- Solution: Run
pnpm run type-check
to identify issues
- Fix: Address type errors before building
Problem: Linting errors prevent build
- Solution: Run
pnpm run lint:fix
to auto-fix issues
- Manual: Check ESLint output for remaining issues
Problem: Styling not applying correctly
- Solution: Check Tailwind class conflicts
- Tool: Use browser dev tools to inspect computed styles
- Verify: Ensure classes are not being overridden
Problem: Favicon not displaying correctly in browsers
- Solution: Check icon file paths and formats
- Verify: Ensure favicon.ico, favicon.png, and icon.svg exist in
/public/
- Check: Browser cache - clear cache and hard refresh
- Location:
src/app/layout.tsx
icons configuration
Problem: PWA installation not working properly
- Solution: Validate manifest.json configuration
- Check: All icon paths in manifest.json point to existing files
- Verify: Icon sizes match actual file dimensions
- Tool: Use browser dev tools > Application > Manifest to debug
- Location:
public/manifest.json
Problem: Icons not showing on mobile devices
- Solution: Ensure apple-touch-icon.png exists and is properly configured
- Check: Apple touch icon should be 180x180 pixels
- Verify: Meta tags in layout.tsx include apple-mobile-web-app settings
- Location:
public/apple-touch-icon.png
Quick Fixes Reference
# Fix navigation delay
# In Header.tsx line 42: skipDelayDuration={3000}
# Fix service card heights
# In page.tsx: className="flex h-full flex-col"
# In CardContent: className="flex flex-1 flex-col items-center justify-between"
# Fix dropdown background
# In Header.tsx line 91: className="...bg-white text-brand-black shadow-xl"
# Fix CSS conflicts
# Remove 'block' class when using 'flex'
# Use: className="flex min-h-[80px] select-none flex-col justify-center..."
# Fix meta icons configuration
# In layout.tsx: Ensure comprehensive icon configuration with multiple formats
# In manifest.json: Update icon paths to match existing files in /icons/ directory
# Check: favicon.ico, favicon.png, icon.svg, apple-touch-icon.png exist in /public/
π Current Version Summary
Version 5.1 - Navigation Timing Fix (January 2025)
Cache Version: v2025.6.24.08301750748470308-navigation-timing-fix
π― Key Improvements
- β
PWA Compliance: Full Progressive Web App baseline requirements met
- β
Accessibility: WCAG compliant with proper tap targets and descriptive links
- β
Navigation UX: 10-second navigation timing with pointer event prevention for optimal user experience
- β
Mobile Optimization: Proper viewport handling and responsive design
- β
Brand Integration: Restored brand palette with debug access
- Service Worker: Immediate registration with proper scope control
- Caching Strategy: Enhanced cache management with smart expiration
- Offline Support: Improved offline experience with better UX
- Mobile Viewport: Fixed content sizing and horizontal scroll issues
βΏ Accessibility Features
- Descriptive Links: All βRead Moreβ links now have contextual descriptions
- Tap Targets: All interactive elements meet 48x48px minimum size
- Focus Management: Proper keyboard navigation with visual indicators
- Screen Reader: Enhanced aria-labels and semantic structure
π¨ Design Improvements
- Navigation Timing: 10-second maximum delays with pointer event prevention for completely reliable dropdown navigation
- Button Styling: Enhanced contrast and visual feedback
- Brand Colors: Consistent theming with
#42615A
brand color
- Category Tags: Properly sized clickable elements with focus states
π§ Technical Updates
- Hard Refresh: Cache version updated to force refresh of all cached content
- Version API: Added endpoint for cache version management
- Documentation: Comprehensive README updates with all changes
π± Lighthouse Scores Expected
- PWA: β
Baseline requirements met
- Accessibility: β
Improved tap targets and link descriptions
- Performance: β
Enhanced caching and service worker
- Best Practices: β
Proper viewport and mobile optimization
π Support
For questions or issues, please:
- Check the existing issues
- Create a new issue with detailed information
- Contact the development team
Happy coding! π