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>
This commit is contained in:
2026-02-27 17:46:54 +01:00
parent 5a0d1863ec
commit a400f694fe
18 changed files with 679 additions and 912 deletions

View File

@@ -1,6 +1,7 @@
'use client';
import { motion } from 'framer-motion';
import { GitFork } from 'lucide-react';
export default function Footer() {
const currentYear = new Date().getFullYear();
@@ -15,36 +16,20 @@ export default function Footer() {
viewport={{ once: true }}
transition={{ duration: 0.6 }}
>
{/* Brand Section */}
<div className="inline-flex items-center gap-2 px-4 py-2 rounded-full border border-primary/50 bg-primary/5">
<span className="text-base font-bold bg-clip-text text-transparent bg-gradient-to-r from-purple-400 to-cyan-400">Kit</span>
<span className="text-base text-muted-foreground/30"></span>
<span className="text-base text-primary font-medium">Open Source</span>
</div>
{/* Copyright */}
<p className="text-sm text-muted-foreground">
© {currentYear} Kit. Built with Next.js 16 & Tailwind CSS 4
</p>
{/* Copyright - centered */}
<div className="text-center">
<p className="text-sm text-muted-foreground">
© {currentYear} Kit. Built with Next.js 16 & Tailwind CSS 4
</p>
</div>
{/* Dev Link */}
{/* Source link */}
<a
href="https://dev.pivoine.art/valknar/kit-ui"
target="_blank"
rel="noopener noreferrer"
className="group flex items-center gap-3 px-4 py-2 rounded-full border border-border hover:border-primary transition-all duration-300 bg-card/50"
title="View source"
className="text-muted-foreground hover:text-primary transition-colors duration-300"
>
<svg className="w-5 h-5 text-muted-foreground group-hover:text-primary transition-colors" fill="none" stroke="currentColor" viewBox="0 0 24 24" strokeWidth={2}>
<line x1="6" y1="3" x2="6" y2="15" strokeLinecap="round" />
<circle cx="18" cy="6" r="3" />
<circle cx="6" cy="18" r="3" />
<path d="M18 9a9 9 0 01-9 9" strokeLinecap="round" />
</svg>
<span className="text-sm text-muted-foreground group-hover:text-primary transition-colors font-medium">
View on Dev
</span>
<GitFork className="h-5 w-5" />
</a>
</motion.div>
</div>