Skip to content

feat(website): UI redesign — dark mode, mega menu, mobile drawer, responsive layout#845

Merged
ashleyshaw merged 5 commits into
developfrom
feat/ui-redesign-modes-icons-menus-Jw2jw
Jun 5, 2026
Merged

feat(website): UI redesign — dark mode, mega menu, mobile drawer, responsive layout#845
ashleyshaw merged 5 commits into
developfrom
feat/ui-redesign-modes-icons-menus-Jw2jw

Conversation

@ashleyshaw

@ashleyshaw ashleyshaw commented Jun 5, 2026

Copy link
Copy Markdown
Member

Summary

Complete navigation and UI overhaul for the Awesome GitHub Astro site.

  • Desktop Browse mega-dropdown: 4-column category grid, hover/click open, Escape/focus-out close
  • Mobile full-height drawer sliding from right with backdrop overlay, scroll-lock, and inert guard
  • Dark-mode nav header fixed (was showing light background)
  • All icons replaced with inline Phosphor SVGs via Icon.astro (zero runtime JS, CDN link removed)
  • Fluid responsive CSS tokens for spacing and font sizes
  • Disclosure pattern ARIA: removed role="menu" / role="menuitem" / aria-haspopup="menu"
  • aria-pressed on theme toggle buttons, inert on closed drawer, background elements inert when drawer is open
  • aria-label / title on icon-only theme toggle button, synced dynamically with state
  • Branch name validator updated to accept mixed-case slugs ([a-zA-Z0-9._-]+)

Linked issues

Closes #847

Changelog

