Skip to content

feat: Bose landing page - responsive product showcase with accessibility features#2746

Open
inklynx wants to merge 12 commits intomate-academy:masterfrom
inklynx:develop
Open

feat: Bose landing page - responsive product showcase with accessibility features#2746
inklynx wants to merge 12 commits intomate-academy:masterfrom
inklynx:develop

Conversation

@inklynx
Copy link
Copy Markdown

@inklynx inklynx commented Apr 12, 2026

Bose Landing Page - Complete

DEMO LINK (click to see final result)
Design mockup (reference)

✨ What's changed

🔄 2026-05-08 -- Responsive Layout Fixes

Adressed UX/UI inconsistencies and optimized rendering performance for interactive elements.

📷 Preview & Details

General UI & Typography

  • Responsive Layout: Optimized breakpoints to ensure fluid containers and prevent content crowding at specific widths.
  • Typography: Enforced explicit font-family on buttons to resolve unintended serif fallbacks in specific browsers.
  • Visual fidelity: Adjusted custom pseudo-element shadows for product cards to enhance visual depth without performance overhead.
  • Structure: Refactored section headers to ensure consistent line breaking across all viewports.

Animation Optimization (Phone Number Slide)

Replaced the layout-based transition with a GPU-accelerated approach to eliminate "jank" and reflow issues, particularly in Firefox.

  • The issue: Previous max-width and margin mutations triggered expansive layout recalculations on every frame.
  • The Fix:
    - Switched to transform: translateX() and opacity for a layout-neutral animation.
    - Added a wrapper with overflow-hidden for a smooth "ATM cash reveal" effect.
    - Locked the element width to 200px to stabilize the flexbox container.

Testing

  • Verified across Chromium-based browsers (Chrome, Brave) and Firefox.
  • Tested using DevTools responsive mode at 1024px, 1280px and 1440px viewports.

Known Issues and ongoing Work


🔄 2026-05-03 -- Final Sections

Added final sections: Why Buy Direct, Contact Form, and Footer. Includes interactive form handling and spacing improvements.

📷 Preview & Details form-section

Form handling:

form-handling.mp4

New: Why Buy Direct Section

  • Two-column layout with brand benefits and trust messaging
  • Responsive grid (stacks mobile, side-by-side desktop)

New: Contact Form

  • Layout: Two-column (form inputs + contact info)
  • Validation: Native HTML5 (type="email", required attributes)
  • Accessibility:
    - Hidden labels for screen readers (visually-hidden class)
    - Autocomplete attributes (name, email)
    - Focus-visible states for keyboard navigation
  • UX Enhancement: Dummy submit handler with visual feedback
    - "Send" -> "Sending..." -> "Sent!" state progression
    - Button disabled during submission
    - Form resets after 2s delay
  • Optical alignment: Other sections text margin matches input padding for visual consistency

New: Footer

  • Full-width lifestyle image
  • aspect-ratio CSS for layout stability (prevents CLS)
  • Responsive srcset (mobile/desktop variants)
  • Lazy-loaded

Improvements

  • Categories section: Increased spacing below "View all" button
    - Before: visually orphaned between sections)
    - After: clear section boundary
    - Rationale: Gestalt proximity principle (button belongs to Categories, not next section)

Technical notes

  • Form uses semantic HTML for accessibility
  • No backend integration (dummy handler for demo purposes)
  • Disabled button styling prevents double submission UX issues
  • Footer image uses display: block to eliminate baseline gap

🔄 2026-04-22 -- Categories Section

Added Categories section - responsive gallery with 6 products images, lazy-loading, and hover effects. Minor layout improvements to Products section for visual consistency.

📷 Preview & Details gallery-section

Hover effect:

gallery-hover.mp4
brave_yYsARv7NlK.mp4

