'use client' import { useState, useMemo } from 'react' import { Filter, Grid, List, X } from 'lucide-react' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Badge } from '@/components/ui/badge' import { Card } from '@/components/ui/card' import { ToolCard } from '@/components/tool-card' import { getAllTools, getCategories, getCompanies, getModels } from '@/lib/data' import { useAppStore } from '@/lib/store' import { AITool } from '@/lib/types' import { cn } from '@/lib/utils' export default function BrowsePage() { const tools = getAllTools() const categories = getCategories() const companies = getCompanies() const models = getModels() const { viewMode, setViewMode } = useAppStore() const [searchQuery, setSearchQuery] = useState('') const [selectedCategories, setSelectedCategories] = useState([]) const [selectedTypes, setSelectedTypes] = useState([]) const [selectedCompanies, setSelectedCompanies] = useState([]) const [showFilters, setShowFilters] = useState(false) // Filter tools const filteredTools = useMemo(() => { return tools.filter((tool) => { // Search filter if (searchQuery) { const query = searchQuery.toLowerCase() const matchesSearch = tool.name.toLowerCase().includes(query) || tool.description.toLowerCase().includes(query) || tool.company.toLowerCase().includes(query) || tool.category.toLowerCase().includes(query) || tool.models.some((m) => m.toLowerCase().includes(query)) if (!matchesSearch) return false } // Category filter if (selectedCategories.length > 0 && !selectedCategories.includes(tool.category)) { return false } // Type filter if (selectedTypes.length > 0 && !selectedTypes.includes(tool.type)) { return false } // Company filter if (selectedCompanies.length > 0 && !selectedCompanies.includes(tool.company)) { return false } return true }) }, [tools, searchQuery, selectedCategories, selectedTypes, selectedCompanies]) const toggleCategory = (category: string) => { setSelectedCategories((prev) => prev.includes(category) ? prev.filter((c) => c !== category) : [...prev, category] ) } const toggleType = (type: string) => { setSelectedTypes((prev) => prev.includes(type) ? prev.filter((t) => t !== type) : [...prev, type] ) } const toggleCompany = (company: string) => { setSelectedCompanies((prev) => prev.includes(company) ? prev.filter((c) => c !== company) : [...prev, company] ) } const clearFilters = () => { setSearchQuery('') setSelectedCategories([]) setSelectedTypes([]) setSelectedCompanies([]) } const hasActiveFilters = searchQuery || selectedCategories.length > 0 || selectedTypes.length > 0 || selectedCompanies.length > 0 return (
{/* Header */}

Browse AI Tools

Explore {tools.length} AI coding tools and their system prompts

{/* Search and Controls */}
setSearchQuery(e.target.value)} className="flex-1" />
{/* Active Filters */} {hasActiveFilters && (
Active filters: {selectedCategories.map((cat) => ( {cat} toggleCategory(cat)} /> ))} {selectedTypes.map((type) => ( {type} toggleType(type)} /> ))} {selectedCompanies.map((company) => ( {company} toggleCompany(company)} /> ))}
)}
{/* Filters Sidebar */} {showFilters && (
{/* Categories */}

Categories

{categories.slice(0, 8).map((category) => ( ))}
{/* Types */}

Type

{['proprietary', 'open-source'].map((type) => ( ))}
{/* Companies */}

Companies

{companies.slice(0, 10).map((company) => ( ))}
)} {/* Results */}

Showing {filteredTools.length} of {tools.length} tools

{/* Tools Grid/List */} {filteredTools.length > 0 ? (
{filteredTools.map((tool) => ( ))}
) : (

No tools found matching your criteria

)}
) }