Skip to content

feat(web): add mobile drawer layout for about and brand pages#2008

Merged
ComputelessComputer merged 2 commits intomainfrom
devin/1764483580-about-brand-mobile-drawer
Dec 1, 2025
Merged

feat(web): add mobile drawer layout for about and brand pages#2008
ComputelessComputer merged 2 commits intomainfrom
devin/1764483580-about-brand-mobile-drawer

Conversation

@ComputelessComputer
Copy link
Collaborator

@ComputelessComputer ComputelessComputer commented Nov 30, 2025

Summary

Adds mobile drawer navigation to the about and brand pages, matching the existing pattern used in the changelog page. On mobile devices, when viewing item details, users can now tap a menu button to open a slide-in drawer for navigation instead of the desktop ResizablePanelGroup layout.

Changes:

  • Added MobileSidebarDrawer component to both pages with animated slide-in/out using motion/react
  • Added AboutDetailContent and BrandDetailContent components for mobile detail view rendering
  • Conditionally render drawer + detail content on mobile vs ResizablePanelGroup on desktop
  • Added menu button to MockWindow prefixIcons (only visible on mobile when an item is selected)

Review & Testing Checklist for Human

  • Test on mobile viewport: Open /about and /brand pages on a mobile device or using browser dev tools mobile emulation. Select an item and verify the drawer opens/closes correctly.
  • Verify drawer animations: Check that the slide-in animation feels smooth and matches the changelog page behavior.
  • Test navigation within drawer: Select different items from the drawer and verify the drawer closes and the correct detail view is shown.
  • Verify desktop behavior unchanged: On desktop, the ResizablePanelGroup should still work as before.

Recommended test plan: Use Chrome DevTools device emulation to test at various mobile breakpoints (375px, 414px). Navigate to both /about and /brand, select items, open the drawer, and switch between items.

Notes

@devin-ai-integration
Copy link
Contributor

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR that start with 'DevinAI' or '@devin'.
  • Look at CI failures and help fix them

Note: I can only respond to comments from users who have write access to this repository.

⚙️ Control Options:

  • Disable automatic comment and CI monitoring

@netlify
Copy link

netlify bot commented Nov 30, 2025

Deploy Preview for hyprnote-storybook ready!

Name Link
🔨 Latest commit abbec26
🔍 Latest deploy log https://app.netlify.com/projects/hyprnote-storybook/deploys/692cf52fbb87380008571bef
😎 Deploy Preview https://deploy-preview-2008--hyprnote-storybook.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 30, 2025

Caution

Review failed

The pull request is closed.

📝 Walkthrough

Walkthrough

Adds mobile-specific navigation and detail flows to About and Brand views: introduces a mobile drawer (animated via AnimatePresence/motion), mobile detail components, a Menu trigger in MockWindow prefixIcons, and conditional rendering that preserves desktop layouts.

Changes

Cohort / File(s) Summary
About view (mobile drawer + detail)
apps/web/src/routes/_view/about.tsx
Adds useIsMobile detection, drawerOpen state, Menu trigger via MockWindow prefixIcons, MobileSidebarDrawer (animated overlay + close), and AboutDetailContent mobile rendering path; desktop AboutDetailView retained.
Brand view (mobile drawer + detail)
apps/web/src/routes/_view/brand.tsx
Adds useIsMobile detection, drawerOpen state, Menu trigger via MockWindow prefixIcons, MobileSidebarDrawer containing sidebar panels (VisualAssets/ Typography/ Colors), and BrandDetailContent mobile rendering path; desktop BrandDetailView/sidebar retained.

Sequence Diagram(s)

