import { ExternalLink } from 'lucide-react' import Image from 'next/image' import Link from 'next/link' import { Section } from '@/components/layout/section' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { getRoute } from '@/lib/routes' interface ToolCardData { title: string description: string href: string image: string imageAlt: string } const TOOLS: ToolCardData[] = [ { title: 'LLMs.txt Checker Chrome Extension', description: 'Check if websites implement llms.txt and llms-full.txt files', href: 'https://chromewebstore.google.com/detail/llmstxt-checker/klcihkijejcgnaiinaehcjbggamippej', image: '/tools/llmstxt-checker.png', imageAlt: 'LLMs.txt Checker Screenshot' }, { title: 'LLMS.txt VSCode Extension', description: 'Search and explore llms.txt files directly in VS Code', href: 'https://marketplace.visualstudio.com/items?itemName=TheDavidDias.vscode-llms-txt', image: '/tools/vscode-extension.png', imageAlt: 'VS Code Extension Screenshot' }, { title: 'MCP LLMS.txt Explorer', description: 'Explore and analyze llms.txt files using MCP', href: 'https://github.com/thedaviddias/mcp-llms-txt-explorer', image: '/tools/mcp-llms-txt-explorer.png', imageAlt: 'MCP LLMS.txt Explorer Screenshot' }, { title: 'LLMs Txt Raycast Extension', description: 'Search and explore llms.txt files directly in Raycast', href: 'https://www.raycast.com/thedaviddias/llms-txt', image: '/tools/llms-txt-raycast-extension.png', imageAlt: 'Raycast Extension Screenshot' }, { title: 'llmstxt CLI', description: 'Install llms.txt documentation directly into your AI coding agents', href: 'https://www.npmjs.com/package/llmstxt-cli', image: '/tools/llmstxt-cli.png', imageAlt: 'llmstxt CLI Screenshot' } ] interface ToolsSectionProps { layout?: 'default' | 'compact' showImages?: boolean } /** * Section component displaying popular development tools. * When showImages=false (e.g. on website detail pages), renders a single card * with a compact list of tools to match the page layout. */ export function ToolsSection({ layout = 'default', showImages = true }: ToolsSectionProps) { if (!showImages) { return (
) } return (
{TOOLS.map(tool => ( {tool.title} {tool.description} {layout === 'default' && (
{tool.imageAlt}
)}
))}
) }