Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
},
"dependencies": {
"@google/generative-ai": "^0.24.1",
"lucide-react": "^0.563.0",
"next": "16.1.6",
"octokit": "^5.0.5",
"react": "19.2.4",
Expand Down
84 changes: 25 additions & 59 deletions src/app/page.tsx
Original file line number Diff line number Diff line change
@@ -1,65 +1,31 @@
import Image from "next/image";
import { Navbar } from '@/components/layout/Navbar';
import { Hero } from '@/components/sections/Hero';
import { Features } from '@/components/sections/Features';
import { Footer } from '@/components/layout/Footer';
import { Code, Layout, FileText } from 'lucide-react';

export default function Home() {
const navLinks = [
{ name: 'Home', href: '#' },
{ name: 'Features', href: '#features' },
{ name: 'Examples', href: '#examples' },
{ name: 'Docs', href: '#docs' },
];
Comment on lines +8 to +13
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Nav links #examples and #docs point to non-existent sections.

The rendered page only has sections with id="features" (from Features.tsx). There are no elements with id="examples" or id="docs", so clicking those nav links will do nothing. Either add the corresponding sections or remove/disable these links until the pages exist.

Proposed fix — remove links for sections that don't exist yet
   const navLinks = [
     { name: 'Home', href: '#' },
     { name: 'Features', href: '#features' },
-    { name: 'Examples', href: '#examples' },
-    { name: 'Docs', href: '#docs' },
   ];
📝 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.

Suggested change
const navLinks = [
{ name: 'Home', href: '#' },
{ name: 'Features', href: '#features' },
{ name: 'Examples', href: '#examples' },
{ name: 'Docs', href: '#docs' },
];
const navLinks = [
{ name: 'Home', href: '#' },
{ name: 'Features', href: '#features' },
];
🤖 Prompt for AI Agents
In `@src/app/page.tsx` around lines 8 - 13, navLinks contains entries for
'Examples' and 'Docs' that point to non-existent section IDs; either remove
those objects from the navLinks array or add corresponding sections with
id="examples" and id="docs" to the page (e.g., create Examples and Docs
components and render them alongside Features which uses id="features"). Update
the navLinks constant (remove or comment out the { name: 'Examples', href:
'#examples' } and { name: 'Docs', href: '#docs' } entries) or add matching
section elements/components that export/render elements with id="examples" and
id="docs" so the links work.


const featureList = [
{ icon: <Code size={24} />, title: "Context Awareness", desc: "Detects frameworks and dependencies automatically." },
{ icon: <Layout size={24} />, title: "Clean Templates", desc: "Formatted Markdown following GitHub best practices." },
{ icon: <FileText size={24} />, title: "AI Optimization", desc: "Optimized for project clarity and searchability." },
];

return (
<div className="flex min-h-screen items-center justify-center bg-zinc-50 font-sans dark:bg-black">
<main className="flex min-h-screen w-full max-w-3xl flex-col items-center justify-between py-32 px-16 bg-white dark:bg-black sm:items-start">
<Image
className="dark:invert"
src="/next.svg"
alt="Next.js logo"
width={100}
height={20}
priority
/>
<div className="flex flex-col items-center gap-6 text-center sm:items-start sm:text-left">
<h1 className="max-w-xs text-3xl font-semibold leading-10 tracking-tight text-black dark:text-zinc-50">
To get started, edit the page.tsx file.
</h1>
<p className="max-w-md text-lg leading-8 text-zinc-600 dark:text-zinc-400">
Looking for a starting point or more instructions? Head over to{" "}
<a
href="https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
className="font-medium text-zinc-950 dark:text-zinc-50"
>
Templates
</a>{" "}
or the{" "}
<a
href="https://nextjs.org/learn?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
className="font-medium text-zinc-950 dark:text-zinc-50"
>
Learning
</a>{" "}
center.
</p>
</div>
<div className="flex flex-col gap-4 text-base font-medium sm:flex-row">
<a
className="flex h-12 w-full items-center justify-center gap-2 rounded-full bg-foreground px-5 text-background transition-colors hover:bg-[#383838] dark:hover:bg-[#ccc] md:w-[158px]"
href="https://vercel.com/new?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
target="_blank"
rel="noopener noreferrer"
>
<Image
className="dark:invert"
src="/vercel.svg"
alt="Vercel logomark"
width={16}
height={16}
/>
Deploy Now
</a>
<a
className="flex h-12 w-full items-center justify-center rounded-full border border-solid border-black/[.08] px-5 transition-colors hover:border-transparent hover:bg-black/[.04] dark:border-white/[.145] dark:hover:bg-[#1a1a1a] md:w-[158px]"
href="https://nextjs.org/docs?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
target="_blank"
rel="noopener noreferrer"
>
Documentation
</a>
</div>
<div className="min-h-screen bg-black text-white selection:bg-white/30">
<Navbar links={navLinks} />
<main>
<Hero />
<Features items={featureList} />
</main>
<Footer />
</div>
);
}
}
29 changes: 29 additions & 0 deletions src/components/layout/Footer.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import { Github } from 'lucide-react';