mermaid
sequenceDiagram
autonumber
actor User
participant UI as MockWindow / App UI
participant Drawer as MobileSidebarDrawer
participant Sidebar as Sidebar Panels
participant Detail as DetailContent (About/Brand)
Note over User,UI: Mobile viewport
User->>UI: Tap Menu (prefixIcons)
UI->>Drawer: set drawerOpen = true (AnimatePresence enters)
Drawer->>Sidebar: render sidebar panels (VisualAssets/ etc.)
User->>Sidebar: Select item
Sidebar->>Detail: set selectedItem
Detail->>UI: render DetailContent inside Drawer
User->>Drawer: Tap Close or Back
Drawer->>UI: set drawerOpen = false (AnimatePresence exit)

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • Pay attention to animation lifecycle (AnimatePresence/motion) and accessibility (focus/scroll trapping) in MobileSidebarDrawer
  • Verify selectedItem/state propagation between sidebar panels and detail components in both mobile and desktop paths
  • Confirm MockWindow prefixIcons integration doesn't affect other usages

Possibly related PRs

Suggested reviewers

  • yujonglee

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and specifically describes the main change: adding mobile drawer layout to about and brand pages, which aligns with the primary objective of the pull request.
Description check ✅ Passed The description is well-structured, detailed, and directly related to the changeset. It explains the mobile drawer additions, the specific components modified, and provides testing guidance.

📜 Recent review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 99eb43c and abbec26.

📒 Files selected for processing (2)
  • apps/web/src/routes/_view/about.tsx (3 hunks)
  • apps/web/src/routes/_view/brand.tsx (3 hunks)

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

@netlify
Copy link

netlify bot commented Nov 30, 2025

Deploy Preview for hyprnote ready!

Name Link
🔨 Latest commit abbec26
🔍 Latest deploy log https://app.netlify.com/projects/hyprnote/deploys/692cf52fb632a00008fc9bf7
😎 Deploy Preview https://deploy-preview-2008--hyprnote.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@ComputelessComputer ComputelessComputer force-pushed the devin/1764483580-about-brand-mobile-drawer branch from 28e82c6 to 99eb43c Compare December 1, 2025 01:48
devin-ai-integration bot and others added 2 commits December 1, 2025 10:48
Co-Authored-By: john@hyprnote.com <john@hyprnote.com>
Replace Iconify icons with lucide-react Menu and X icons in about and brand views to unify the drawer icon implementation and remove the @iconify-icon/react dependency. This updates imports and swaps Icon components for <Menu /> when opening the drawer and <X /> when closing it, adjusting classes to match sizing and styling.
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (2)
apps/web/src/routes/_view/brand.tsx (1)

2-2: Standardize close icon usage for consistency.

Both X and XIcon are imported and used throughout the file (X at line 386, XIcon at lines 674, 706, 792). These refer to the same icon. Standardize on one to improve consistency.

Apply this diff to use X consistently:

-import { Menu, X, XIcon } from "lucide-react";
+import { Menu, X } from "lucide-react";

Then replace XIcon with X at lines 674, 706, and 792:

-            <XIcon size={16} />
+            <X size={16} />
apps/web/src/routes/_view/about.tsx (1)

2-2: Consider using consistent icon styling.

Both X and XIcon are imported and used, but with different styling patterns. Line 462 uses <X className="w-4 h-4" /> while lines 734, 858, 964 use <XIcon size={16} />. Consider standardizing on one approach for consistency.

</comment_end -->

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4ba818c and 99eb43c.

