From 7dac84c793b2702f76f365a7bd7d7d3af70570d1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 16 Aug 2025 06:06:42 +0000 Subject: [PATCH 1/4] Initial plan From 00a163e2658d313701d10015bf2327c8bab21219 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 16 Aug 2025 06:23:37 +0000 Subject: [PATCH 2/4] Complete comprehensive UI/UX review with critical accessibility, performance, and SEO improvements Co-authored-by: syed-reza98 <71028588+syed-reza98@users.noreply.github.com> --- client/src/__tests__/HomePage.test.tsx | 32 ++++++- client/src/app/globals.css | 41 +++++++++ client/src/app/layout.tsx | 36 ++++++++ client/src/app/page.tsx | 116 +++++++++++++++---------- 4 files changed, 180 insertions(+), 45 deletions(-) diff --git a/client/src/__tests__/HomePage.test.tsx b/client/src/__tests__/HomePage.test.tsx index 83335f5..75071ed 100644 --- a/client/src/__tests__/HomePage.test.tsx +++ b/client/src/__tests__/HomePage.test.tsx @@ -17,6 +17,36 @@ describe('Home Page', () => { it('contains RSVP button', () => { render() - expect(screen.getByRole('link', { name: /rsvp now/i })).toBeInTheDocument() + expect(screen.getByRole('link', { name: /RSVP for Incia and Arvin's wedding/i })).toBeInTheDocument() + }) + + it('has proper accessibility features', () => { + render() + + // Check for skip link + expect(screen.getByRole('link', { name: /Skip to main content/i })).toBeInTheDocument() + + // Check for main landmark + expect(screen.getByRole('main')).toBeInTheDocument() + + // Check for proper heading hierarchy + expect(screen.getByRole('heading', { level: 1 })).toBeInTheDocument() // I & A logo + expect(screen.getByRole('heading', { level: 2, name: /Incia & Arvin/i })).toBeInTheDocument() + }) + + it('has descriptive alt texts for images', () => { + render() + + // Check for more descriptive alt texts in story section + expect(screen.getByAltText(/Incia and Arvin as students at American International School/i)).toBeInTheDocument() + expect(screen.getByAltText(/Arvin proposing to Incia in the scenic countryside of Tuscany/i)).toBeInTheDocument() + }) + + it('includes structured timing information', () => { + render() + + // Check for enhanced timing information in the Save the Date section + expect(screen.getByText(/6:00 PM Bangladesh Standard Time/i)).toBeInTheDocument() + expect(screen.getAllByText(/πŸ“ Dhaka, Bangladesh/i)).toHaveLength(2) // One in hero, one in footer }) }) \ No newline at end of file diff --git a/client/src/app/globals.css b/client/src/app/globals.css index 05b02ec..20fdfcc 100644 --- a/client/src/app/globals.css +++ b/client/src/app/globals.css @@ -136,3 +136,44 @@ body { .font-serif { font-family: var(--font-serif); } + +/* Accessibility improvements */ +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; +} + +.focus\:not-sr-only:focus { + position: static; + width: auto; + height: auto; + padding: 0.5rem 1rem; + margin: 0; + overflow: visible; + clip: auto; + white-space: normal; +} + +/* Enhanced focus indicators */ +.focus\:ring-2:focus { + box-shadow: 0 0 0 2px var(--color-primary); +} + +.focus\:ring-offset-2:focus { + box-shadow: 0 0 0 2px var(--background), 0 0 0 4px var(--color-primary); +} + +/* Improved touch targets for mobile */ +@media (max-width: 640px) { + button, a, [role="button"] { + min-height: 44px; + min-width: 44px; + } +} diff --git a/client/src/app/layout.tsx b/client/src/app/layout.tsx index cffa47f..afb26f9 100644 --- a/client/src/app/layout.tsx +++ b/client/src/app/layout.tsx @@ -50,8 +50,44 @@ export default function RootLayout({ }: Readonly<{ children: React.ReactNode; }>) { + const structuredData = { + "@context": "https://schema.org", + "@type": "Event", + "name": "Incia & Arvin's Wedding", + "description": "Join us in celebrating the love story of Incia & Arvin - from childhood friends to forever partners.", + "startDate": "2025-12-16T18:00:00+06:00", + "endDate": "2025-12-16T23:00:00+06:00", + "eventStatus": "EventScheduled", + "eventAttendanceMode": "OfflineEventAttendanceMode", + "location": { + "@type": "Place", + "name": "Wedding Venue", + "address": { + "@type": "PostalAddress", + "addressLocality": "Dhaka", + "addressCountry": "Bangladesh" + } + }, + "organizer": { + "@type": "Person", + "name": "Incia & Arvin" + }, + "offers": { + "@type": "Offer", + "availability": "InviteOnly", + "price": "0", + "priceCurrency": "USD" + } + }; + return ( + +