New: Categories Section

  • Layout: CSS-only responsive grid (stack -> at 820px+)
  • Images: data layout attributes for mixed aspect-ratios
  • Performance: loading="lazy" + srcset for bandwidth optimization
  • Interactions: Zoom + gradient shadow on hover (GPU-accelerated)
  • Accessibility: prefers-reduced-motion fallback

Improvements: Products Section

  • Narrowed desktop max-width (grid columns from 1 / -1 to 2 / -2) for better visual balance (prevents excessive spread)
  • Aligned product card text (justify-content: flex-end + min-height safeguard)
  • Fixed "text jumping" issue (consistent 2-line baseline)

Bug Fixes

  • Corrected hero <picture> class name collision (global replace artifact)

🔄 2026-04-16 -- Products Section

Implemented responsive Product section grid with hover lift effect.

📷 Preview & Details products-section

Hover effect:

products-hover.mp4

Technical highlights:

  • 3-layer radial-gradient shadow (60fps vs 45fps with drop-shadow filter)
  • CSS-only hover lift animation
  • Responsive aspect ratio handling

🔄 2026-04-11 -- Hero Section + Nav/Menu Sidebar

Initial major PR delivering the landing page foundation: optimized hero section, responsive header/menu, and robust build setup. Strong emphasis was placed on performance, accessibility, and cross-browser stability.

📷 Details

🎯 Key improvements

Performance and assets

  • Optimized hero: switched to semantic <img> + WebP with preload hints.
  • Cleaned up unused legacy assets.

UX & Accessibility

  • Menu/Sidebar: Enhanced toggle with ESC support, Focus Trap, and Scroll Lock.
  • Visuals: Added close button locator (including ripple effect on desktop), and a permanent background for "X" on mobile/touch devices.
  • Animations: Decorative soundwave SVG with full prefers-reduced-motion support.

SEO & Connectivity

  • Full SEO metadata: robots.txt, meta-description, h1 hierarchy, and visually-hidden helpers.
  • Functional contact links (tel:) and clickable logos.

Code Quality & Architecture

  • Introduced modern Sass utilities (fluid-calc, rem, @mixin mq).
  • Organized project structure with internal Table of Contents and clear section separators for better maintability (JS/SCSS).
  • Implementation of Fisher-Yates shuffle for more natural soundwave animation.

📸 Screenshots & Demos

Desktop View Mobile & Tablet
desktop Mobile View Tablet View
📷 Click to see more screenshots

sidebar

mobile-multi

Interactive Menu & Sidebar Preview

menu-sidebar.mp4

🔧 Technical decision & lessons learned

  • Hybrid Animation: Used CSS @keyframes directed by JS (Fisher-Yates) for performance and randomness.
  • Focus Management: Simplified Focus Trap by removing redundant listeners - now more robust.
  • Build Fixes: Added type="module" and cross-env to ensure cross-platform deployment stability.