export const Footer = () => (
<footer className="py-16 border-t border-white/5 bg-black">
<div className="max-w-7xl mx-auto px-4 flex flex-col md:flex-row justify-between items-center gap-8">
<div className="flex items-center gap-3">
<div className="w-8 h-8 bg-white rounded-lg flex items-center justify-center">
<span className="text-black font-black text-sm">R</span>
</div>
<span className="font-bold text-lg tracking-tighter">ReadmeGenAI</span>
</div>

<p className="text-zinc-500 text-sm">
© 2026 ReadmeGenAI. Designed for the high-performance developer.
</p>

<div className="flex gap-6 items-center">
<a
href="#"
aria-label="GitHub"
className="text-zinc-500 hover:text-white transition-colors"
>
<Github size={22} />
</a>
Comment on lines +18 to +24
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

GitHub link is a non-functional placeholder (href="#").

This anchor will scroll to the top of the page instead of navigating to the actual GitHub repository. Update it to point to the real repository URL (e.g., https://github.com/BeyteFlow/ReadmeGenAI).

Proposed fix
         <a
-          href="#"
+          href="https://github.com/BeyteFlow/ReadmeGenAI"
+          target="_blank"
+          rel="noopener noreferrer"
           aria-label="GitHub"
           className="text-zinc-500 hover:text-white transition-colors"
         >
📝 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.

Suggested change
<a
href="#"
aria-label="GitHub"
className="text-zinc-500 hover:text-white transition-colors"
>
<Github size={22} />
</a>
<a
href="https://github.com/BeyteFlow/ReadmeGenAI"
target="_blank"
rel="noopener noreferrer"
aria-label="GitHub"
className="text-zinc-500 hover:text-white transition-colors"
>
<Github size={22} />
</a>
🤖 Prompt for AI Agents
In `@src/components/layout/Footer.tsx` around lines 18 - 24, Footer.tsx contains a
non-functional anchor (the <a> wrapping <Github />) whose href is "#" — replace
that href with the real repository URL (e.g.,
https://github.com/BeyteFlow/ReadmeGenAI) in the Footer component, and set
appropriate external link attributes (target="_blank" and rel="noopener
noreferrer") and keep the aria-label "GitHub" so the GitHub icon link is
functional and accessible.


</div>
</div>
</footer>
);
89 changes: 89 additions & 0 deletions src/components/layout/Navbar.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
"use client";
import React, { useState, useEffect } from 'react';
import { Menu, X, Github } from 'lucide-react';
import { Button } from '../ui/Button';

export const Navbar = ({ links }: { links: { name: string; href: string }[] }) => {
const [isMenuOpen, setIsMenuOpen] = useState(false);
const [scrolled, setScrolled] = useState(false);

useEffect(() => {
const handleScroll = () => setScrolled(window.scrollY > 20);
window.addEventListener('scroll', handleScroll);
return () => window.removeEventListener('scroll', handleScroll);
}, []);

return (
<nav className={`fixed top-0 w-full z-50 transition-all duration-300 ${
scrolled ? 'bg-black/80 backdrop-blur-md border-b border-white/10 py-3' : 'bg-transparent py-5'
}`}>
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div className="flex justify-between items-center">
{/* Brand Logo */}
<div className="flex items-center gap-3 group cursor-pointer">
<div className="relative w-9 h-9 bg-white rounded-lg flex items-center justify-center overflow-hidden transition-transform group-hover:rotate-3">
<span className="text-black font-black text-xl">R</span>
</div>
<span className="font-bold text-xl tracking-tighter">ReadmeGenAI</span>
</div>

{/* Desktop Menu */}
<div className="hidden md:flex items-center space-x-1">
{links.map((link) => (
<a
key={link.name}
href={link.href}
className="px-4 py-2 text-sm font-medium text-gray-400 hover:text-white transition-colors"
>
{link.name}
</a>
))}
</div>

{/* Action Buttons */}
<div className="flex items-center gap-3">
{/* Using an anchor tag with button styling for the GitHub Link */}
<a
href="https://github.com/your-username/ReadmeGenAI"
target="_blank"
rel="noopener noreferrer"
className="hidden sm:flex items-center gap-2 px-4 py-1.5 rounded-full bg-white/5 border border-white/10 hover:border-white/30 hover:bg-white/10 transition-all text-xs font-medium"
>
<Github size={14} />
<span>Star on GitHub</span>
</a>
Comment on lines +46 to +54
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Placeholder GitHub URL — will be visible to users.

https://github.com/your-username/ReadmeGenAI is clearly a template placeholder. This will render a broken link for users who click "Star on GitHub."

Proposed fix
             <a
-              href="https://github.com/your-username/ReadmeGenAI"
+              href="https://github.com/BeyteFlow/ReadmeGenAI"
               target="_blank"
               rel="noopener noreferrer"
📝 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.

Suggested change
<a
href="https://github.com/your-username/ReadmeGenAI"
target="_blank"
rel="noopener noreferrer"
className="hidden sm:flex items-center gap-2 px-4 py-1.5 rounded-full bg-white/5 border border-white/10 hover:border-white/30 hover:bg-white/10 transition-all text-xs font-medium"
>
<Github size={14} />
<span>Star on GitHub</span>
</a>
<a
href="https://github.com/BeyteFlow/ReadmeGenAI"
target="_blank"
rel="noopener noreferrer"
className="hidden sm:flex items-center gap-2 px-4 py-1.5 rounded-full bg-white/5 border border-white/10 hover:border-white/30 hover:bg-white/10 transition-all text-xs font-medium"
>
<Github size={14} />
<span>Star on GitHub</span>
</a>
🤖 Prompt for AI Agents
In `@src/components/layout/Navbar.tsx` around lines 46 - 54, The "Star on GitHub"
anchor in the Navbar component currently points to a placeholder URL and will
render a broken link; update the anchor in Navbar (the <a> element rendering the
GitHub button) to use the real repository URL (from a config, env var, or a
constant like REPO_URL) instead of
"https://github.com/your-username/ReadmeGenAI", ensure target and rel attributes
remain, and fall back to hiding or disabling the button if no valid URL is
provided.


{/* Mobile Menu Toggle using your custom Button component (Ghost variant) */}
<Button
variant="ghost"
className="md:hidden p-2 px-2"
onClick={() => setIsMenuOpen(!isMenuOpen)}
aria-label="Toggle Menu"
>
{isMenuOpen ? <X size={20} /> : <Menu size={20} />}
</Button>
</div>
</div>
</div>

{/* Mobile Menu Drawer */}
{isMenuOpen && (
<div className="md:hidden bg-black border-b border-white/10 px-4 py-6 space-y-4 animate-in slide-in-from-top duration-300">
{links.map((link) => (
<a
key={link.name}
href={link.href}
className="block text-lg font-medium text-gray-400 hover:text-white"
onClick={() => setIsMenuOpen(false)}
>
{link.name}
</a>
))}
<Button variant="primary" className="w-full justify-center mt-4">
<Github size={18} /> Star our Repo
</Button>
Comment on lines +82 to +84
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Mobile "Star our Repo" is a <button>, not a link — clicking it does nothing.

This renders a <Button> component (which produces a <button> element) but has no onClick handler or navigation logic. It should be an anchor (<a>) pointing to the GitHub repo, or wrap the Button in a link.

Proposed fix — use an anchor styled like the button
-          <Button variant="primary" className="w-full justify-center mt-4">
-            <Github size={18} /> Star our Repo
-          </Button>
+          <a
+            href="https://github.com/BeyteFlow/ReadmeGenAI"
+            target="_blank"
+            rel="noopener noreferrer"
+            className="w-full flex items-center justify-center gap-2 px-6 py-2.5 rounded-full font-medium bg-white text-black hover:bg-gray-200 transition-all mt-4"
+          >
+            <Github size={18} /> Star our Repo
+          </a>
📝 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.

Suggested change
<Button variant="primary" className="w-full justify-center mt-4">
<Github size={18} /> Star our Repo
</Button>
<a
href="https://github.com/BeyteFlow/ReadmeGenAI"
target="_blank"
rel="noopener noreferrer"
className="w-full flex items-center justify-center gap-2 px-6 py-2.5 rounded-full font-medium bg-white text-black hover:bg-gray-200 transition-all mt-4"
>
<Github size={18} /> Star our Repo
</a>
🤖 Prompt for AI Agents
In `@src/components/layout/Navbar.tsx` around lines 82 - 84, The "Star our Repo"
control renders a <Button> (producing a <button>) with no navigation handler;
replace it with an anchor styled like the button or wrap the Button in an <a>
that points to the GitHub repo (e.g.,
href="https://github.com/your-org/your-repo") and include target="_blank"
rel="noopener noreferrer" for safe external navigation; update the JSX where the
<Button variant="primary" className="w-full justify-center mt-4"> with <Github
size={18} /> Star our Repo is rendered (in Navbar component) so it becomes an
accessible link while preserving the existing classes and icon.

</div>
)}
</nav>
);
};
32 changes: 32 additions & 0 deletions src/components/sections/Features.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import React from 'react';

interface FeatureItem {
icon: React.ReactNode;
title: string;
desc: string;
}

export const Features = ({ items }: { items: FeatureItem[] }) => (
<section id="features" className="py-24 border-t border-white/5 bg-black">
<div className="max-w-7xl mx-auto px-4">
<div className="grid grid-cols-1 md:grid-cols-3 gap-8">
{items.map((feature, idx) => (
<div
key={idx}
className="group p-8 rounded-3xl bg-zinc-950 border border-white/5 hover:border-blue-500/50 hover:bg-zinc-900/50 transition-all duration-300 shadow-2xl"
>
<div className="mb-6 p-4 rounded-2xl bg-white/5 w-fit group-hover:bg-blue-600 group-hover:text-white transition-all duration-500 text-blue-400">
{feature.icon}
</div>
<h3 className="text-xl font-bold mb-3 text-white tracking-tight">
{feature.title}
</h3>
<p className="text-gray-400 leading-relaxed text-sm">
{feature.desc}
</p>
</div>
))}
</div>
</div>
</section>
);
32 changes: 32 additions & 0 deletions src/components/sections/Hero.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import React from 'react';
import { Zap, ArrowRight } from 'lucide-react';
import { Button } from '../ui/Button';
import { TerminalMockup } from './TerminalMockup';

export const Hero = () => (
<section className="relative pt-40 pb-20 overflow-hidden">
<div className="absolute top-0 left-1/2 -translate-x-1/2 w-250 h-150 bg-blue-500/10 blur-[120px] rounded-full pointer-events-none" />
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

cat package.json | jq '.dependencies, .devDependencies' 2>/dev/null

Repository: BeyteFlow/ReadmeGenAI

Length of output: 465


🏁 Script executed:

fd "tailwind\.config\." --max-depth=3 -x cat {}

Repository: BeyteFlow/ReadmeGenAI

Length of output: 47


🏁 Script executed:

fd "package\.json" --max-depth=2 -x cat {}

Repository: BeyteFlow/ReadmeGenAI

Length of output: 727


🏁 Script executed:

find . -name "tailwind.config.*" -o -name "postcss.config.*" 2>/dev/null

Repository: BeyteFlow/ReadmeGenAI

Length of output: 85


🏁 Script executed:

find . -type f -name "*.ts" -o -name "*.js" -o -name "*.json" | grep -E "(tailwind|postcss)" | head -20

Repository: BeyteFlow/ReadmeGenAI

Length of output: 47


🏁 Script executed:

cat src/components/sections/Hero.tsx

Repository: BeyteFlow/ReadmeGenAI

Length of output: 1673


🏁 Script executed:

cat postcss.config.mjs

Repository: BeyteFlow/ReadmeGenAI

Length of output: 158


🏁 Script executed:

find . -type f \( -name "*.ts" -o -name "*.tsx" -o -name "*.js" \) -exec grep -l "theme.*extend\|spacing.*250\|spacing.*150" {} \;

Repository: BeyteFlow/ReadmeGenAI

Length of output: 47


Change w-250 and h-150 to arbitrary values; these are not valid Tailwind utility classes.

Tailwind v4 is configured without custom spacing extensions, so w-250 and h-150 will not generate valid CSS. Use arbitrary values instead: w-[62.5rem] h-[37.5rem].

🤖 Prompt for AI Agents
In `@src/components/sections/Hero.tsx` at line 8, The Tailwind classes w-250 and
h-150 in the absolute background div inside the Hero component are invalid;
replace them with arbitrary-value utilities w-[62.5rem] and h-[37.5rem] in the
same className string (the div with className starting "absolute top-0 left-1/2
...") so Tailwind generates the correct width and height.

<div className="max-w-5xl mx-auto px-4 text-center relative z-10">
<div className="inline-flex items-center gap-2 px-3 py-1 rounded-full bg-white/5 border border-white/10 text-xs font-medium text-blue-400 mb-8">
<Zap size={12} fill="currentColor" />
<span>v2.0: Now with real-time codebase context</span>
</div>
<h1 className="text-5xl md:text-8xl font-extrabold tracking-tighter mb-8 leading-[1.1]">
Ship documentation <br />
<span className="bg-clip-text text-transparent bg-linear-to-b from-white to-white/40">as fast as your code.</span>
</h1>
<p className="max-w-2xl mx-auto text-gray-400 text-lg md:text-xl mb-10 leading-relaxed">
ReadmeGenAI scans your repository and crafts professional README files automatically.
</p>
<div className="flex flex-col sm:flex-row justify-center items-center gap-4">
<Button className="w-full sm:w-auto px-10 py-4 text-base">
Get Started <ArrowRight size={18} />
</Button>
<Button variant="outline" className="w-full sm:w-auto px-10 py-4 text-base">
View Examples
</Button>
</div>
Comment on lines +21 to +28
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

CTA buttons are not wired to any action or navigation.

Both "Get Started" and "View Examples" render as <button> elements with no onClick handler or wrapping <a>/<Link>. They are non-functional for the user. If these are intended as navigation links, consider wrapping them with Next.js <Link> or using <a> tags. If this is intentional placeholder work, a // TODO comment would help track it.

🤖 Prompt for AI Agents
In `@src/components/sections/Hero.tsx` around lines 21 - 28, The CTA buttons in
Hero.tsx (the Button components rendering "Get Started" and "View Examples" with
ArrowRight) have no navigation or click handlers; either wrap them with Next.js
Link (or an <a>) to route to the intended pages (e.g., <Link
href="/get-started"> and <Link href="/examples">) or add onClick handlers that
call the appropriate router.push paths, and if they are intentionally
placeholders add a clear TODO comment above the Button elements documenting the
intended destinations; update the Button props accordingly (remove conflicting
href if Button expects it) and ensure accessibility attributes (aria-label) are
present.

<TerminalMockup />
</div>
</section>
);
45 changes: 45 additions & 0 deletions src/components/sections/TerminalMockup.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import React from 'react';

export const TerminalMockup = () => (
<div className="mt-20 relative p-px rounded-2xl bg-linear-to-b from-white/20 via-white/5 to-transparent shadow-2xl max-w-4xl mx-auto">
<div className="rounded-2xl bg-black border border-white/5 overflow-hidden">
{/* Terminal Header */}
<div className="flex items-center justify-between px-5 py-4 bg-zinc-900/40 border-b border-white/5">
<div className="flex gap-2">
<div className="w-3 h-3 rounded-full bg-[#FF5F56] opacity-80" />
<div className="w-3 h-3 rounded-full bg-[#FFBD2E] opacity-80" />
<div className="w-3 h-3 rounded-full bg-[#27C93F] opacity-80" />
</div>
<div className="text-[10px] text-gray-500 font-mono uppercase tracking-widest">
bash — readme-generator
</div>
</div>

{/* Terminal Content */}
<div className="p-8 text-left font-mono text-sm md:text-base leading-relaxed">
<div className="flex gap-3">
<span className="text-blue-500 font-bold">➜</span>
<span className="text-zinc-300">npx readmegenai init</span>
</div>

<div className="mt-4 space-y-1">
<p className="text-blue-400 flex items-center gap-2">
<span className="animate-pulse">●</span> Analyzing codebase...
</p>
<p className="text-zinc-500">✓ Detected Next.js 15 & TailwindCSS</p>
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Terminal demo text says "Next.js 15" but the project runs Next.js 16.

The package.json specifies next: "16.1.6". This static demo text should match to avoid confusing users inspecting the landing page.

Proposed fix
-          <p className="text-zinc-500">✓ Detected Next.js 15 & TailwindCSS</p>
+          <p className="text-zinc-500">✓ Detected Next.js 16 & TailwindCSS</p>
📝 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.

Suggested change
<p className="text-zinc-500">✓ Detected Next.js 15 & TailwindCSS</p>
<p className="text-zinc-500">✓ Detected Next.js 16 & TailwindCSS</p>
🤖 Prompt for AI Agents
In `@src/components/sections/TerminalMockup.tsx` at line 29, The TerminalMockup
component contains a hardcoded line showing "✓ Detected Next.js 15" which is
incorrect; update the static text in TerminalMockup (the <p> element inside the
TerminalMockup component) to "✓ Detected Next.js 16" to match package.json
(next: "16.1.6"); alternatively replace the hardcoded string with a dynamic
value imported from package.json if you prefer it to stay in sync automatically.

<p className="text-zinc-500">✓ Parsed 14 API endpoints</p>
<p className="text-zinc-500">✓ Metadata successfully pulled from Octokit</p>
</div>

<div className="mt-6 p-3 bg-emerald-500/10 border border-emerald-500/20 rounded-lg">
<p className="text-emerald-400 font-bold">✨ README.md generated successfully!</p>
</div>

<div className="mt-6 flex gap-3">
<span className="text-blue-500 font-bold">➜</span>
<span className="w-2 h-5 bg-white/40 animate-pulse" />
</div>
</div>
</div>
</div>
);
23 changes: 23 additions & 0 deletions src/components/ui/Button.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import React from 'react';

interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
variant?: 'primary' | 'outline' | 'ghost';
children: React.ReactNode;
}

export const Button = ({ children, variant = 'primary', className = '', ...props }: ButtonProps) => {
const variants = {
primary: 'bg-white text-black hover:bg-gray-200',
outline: 'bg-transparent border border-white/10 hover:bg-white/5 text-white',
ghost: 'bg-transparent hover:text-white text-gray-400',
};

return (
<button
className={`px-6 py-2.5 rounded-full font-medium transition-all flex items-center justify-center gap-2 group ${variants[variant]} ${className}`}
{...props}
>
{children}
</button>
);
};