-
Notifications
You must be signed in to change notification settings - Fork 432
feat(web): add memory layer product page #1981
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
Note: I can only respond to comments from users who have write access to this repository. ⚙️ Control Options:
|
✅ Deploy Preview for hyprnote ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
✅ Deploy Preview for hyprnote-storybook ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
|
Warning Rate limit exceeded@ComputelessComputer has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 12 minutes and 57 seconds before requesting another review. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. 📒 Files selected for processing (2)
📝 WalkthroughWalkthroughAdds a "Memory" item to the header Products dropdown and replaces the placeholder memory route with a full product landing page composed of multiple UI sections and route metadata. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20–30 minutes
Possibly related PRs
Suggested reviewers
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
Comment |
|
The latest updates on your projects. Learn more about Argos notifications ↗︎
|
There was a problem hiding this 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/product/memory.tsx (2)
62-62: Consider centralizing the download URL.The URL
https://hyprnote.com/downloadappears multiple times (lines 62, 409). Consider extracting it to a constant for easier maintenance.Example:
+const DOWNLOAD_URL = "https://hyprnote.com/download"; + function Component() {Then update the usages:
- href="https://hyprnote.com/download" + href={DOWNLOAD_URL}
418-431: Consider using Icon component for consistency.The inline SVG arrow could use the
Iconcomponent (like the rest of the page) for better consistency and maintainability.Example:
Download for free - <svg - xmlns="http://www.w3.org/2000/svg" - fill="none" - viewBox="0 0 24 24" - strokeWidth="1.5" - stroke="currentColor" - className="h-5 w-5 ml-2 group-hover:translate-x-1 transition-transform" - > - <path - strokeLinecap="round" - strokeLinejoin="round" - d="m12.75 15 3-3m0 0-3-3m3 3h-7.5M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" - /> - </svg> + <Icon + icon="mdi:arrow-right-circle" + className="h-5 w-5 ml-2 group-hover:translate-x-1 transition-transform" + />
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
apps/web/src/components/header.tsx(1 hunks)apps/web/src/routes/_view/product/memory.tsx(1 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, usecn(import from@hypr/utils). It is similar toclsx. Always pass an array and split by logical grouping.
Usemotion/reactinstead offramer-motion.
Files:
apps/web/src/routes/_view/product/memory.tsxapps/web/src/components/header.tsx
🧬 Code graph analysis (1)
apps/web/src/routes/_view/product/memory.tsx (3)
apps/web/src/routes/_view/product/ai-assistant.tsx (1)
Route(8-20)apps/web/src/components/slash-separator.tsx (1)
SlashSeparator(1-8)packages/utils/src/cn.ts (1)
cn(20-22)
⏰ 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 (8)
apps/web/src/components/header.tsx (1)
22-22: LGTM!The new Memory product entry is correctly added to the navigation with the proper path and label, matching the pattern of existing entries.
apps/web/src/routes/_view/product/memory.tsx (7)
1-20: LGTM!The imports and route configuration follow the established patterns from other product pages, with proper metadata setup.
22-41: LGTM!The main component structure is well-organized with a clear layout using semantic sections separated by visual dividers.
43-75: Good use of thecnutility.The hero section structure is clean and follows the coding guidelines for className composition.
77-181: LGTM!The SuperConnector section is well-structured with responsive layout, proper semantic HTML, and consistent icon usage. The anchor offset pattern correctly accounts for the fixed header height.
183-290: LGTM!The Growing Knowledge section effectively communicates value progression with staged examples and maintains consistent structure and styling.
292-385: LGTM!The Contextual Intelligence section effectively presents AI features and privacy assurances with a clear, organized layout.
387-447: Good CTA section with proper use ofcnutility.The call-to-action section effectively uses the utility for className composition and maintains clear visual hierarchy between primary and secondary actions.
cd99174 to
cb527d5
Compare
- Create comprehensive memory.tsx page explaining Hyprnote as a memory layer - Add memory page to Products category in header navigation - Page covers: super connector, growing knowledge, and contextual intelligence Co-Authored-By: john@hyprnote.com <john@hyprnote.com>
4b770e8 to
f713573
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 3
🧹 Nitpick comments (1)
apps/web/src/routes/_view/product/memory.tsx (1)
418-431: Consider using Icon component for consistency.The inline SVG arrow is inconsistent with the Icon component usage throughout the rest of the file. Consider using an iconify icon like
mdi:arrow-right-circlefor consistency.Apply this diff to use the Icon component:
Download for free - <svg - xmlns="http://www.w3.org/2000/svg" - fill="none" - viewBox="0 0 24 24" - strokeWidth="1.5" - stroke="currentColor" - className="h-5 w-5 ml-2 group-hover:translate-x-1 transition-transform" - > - <path - strokeLinecap="round" - strokeLinejoin="round" - d="m12.75 15 3-3m0 0-3-3m3 3h-7.5M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" - /> - </svg> + <Icon + icon="mdi:arrow-right-circle" + className="h-5 w-5 ml-2 group-hover:translate-x-1 transition-transform" + />
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
apps/web/src/components/header.tsx(1 hunks)apps/web/src/routes/_view/product/memory.tsx(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- apps/web/src/components/header.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, usecn(import from@hypr/utils). It is similar toclsx. Always pass an array and split by logical grouping.
Usemotion/reactinstead offramer-motion.
Files:
apps/web/src/routes/_view/product/memory.tsx
🧬 Code graph analysis (1)
apps/web/src/routes/_view/product/memory.tsx (3)
apps/web/src/routes/_view/product/ai-assistant.tsx (1)
Route(8-20)apps/web/src/components/slash-separator.tsx (1)
SlashSeparator(1-8)packages/utils/src/cn.ts (1)
cn(20-22)
⏰ 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). (2)
- GitHub Check: fmt
- GitHub Check: ci (macos, macos-14)
🔇 Additional comments (5)
apps/web/src/routes/_view/product/memory.tsx (5)
1-6: LGTM!The imports are clean and appropriate. All dependencies are properly imported and used throughout the file.
8-20: LGTM!The route definition follows the established pattern from other product pages and includes appropriate SEO metadata.
77-181: LGTM!The section structure is clean with appropriate grid layout, icon usage, and anchor positioning for navigation.
183-290: LGTM!The section follows the established pattern with clear progressive disclosure of value (10/50/100+ meetings). Structure and icon usage are appropriate.
292-385: LGTM!The section effectively communicates AI capabilities and privacy features with a clean three-column grid layout and appropriate icon usage.
| function Component() { | ||
| return ( | ||
| <div | ||
| className="bg-linear-to-b from-white via-stone-50/20 to-white min-h-screen" | ||
| style={{ backgroundImage: "url(/patterns/dots.svg)" }} | ||
| > | ||
| <div className="max-w-6xl mx-auto border-x border-neutral-100 bg-white"> | ||
| <HeroSection /> | ||
| <SlashSeparator /> | ||
| <SuperConnectorSection /> | ||
| <SlashSeparator /> | ||
| <GrowingKnowledgeSection /> | ||
| <SlashSeparator /> | ||
| <ContextualIntelligenceSection /> | ||
| <SlashSeparator /> | ||
| <CTASection /> | ||
| </div> | ||
| </div> | ||
| ); | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix incorrect Tailwind CSS gradient class.
Line 25 uses bg-linear-to-b which is not a valid Tailwind CSS class. The correct class for linear gradients in Tailwind is bg-gradient-to-b.
Apply this diff to fix the CSS class:
<div
- className="bg-linear-to-b from-white via-stone-50/20 to-white min-h-screen"
+ className="bg-gradient-to-b from-white via-stone-50/20 to-white min-h-screen"
style={{ backgroundImage: "url(/patterns/dots.svg)" }}
>📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| function Component() { | |
| return ( | |
| <div | |
| className="bg-linear-to-b from-white via-stone-50/20 to-white min-h-screen" | |
| style={{ backgroundImage: "url(/patterns/dots.svg)" }} | |
| > | |
| <div className="max-w-6xl mx-auto border-x border-neutral-100 bg-white"> | |
| <HeroSection /> | |
| <SlashSeparator /> | |
| <SuperConnectorSection /> | |
| <SlashSeparator /> | |
| <GrowingKnowledgeSection /> | |
| <SlashSeparator /> | |
| <ContextualIntelligenceSection /> | |
| <SlashSeparator /> | |
| <CTASection /> | |
| </div> | |
| </div> | |
| ); | |
| } | |
| function Component() { | |
| return ( | |
| <div | |
| className="bg-gradient-to-b from-white via-stone-50/20 to-white min-h-screen" | |
| style={{ backgroundImage: "url(/patterns/dots.svg)" }} | |
| > | |
| <div className="max-w-6xl mx-auto border-x border-neutral-100 bg-white"> | |
| <HeroSection /> | |
| <SlashSeparator /> | |
| <SuperConnectorSection /> | |
| <SlashSeparator /> | |
| <GrowingKnowledgeSection /> | |
| <SlashSeparator /> | |
| <ContextualIntelligenceSection /> | |
| <SlashSeparator /> | |
| <CTASection /> | |
| </div> | |
| </div> | |
| ); | |
| } |
🤖 Prompt for AI Agents
In apps/web/src/routes/_view/product/memory.tsx around lines 22 to 41, the
container div uses an invalid Tailwind class `bg-linear-to-b`; replace that
token in the className with the correct Tailwind class `bg-gradient-to-b` so the
className becomes e.g. "bg-gradient-to-b from-white via-stone-50/20 to-white
min-h-screen", keeping the rest of the attributes (style and child components)
unchanged.
| function HeroSection() { | ||
| return ( | ||
| <div className="bg-linear-to-b from-stone-50/30 to-stone-100/30 px-6 py-12 lg:py-20"> | ||
| <header className="text-center max-w-4xl mx-auto"> | ||
| <h1 className="text-4xl sm:text-5xl font-serif tracking-tight text-stone-600 mb-6 flex items-center justify-center flex-wrap"> | ||
| <span>Your</span> | ||
| <Icon | ||
| icon="mdi:brain" | ||
| className="w-12 h-12 sm:w-16 sm:h-16 inline-block mx-2 text-stone-500" | ||
| /> | ||
| <span>memory layer</span> | ||
| </h1> | ||
| <p className="text-lg sm:text-xl text-neutral-600 max-w-2xl mx-auto"> | ||
| Hyprnote is a super connector that learns more about you with every | ||
| meeting. It builds a living memory of your conversations, | ||
| relationships, and decisions. | ||
| </p> | ||
| <div className="mt-8"> | ||
| <a | ||
| href="https://hyprnote.com/download" | ||
| className={cn([ | ||
| "inline-block px-8 py-3 text-base font-medium rounded-full", | ||
| "bg-linear-to-t from-stone-600 to-stone-500 text-white", | ||
| "hover:scale-105 active:scale-95 transition-transform", | ||
| ])} | ||
| > | ||
| Download for free | ||
| </a> | ||
| </div> | ||
| </header> | ||
| </div> | ||
| ); | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix incorrect Tailwind CSS gradient classes.
Lines 45 and 65 use bg-linear-to-{direction} which are not valid Tailwind CSS classes. The correct classes are bg-gradient-to-{direction}.
Apply this diff to fix the CSS classes:
- <div className="bg-linear-to-b from-stone-50/30 to-stone-100/30 px-6 py-12 lg:py-20">
+ <div className="bg-gradient-to-b from-stone-50/30 to-stone-100/30 px-6 py-12 lg:py-20">
<header className="text-center max-w-4xl mx-auto">
{/* ... */}
<a
href="https://hyprnote.com/download"
className={cn([
"inline-block px-8 py-3 text-base font-medium rounded-full",
- "bg-linear-to-t from-stone-600 to-stone-500 text-white",
+ "bg-gradient-to-t from-stone-600 to-stone-500 text-white",
"hover:scale-105 active:scale-95 transition-transform",
])}
>📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| function HeroSection() { | |
| return ( | |
| <div className="bg-linear-to-b from-stone-50/30 to-stone-100/30 px-6 py-12 lg:py-20"> | |
| <header className="text-center max-w-4xl mx-auto"> | |
| <h1 className="text-4xl sm:text-5xl font-serif tracking-tight text-stone-600 mb-6 flex items-center justify-center flex-wrap"> | |
| <span>Your</span> | |
| <Icon | |
| icon="mdi:brain" | |
| className="w-12 h-12 sm:w-16 sm:h-16 inline-block mx-2 text-stone-500" | |
| /> | |
| <span>memory layer</span> | |
| </h1> | |
| <p className="text-lg sm:text-xl text-neutral-600 max-w-2xl mx-auto"> | |
| Hyprnote is a super connector that learns more about you with every | |
| meeting. It builds a living memory of your conversations, | |
| relationships, and decisions. | |
| </p> | |
| <div className="mt-8"> | |
| <a | |
| href="https://hyprnote.com/download" | |
| className={cn([ | |
| "inline-block px-8 py-3 text-base font-medium rounded-full", | |
| "bg-linear-to-t from-stone-600 to-stone-500 text-white", | |
| "hover:scale-105 active:scale-95 transition-transform", | |
| ])} | |
| > | |
| Download for free | |
| </a> | |
| </div> | |
| </header> | |
| </div> | |
| ); | |
| } | |
| function HeroSection() { | |
| return ( | |
| <div className="bg-gradient-to-b from-stone-50/30 to-stone-100/30 px-6 py-12 lg:py-20"> | |
| <header className="text-center max-w-4xl mx-auto"> | |
| <h1 className="text-4xl sm:text-5xl font-serif tracking-tight text-stone-600 mb-6 flex items-center justify-center flex-wrap"> | |
| <span>Your</span> | |
| <Icon | |
| icon="mdi:brain" | |
| className="w-12 h-12 sm:w-16 sm:h-16 inline-block mx-2 text-stone-500" | |
| /> | |
| <span>memory layer</span> | |
| </h1> | |
| <p className="text-lg sm:text-xl text-neutral-600 max-w-2xl mx-auto"> | |
| Hyprnote is a super connector that learns more about you with every | |
| meeting. It builds a living memory of your conversations, | |
| relationships, and decisions. | |
| </p> | |
| <div className="mt-8"> | |
| <a | |
| href="https://hyprnote.com/download" | |
| className={cn([ | |
| "inline-block px-8 py-3 text-base font-medium rounded-full", | |
| "bg-gradient-to-t from-stone-600 to-stone-500 text-white", | |
| "hover:scale-105 active:scale-95 transition-transform", | |
| ])} | |
| > | |
| Download for free | |
| </a> | |
| </div> | |
| </header> | |
| </div> | |
| ); | |
| } |
🤖 Prompt for AI Agents
In apps/web/src/routes/_view/product/memory.tsx around lines 43 to 75, the
component uses invalid Tailwind classes `bg-linear-to-b` and `bg-linear-to-t`;
replace them with the correct Tailwind gradient utility names `bg-gradient-to-b`
and `bg-gradient-to-t` respectively (update the outer div class from
bg-linear-to-b to bg-gradient-to-b and the download link wrapper from
bg-linear-to-t to bg-gradient-to-t) so the gradients work as intended.
| function CTASection() { | ||
| return ( | ||
| <section className="py-16 bg-linear-to-t from-stone-50/30 to-stone-100/30 px-4 lg:px-0"> | ||
| <div className="flex flex-col gap-6 items-center text-center"> | ||
| <div className="mb-4 size-40 shadow-2xl border border-neutral-100 flex justify-center items-center rounded-[48px] bg-transparent"> | ||
| <img | ||
| src="/api/images/hyprnote/icon.png" | ||
| alt="Hyprnote" | ||
| width={144} | ||
| height={144} | ||
| className="size-36 mx-auto rounded-[40px] border border-neutral-100" | ||
| /> | ||
| </div> | ||
| <h2 className="text-2xl sm:text-3xl font-serif"> | ||
| Start building your memory layer | ||
| </h2> | ||
| <p className="text-lg text-neutral-600 max-w-2xl mx-auto"> | ||
| Every meeting adds to your knowledge. The sooner you start, the more | ||
| valuable your memory becomes. | ||
| </p> | ||
| <div className="pt-6 flex flex-col sm:flex-row gap-4 justify-center items-center"> | ||
| <a | ||
| href="https://hyprnote.com/download" | ||
| className={cn([ | ||
| "group px-6 h-12 flex items-center justify-center text-base sm:text-lg", | ||
| "bg-linear-to-t from-stone-600 to-stone-500 text-white rounded-full", | ||
| "shadow-md hover:shadow-lg hover:scale-[102%] active:scale-[98%]", | ||
| "transition-all", | ||
| ])} | ||
| > | ||
| Download for free | ||
| <svg | ||
| xmlns="http://www.w3.org/2000/svg" | ||
| fill="none" | ||
| viewBox="0 0 24 24" | ||
| strokeWidth="1.5" | ||
| stroke="currentColor" | ||
| className="h-5 w-5 ml-2 group-hover:translate-x-1 transition-transform" | ||
| > | ||
| <path | ||
| strokeLinecap="round" | ||
| strokeLinejoin="round" | ||
| d="m12.75 15 3-3m0 0-3-3m3 3h-7.5M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" | ||
| /> | ||
| </svg> | ||
| </a> | ||
| <Link | ||
| to="/product/ai-assistant" | ||
| className={cn([ | ||
| "px-6 h-12 flex items-center justify-center text-base sm:text-lg", | ||
| "border border-neutral-300 text-stone-600 rounded-full", | ||
| "hover:bg-white transition-colors", | ||
| ])} | ||
| > | ||
| Learn about AI Assistant | ||
| </Link> | ||
| </div> | ||
| </div> | ||
| </section> | ||
| ); | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix incorrect Tailwind CSS gradient classes.
Lines 389 and 412 use bg-linear-to-t which is not a valid Tailwind CSS class. The correct class is bg-gradient-to-t.
Apply this diff to fix the CSS classes:
- <section className="py-16 bg-linear-to-t from-stone-50/30 to-stone-100/30 px-4 lg:px-0">
+ <section className="py-16 bg-gradient-to-t from-stone-50/30 to-stone-100/30 px-4 lg:px-0">
<div className="flex flex-col gap-6 items-center text-center">
{/* ... */}
<a
href="https://hyprnote.com/download"
className={cn([
"group px-6 h-12 flex items-center justify-center text-base sm:text-lg",
- "bg-linear-to-t from-stone-600 to-stone-500 text-white rounded-full",
+ "bg-gradient-to-t from-stone-600 to-stone-500 text-white rounded-full",
"shadow-md hover:shadow-lg hover:scale-[102%] active:scale-[98%]",
"transition-all",
])}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| function CTASection() { | |
| return ( | |
| <section className="py-16 bg-linear-to-t from-stone-50/30 to-stone-100/30 px-4 lg:px-0"> | |
| <div className="flex flex-col gap-6 items-center text-center"> | |
| <div className="mb-4 size-40 shadow-2xl border border-neutral-100 flex justify-center items-center rounded-[48px] bg-transparent"> | |
| <img | |
| src="/api/images/hyprnote/icon.png" | |
| alt="Hyprnote" | |
| width={144} | |
| height={144} | |
| className="size-36 mx-auto rounded-[40px] border border-neutral-100" | |
| /> | |
| </div> | |
| <h2 className="text-2xl sm:text-3xl font-serif"> | |
| Start building your memory layer | |
| </h2> | |
| <p className="text-lg text-neutral-600 max-w-2xl mx-auto"> | |
| Every meeting adds to your knowledge. The sooner you start, the more | |
| valuable your memory becomes. | |
| </p> | |
| <div className="pt-6 flex flex-col sm:flex-row gap-4 justify-center items-center"> | |
| <a | |
| href="https://hyprnote.com/download" | |
| className={cn([ | |
| "group px-6 h-12 flex items-center justify-center text-base sm:text-lg", | |
| "bg-linear-to-t from-stone-600 to-stone-500 text-white rounded-full", | |
| "shadow-md hover:shadow-lg hover:scale-[102%] active:scale-[98%]", | |
| "transition-all", | |
| ])} | |
| > | |
| Download for free | |
| <svg | |
| xmlns="http://www.w3.org/2000/svg" | |
| fill="none" | |
| viewBox="0 0 24 24" | |
| strokeWidth="1.5" | |
| stroke="currentColor" | |
| className="h-5 w-5 ml-2 group-hover:translate-x-1 transition-transform" | |
| > | |
| <path | |
| strokeLinecap="round" | |
| strokeLinejoin="round" | |
| d="m12.75 15 3-3m0 0-3-3m3 3h-7.5M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" | |
| /> | |
| </svg> | |
| </a> | |
| <Link | |
| to="/product/ai-assistant" | |
| className={cn([ | |
| "px-6 h-12 flex items-center justify-center text-base sm:text-lg", | |
| "border border-neutral-300 text-stone-600 rounded-full", | |
| "hover:bg-white transition-colors", | |
| ])} | |
| > | |
| Learn about AI Assistant | |
| </Link> | |
| </div> | |
| </div> | |
| </section> | |
| ); | |
| } | |
| function CTASection() { | |
| return ( | |
| <section className="py-16 bg-gradient-to-t from-stone-50/30 to-stone-100/30 px-4 lg:px-0"> | |
| <div className="flex flex-col gap-6 items-center text-center"> | |
| <div className="mb-4 size-40 shadow-2xl border border-neutral-100 flex justify-center items-center rounded-[48px] bg-transparent"> | |
| <img | |
| src="/api/images/hyprnote/icon.png" | |
| alt="Hyprnote" | |
| width={144} | |
| height={144} | |
| className="size-36 mx-auto rounded-[40px] border border-neutral-100" | |
| /> | |
| </div> | |
| <h2 className="text-2xl sm:text-3xl font-serif"> | |
| Start building your memory layer | |
| </h2> | |
| <p className="text-lg text-neutral-600 max-w-2xl mx-auto"> | |
| Every meeting adds to your knowledge. The sooner you start, the more | |
| valuable your memory becomes. | |
| </p> | |
| <div className="pt-6 flex flex-col sm:flex-row gap-4 justify-center items-center"> | |
| <a | |
| href="https://hyprnote.com/download" | |
| className={cn([ | |
| "group px-6 h-12 flex items-center justify-center text-base sm:text-lg", | |
| "bg-gradient-to-t from-stone-600 to-stone-500 text-white rounded-full", | |
| "shadow-md hover:shadow-lg hover:scale-[102%] active:scale-[98%]", | |
| "transition-all", | |
| ])} | |
| > | |
| Download for free | |
| <svg | |
| xmlns="http://www.w3.org/2000/svg" | |
| fill="none" | |
| viewBox="0 0 24 24" | |
| strokeWidth="1.5" | |
| stroke="currentColor" | |
| className="h-5 w-5 ml-2 group-hover:translate-x-1 transition-transform" | |
| > | |
| <path | |
| strokeLinecap="round" | |
| strokeLinejoin="round" | |
| d="m12.75 15 3-3m0 0-3-3m3 3h-7.5M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" | |
| /> | |
| </svg> | |
| </a> | |
| <Link | |
| to="/product/ai-assistant" | |
| className={cn([ | |
| "px-6 h-12 flex items-center justify-center text-base sm:text-lg", | |
| "border border-neutral-300 text-stone-600 rounded-full", | |
| "hover:bg-white transition-colors", | |
| ])} | |
| > | |
| Learn about AI Assistant | |
| </Link> | |
| </div> | |
| </div> | |
| </section> | |
| ); | |
| } |
🤖 Prompt for AI Agents
In apps/web/src/routes/_view/product/memory.tsx around lines 387 to 447, replace
the invalid Tailwind class "bg-linear-to-t" with the correct "bg-gradient-to-t"
on the section element (line ~389) and the download button anchor (line ~412);
update both occurrences so the gradient classes become "bg-gradient-to-t" to fix
styling.
Summary
Adds a new product page at
/product/memoryexplaining Hyprnote as a "memory layer" - a super connector that learns more about users as they have more meetings. The page is added to the "Products" category in the header navigation.The page includes four main sections:
Review & Testing Checklist for Human
/product/memoryin browser and verify the page looks correct on desktop and mobile viewportsRecommended test plan: Run
pnpm -F web devand navigate to/product/memoryto visually inspect the page. Also check the header dropdown to confirm the Memory link appears in the Products section.Notes
ai-assistant.tsxand other product pages for consistencydprint checkformatting validationLink to Devin run: https://app.devin.ai/sessions/737230621695445fb03e5c1d63a5ac7e
Requested by: john@hyprnote.com (@ComputelessComputer)