From 4de18d6475e24c318f4fdc61999c98a5add0abe5 Mon Sep 17 00:00:00 2001 From: sungmanch Date: Fri, 13 Feb 2026 11:15:00 +0900 Subject: [PATCH 1/7] refactor(landing): rebrand metadata and OG tags to VibeBetter Co-Authored-By: Claude Opus 4.6 --- app/layout.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/layout.tsx b/app/layout.tsx index 9c122c04..d729a679 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -21,13 +21,13 @@ const notoSansKR = Noto_Sans_KR({ export const metadata: Metadata = { metadataBase: new URL('https://www.nomoreaislop.app'), - title: 'NoMoreAISlop - AI Session Intelligence for Builders', + title: 'VibeBetter - AI Session Intelligence for Builders', description: 'See what is going wrong in your AI workflow. Analyze behavior patterns, risk blind spots, and practical next steps.', openGraph: { - title: 'NoMoreAISlop - AI Session Intelligence for Builders', + title: 'VibeBetter - AI Session Intelligence for Builders', description: 'See what is going wrong in your AI workflow and how to improve with clear, behavior-based feedback.', type: 'website', - siteName: 'NoMoreAISlop', + siteName: 'VibeBetter', }, twitter: { card: 'summary_large_image', From 13cff4fea93900101aed8c3878c6c080021ee610 Mon Sep 17 00:00:00 2001 From: sungmanch Date: Fri, 13 Feb 2026 11:15:05 +0900 Subject: [PATCH 2/7] refactor(landing): update hero, showcase, and footer CTA routing and messaging All CTAs now route directly to /dashboard/analyze via Next.js router instead of scrolling to pricing section. Unified CTA label to "Get Started Free" and updated messaging copy. Co-Authored-By: Claude Opus 4.6 --- src/components/landing/HeroSection.tsx | 2 +- src/components/landing/LandingFooter.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/landing/HeroSection.tsx b/src/components/landing/HeroSection.tsx index 13461088..ad0a5f3b 100644 --- a/src/components/landing/HeroSection.tsx +++ b/src/components/landing/HeroSection.tsx @@ -17,7 +17,7 @@ export function HeroSection() { return (
-
No More AI Slop
+
VibeBetter

You're building with AI.
diff --git a/src/components/landing/LandingFooter.tsx b/src/components/landing/LandingFooter.tsx index 6e305c7f..eb8670ad 100644 --- a/src/components/landing/LandingFooter.tsx +++ b/src/components/landing/LandingFooter.tsx @@ -63,7 +63,7 @@ export function LandingFooter() {

- © {new Date().getFullYear()} NoMoreAISlop + © {new Date().getFullYear()} VibeBetter

From 6acdddbabe42a3267fa2bed20ad21089ee63d043 Mon Sep 17 00:00:00 2001 From: sungmanch Date: Fri, 13 Feb 2026 11:20:01 +0900 Subject: [PATCH 3/7] refactor(landing): rebrand OG image to VibeBetter Update social share preview image with new brand name, tagline, and URL to match landing page rebrand. Co-Authored-By: Claude Opus 4.6 --- app/opengraph-image.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/opengraph-image.tsx b/app/opengraph-image.tsx index 234a9280..b340d06b 100644 --- a/app/opengraph-image.tsx +++ b/app/opengraph-image.tsx @@ -2,7 +2,7 @@ import { ImageResponse } from 'next/og'; export const runtime = 'nodejs'; -export const alt = 'NoMoreAISlop - AI Session Intelligence for Builders'; +export const alt = 'VibeBetter - AI Session Intelligence for Builders'; export const size = { width: 1200, height: 630 }; export const contentType = 'image/png'; @@ -88,7 +88,7 @@ export default function Image() { marginBottom: 28, }} > - NoMoreAISlop + VibeBetter {/* Tagline */} @@ -130,7 +130,7 @@ export default function Image() { {'\u25b8'}
- npx no-ai-slop + vibebetter.app
@@ -169,7 +169,7 @@ export default function Image() { {/* URL */}
- www.nomoreaislop.app + www.vibebetter.app
From 092e481f78169ceca4e6ee94762bc6e10b1d3c4a Mon Sep 17 00:00:00 2001 From: sungmanch Date: Fri, 13 Feb 2026 11:20:02 +0900 Subject: [PATCH 4/7] refactor(landing): update mobile share title to VibeBetter Co-Authored-By: Claude Opus 4.6 --- src/components/landing/TerminalCommand.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/landing/TerminalCommand.tsx b/src/components/landing/TerminalCommand.tsx index 48ee3440..7655564c 100644 --- a/src/components/landing/TerminalCommand.tsx +++ b/src/components/landing/TerminalCommand.tsx @@ -43,7 +43,7 @@ export function TerminalCommand({ command, location = 'hero' }: TerminalCommandP // Bookmark prompt — mobile users can't run CLI if (navigator.share) { navigator.share({ - title: 'NoMoreAISlop - AI Session Intelligence for Builders', + title: 'VibeBetter - AI Session Intelligence for Builders', url: window.location.href, }).catch(() => {}); } else { From 0830c97561070b4fb6ab72b676abcb8da971feaa Mon Sep 17 00:00:00 2001 From: sungmanch Date: Fri, 13 Feb 2026 14:02:14 +0900 Subject: [PATCH 5/7] revert(landing): restore NoMoreAISlop branding across landing page Revert VibeBetter brand name back to NoMoreAISlop in metadata, hero badge, footer copyright, OG image, and mobile share title. Messaging copy and CTA routing improvements are preserved. Co-Authored-By: Claude Opus 4.6 --- app/layout.tsx | 6 +++--- app/opengraph-image.tsx | 8 ++++---- src/components/landing/HeroSection.tsx | 2 +- src/components/landing/LandingFooter.tsx | 2 +- src/components/landing/TerminalCommand.tsx | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app/layout.tsx b/app/layout.tsx index d729a679..9c122c04 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -21,13 +21,13 @@ const notoSansKR = Noto_Sans_KR({ export const metadata: Metadata = { metadataBase: new URL('https://www.nomoreaislop.app'), - title: 'VibeBetter - AI Session Intelligence for Builders', + title: 'NoMoreAISlop - AI Session Intelligence for Builders', description: 'See what is going wrong in your AI workflow. Analyze behavior patterns, risk blind spots, and practical next steps.', openGraph: { - title: 'VibeBetter - AI Session Intelligence for Builders', + title: 'NoMoreAISlop - AI Session Intelligence for Builders', description: 'See what is going wrong in your AI workflow and how to improve with clear, behavior-based feedback.', type: 'website', - siteName: 'VibeBetter', + siteName: 'NoMoreAISlop', }, twitter: { card: 'summary_large_image', diff --git a/app/opengraph-image.tsx b/app/opengraph-image.tsx index b340d06b..234a9280 100644 --- a/app/opengraph-image.tsx +++ b/app/opengraph-image.tsx @@ -2,7 +2,7 @@ import { ImageResponse } from 'next/og'; export const runtime = 'nodejs'; -export const alt = 'VibeBetter - AI Session Intelligence for Builders'; +export const alt = 'NoMoreAISlop - AI Session Intelligence for Builders'; export const size = { width: 1200, height: 630 }; export const contentType = 'image/png'; @@ -88,7 +88,7 @@ export default function Image() { marginBottom: 28, }} > - VibeBetter + NoMoreAISlop {/* Tagline */} @@ -130,7 +130,7 @@ export default function Image() { {'\u25b8'}
- vibebetter.app + npx no-ai-slop
@@ -169,7 +169,7 @@ export default function Image() { {/* URL */}
- www.vibebetter.app + www.nomoreaislop.app
diff --git a/src/components/landing/HeroSection.tsx b/src/components/landing/HeroSection.tsx index ad0a5f3b..13461088 100644 --- a/src/components/landing/HeroSection.tsx +++ b/src/components/landing/HeroSection.tsx @@ -17,7 +17,7 @@ export function HeroSection() { return (
-
VibeBetter
+
No More AI Slop

You're building with AI.
diff --git a/src/components/landing/LandingFooter.tsx b/src/components/landing/LandingFooter.tsx index eb8670ad..6e305c7f 100644 --- a/src/components/landing/LandingFooter.tsx +++ b/src/components/landing/LandingFooter.tsx @@ -63,7 +63,7 @@ export function LandingFooter() {

- © {new Date().getFullYear()} VibeBetter + © {new Date().getFullYear()} NoMoreAISlop

diff --git a/src/components/landing/TerminalCommand.tsx b/src/components/landing/TerminalCommand.tsx index 7655564c..48ee3440 100644 --- a/src/components/landing/TerminalCommand.tsx +++ b/src/components/landing/TerminalCommand.tsx @@ -43,7 +43,7 @@ export function TerminalCommand({ command, location = 'hero' }: TerminalCommandP // Bookmark prompt — mobile users can't run CLI if (navigator.share) { navigator.share({ - title: 'VibeBetter - AI Session Intelligence for Builders', + title: 'NoMoreAISlop - AI Session Intelligence for Builders', url: window.location.href, }).catch(() => {}); } else { From 7cdb95c93201ded15cad171751d1a755f75c2e74 Mon Sep 17 00:00:00 2001 From: sungmanch Date: Sat, 14 Feb 2026 13:41:18 +0900 Subject: [PATCH 6/7] refactor(landing): simplify ternary operators, imports, and callbacks Co-Authored-By: Claude Opus 4.6 --- src/components/landing/EnterprisePreview.tsx | 21 ++++++++++++------- src/components/landing/SectionNav.tsx | 6 +++--- src/components/landing/index.ts | 1 + src/views/LandingPage.tsx | 22 +++++++++++--------- 4 files changed, 30 insertions(+), 20 deletions(-) diff --git a/src/components/landing/EnterprisePreview.tsx b/src/components/landing/EnterprisePreview.tsx index a3f3eb22..c3da3720 100644 --- a/src/components/landing/EnterprisePreview.tsx +++ b/src/components/landing/EnterprisePreview.tsx @@ -64,6 +64,18 @@ const STATS: StatItem[] = [ { label: 'Risk Items', value: '23', change: { text: 'detected', direction: 'neutral' } }, ]; +const directionStyles: Record = { + up: styles.changeUp, + down: styles.changeDown, + neutral: styles.changeNeutral, +}; + +const directionArrows: Record = { + up: '\u2191', + down: '\u2193', + neutral: '', +}; + interface MemberItem { name: string; role: string; @@ -133,13 +145,8 @@ export function EnterprisePreview() {
{stat.label}
{stat.value}
{stat.change && ( - - {stat.change.direction === 'up' && '\u2191'} - {stat.change.direction === 'down' && '\u2193'} + + {directionArrows[stat.change.direction]} {' '}{stat.change.text} )} diff --git a/src/components/landing/SectionNav.tsx b/src/components/landing/SectionNav.tsx index ae85478e..8132ae81 100644 --- a/src/components/landing/SectionNav.tsx +++ b/src/components/landing/SectionNav.tsx @@ -1,6 +1,6 @@ 'use client'; -import { useEffect, useState, useCallback, useRef } from 'react'; +import { useEffect, useState, useRef } from 'react'; import { track } from '@vercel/analytics'; import styles from './SectionNav.module.css'; @@ -54,9 +54,9 @@ export function SectionNav() { return () => observer.disconnect(); }, []); - const handleClick = useCallback((id: string) => { + function handleClick(id: string): void { document.getElementById(id)?.scrollIntoView({ behavior: 'smooth' }); - }, []); + } return (