Skip to content

Conversation

@ComputelessComputer
Copy link
Collaborator

@ComputelessComputer ComputelessComputer commented Dec 3, 2025

refactor: move press-kit routes to directory structure

Summary

Restructured the press-kit routes from flat files to a directory structure and implemented a full-featured app screenshots page:

  • Moved press-kit.tsxpress-kit/index.tsx (route path updated from /_view/press-kit to /_view/press-kit/)
  • Replaced placeholder press-kit.app.tsx with press-kit/app.tsx that replicates the about.tsx pattern
  • New app.tsx includes: grid view, detail view with resizable sidebar, mobile drawer navigation, URL search params for deep linking, and download functionality

Review & Testing Checklist for Human

  • Verify screenshot images exist - The screenshots array references 9 image URLs (e.g., /api/images/hyprnote/float-compact.jpg). I did not verify these images actually exist on the server.
  • Test routes work correctly - Navigate to /press-kit and /press-kit/app to confirm routing works after the directory restructure
  • Test mobile drawer - On mobile viewport, verify the sidebar drawer opens/closes correctly when viewing a screenshot detail
  • Test download functionality - Click the "Download" button on a screenshot detail view and verify the image downloads correctly
  • Test deep linking - Navigate directly to /press-kit/app?type=screenshot&id=float-compact and verify the correct screenshot is selected

Recommended test plan: Visit /press-kit, click the "App" folder, browse screenshots in grid view, click one to see detail view, test the download button, resize the sidebar panel, and test on mobile viewport.

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 Dec 3, 2025

Deploy Preview for hyprnote-storybook ready!

Name Link
🔨 Latest commit e135a1f
🔍 Latest deploy log https://app.netlify.com/projects/hyprnote-storybook/deploys/693191e2fb327500084e8381
😎 Deploy Preview https://deploy-preview-2098--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 Dec 3, 2025

📝 Walkthrough

Walkthrough

Removed a placeholder route file and added a new directory-based press-kit route implementing an interactive "App Screenshots" gallery with URL-synced selection, responsive/resizable panels, and mobile drawer navigation. Also updated the press-kit index route path to include a trailing slash and removed JSX comments.

Changes

Cohort / File(s) Change Summary
Press-kit app route reorganization
apps/web/src/routes/_view/press-kit.app.tsx (deleted), apps/web/src/routes/_view/press-kit/app.tsx (added)
Deleted a placeholder route file and added a new route at /_view/press-kit/app with Route exported via createFileRoute. New file implements an "App Screenshots" gallery: static screenshot catalog, validateSearch for type/id, URL-synced selection state, grid + detail views, download/close actions, responsive layout with ResizablePanelGroup, and a mobile drawer.
Press-kit index route update
apps/web/src/routes/_view/press-kit/index.tsx
Updated route registration to use trailing slash (/_view/press-kit/) and removed non-functional JSX comments. No other logic changes.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

  • Focus review on the new apps/web/src/routes/_view/press-kit/app.tsx for: route search validation, URL sync (useSearch/useNavigate), resizable panel setup, and mobile drawer behavior.
  • Check exported Route head metadata and search validation signature.
  • Inspect image rendering and download/close action handlers for correctness and accessibility.

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 accurately summarizes the primary change: moving press-kit routes from flat files to a directory structure, which is the core refactoring objective of this PR.
Description check ✅ Passed The description is directly related to the changeset, detailing the structural reorganization, the new app.tsx features, and providing a comprehensive testing checklist aligned with the actual changes.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch devin/1764760700-press-kit-restructure

📜 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 8d2476b and e135a1f.

📒 Files selected for processing (3)
  • apps/web/src/routes/_view/press-kit.app.tsx (0 hunks)
  • apps/web/src/routes/_view/press-kit/app.tsx (1 hunks)
  • apps/web/src/routes/_view/press-kit/index.tsx (1 hunks)
💤 Files with no reviewable changes (1)
  • apps/web/src/routes/_view/press-kit.app.tsx
🚧 Files skipped from review as they are similar to previous changes (1)
  • apps/web/src/routes/_view/press-kit/index.tsx
🧰 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/press-kit/app.tsx
⏰ 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: fmt
  • GitHub Check: ci
🔇 Additional comments (1)
apps/web/src/routes/_view/press-kit/app.tsx (1)

41-96: Image URL verification is a deployment concern, not a code issue.

