2025-11-07 11:26:19 +01:00
|
|
|
'use client';
|
|
|
|
|
|
|
|
|
|
import { motion } from 'framer-motion';
|
refactor: externalize tool definitions and polish app shell
- Create lib/tools.tsx as single source of truth for all tool metadata
(title, shortTitle, navTitle, description, summary, icon, etc.)
- Update AppSidebar to render nav from centralized tools list with
descriptions, remove collapse footer button
- Update AppHeader with sidebar collapse toggle, tool short title,
and app logo; remove breadcrumbs
- Update AppPage to auto-resolve tool icon from pathname
- Update ToolsGrid/ToolCard to use shared tools data, remove per-card
gradients for uniform styling
- Add per-tool HTML title via metadata exports (title template in root
layout)
- Style landing page and 404 headings with primary theme color
- Add Toolbox icon to hero CTA, GitFork icon link in footer
- Remove footer from error page and "View on Dev" buttons
- Extract ColorPage client component for RSC metadata compatibility
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 17:46:54 +01:00
|
|
|
import { Toolbox } from 'lucide-react';
|
2025-11-07 11:26:19 +01:00
|
|
|
import Logo from './Logo';
|
|
|
|
|
|
|
|
|
|
export default function Hero() {
|
2026-02-23 02:31:49 +01:00
|
|
|
/**
|
|
|
|
|
* Smoothly scrolls the window to the tools section without modifying the URL hash.
|
|
|
|
|
*/
|
|
|
|
|
const scrollToTools = () => {
|
|
|
|
|
const toolsSection = document.getElementById('tools');
|
|
|
|
|
if (toolsSection) {
|
|
|
|
|
toolsSection.scrollIntoView({ behavior: 'smooth' });
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
2025-11-07 11:26:19 +01:00
|
|
|
return (
|
|
|
|
|
<section className="relative min-h-screen flex flex-col items-center justify-center px-4 py-20">
|
|
|
|
|
<div className="max-w-6xl mx-auto text-center">
|
|
|
|
|
{/* Logo */}
|
|
|
|
|
<motion.div
|
|
|
|
|
className="mb-8 flex justify-center"
|
|
|
|
|
initial={{ opacity: 0, y: -50 }}
|
|
|
|
|
animate={{ opacity: 1, y: 0 }}
|
|
|
|
|
transition={{ duration: 0.8 }}
|
|
|
|
|
>
|
2026-02-23 14:00:09 +01:00
|
|
|
<Logo size={130} />
|
2025-11-07 11:26:19 +01:00
|
|
|
</motion.div>
|
|
|
|
|
|
|
|
|
|
{/* Main heading */}
|
|
|
|
|
<motion.h1
|
refactor: externalize tool definitions and polish app shell
- Create lib/tools.tsx as single source of truth for all tool metadata
(title, shortTitle, navTitle, description, summary, icon, etc.)
- Update AppSidebar to render nav from centralized tools list with
descriptions, remove collapse footer button
- Update AppHeader with sidebar collapse toggle, tool short title,
and app logo; remove breadcrumbs
- Update AppPage to auto-resolve tool icon from pathname
- Update ToolsGrid/ToolCard to use shared tools data, remove per-card
gradients for uniform styling
- Add per-tool HTML title via metadata exports (title template in root
layout)
- Style landing page and 404 headings with primary theme color
- Add Toolbox icon to hero CTA, GitFork icon link in footer
- Remove footer from error page and "View on Dev" buttons
- Extract ColorPage client component for RSC metadata compatibility
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 17:46:54 +01:00
|
|
|
className="text-6xl md:text-8xl font-bold mb-6 text-primary"
|
2025-11-07 11:26:19 +01:00
|
|
|
initial={{ opacity: 0, y: 20 }}
|
|
|
|
|
animate={{ opacity: 1, y: 0 }}
|
|
|
|
|
transition={{ duration: 0.8, delay: 0.2 }}
|
|
|
|
|
>
|
|
|
|
|
Kit
|
|
|
|
|
</motion.h1>
|
|
|
|
|
|
|
|
|
|
{/* Subtitle */}
|
|
|
|
|
<motion.p
|
2026-02-22 21:35:53 +01:00
|
|
|
className="text-xl md:text-2xl text-muted-foreground mb-4 max-w-2xl mx-auto"
|
2025-11-07 11:26:19 +01:00
|
|
|
initial={{ opacity: 0, y: 20 }}
|
|
|
|
|
animate={{ opacity: 1, y: 0 }}
|
|
|
|
|
transition={{ duration: 0.8, delay: 0.4 }}
|
|
|
|
|
>
|
|
|
|
|
Your Creative Toolkit
|
|
|
|
|
</motion.p>
|
|
|
|
|
|
|
|
|
|
{/* Description */}
|
|
|
|
|
<motion.p
|
2026-02-22 21:35:53 +01:00
|
|
|
className="text-base md:text-lg text-muted-foreground/80 mb-12 max-w-xl mx-auto"
|
2025-11-07 11:26:19 +01:00
|
|
|
initial={{ opacity: 0, y: 20 }}
|
|
|
|
|
animate={{ opacity: 1, y: 0 }}
|
|
|
|
|
transition={{ duration: 0.8, delay: 0.6 }}
|
|
|
|
|
>
|
2026-02-27 08:47:44 +01:00
|
|
|
A curated collection of creative and utility tools for developers and creators.
|
|
|
|
|
Simple, powerful, and always at your fingertips.
|
2025-11-07 11:26:19 +01:00
|
|
|
</motion.p>
|
|
|
|
|
|
2025-11-08 18:40:25 +01:00
|
|
|
{/* CTA Buttons */}
|
|
|
|
|
<motion.div
|
|
|
|
|
className="flex flex-col sm:flex-row gap-4 justify-center items-center mb-16"
|
|
|
|
|
initial={{ opacity: 0, y: 20 }}
|
|
|
|
|
animate={{ opacity: 1, y: 0 }}
|
|
|
|
|
transition={{ duration: 0.8, delay: 0.8 }}
|
|
|
|
|
>
|
2026-02-23 02:31:49 +01:00
|
|
|
<motion.button
|
|
|
|
|
onClick={scrollToTools}
|
2025-11-08 18:40:25 +01:00
|
|
|
className="group relative px-8 py-4 rounded-full bg-gradient-to-r from-purple-500 to-cyan-500 text-white font-semibold shadow-lg overflow-hidden"
|
|
|
|
|
whileHover={{ scale: 1.05 }}
|
|
|
|
|
whileTap={{ scale: 0.95 }}
|
|
|
|
|
>
|
refactor: externalize tool definitions and polish app shell
- Create lib/tools.tsx as single source of truth for all tool metadata
(title, shortTitle, navTitle, description, summary, icon, etc.)
- Update AppSidebar to render nav from centralized tools list with
descriptions, remove collapse footer button
- Update AppHeader with sidebar collapse toggle, tool short title,
and app logo; remove breadcrumbs
- Update AppPage to auto-resolve tool icon from pathname
- Update ToolsGrid/ToolCard to use shared tools data, remove per-card
gradients for uniform styling
- Add per-tool HTML title via metadata exports (title template in root
layout)
- Style landing page and 404 headings with primary theme color
- Add Toolbox icon to hero CTA, GitFork icon link in footer
- Remove footer from error page and "View on Dev" buttons
- Extract ColorPage client component for RSC metadata compatibility
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 17:46:54 +01:00
|
|
|
<span className="relative z-10 inline-flex items-center gap-2">
|
|
|
|
|
<Toolbox className="h-5 w-5" />
|
|
|
|
|
Explore Tools
|
|
|
|
|
</span>
|
2025-11-08 18:40:25 +01:00
|
|
|
<motion.div
|
|
|
|
|
className="absolute inset-0 bg-gradient-to-r from-purple-600 to-cyan-600"
|
|
|
|
|
initial={{ x: '100%' }}
|
|
|
|
|
whileHover={{ x: 0 }}
|
|
|
|
|
transition={{ duration: 0.3 }}
|
|
|
|
|
/>
|
2026-02-23 02:31:49 +01:00
|
|
|
</motion.button>
|
2025-11-08 18:40:25 +01:00
|
|
|
|
|
|
|
|
</motion.div>
|
|
|
|
|
|
2025-11-07 11:26:19 +01:00
|
|
|
{/* Scroll indicator */}
|
2026-02-23 02:31:49 +01:00
|
|
|
<motion.button
|
|
|
|
|
onClick={scrollToTools}
|
|
|
|
|
className="mx-auto flex flex-col items-center gap-2 cursor-pointer group"
|
2025-11-07 11:26:19 +01:00
|
|
|
initial={{ opacity: 0 }}
|
|
|
|
|
animate={{ opacity: 1 }}
|
|
|
|
|
transition={{ duration: 0.8, delay: 1 }}
|
|
|
|
|
>
|
2025-11-09 16:53:03 +01:00
|
|
|
<span className="text-base text-gray-500 group-hover:text-gray-400 transition-colors">Scroll to explore</span>
|
2025-11-07 11:26:19 +01:00
|
|
|
<motion.div
|
2025-11-07 12:39:14 +01:00
|
|
|
className="w-6 h-10 border-2 border-gray-600 group-hover:border-purple-400 rounded-full p-1 transition-colors"
|
2025-11-07 11:26:19 +01:00
|
|
|
animate={{ y: [0, 10, 0] }}
|
|
|
|
|
transition={{ duration: 1.5, repeat: Infinity }}
|
|
|
|
|
>
|
|
|
|
|
<div className="w-1 h-2 bg-gradient-to-b from-purple-400 to-cyan-400 rounded-full mx-auto" />
|
|
|
|
|
</motion.div>
|
2026-02-23 02:31:49 +01:00
|
|
|
</motion.button>
|
2025-11-07 11:26:19 +01:00
|
|
|
</div>
|
|
|
|
|
</section>
|
|
|
|
|
);
|
|
|
|
|
}
|