Conversation
|
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
WalkthroughThe changes update the landing page's hero text, refactor the testimonials section to support a feature-flagged Senja widget integration, introduce a new feature flag and hook for testimonial variants, and increment the application version number. No changes were made to business logic outside of the testimonials and display text. Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant Testimonials
participant useTestimonialsVariant
participant SenjaWidgetContent
participant TestimonialsContent
User->>Testimonials: Render
Testimonials->>useTestimonialsVariant: Get variant
useTestimonialsVariant-->>Testimonials: "senja-widget" or "control"
alt Variant is "senja-widget"
Testimonials->>SenjaWidgetContent: Render Senja widget
else Variant is "control"
Testimonials->>TestimonialsContent: Render original testimonials
end
Poem
Warning There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure. 🔧 ESLint
apps/web/app/(landing)/home/Hero.tsxOops! Something went wrong! :( ESLint: 9.28.0 ESLint couldn't find an eslint.config.(js|mjs|cjs) file. From ESLint v9.0.0, the default configuration file is now eslint.config.js. https://eslint.org/docs/latest/use/configure/migration-guide If you still have problems after following the migration guide, please stop by apps/web/app/(landing)/home/Testimonials.tsxOops! Something went wrong! :( ESLint: 9.28.0 ESLint couldn't find an eslint.config.(js|mjs|cjs) file. From ESLint v9.0.0, the default configuration file is now eslint.config.js. https://eslint.org/docs/latest/use/configure/migration-guide If you still have problems after following the migration guide, please stop by apps/web/hooks/useFeatureFlags.tsOops! Something went wrong! :( ESLint: 9.28.0 ESLint couldn't find an eslint.config.(js|mjs|cjs) file. From ESLint v9.0.0, the default configuration file is now eslint.config.js. https://eslint.org/docs/latest/use/configure/migration-guide If you still have problems after following the migration guide, please stop by ✨ Finishing Touches
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. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Actionable comments posted: 1
🔭 Outside diff range comments (1)
apps/web/app/(landing)/home/Testimonials.tsx (1)
8-15: 🛠️ Refactor suggestion
logoUrlis used but not typed → extendTestimonialfor stricter safety.
featuredTestimonial.author.logoUrlis accessed later, yet the type omits it. Make it optional to eliminate implicitanyleaks:type Testimonial = { body: string; author: { name: string; handle: string; imageUrl: string; + logoUrl?: string; }; };
🧹 Nitpick comments (2)
apps/web/hooks/useFeatureFlags.ts (1)
40-48: Consider extracting a constant for the flag name and mirroring the “enabled” helper.You follow the same hard-coded-string pattern as older hooks, but that approach is starting to sprawl. A small refactor keeps things DRY and typo-safe:
+const TESTIMONIALS_FLAG_NAME = "testimonials"; + export type TestimonialsVariant = "control" | "senja-widget"; export function useTestimonialsVariant() { return ( - (useFeatureFlagVariantKey("testimonials") as TestimonialsVariant) || + (useFeatureFlagVariantKey(TESTIMONIALS_FLAG_NAME) as TestimonialsVariant) || "control" ); } + +export function useTestimonialsVariantEnabled() { + return useFeatureFlagEnabled(TESTIMONIALS_FLAG_NAME); +}apps/web/app/(landing)/home/Testimonials.tsx (1)
125-148: Variant switch is clean, but add defensive fallback.
useTestimonialsVariant()already defaults to"control", yet a guard close to the switch makes intent explicit and prevents future undefined renders:- const variant = useTestimonialsVariant(); + const variant = useTestimonialsVariant() ?? "control";
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (4)
apps/web/app/(landing)/home/Hero.tsx(1 hunks)apps/web/app/(landing)/home/Testimonials.tsx(4 hunks)apps/web/hooks/useFeatureFlags.ts(1 hunks)version.txt(1 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (1)
apps/web/app/(landing)/home/Testimonials.tsx (1)
apps/web/hooks/useFeatureFlags.ts (1)
useTestimonialsVariant(43-48)
🔇 Additional comments (3)
version.txt (1)
1-1: Patch-level bump looks correct.No concerns.
apps/web/app/(landing)/home/Hero.tsx (1)
56-63: Copy updates only – implementation unchanged.LGTM.
apps/web/app/(landing)/home/Testimonials.tsx (1)
270-284: Validate third-party script loading for CSP-protected deployments.If a
script-srcCSP is enforced, the Senja widget will be blocked unlesshttps://widget.senja.iois whitelisted. Ensure your production CSP headers are updated accordingly.
| {column.map((testimonial) => ( | ||
| <figure | ||
| key={testimonial.author.handle} | ||
| className="rounded-2xl bg-white p-6 shadow-lg ring-1 ring-gray-900/5" | ||
| > |
There was a problem hiding this comment.
Duplicate React keys when handle is empty.
Several testimonials have an empty string handle, so key={testimonial.author.handle} will collide and trigger React warnings.
- key={testimonial.author.handle}
+ key={`${testimonial.author.handle || testimonial.author.name}-${columnIdx}-${columnGroupIdx}`}Committable suggestion skipped: line range outside the PR's diff.
🤖 Prompt for AI Agents
In apps/web/app/(landing)/home/Testimonials.tsx around lines 232 to 236, the
React key for each testimonial uses testimonial.author.handle, which can be an
empty string causing duplicate keys and React warnings. To fix this, generate a
unique key for each testimonial by combining the handle with another unique
property like an ID or the testimonial index in the map function to ensure all
keys are unique and avoid collisions.
Summary by CodeRabbit