Checklist

  • Lighthouse scores: 4x100 (Desktop / 95+ Performance (Mobile).
  • Full prefers-reduced-motion support.
  • Keyboard navigation & Focus Trap verified.
  • All layout_miami checklist items completed.

Next steps: Implementation of the remaining sections and further CSS/JS refinements.

inklynx added 4 commits April 11, 2026 18:49
* add initial project structure and assets
* reorganize SCSS into 7-1 inspired structure
* add initial HTML structure for hero section
* add hamburger menu with a11y attributes
* style: hero section & header structure & semantics
* style: improve favicon scaling and color contrast
* introduced full color palette in --vars (raw colors and semantic tokens)
* defined base typography scale
* normalized icon sizes and paths
* added navigation menu structure and basic toggle logic
* expanded --vars pallette (semantic tokens, nav-specific colors)
* refactored layout structure: extracted header and button to separate files
* improved import order in main.scss
…EO & A11y

* added navigation menu panel (#main-menu) with toggle logic in main.js
* improved three state hamburger icons with CSS visibility/opacity logic
* fixed menu overlay animation symmetry (visibility + opacity transition coordination)
* refined icon sizes: normalized header-phone.svg via SVG-viewBox and in Illustrator
* expanded --vars system: added semantic spacing/transition vars, refactored letter spacing naming
* adjusted header styles: removed fixed height, set transparent background
* fixed phone icon visibility on menu open
* added hover-only behavior for hamburger (@media hover) to avoid frozen state on touch devices

refactor: migrate typography variables from $ in vars.scss to -- in root.scss

* added focus trap logic to keep TAB navigation within the open menu
* implemented ESC key to close the menu
* add fluid-calc() + rem() utils + media mixin
* media() mixin based on breakpoint map
* semi-transparent header bg on hover/scroll (icon disappearance protection)
* adding flow-line under menu links (subtle variety)
* locator & ripple around close btn (X)
* add grid to header (bad decision, I plan go back flex)
* improved composition on breakpoints

feat: implemented hero section with SEO optimization

* added ToC + separators for readibility
* script showing header bg after scroll (50px)
* cursor locator around X (< 200px)
* subtle ripple (a11y - when bg is transparent)
* add light decorative intro icon animation
* introduced @supports (backdrop-filter: blur()) to gracefully degrade when hardware acceleration is disabled
* base overlay now uses solid color + opacity as default
* restriction: blur applied only on tablet and larger viewports (mobile uses full-screen menu)
* (hero-icon animation) added centralizd cleanup of setInterval timers to prevent memory leaks
* added static circular background behind the close X in opened menu for better visibility
* kept the ripple effect on desktop when cursor is nearby

refactor: improve soundwave animation using Fisher-Yates shuffle and CSS properties

* replaced previous logic with Fisher-Yates algorithm for better, more natural random distribution of animated bars
* divided the animation roles into CSS custom properties and JavaScript
* refined timing and easing for smoother, more premium visual effect
* added overflow-y: auto for proper scrolling on long link lists
* improved visual style of custom scrollbar and menu-list container
* refactored multiple variables into one, clear variable
* fixed font not loading in sidebar on browsers with different default fonts
* used Sass interpolation (#{$var}) properly in @font-face declarations
…oyment

* added type="module" to main script tag to resolve "JS not working on demo" issue
* installed cross-env as dev dependency to fix cross-platform deployment scripts
@inklynx inklynx changed the title feat: implementation of core landing page (hero, header, menu) with a11y & SEO focus feat: implementation of core landing page (hero, header, menu) with a11y & SEO focus Apr 12, 2026
Copy link
Copy Markdown

@danon321 danon321 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fajnie to wygląda, czekam na reszte strony :)

Taki moj prywatny komentarz: Widze ze menu troche inaczej zrobiłas na Desktopie. Tutaj z racji tego ze sie uczysz nie ma w tym problemu i fajnie ze wyszłas ze swoja inicjatywą.
Jeżeli jednak bedziesz robic juz strone dla prawdziwego klienta to powinna ona byc 1 do 1 jak w Figmie. Nie wprowadzamy tam swoich inwencji jako programisci.

@inklynx
Copy link
Copy Markdown
Author

inklynx commented Apr 12, 2026

To MEGA cenna uwaga, bardzo mi się przyda na przyszłość (i super że dostałam ją już teraz).
A co do tej konkretnej decyzji: po prostu wyobraziłam sobie, że user miałby wrażenie odcięcia od reszty strony. W każdym razie będę pamiętać, bardzo dziękuję!

@inklynx inklynx changed the title feat: implementation of core landing page (hero, header, menu) with a11y & SEO focus feat: incremental landing page development with focus on UX/UI and accessibility Apr 18, 2026
inklynx added 4 commits April 23, 2026 23:24
* 6-image gallery with data-layout attributes (square/rectangle)
* CSS-only responsive breakpoints
* lazy-loaded images with srcset for bandwidth optimization
* GPU-accelerated hover: zoom + gradient shadow lift
* prefers-reduced-motion fallback (static shadow)

Fixes:
* narrowed products section max-width for better visual balance
* aligned product card text (flex-end + min-height safeguard)
* corrected hero <picture> class name collision
* increase margin-bottom (clear section boundary)
* button margin-top - grid gap (tight cluster with caption)
* fixes orphaned button perception (Gestalt proximity principle)
Why Buy Direct:
* Two-column layout (title + description)
* Responsive: stacks on mobile, side-by-side on desktop

Contact form:
* semantic HTML with native validation (type="email", required)
* two-column layout: inputs (left) + contact info (right)
* optical alignment: info text margin matches input padding
* dummy submit handler with loading states (Sending -> Sent!)
* accessible: hidden labels, autocomplete, focus states

Footer:
* full-width image with aspect-ratio fallback
* lazy-loaded with srcset for mobile/desktop variants

Fixes:
* increased spacing below Categories "View all" button
* resolves visual orphaning between sections (Gestalt proximity)
@inklynx inklynx requested a review from danon321 May 4, 2026 12:50
Copy link
Copy Markdown

@natalia-klonowska natalia-klonowska left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

w tych miejscach zapomniałaś ustawić odpowiedni font:
Image

Image

zmieniasz layout już przy szerokości 1024px co powoduje pewne problemy:

  • sekcja nie jest poprawnie wycentrowana
Image
  • tekst jest zbyt ściśnięty w porównaniu z tym jak duże ma marginesy boczne. dodatkowo czasami ważne jest by trzymać się określonego układu tekstu bo na designie możesz zauważyć że tekst "Why buy direct from Bose" zawsze łamie linię w określonym miejscu
Image
  • tak samo zdjęcia wyglądają na zbyt wąskie. bardzo ważne jest aby trzymać odpowiednie proporcje aby zdjęcia nie wyglądały na poucinane albo zbyt przybliżone
Image

@inklynx
Copy link
Copy Markdown
Author

inklynx commented May 5, 2026

Dziękuję za szczegółowy feedback (w tym zrzuty ekranu, bardzo pomocne!).
Przejrzę wszystko, naprawię i wkrótce prześlę poprawki.

inklynx added 2 commits May 8, 2026 17:55
* replace max-width transition with fixed-width + translateX animation
* add wrapper for overflow clipping (visual reveal effect)
* remove margin-right mutation (Firefox stability)
* use translateX(100% -> 0) for layout neutral slide

Technical rationale: layout based animations (max-width, margin) trigger flexbox reflow every frame.
Firefox renders each mutation explicitly, exposing visual judder.
Solution: GPU-only properties (transform, opacity) - zero layout impact.

Tested: Chrome, Brave, Forefox - smooth on all.
* optimize breakpoints to ensure fluid layout across intermediate widths
* adjust custom pseudo-element shadows for product cards for better visual consistency
* enforce explicit font-family on buttons to prevent unintended serif fallbacks
* refactor section headers to ensure consistent line breaks across viewports
@inklynx inklynx changed the title feat: incremental landing page development with focus on UX/UI and accessibility feat: Bose landing page - responsive product showcase with accessibility features May 8, 2026
@inklynx
Copy link
Copy Markdown
Author

inklynx commented May 8, 2026

Naprawiłam - można przejrzeć.

Zmiany:

  • dodałam font-family globalnie (body) dla przycisków, linków, formularzy itp
  • dostosowałam breakpointy (trójdzielne products od 1280 + zmiana rozstawienia foto)
  • podzieliłam nagłówek spójnie na 2 linie
  • zoptymalizowałam animacje i kilka innych rzeczy (odpalenie strony na Firefox otwiera oczy :))

"Known issue":

@inklynx inklynx requested a review from natalia-klonowska May 8, 2026 21:32
* corrected body font size
* reduced header padding on medium breakpoint for better proportions
* decreased logo size
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants