2025-11-07 11:26:19 +01:00
|
|
|
'use client';
|
|
|
|
|
|
|
|
|
|
import { motion } from 'framer-motion';
|
|
|
|
|
import ToolCard from './ToolCard';
|
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 { tools } from '@/lib/tools';
|
2025-11-07 11:26:19 +01:00
|
|
|
|
|
|
|
|
export default function ToolsGrid() {
|
|
|
|
|
return (
|
2025-11-07 12:39:14 +01:00
|
|
|
<section id="tools" className="relative py-20 px-4">
|
2025-11-07 11:26:19 +01:00
|
|
|
<div className="max-w-6xl mx-auto">
|
|
|
|
|
{/* Section heading */}
|
|
|
|
|
<motion.div
|
|
|
|
|
className="text-center mb-16"
|
|
|
|
|
initial={{ opacity: 0, y: 20 }}
|
|
|
|
|
whileInView={{ opacity: 1, y: 0 }}
|
|
|
|
|
viewport={{ once: true }}
|
|
|
|
|
transition={{ duration: 0.6 }}
|
|
|
|
|
>
|
|
|
|
|
<h2 className="text-4xl md:text-5xl font-bold mb-4 bg-clip-text text-transparent bg-gradient-to-r from-purple-400 to-cyan-400">
|
|
|
|
|
Available Tools
|
|
|
|
|
</h2>
|
2026-02-22 21:35:53 +01:00
|
|
|
<p className="text-muted-foreground text-lg max-w-2xl mx-auto">
|
|
|
|
|
Explore our collection of carefully crafted tools designed to boost your productivity and creativity
|
2025-11-07 11:26:19 +01:00
|
|
|
</p>
|
|
|
|
|
</motion.div>
|
|
|
|
|
|
|
|
|
|
{/* Tools grid */}
|
2026-02-26 17:48:16 +01:00
|
|
|
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
|
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
|
|
|
{tools.map((tool, index) => {
|
|
|
|
|
const Icon = tool.icon;
|
|
|
|
|
return (
|
|
|
|
|
<ToolCard
|
|
|
|
|
key={tool.href}
|
|
|
|
|
title={tool.title}
|
|
|
|
|
description={tool.summary}
|
|
|
|
|
icon={<Icon className="w-12 h-12" />}
|
|
|
|
|
url={tool.href}
|
|
|
|
|
badges={tool.badges}
|
|
|
|
|
index={index}
|
|
|
|
|
/>
|
|
|
|
|
);
|
|
|
|
|
})}
|
2025-11-07 11:26:19 +01:00
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</section>
|
|
|
|
|
);
|
|
|
|
|
}
|