diff --git a/package-lock.json b/package-lock.json index 095d3df..066734f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "0.1.0", "dependencies": { "@google/generative-ai": "^0.24.1", + "lucide-react": "^0.563.0", "next": "16.1.6", "octokit": "^5.0.5", "react": "19.2.4", @@ -5573,6 +5574,15 @@ "yallist": "^3.0.2" } }, + "node_modules/lucide-react": { + "version": "0.563.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.563.0.tgz", + "integrity": "sha512-8dXPB2GI4dI8jV4MgUDGBeLdGk8ekfqVZ0BdLcrRzocGgG75ltNEmWS+gE7uokKF/0oSUuczNDT+g9hFJ23FkA==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/magic-string": { "version": "0.30.21", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", diff --git a/package.json b/package.json index d984c9f..f7cf36d 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/src/app/page.tsx b/src/app/page.tsx index 295f8fd..81409f9 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -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' }, + ]; + + const featureList = [ + { icon: , title: "Context Awareness", desc: "Detects frameworks and dependencies automatically." }, + { icon: , title: "Clean Templates", desc: "Formatted Markdown following GitHub best practices." }, + { icon: , title: "AI Optimization", desc: "Optimized for project clarity and searchability." }, + ]; + return ( -
-
- Next.js logo -
-

- To get started, edit the page.tsx file. -

-

- Looking for a starting point or more instructions? Head over to{" "} - - Templates - {" "} - or the{" "} - - Learning - {" "} - center. -

-
- +
+ +
+ +
+
); -} +} \ No newline at end of file diff --git a/src/components/layout/Footer.tsx b/src/components/layout/Footer.tsx new file mode 100644 index 0000000..21c907b --- /dev/null +++ b/src/components/layout/Footer.tsx @@ -0,0 +1,29 @@ +import { Github } from 'lucide-react'; + +export const Footer = () => ( +
+
+
+
+ R +
+ ReadmeGenAI +
+ +

+ © 2026 ReadmeGenAI. Designed for the high-performance developer. +

+ +
+ + + + +
+
+
+); \ No newline at end of file diff --git a/src/components/layout/Navbar.tsx b/src/components/layout/Navbar.tsx new file mode 100644 index 0000000..5c9c8f1 --- /dev/null +++ b/src/components/layout/Navbar.tsx @@ -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 ( + + ); +}; \ No newline at end of file diff --git a/src/components/sections/Features.tsx b/src/components/sections/Features.tsx new file mode 100644 index 0000000..da8c05e --- /dev/null +++ b/src/components/sections/Features.tsx @@ -0,0 +1,32 @@ +import React from 'react'; + +interface FeatureItem { + icon: React.ReactNode; + title: string; + desc: string; +} + +export const Features = ({ items }: { items: FeatureItem[] }) => ( +
+
+
+ {items.map((feature, idx) => ( +
+
+ {feature.icon} +
+

+ {feature.title} +

+

+ {feature.desc} +

+
+ ))} +
+
+
+); \ No newline at end of file diff --git a/src/components/sections/Hero.tsx b/src/components/sections/Hero.tsx new file mode 100644 index 0000000..1b26d30 --- /dev/null +++ b/src/components/sections/Hero.tsx @@ -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 = () => ( +
+
+
+
+ + v2.0: Now with real-time codebase context +
+

+ Ship documentation
+ as fast as your code. +

+

+ ReadmeGenAI scans your repository and crafts professional README files automatically. +

+
+ + +
+ +
+
+); \ No newline at end of file diff --git a/src/components/sections/TerminalMockup.tsx b/src/components/sections/TerminalMockup.tsx new file mode 100644 index 0000000..827a66d --- /dev/null +++ b/src/components/sections/TerminalMockup.tsx @@ -0,0 +1,45 @@ +import React from 'react'; + +export const TerminalMockup = () => ( +
+
+ {/* Terminal Header */} +
+
+
+
+
+
+
+ bash — readme-generator +
+
+ + {/* Terminal Content */} +
+
+ + npx readmegenai init +
+ +
+

+ Analyzing codebase... +

+

✓ Detected Next.js 15 & TailwindCSS

+

✓ Parsed 14 API endpoints

+

✓ Metadata successfully pulled from Octokit

+
+ +
+

✨ README.md generated successfully!

+
+ +
+ + +
+
+
+
+); \ No newline at end of file diff --git a/src/components/ui/Button.tsx b/src/components/ui/Button.tsx new file mode 100644 index 0000000..d148411 --- /dev/null +++ b/src/components/ui/Button.tsx @@ -0,0 +1,23 @@ +import React from 'react'; + +interface ButtonProps extends React.ButtonHTMLAttributes { + 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 ( + + ); +}; \ No newline at end of file