📒 Files selected for processing (2)
  • apps/web/src/routes/_view/about.tsx (3 hunks)
  • apps/web/src/routes/_view/brand.tsx (3 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.{ts,tsx}: Avoid creating a bunch of types/interfaces if they are not shared. Especially for function props, just inline them instead.
Never do manual state management for form/mutation. Use useForm (from tanstack-form) and useQuery/useMutation (from tanstack-query) instead for 99% of cases. Avoid patterns like setError.
If there are many classNames with conditional logic, use cn (import from @hypr/utils). It is similar to clsx. Always pass an array and split by logical grouping.
Use motion/react instead of framer-motion.

Files:

  • apps/web/src/routes/_view/about.tsx
  • apps/web/src/routes/_view/brand.tsx
🧠 Learnings (1)
📚 Learning: 2025-11-24T16:32:19.706Z
Learnt from: CR
Repo: fastrepl/hyprnote PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-11-24T16:32:19.706Z
Learning: Applies to **/*.{ts,tsx} : Use `motion/react` instead of `framer-motion`.

Applied to files:

  • apps/web/src/routes/_view/about.tsx
  • apps/web/src/routes/_view/brand.tsx
🧬 Code graph analysis (2)
apps/web/src/routes/_view/about.tsx (2)
packages/ui/src/hooks/use-mobile.tsx (1)
  • useIsMobile (5-19)
apps/web/src/components/mock-window.tsx (1)
  • MockWindow (4-62)
apps/web/src/routes/_view/brand.tsx (2)
packages/ui/src/hooks/use-mobile.tsx (1)
  • useIsMobile (5-19)
apps/web/src/components/mock-window.tsx (1)
  • MockWindow (4-62)
⏰ 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). (5)
  • GitHub Check: Redirect rules - hyprnote
  • GitHub Check: Header rules - hyprnote
  • GitHub Check: Pages changed - hyprnote
  • GitHub Check: ci (macos, macos-14)
  • GitHub Check: fmt
🔇 Additional comments (10)
apps/web/src/routes/_view/brand.tsx (6)

3-3: LGTM!

Correct usage of motion/react as specified in coding guidelines.

Based on coding guidelines and learnings.


164-165: LGTM!

Clean state management for responsive UI. The useIsMobile hook properly handles device detection, and drawerOpen state appropriately controls the drawer visibility.


170-185: LGTM!

The conditional rendering of the mobile menu button is well-implemented. Proper accessibility with aria-label, appropriate conditional logic (isMobile && selectedItem), and clean hover states.


186-208: LGTM!

Clean conditional rendering logic that properly separates mobile and desktop experiences. The relative positioning on the container correctly enables absolute positioning for the drawer overlay.


347-417: LGTM!

The mobile drawer implementation is solid:

  • Proper animation using motion/react with smooth spring transitions
  • Correct z-index layering (overlay at z-40, drawer at z-50)
  • Good UX: drawer closes when an item is selected (lines 393-394, 400-401, 407-408)
  • Reuses existing sidebar components effectively
  • Inline prop types follow coding guidelines

Based on coding guidelines.


419-448: LGTM!

Clean component that effectively reuses existing detail components for the mobile view. Inline prop types follow coding guidelines, and the conditional rendering based on selectedItem.type is clear and maintainable.

Based on coding guidelines.

apps/web/src/routes/_view/about.tsx (4)

228-229: LGTM - Mobile state management is appropriate.

The useIsMobile() hook and drawerOpen state are correctly implemented for managing mobile-specific UI behavior.

</review_comment_end -->


234-249: LGTM - Mobile menu button is well integrated.

The prefixIcons prop correctly shows the menu button only on mobile when viewing a detail, with proper accessibility attributes.

</review_comment_end -->


250-272: LGTM - Conditional rendering logic is clean.

The three-way conditional correctly handles grid view, mobile detail view with drawer, and desktop resizable panel layout.

</review_comment_end -->


495-521: LGTM - Excellent code reuse.

The AboutDetailContent component appropriately reuses the existing StoryDetail, FounderDetail, and PhotoDetail components, ensuring consistent behavior between mobile and desktop views without duplication.

</review_comment_end -->

@ComputelessComputer ComputelessComputer force-pushed the devin/1764483580-about-brand-mobile-drawer branch from 99eb43c to abbec26 Compare December 1, 2025 01:53
@ComputelessComputer ComputelessComputer merged commit 0b3bdb1 into main Dec 1, 2025
2 of 4 checks passed
@ComputelessComputer ComputelessComputer deleted the devin/1764483580-about-brand-mobile-drawer branch December 1, 2025 01:54
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.

1 participant