Added

  • Awesome GitHub Site: UI Redesign — Dark Mode, Navigation & Responsive Layout — Desktop Browse mega-dropdown with 4-column grid; mobile full-height drawer with scroll-lock and inert; dark-mode nav header fixed; all icons replaced with inline Phosphor SVGs via Icon.astro; fluid responsive spacing/font tokens; Disclosure pattern ARIA (no role="menu"); aria-pressed on theme toggles; icon-only button aria-label/title; background inert when drawer open. (#847, #845)

Risk Assessment

Risk Level: Low

Potential Impact:

  • UI-only changes scoped to the Awesome GitHub Astro site navigation component
  • No changes to GitHub Actions workflows, labeling rules, or project automation
  • Documentation metadata bumps (version/last_updated) in 3 files are low-risk housekeeping required by CodeRabbit review findings

Mitigation Steps:

  • All changes self-contained within website/src/ and 3 documentation files
  • ARIA implementation follows the Disclosure pattern (WCAG 2.2 AA)
  • Build verified via CI (Build website check passing)
  • Branch name validator updated to accept mixed-case slugs (backward-compatible fix)

How to Test

Prerequisites

  • Node.js 20+, run npm ci in website/
  • Modern browser (Chrome, Firefox, Safari) for visual and keyboard testing

Test Steps

  1. Theme toggle (desktop): Click the sun/moon icon in the desktop nav — confirm aria-pressed flips, icon updates, label changes to "Switch to light/dark mode"
  2. Theme toggle (mobile): Open drawer, click the theme toggle inside — confirm both toggles stay in sync
  3. Browse mega-dropdown: Hover or click "Browse" — confirm 4-column dropdown appears; press Escape to close
  4. Mobile drawer: Resize to ≤960px, click hamburger — confirm drawer opens, scroll locks, background is inert; click backdrop or ✕ to close
  5. Keyboard navigation: Tab through full nav without mouse — all controls reachable and operable
  6. Dark mode header: Enable dark theme — confirm nav background is dark (not light)
  7. Theme persistence: Reload page — confirm theme is retained via localStorage

Expected Results

  • All interactive controls have accessible names visible to screen readers
  • Theme persists on reload via localStorage
  • No horizontal overflow on mobile viewports

Edge Cases to Verify

  • Mobile drawer closes on Escape key press
  • Background page elements cannot receive keyboard focus while drawer is open
  • Both theme toggle buttons (desktop and drawer) remain in sync
  • No-JS fallback: nav links still work (Astro SSR/static)
  • Browser compatibility: Chrome, Firefox, Safari

Checklist (Global DoD / PR)

  • All AC met and demonstrated
  • Tests added/updated (unit/E2E as appropriate)
  • Accessibility checklist completed (where relevant):
    • Semantic HTML and heading order verified
    • Keyboard navigation and visible focus states verified
    • ARIA used only where needed
    • Contrast and non-colour cues reviewed (WCAG 2.2 AA)
  • Docs/readme/changelog updated (if user-facing)
  • Frontmatter updated where applicable (last_updated and version)
  • I have reviewed and applied the downstream override policy (or linked an approved exception)
  • Security checklist completed (where relevant):
    • Untrusted input validated and sanitised
    • Output escaped for its rendering context
    • Privileged actions enforce nonce and capability checks
    • No secrets/sensitive data introduced; OWASP risks reviewed
  • Code/design reviews approved
  • CI green; linked issues closed; release notes prepared (if shipping)
  • Risk assessment completed above
  • Testing instructions provided above

References

https://claude.ai/code/session_017G3gEzdfRafmqFno5dfWQH

@coderabbitai

coderabbitai Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

This PR delivers the Awesome GitHub Site UI redesign: icon system migration to inline Icon.astro components, desktop Browse mega-dropdown with focusout closing, mobile drawer with inert state and scroll-lock, theme-changed event dispatch for accessibility sync, and flexbox layout foundation. Documentation and metadata are bumped across the repo.

Changes

Documentation & Metadata Updates

Layer / File(s) Summary
Documentation metadata and version updates
.github/custom-instructions.md, docs/BRANCHING_STRATEGY.md, docs/CANONICAL_CONFIGS_GUIDE.md
Copilot instructions, branching strategy guide, and canonical configs guide receive version and last_updated bumps. Validation section formatting is adjusted. Current risks and validation hooks in the canonical guide are refreshed for Wave 5 Phase 1.
CHANGELOG entry for UI redesign
CHANGELOG.md
Added entry documenting the Awesome GitHub Site UI redesign including dark mode, navigation mega-dropdown, responsive layout, and accessibility improvements such as keyboard dismissal, focus-out handling, aria attributes, and inert drawer state.

Awesome GitHub Navigation UI Redesign

Layer / File(s) Summary
Icon system migration to Icon.astro component
website/src/components/AwesomeGithub/AwesomeGithubNav.astro, website/src/layouts/AwesomeGithubLayout.astro
All Phosphor icon markup (browse caret, search, theme toggle sun/moon, mobile hamburger menu/close, drawer category icons) is replaced with inline Icon.astro component renders. Phosphor stylesheet link is removed from layout head.
Browse dropdown accessibility and closing behaviour
website/src/components/AwesomeGithub/AwesomeGithubNav.astro
Adds focusout listener to close Browse dropdown when focus leaves the wrapper. Introduces caret icon styling with aria-expanded-driven rotation. Updates desktop nav link colours to use slate token (light mode) and --fg-2 token (dark mode).
Mobile drawer inert state and open/close handlers
website/src/components/AwesomeGithub/AwesomeGithubNav.astro
Initialises drawer with inert attribute. Open handler sets hamburger aria-label, unhides drawer, removes inert, reveals overlay, and adds ag-drawer-open to body. Close handler reverses these steps and restores focus.
Theme-changed event dispatch and aria-pressed sync
website/src/layouts/AwesomeGithubLayout.astro, website/src/components/AwesomeGithub/AwesomeGithubNav.astro
Theme toggle dispatches CustomEvent(theme-changed) on document. New syncThemePressed function sets aria-pressed on all theme-toggle elements, called on load and on theme-changed event.
Flexbox layout refactoring for body and main
website/src/layouts/AwesomeGithubLayout.astro
Body uses display: flex, flex-direction: column, min-height: 100dvh. Main uses flex: 1, replacing previous min-height calc-based sizing for responsive content expansion.
Supporting CSS updates for icons and responsive behaviour
website/src/components/AwesomeGithub/AwesomeGithubNav.astro
Browse card transitions refactored. Category icons styled as inline-flex instead of font-size-based. Icon button and drawer button styling adjusted. Old theme icon wrapper classes removed. Drawer padding and category icon selectors updated. Responsive scroll-lock added with :global(body.ag-drawer-open) overflow rule.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related issues

  • #847: Primary feature issue for Awesome GitHub UI redesign covering dark mode, Browse mega-dropdown, responsive layout, icon system, and accessibility improvements—all addressed by this PR.
  • #794: Navigation and theme-toggle behaviour updates align with the Phase 1 implementation of Awesome GitHub site improvements.

Possibly related PRs

  • lightspeedwp/.github#843: Both PRs modify AwesomeGithubNav.astro to migrate icons to Icon.astro and update mobile drawer/menu closing logic with ARIA and inert-style state management.

Suggested labels

area:assets, area:design, area:a11y

Suggested reviewers

  • krugazul
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning Documentation and changelog updates (custom-instructions.md, CHANGELOG.md, BRANCHING_STRATEGY.md, CANONICAL_CONFIGS_GUIDE.md) are metadata refreshes and versioning bumps unrelated to the core UI redesign objectives in issue #847. Remove or justify the unrelated documentation metadata updates (version bumps, last_updated dates) from this UI redesign PR; separate them into a maintenance-focused PR or clarify their necessity.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately captures the main objectives of this UI redesign PR: dark mode fixes, mega menu (Browse dropdown), mobile drawer, and responsive layout improvements.
Linked Issues check ✅ Passed The PR successfully addresses all coding objectives from issue #847: dark mode nav header fixed, Browse mega-dropdown implemented, mobile drawer with scroll-lock and inert, inline Phosphor SVGs, accessibility improvements (aria-pressed, inert, focusout handler, no menu roles), and responsive layout with flex column and 100dvh.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Description check ✅ Passed Pull request description comprehensively covers all required sections with detailed summaries, clear risk assessment, thorough testing instructions, and completed checklist items.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/ui-redesign-modes-icons-menus-Jw2jw

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

✅ Template check passed after update. Thanks for fixing the PR description.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request refactors the navigation bar component to introduce a desktop mega-dropdown and a mobile drawer menu, along with updated styling, event delegation for theme toggling, and minor style adjustments. The review feedback highlights several accessibility and usability improvements, including replacing ARIA menu roles with the Disclosure pattern for standard navigation, removing an overriding aria-label on the theme toggle button to expose dynamic text to screen readers, closing the dropdown when focus leaves, and managing body overflow responsively via CSS classes rather than direct inline styles.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment on lines +44 to +72
<button
class="ag-nav-link ag-browse-trigger"
aria-expanded="false"
aria-haspopup="menu"
aria-controls="ag-browse-panel"
>
Browse
<i class="ph ph-caret-down ag-caret-icon" aria-hidden="true"></i>
</button>
<div
class="ag-browse-panel"
id="ag-browse-panel"
role="menu"
aria-label="Browse categories"
>
<div class="ag-browse-grid">
{CATEGORIES.map((cat) => (
<a
href={`${base}c/${cat.id}/`}
class="ag-browse-card"
role="menuitem"
>
<i class={`ph ph-${cat.icon} ag-browse-cat-icon`} aria-hidden="true"></i>
<span class="ag-browse-cat-name">{cat.label}</span>
<span class="ag-browse-cat-blurb">{cat.blurb}</span>
</a>
))}
</div>
</div>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

Using role="menu", role="menuitem", and aria-haspopup="menu" signals to screen readers that this is an application menu (like a desktop app menu bar), which requires full keyboard arrow-key navigation support (which is not implemented here).

For standard website navigation dropdowns containing links, the Disclosure pattern is preferred and much more accessible. It simply uses aria-expanded on the trigger and standard links without menu roles, avoiding the need for complex keyboard arrow-key handling.

        <button
          class="ag-nav-link ag-browse-trigger"
          aria-expanded="false"
          aria-controls="ag-browse-panel"
        >
          Browse
          <i class="ph ph-caret-down ag-caret-icon" aria-hidden="true"></i>
        </button>
        <div
          class="ag-browse-panel"
          id="ag-browse-panel"
          aria-label="Browse categories"
        >
          <div class="ag-browse-grid">
            {CATEGORIES.map((cat) => (
              <a
                href={`${base}c/${cat.id}/`}
                class="ag-browse-card"
              >
                <i class={`ph ph-${cat.icon} ag-browse-cat-icon`} aria-hidden="true"></i>
                <span class="ag-browse-cat-name">{cat.label}</span>
                <span class="ag-browse-cat-blurb">{cat.blurb}</span>
              </a>
            ))}
          </div>
        </div>

Comment on lines +165 to +170
<button
class="ag-drawer-theme-btn"
type="button"
data-awesome-github-theme-toggle
aria-label="Toggle colour theme"
>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

The aria-label attribute completely overrides any internal text content of an element for screen readers. Because aria-label="Toggle colour theme" is set on this button, screen reader users will only hear "Toggle colour theme" and will miss the dynamic, helpful text inside (Switch to dark mode / Switch to light mode).

Removing the aria-label from this specific button allows screen readers to read the visible, dynamic text labels instead, matching the visual experience.

      <button
        class="ag-drawer-theme-btn"
        type="button"
        data-awesome-github-theme-toggle
      >

Comment on lines +216 to +221
// Close on outside click
document.addEventListener("click", (e) => {
if (e.target instanceof Element && !browseWrapper.contains(e.target)) {
closeBrowse();
}
});

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

When a keyboard user tabs past the last link in the Browse dropdown, the dropdown remains open on the screen because there is no mechanism to close it when focus leaves.

Adding a focusout event listener to the browseWrapper ensures that the dropdown automatically closes when focus moves to another part of the page (like the other navigation links).

    // Close on outside click
    document.addEventListener("click", (e) => {
      if (e.target instanceof Element && !browseWrapper.contains(e.target)) {
        closeBrowse();
      }
    });

    // Close when focus leaves the dropdown
    browseWrapper.addEventListener("focusout", (e) => {
      if (e.relatedTarget instanceof Element && !browseWrapper.contains(e.relatedTarget)) {
        closeBrowse();
      }
    });

Comment on lines +235 to +246
const openDrawer = () => {
hamburger.setAttribute("aria-expanded", "true");
drawer.setAttribute("aria-hidden", "false");
overlay.setAttribute("aria-hidden", "false");
document.body.style.overflow = "hidden";
};
const closeDrawer = () => {
hamburger.setAttribute("aria-expanded", "false");
drawer.setAttribute("aria-hidden", "true");
overlay.setAttribute("aria-hidden", "true");
document.body.style.overflow = "";
};

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

When the mobile drawer is open, setting document.body.style.overflow = "hidden" directly via JS will lock scrolling on desktop if the user resizes their browser window or rotates their device to a wider viewport (where the drawer is hidden via CSS).

To fix this responsively without adding resize event listeners, toggle a class (e.g., ag-drawer-open) on document.body instead, and apply the overflow: hidden rule in CSS only within the mobile media query.

    const openDrawer = () => {
      hamburger.setAttribute("aria-expanded", "true");
      drawer.setAttribute("aria-hidden", "false");
      overlay.setAttribute("aria-hidden", "false");
      document.body.classList.add("ag-drawer-open");
    };
    const closeDrawer = () => {
      hamburger.setAttribute("aria-expanded", "false");
      drawer.setAttribute("aria-hidden", "true");
      overlay.setAttribute("aria-hidden", "true");
      document.body.classList.remove("ag-drawer-open");
    };

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a4966f4d52

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +563 to +564
transform: translateX(100%);
transition: transform var(--dur-slow) var(--ease-out);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Keep the closed drawer out of the tab order

On mobile, the drawer is initially aria-hidden="true" but this CSS only moves it off-screen with transform, leaving its category links, nav links, and theme button focusable. Keyboard users tabbing through a closed page can land on invisible controls before reaching the main content; toggle inert/hidden or visibility/tab indexes when the drawer is closed so the off-canvas controls are not reachable.

Useful? React with 👍 / 👎.

Comment on lines +553 to +559
.ag-mobile-drawer {
position: fixed;
top: 0;
right: 0;
width: 100%;
height: 100dvh;
z-index: 200;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Leave an accessible way to close the mobile drawer

When the drawer opens at mobile widths, it is fixed from top: 0 with z-index: 200, the same z-index as the sticky header; because the drawer appears later in the DOM and spans the full viewport, it paints over the hamburger/X button and the overlay is also fully covered. That leaves users with no visible close control unless they press Escape or follow a link, so the header should sit above the drawer or the drawer should include its own close button.

Useful? React with 👍 / 👎.

@github-actions github-actions Bot added status:needs-review Awaiting code review type:feature Feature or enhancement priority:normal Default priority labels Jun 5, 2026
@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

🔍 Reviewer Summary for PR #845

CI Status:success
Files changed: 7
Risk Distribution: 0 critical, 1 high, 2 medium, 4 low

Recommendations

  • Ready to proceed pending human review

@github-actions github-actions Bot added lang:js JavaScript/TypeScript lang:css Stylesheets (CSS/Sass/etc.) type:chore Chore / small hygiene change type:bug Bug or defect meta:needs-changelog Requires a changelog entry before merge labels Jun 5, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR updates the “Awesome GitHub” Astro site UI to modernise navigation and iconography, improve dark mode behaviour, and tune spacing/type scales at smaller breakpoints.

Changes:

  • Reworks the header navigation with a desktop “Browse” dropdown and a mobile right-hand drawer navigation.
  • Switches icon usage to Phosphor Icons (CDN CSS) and updates catalogue category icon identifiers accordingly.
  • Adds responsive CSS variable overrides and sets color-scheme per theme to reduce OS-level dark UI inconsistencies.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 7 comments.

File Description
website/src/styles/awesome-github.css Adds responsive variable overrides and theme-specific color-scheme rules.
website/src/lib/catalogue.ts Updates category icon identifiers to match the new Phosphor icon naming.
website/src/layouts/AwesomeGithubLayout.astro Adds Phosphor CSS, adjusts theme init/toggle logic, and tweaks page layout styling.
website/src/components/AwesomeGithub/AwesomeGithubNav.astro Implements the new desktop dropdown + mobile drawer navigation and associated styling/behaviour.
Comments suppressed due to low confidence (1)

website/src/components/AwesomeGithub/AwesomeGithubNav.astro:138

  • The mobile drawer is only moved off-screen when closed (transform: translateX(100%)) and relies on aria-hidden="true". That leaves focusable links inside the drawer in the tab order even while the drawer is “closed”, which is a keyboard/a11y blocker.
      data-search-open
    >
      <span aria-hidden="true">⌘K</span>
    </button>
    <button
      class="ag-nav-theme-toggle"

Comment on lines 86 to 90
main {
display: flex;
flex-direction: column;
min-height: 100vh;
min-height: calc(100vh - 72px);
}
Comment on lines +51 to +62
// Theme toggle — event delegation handles all [data-awesome-github-theme-toggle] buttons
const STORAGE_KEY = "awesome-github-theme";
const root = document.documentElement;
const button = document.querySelector("[data-awesome-github-theme-toggle]");

if (button) {
button.addEventListener("click", () => {
document.addEventListener("click", (e) => {
if (e.target instanceof Element && e.target.closest("[data-awesome-github-theme-toggle]")) {
const next = root.dataset.theme === "light" ? "dark" : "light";
try {
localStorage.setItem(storageKey, next);
} catch (_) {
/* ignore storage errors */
}
root.dataset.theme = next;
try { localStorage.setItem(STORAGE_KEY, next); } catch (_) {}
root.setAttribute("data-theme", next);
root.style.colorScheme = next;
button.setAttribute("aria-pressed", String(next === "light"));
});
}
}
});
Comment thread website/src/components/AwesomeGithub/AwesomeGithubNav.astro
Comment thread website/src/components/AwesomeGithub/AwesomeGithubNav.astro Outdated
Comment thread website/src/components/AwesomeGithub/AwesomeGithubNav.astro Outdated
Comment thread website/src/components/AwesomeGithub/AwesomeGithubNav.astro Outdated
Comment thread website/src/layouts/AwesomeGithubLayout.astro
@ashleyshaw ashleyshaw requested a review from Copilot June 5, 2026 15:30

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot wasn't able to review any files in this pull request.

@github-actions github-actions Bot removed type:feature Feature or enhancement type:chore Chore / small hygiene change labels Jun 5, 2026
@github-actions github-actions Bot added the type:feature Feature or enhancement label Jun 5, 2026
@coderabbitai coderabbitai Bot requested a review from krugazul June 5, 2026 15:31
@ashleyshaw ashleyshaw requested review from Copilot and removed request for krugazul June 5, 2026 15:31
@github-actions github-actions Bot removed the type:feature Feature or enhancement label Jun 5, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

(() => {
const storageKey = "awesome-github-theme";
const root = document.documentElement;
const media = window.matchMedia("(prefers-color-scheme: light)");
Comment thread website/src/components/AwesomeGithub/AwesomeGithubNav.astro
@ashleyshaw ashleyshaw force-pushed the feat/ui-redesign-modes-icons-menus-Jw2jw branch from e1efef3 to 0caa59e Compare June 5, 2026 16:20
@ashleyshaw ashleyshaw changed the title feat: nav dropdown, mobile drawer, phosphor icons, dark mode fix, responsive scale feat(website): UI redesign — dark mode, mega menu, mobile drawer, responsive layout Jun 5, 2026
@ashleyshaw ashleyshaw force-pushed the feat/ui-redesign-modes-icons-menus-Jw2jw branch from 0caa59e to bbc9d7c Compare June 5, 2026 16:24
@github-actions github-actions Bot added type:feature Feature or enhancement area:documentation Docs & guides lang:md Markdown content/docs labels Jun 5, 2026
claude added 3 commits June 5, 2026 16:35
…ponsive scale

- Replace all icons with Phosphor Icons (CDN CSS, ph-* class approach)
- Fix dark mode nav: header now uses dark semi-transparent bg in dark theme
- Add desktop Browse hover dropdown with 8 categories in a 4-column grid
- Add mobile full-height slide-out drawer from right with all nav items
- Add responsive scale overrides for spacing/font sizes at mobile breakpoints
- Add color-scheme per theme to prevent OS-level dark UI glitches
- Update CATEGORIES icon names to valid Phosphor icon identifiers

https://claude.ai/code/session_017G3gEzdfRafmqFno5dfWQH
- Disclosure pattern: remove role=menu/menuitem/aria-haspopup=menu from
  Browse dropdown; use only aria-expanded + aria-controls
- Add focusout handler on browse wrapper to close when focus leaves
- Replace document.body.style.overflow with body.ag-drawer-open CSS class
  (scoped to ≤960px media query via :global) for scroll-lock
- Add inert attribute on mobile drawer when closed; remove on open
- Raise .ag-nav z-index to 300 so hamburger stays above drawer (200)
- Add aria-pressed to both theme toggle buttons; sync via theme-changed
  custom event dispatched from layout on each toggle click
- Remove CDN Phosphor Icons link (Icon.astro handles inline SVGs)
- Fix body layout: display:flex+flex-direction:column+min-height:100dvh
  so main { flex:1 } fills remaining height without calc(100vh - 72px)
- Update hamburger aria-label dynamically (Open/Close navigation menu)
- Add CHANGELOG entry for UI redesign work

https://claude.ai/code/session_017G3gEzdfRafmqFno5dfWQH
…evelop merge

- Remove duplicate ordered list items in CANONICAL_CONFIGS_GUIDE.md that were
  appended after a bullet list (introduced by develop commit 5f3cb62), fixing
  MD029/MD032 lint failures
- Add blank lines around headings in custom-instructions.md to fix MD022/MD032
- Bump last_updated and version in all three affected docs files to satisfy
  frontmatter freshness validation

https://claude.ai/code/session_017G3gEzdfRafmqFno5dfWQH
@ashleyshaw ashleyshaw force-pushed the feat/ui-redesign-modes-icons-menus-Jw2jw branch from bbc9d7c to 78d17a8 Compare June 5, 2026 16:39
@github-actions github-actions Bot removed the type:feature Feature or enhancement label Jun 5, 2026
@coderabbitai coderabbitai Bot requested a review from krugazul June 5, 2026 16:40
@coderabbitai coderabbitai Bot added the area:assets Assets (images, fonts, static files) label Jun 5, 2026
The BRANCH_PATTERN was restricted to [a-z0-9._-]+ which rejects
system-generated branch suffixes containing uppercase letters (e.g.
feat/ui-redesign-modes-icons-menus-Jw2jw). Broaden the character class
to [a-zA-Z0-9._-]+ so the prefix requirement is still enforced while
auto-generated uniqueness suffixes are accepted. Update the example
regex in docs/BRANCHING_STRATEGY.md to stay in sync.

https://claude.ai/code/session_017G3gEzdfRafmqFno5dfWQH
@github-actions github-actions Bot added type:feature Feature or enhancement area:scripts Scripts & tooling and removed type:feature Feature or enhancement labels Jun 5, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (4)
docs/CANONICAL_CONFIGS_GUIDE.md (1)

97-134: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Duplicate sections slipped in — consolidate to one canonical set.

Current Risks Observed, Recommended Validation Hooks, and Related Documentation are duplicated. Please keep only one version of each section to avoid drift and conflicting guidance.

As per coding guidelines, documentation should remain accurate, clearly structured, and up to date with clean cross-references.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/CANONICAL_CONFIGS_GUIDE.md` around lines 97 - 134, The file contains
duplicated sections titled "Current Risks Observed", "Recommended Validation
Hooks", and "Related Documentation"; remove the duplicate block (the Wave 5
Phase 1 repeat) and consolidate into a single canonical set containing the
headings "Current Risks Observed", "Recommended Validation Hooks", and "Related
Documentation", keeping the most complete/updated bullet items (including the CI
parity check and the `.github/reports/...` audit link) and ensuring the
`scripts/validation/validate-issue-fields.cjs`,
`scripts/validation/validate-labeling-configs.cjs`, and the related docs
(`docs/ISSUE_FIELDS.md`, `docs/ISSUE_TYPES.md`, `docs/LABEL_STRATEGY.md`,
`docs/LABELING.md`) are listed once.
docs/BRANCHING_STRATEGY.md (1)

1-12: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Frontmatter contract incomplete after version/date update.

Quick catch: this doc frontmatter still omits required fields (tags, language) expected by the markdown policy.

As per coding guidelines, all .md files must include required frontmatter fields including tags and language.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/BRANCHING_STRATEGY.md` around lines 1 - 12, The frontmatter in
BRANCHING_STRATEGY.md is missing required keys; update the YAML frontmatter (the
top block containing file_type, title, etc.) to include the missing required
fields "tags" and "language" (e.g., add a tags array with relevant keywords and
a language string like "en" or locale code) so the document conforms to the
markdown policy; keep the existing keys (file_type, title, description,
last_updated, owners, version, status, stability, domain) and add the new keys
alongside them in the same frontmatter block.
.github/custom-instructions.md (2)

1-10: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Frontmatter is still missing required doc fields.

Nice metadata bump, but this file’s YAML frontmatter is missing required keys (tags, status, stability, domain, language) from the repo markdown contract.

As per coding guidelines, all .md files must include required frontmatter fields and specify language in frontmatter.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/custom-instructions.md around lines 1 - 10, The YAML frontmatter
block is missing required keys (tags, status, stability, domain, language) and
must declare a language; update the frontmatter at the top of the document by
adding these keys (tags: [...], status: <e.g. draft|stable>, stability: <e.g.
experimental|stable>, domain: <e.g. infra|docs>, language: <e.g. en>) and
populate appropriate values for each to satisfy the repo markdown contract so
the frontmatter block contains title, description, mode, version, last_updated,
owners plus the required tags, status, stability, domain, and language fields.

12-31: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Two H1 headings in one file — trim to one.

This file currently has two top-level headings (# Repo-local Copilot Instructions and # LightSpeed .github Custom Instructions). Keep a single H1 and demote the second to H2.

As per coding guidelines, each Markdown file must contain exactly one H1.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/custom-instructions.md around lines 12 - 31, The file contains two
top-level H1 headings ("# Repo-local Copilot Instructions" and "# LightSpeed
.github Custom Instructions"); keep a single H1 and demote the second heading by
changing "# LightSpeed .github Custom Instructions" to an H2 ("## LightSpeed
.github Custom Instructions") so the file contains exactly one H1 as required
and the rest remain lower-level headings; verify the change in the same file
where the heading text appears.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@CHANGELOG.md`:
- Line 30: The Unreleased changelog entry for "Awesome GitHub Site: UI Redesign
— Dark Mode, Navigation & Responsive Layout" is missing the required
traceability links; update that entry under the [Unreleased] section to append
both an issue link and a PR link using the same markdown style as the nearby
entries (see the pattern used on adjacent lines), ensuring the entry includes
e.g. "(`#PR_NUMBER`)" and "(`#ISSUE_NUMBER`)" or full markdown links consistent with
other changelog lines.

In `@website/src/components/AwesomeGithub/AwesomeGithubNav.astro`:
- Around line 235-250: openDrawer/closeDrawer currently only toggle the drawer,
overlay and body class, leaving background interactive and tabbable; update
these functions to also inert/aria-hide the page content when opening and
restore when closing by targeting the background containers (e.g., the
SearchPalette, main content element and AwesomeGithubFooter or a single wrapper
like a `#page-content` container) and toggling inert and/or aria-hidden attributes
alongside the drawer; ensure you reference the same element selection logic in
both openDrawer and closeDrawer so focus cannot move behind the overlay and is
fully restored when closed.
- Around line 95-102: The desktop theme toggle button (selector:
data-awesome-github-theme-toggle / class ag-theme-toggle-btn) is icon-only and
needs an accessible name; add an aria-label and a title attribute to the button
and ensure they are kept in sync with the toggle state (aria-pressed) by
updating their text when the theme changes (same update logic you use for
aria-pressed), and apply the same change to the other toggle instance referenced
(the one around lines 274-279) so both icon-only buttons expose a clear, dynamic
accessible name.

---

Outside diff comments:
In @.github/custom-instructions.md:
- Around line 1-10: The YAML frontmatter block is missing required keys (tags,
status, stability, domain, language) and must declare a language; update the
frontmatter at the top of the document by adding these keys (tags: [...],
status: <e.g. draft|stable>, stability: <e.g. experimental|stable>, domain:
<e.g. infra|docs>, language: <e.g. en>) and populate appropriate values for each
to satisfy the repo markdown contract so the frontmatter block contains title,
description, mode, version, last_updated, owners plus the required tags, status,
stability, domain, and language fields.
- Around line 12-31: The file contains two top-level H1 headings ("# Repo-local
Copilot Instructions" and "# LightSpeed .github Custom Instructions"); keep a
single H1 and demote the second heading by changing "# LightSpeed .github Custom
Instructions" to an H2 ("## LightSpeed .github Custom Instructions") so the file
contains exactly one H1 as required and the rest remain lower-level headings;
verify the change in the same file where the heading text appears.

In `@docs/BRANCHING_STRATEGY.md`:
- Around line 1-12: The frontmatter in BRANCHING_STRATEGY.md is missing required
keys; update the YAML frontmatter (the top block containing file_type, title,
etc.) to include the missing required fields "tags" and "language" (e.g., add a
tags array with relevant keywords and a language string like "en" or locale
code) so the document conforms to the markdown policy; keep the existing keys
(file_type, title, description, last_updated, owners, version, status,
stability, domain) and add the new keys alongside them in the same frontmatter
block.

In `@docs/CANONICAL_CONFIGS_GUIDE.md`:
- Around line 97-134: The file contains duplicated sections titled "Current
Risks Observed", "Recommended Validation Hooks", and "Related Documentation";
remove the duplicate block (the Wave 5 Phase 1 repeat) and consolidate into a
single canonical set containing the headings "Current Risks Observed",
"Recommended Validation Hooks", and "Related Documentation", keeping the most
complete/updated bullet items (including the CI parity check and the
`.github/reports/...` audit link) and ensuring the
`scripts/validation/validate-issue-fields.cjs`,
`scripts/validation/validate-labeling-configs.cjs`, and the related docs
(`docs/ISSUE_FIELDS.md`, `docs/ISSUE_TYPES.md`, `docs/LABEL_STRATEGY.md`,
`docs/LABELING.md`) are listed once.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: 5058d7f2-c4c0-483f-9a45-1c742a501f3f

📥 Commits

Reviewing files that changed from the base of the PR and between 5f3cb62 and 78d17a8.

📒 Files selected for processing (6)
  • .github/custom-instructions.md
  • CHANGELOG.md
  • docs/BRANCHING_STRATEGY.md
  • docs/CANONICAL_CONFIGS_GUIDE.md
  • website/src/components/AwesomeGithub/AwesomeGithubNav.astro
  • website/src/layouts/AwesomeGithubLayout.astro
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: coderabbit-gate
🧰 Additional context used
📓 Path-based instructions (4)
**/*.md

📄 CodeRabbit inference engine (.github/instructions/markdown.instructions.md)

**/*.md: Use one H1 (#) per file; keep heading levels sequential (never skip from H2 to H4)
Use fenced code blocks with explicit language tags (bash, yaml, markdown, etc.)
Keep links relative for in-repo files; verify they resolve before merging
Use 1. for ordered lists and - for unordered lists
Keep all wording in UK English (optimise, organisation, colour, behaviour, analyse)
Do not add a references: frontmatter field — use inline links or a footer section instead
Blank lines before and after headings, code blocks, and block-level elements
Maximum line length: 120 characters (soft limit; prefer wrapping at natural sentence boundaries)
All .md files in this repository should include YAML frontmatter with required fields: file_type, title, description, version, last_updated, owners, tags, status, stability, domain
Every image (![]()) must have descriptive alt text explaining the image's purpose, not its appearance. Empty alt (![ ]()) is valid only for purely decorative images
Link text must describe the destination — never use 'click here', 'read more', or bare URLs as visible text
Every table must have a header row (| Header |). Avoid merged cells
Use headings to communicate document structure, not for visual styling
Do not rely on colour alone to convey information in diagrams or callout blocks
Mermaid diagrams must include accTitle and accDescr attributes for accessibility
Specify language in frontmatter; use plain language, avoid jargon where possible

Files:

  • docs/BRANCHING_STRATEGY.md
  • CHANGELOG.md
  • docs/CANONICAL_CONFIGS_GUIDE.md
**/docs/**/*.md

⚙️ CodeRabbit configuration file

**/docs/**/*.md: Review documentation files:

  • Ensure markdown is linted and formatted per project style guides.
  • Flag illogical folder structures, file naming, or misplaced content.
  • Confirm documentation is up to date, accurate, and cross-referenced.
  • Ensure accessibility (heading hierarchy, alt text for images, UK English).

Files:

  • docs/BRANCHING_STRATEGY.md
  • docs/CANONICAL_CONFIGS_GUIDE.md
.github/custom-instructions.md

⚙️ CodeRabbit configuration file

.github/custom-instructions.md: Review custom-instructions.md:

  • Ensure the file is easy to navigate and up to date with org standards.
  • Validate YAML frontmatter for completeness and accuracy.
  • Confirm cross-references to prompts.md, agent.md, AGENTS.md, and instruction files.
  • Check for up-to-date cross-references and clear documentation of Copilot usage.

Files:

  • .github/custom-instructions.md
CHANGELOG.md

⚙️ CodeRabbit configuration file

CHANGELOG.md: Review CHANGELOG.md:

  • Confirm entries follow Keep a Changelog 1.1.0 format.
  • Each entry under [Unreleased] must include a PR link and issue link.
  • Verify entries use the correct section headings (Added, Changed, Fixed, Deprecated, Removed, Security, Documentation, Performance).
  • Check UK English spelling throughout.

Files:

  • CHANGELOG.md
🧠 Learnings (6)
📚 Learning: 2026-06-03T17:57:58.761Z
Learnt from: CR
Repo: lightspeedwp/.github PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-06-03T17:57:58.761Z
Learning: Branch names must follow the format `{type}/{scope}-{short-title}` (lowercase, kebab-case) where `{type}` is one of: feat/, fix/, hotfix/, release/, refactor/, chore/, docs/, test/, perf/, ci/, build/, deps/, security/, revert/, research/, design/, a11y/, ux/, i18n/, ops/

Applied to files:

  • docs/BRANCHING_STRATEGY.md
  • .github/custom-instructions.md
📚 Learning: 2026-06-03T17:57:58.761Z
Learnt from: CR
Repo: lightspeedwp/.github PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-06-03T17:57:58.761Z
Learning: Before every push, verify the current branch is NOT `main` or `develop` (unless in a release cycle) and follows the `{type}/{scope}-{short-title}` naming pattern

Applied to files:

  • docs/BRANCHING_STRATEGY.md
  • .github/custom-instructions.md
📚 Learning: 2026-06-03T17:57:58.761Z
Learnt from: CR
Repo: lightspeedwp/.github PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-06-03T17:57:58.761Z
Learning: Place repo-local Copilot and agent instructions in `.github/instructions/` or `.github/custom-instructions.md`

Applied to files:

  • .github/custom-instructions.md
📚 Learning: 2026-06-03T15:59:30.973Z
Learnt from: CR
Repo: lightspeedwp/.github PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-06-03T15:59:30.973Z
Learning: Use `.github/instructions/` for repo-local maintenance guidance and `instructions/` for portable standards, following the canonical instruction reference policy

Applied to files:

  • .github/custom-instructions.md
📚 Learning: 2026-06-03T17:57:58.761Z
Learnt from: CR
Repo: lightspeedwp/.github PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-06-03T17:57:58.761Z
Learning: Do NOT use `claude/` as a branch prefix. This is explicitly forbidden under all circumstances.

Applied to files:

  • .github/custom-instructions.md
📚 Learning: 2026-06-03T17:57:58.761Z
Learnt from: CR
Repo: lightspeedwp/.github PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-06-03T17:57:58.761Z
Learning: All PRs must target `develop` by default, NOT `main`. Only `release/*` and `hotfix/*` branches are allowed to merge to `main`.

Applied to files:

  • .github/custom-instructions.md
🔇 Additional comments (3)
website/src/components/AwesomeGithub/AwesomeGithubNav.astro (2)

3-3: LGTM!

Also applies to: 51-63, 93-94, 113-145, 167-170, 182-209, 268-270, 290-295, 393-456, 472-475, 542-547, 623-653, 691-693


300-303: ⚡ Quick win

Don’t add :global(...) for [data-theme="..."] here—Astro scopes only the component element part.

[data-theme="dark"] .ag-nav { ... } (and the same pattern at 378-380, 532-540, 672-675) should compile with Astro’s scope attached to the component element (e.g. .ag-nav[...]), not to the [data-theme] ancestor on <html>, so the theme rules won’t get “stuck”. This [data-theme="..."] .class approach is also already used across other components without :global(...).

			> Likely an incorrect or invalid review comment.
website/src/layouts/AwesomeGithubLayout.astro (1)

59-59: LGTM!

Also applies to: 77-92

Comment thread CHANGELOG.md Outdated
Comment thread website/src/components/AwesomeGithub/AwesomeGithubNav.astro
Comment thread website/src/components/AwesomeGithub/AwesomeGithubNav.astro
- CHANGELOG: add #847 and #845 traceability links to UI redesign entry
- CANONICAL_CONFIGS_GUIDE: consolidate duplicate sections into single canonical
  set, merging best content (linked docs, audit link, CI parity bullet)
- BRANCHING_STRATEGY: add tags and language frontmatter fields
- custom-instructions: add tags/status/stability/domain/language frontmatter;
  demote duplicate H1 to H2
- AwesomeGithubNav: add aria-label + title to icon-only desktop theme toggle;
  sync aria-label/title in syncThemePressed (skip drawer button with visible
  text); inert background elements while mobile drawer is open

https://claude.ai/code/session_017G3gEzdfRafmqFno5dfWQH
@github-actions github-actions Bot added type:feature Feature or enhancement and removed type:feature Feature or enhancement labels Jun 5, 2026
@ashleyshaw ashleyshaw merged commit 2b4bbe8 into develop Jun 5, 2026
39 of 40 checks passed
@ashleyshaw ashleyshaw deleted the feat/ui-redesign-modes-icons-menus-Jw2jw branch June 5, 2026 16:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:assets Assets (images, fonts, static files) area:documentation Docs & guides area:scripts Scripts & tooling lang:css Stylesheets (CSS/Sass/etc.) lang:js JavaScript/TypeScript lang:md Markdown content/docs meta:needs-changelog Requires a changelog entry before merge priority:normal Default priority status:needs-review Awaiting code review type:bug Bug or defect type:feature Feature or enhancement

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Awesome GitHub Site: UI Redesign — Dark Mode, Navigation Mega Menu & Responsive Layout

3 participants