gbclient/app/templates/page.tsx
Rodrigo Rodriguez (Pragmatismo) c95d1d9deb
Some checks failed
GBCI / build (push) Has been cancelled
Refactor code structure for improved readability and maintainability
2025-06-28 09:58:11 -03:00

213 lines
No EOL
8.8 KiB
TypeScript

import { ChevronDown, ChevronRight, Search, Star, Grid, List } from 'lucide-react'
interface Prompt {
id: string
name: string
category: string
description: string
icon: string
featured?: boolean
}
const prompts: Prompt[] = [
{
id: "1",
name: "SOP Analyzer",
category: "Education",
description: "Analyzes statements of purpose for academic applications",
icon: "📝",
featured: true
},
{
id: "2",
name: "Break This GPT",
category: "Security",
description: "Tests GPT vulnerabilities and security",
icon: "🔓",
featured: true
},
// Add all your prompts here...
{
id: "100",
name: "Coinflipper Game",
category: "Games",
description: "Simple coin flipping game",
icon: "🪙"
}
]
const categories = Array.from(new Set(prompts.map(p => p.category)))
const featuredPrompts = prompts.filter(p => p.featured)
export default function PromptsPage() {
return (
<div className="min-h-screen bg-gray-50">
{/* Header */}
<header className="sticky top-0 z-10 bg-white/80 backdrop-blur-sm border-b">
<div className="container mx-auto px-4 py-3 flex items-center justify-between">
<div className="flex items-center space-x-6">
<h1 className="text-xl font-bold">Prompt Store</h1>
<nav className="hidden md:flex space-x-6">
<button className="text-sm font-medium">Discover</button>
<button className="text-sm font-medium">Categories</button>
<button className="text-sm font-medium">Top Charts</button>
<button className="text-sm font-medium">Collections</button>
</nav>
</div>
<div className="flex items-center space-x-4">
<button className="p-2 rounded-full hover:bg-gray-100">
<Search className="h-4 w-4" />
</button>
<button className="px-4 py-2 text-sm font-medium rounded-full bg-black text-white">
Sign In
</button>
</div>
</div>
</header>
{/* Main Content */}
<main className="container mx-auto px-4 py-6">
{/* Hero Section */}
<section className="mb-12">
<div className="bg-gradient-to-r from-blue-500 to-purple-600 rounded-2xl p-8 text-white">
<h2 className="text-3xl font-bold mb-2">Discover Amazing GPTs</h2>
<p className="text-lg mb-6">Browse hundreds of specialized AI assistants</p>
<div className="relative max-w-md">
<Search className="absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-400" />
<input
type="text"
placeholder="Search prompts..."
className="w-full pl-10 pr-4 py-2 rounded-full text-gray-900 focus:outline-none"
/>
</div>
</div>
</section>
{/* Featured Section */}
<section className="mb-12">
<div className="flex items-center justify-between mb-6">
<h2 className="text-2xl font-bold">Featured Prompts</h2>
<button className="text-blue-600 text-sm font-medium flex items-center">
See All <ChevronRight className="h-4 w-4 ml-1" />
</button>
</div>
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6">
{featuredPrompts.map(prompt => (
<div key={prompt.id} className="bg-white rounded-xl overflow-hidden shadow-sm hover:shadow-md transition-shadow">
<div className="p-5">
<div className="flex items-center mb-4">
<span className="text-3xl mr-3">{prompt.icon}</span>
<div>
<h3 className="font-semibold">{prompt.name}</h3>
<p className="text-xs text-gray-500">{prompt.category}</p>
</div>
</div>
<p className="text-sm text-gray-600 mb-4 line-clamp-2">{prompt.description}</p>
<div className="flex justify-between items-center">
<div className="flex items-center">
<Star className="h-4 w-4 text-yellow-500 fill-yellow-500" />
<span className="text-xs ml-1">Featured</span>
</div>
<button className="text-xs font-medium text-blue-600 hover:text-blue-800">
Get Prompt
</button>
</div>
</div>
</div>
))}
</div>
</section>
{/* Categories Section */}
<section>
<div className="flex items-center justify-between mb-6">
<h2 className="text-2xl font-bold">Browse by Category</h2>
<div className="flex items-center space-x-2">
<button className="p-2 rounded-md hover:bg-gray-100">
<Grid className="h-5 w-5" />
</button>
<button className="p-2 rounded-md hover:bg-gray-100">
<List className="h-5 w-5" />
</button>
</div>
</div>
<div className="space-y-8">
{categories.map(category => {
const categoryPrompts = prompts.filter(p => p.category === category)
return (
<div key={category}>
<div className="flex items-center justify-between mb-4">
<h3 className="text-xl font-semibold">{category}</h3>
<button className="text-sm text-blue-600 font-medium flex items-center">
See All <ChevronRight className="h-4 w-4 ml-1" />
</button>
</div>
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4">
{categoryPrompts.slice(0, 4).map(prompt => (
<div key={prompt.id} className="bg-white rounded-lg border overflow-hidden hover:shadow-sm transition-shadow">
<div className="p-4">
<div className="flex items-center mb-3">
<span className="text-2xl mr-2">{prompt.icon}</span>
<h4 className="font-medium">{prompt.name}</h4>
</div>
<p className="text-sm text-gray-600 mb-4 line-clamp-2">{prompt.description}</p>
<button className="w-full py-2 text-sm font-medium rounded-md bg-gray-100 hover:bg-gray-200">
View Details
</button>
</div>
</div>
))}
</div>
</div>
)
})}
</div>
</section>
</main>
{/* Footer */}
<footer className="bg-gray-100 border-t mt-12">
<div className="container mx-auto px-4 py-8">
<div className="grid grid-cols-2 md:grid-cols-4 gap-8">
<div>
<h4 className="font-semibold mb-4">The Prompt Store</h4>
<ul className="space-y-2 text-sm">
<li><a href="#" className="hover:text-blue-600">About Us</a></li>
<li><a href="#" className="hover:text-blue-600">Careers</a></li>
<li><a href="#" className="hover:text-blue-600">News</a></li>
</ul>
</div>
<div>
<h4 className="font-semibold mb-4">For Developers</h4>
<ul className="space-y-2 text-sm">
<li><a href="#" className="hover:text-blue-600">Submit a Prompt</a></li>
<li><a href="#" className="hover:text-blue-600">Documentation</a></li>
<li><a href="#" className="hover:text-blue-600">API</a></li>
</ul>
</div>
<div>
<h4 className="font-semibold mb-4">Support</h4>
<ul className="space-y-2 text-sm">
<li><a href="#" className="hover:text-blue-600">Help Center</a></li>
<li><a href="#" className="hover:text-blue-600">Community</a></li>
<li><a href="#" className="hover:text-blue-600">Contact Us</a></li>
</ul>
</div>
<div>
<h4 className="font-semibold mb-4">Legal</h4>
<ul className="space-y-2 text-sm">
<li><a href="#" className="hover:text-blue-600">Terms of Service</a></li>
<li><a href="#" className="hover:text-blue-600">Privacy Policy</a></li>
<li><a href="#" className="hover:text-blue-600">Cookie Policy</a></li>
</ul>
</div>
</div>
<div className="border-t mt-8 pt-8 text-sm text-gray-500">
© {new Date().getFullYear()} Prompt Store. All rights reserved.
</div>
</div>
</footer>
</div>
)
}