The nine screenshot URLs in the screenshots array (/api/images/hyprnote/float-*.jpg, etc.) are correctly structured for Netlify's image optimization pipeline. They follow the same pattern used throughout the codebase in other routes (product/ai-notetaking.tsx, join-waitlist.tsx, etc.) and the infrastructure is properly configured via @netlify/vite-plugin-tanstack-start in vite.config.ts.

Verifying that these images are actually accessible and resolve to valid files requires runtime testing or deployment confirmation—this is outside the scope of static code review. Before deploying to production, ensure the image assets are provisioned and available in your hosting environment.


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.

@netlify
Copy link

netlify bot commented Dec 3, 2025

Deploy Preview for hyprnote ready!

Name Link
🔨 Latest commit e135a1f
🔍 Latest deploy log https://app.netlify.com/projects/hyprnote/deploys/693191e24619af00083ac854
😎 Deploy Preview https://deploy-preview-2098--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.

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: 1

🧹 Nitpick comments (2)
apps/web/src/routes/_view/press-kit/app.tsx (2)

186-186: Consider extracting the repeated height constant.

The h-[480px] value appears on lines 186, 223, and 275. Extracting this to a shared constant would improve maintainability if the height needs to change.

const CONTENT_HEIGHT = "h-[480px]";
// or
const CONTENT_HEIGHT_CLASS = "h-[480px]";

331-331: Magic number 49px ties implicitly to header height.

The calculation h-[calc(100%-49px)] assumes the header height. If the header padding or border changes, this will break silently. Consider using a CSS variable or flex layout to avoid the magic number.

-          <div className="h-[calc(100%-49px)] overflow-y-auto p-4">
+          <div className="flex-1 overflow-y-auto p-4">

This would require adding flex flex-col to the parent motion.div container:

-            className="absolute left-0 top-0 bottom-0 z-50 w-72 bg-white border-r border-neutral-200 shadow-lg"
+            className="absolute left-0 top-0 bottom-0 z-50 w-72 bg-white border-r border-neutral-200 shadow-lg flex flex-col"
📜 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 d847251 and 8d2476b.

📒 Files selected for processing (3)
  • apps/web/src/routes/_view/press-kit.app.tsx (0 hunks)
  • apps/web/src/routes/_view/press-kit/app.tsx (1 hunks)
  • apps/web/src/routes/_view/press-kit/index.tsx (1 hunks)
💤 Files with no reviewable changes (1)
  • apps/web/src/routes/_view/press-kit.app.tsx
🧰 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/press-kit/app.tsx
  • apps/web/src/routes/_view/press-kit/index.tsx
🧬 Code graph analysis (2)
apps/web/src/routes/_view/press-kit/app.tsx (4)
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/components/image.tsx (1)
  • Image (4-24)
packages/utils/src/cn.ts (1)
  • cn (20-22)
apps/web/src/routes/_view/press-kit/index.tsx (1)
apps/web/src/routes/_view/press-kit/app.tsx (1)
  • Route (22-39)
⏰ 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). (6)
  • GitHub Check: Redirect rules - hyprnote
  • GitHub Check: Header rules - hyprnote
  • GitHub Check: Pages changed - hyprnote
  • GitHub Check: ci
  • GitHub Check: Devin
  • GitHub Check: fmt
🔇 Additional comments (4)
apps/web/src/routes/_view/press-kit/index.tsx (1)

11-11: LGTM!

The trailing slash in the route path correctly reflects the directory-based routing structure where this file is now press-kit/index.tsx.

apps/web/src/routes/_view/press-kit/app.tsx (3)

1-4: LGTM!

Imports are clean, correctly using motion/react as per coding guidelines, and properly organizing dependencies.


100-123: LGTM!

The URL-driven state management pattern is well-implemented. The bidirectional sync between URL search params and component state is appropriate for this use case (UI selection state, not form data).


22-39: LGTM!

Route definition with validateSearch properly validates URL search params, and head metadata is correctly configured for SEO.

- Move press-kit.tsx to press-kit/index.tsx
- Rename press-kit.app.tsx to press-kit/app.tsx
- Update app.tsx to replicate about.tsx behavior with grid/detail views

Co-Authored-By: john@hyprnote.com <john@hyprnote.com>
@ComputelessComputer ComputelessComputer force-pushed the devin/1764760700-press-kit-restructure branch from 8d2476b to e135a1f Compare December 4, 2025 13:51
@ComputelessComputer ComputelessComputer merged commit 571e632 into main Dec 4, 2025
12 of 13 checks passed
@ComputelessComputer ComputelessComputer deleted the devin/1764760700-press-kit-restructure branch December 4, 2025 13:55
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.

2 participants