240 lines
13 KiB
TypeScript
240 lines
13 KiB
TypeScript
import Link from 'next/link'
|
|
import Image from 'next/image'
|
|
import { getAllPosts } from '@/lib/markdown'
|
|
import { formatDate } from '@/lib/utils'
|
|
import { ThemeToggle } from '@/components/theme-toggle'
|
|
|
|
export default async function HomePage() {
|
|
const allPosts = await getAllPosts()
|
|
const featuredPosts = allPosts.slice(0, 6)
|
|
|
|
return (
|
|
<main className="min-h-screen bg-zinc-50 dark:bg-zinc-900 transition-colors duration-300">
|
|
{/* Hero Section - from worktree-agent-2 */}
|
|
<section className="relative min-h-screen flex items-center justify-center bg-zinc-100 dark:bg-zinc-900 overflow-hidden transition-colors duration-300">
|
|
<div className="absolute inset-0 grid-bg opacity-10"></div>
|
|
<div className="absolute inset-0 scanline"></div>
|
|
<div className="absolute inset-0 noise-bg"></div>
|
|
|
|
<div className="relative z-10 max-w-5xl mx-auto px-6 w-full">
|
|
<div className="border-4 border-slate-300 dark:border-slate-700 bg-white/80 dark:bg-slate-900/80 p-8 md:p-12 transition-colors duration-300">
|
|
{/* Logo */}
|
|
<div className="mb-8 flex items-center justify-between border-b-2 border-slate-300 dark:border-slate-800 pb-4">
|
|
<div className="flex items-center gap-3">
|
|
<Image src="/logo.png" alt="Logo" width={32} height={32} className="opacity-80" />
|
|
<span className="font-mono text-xs text-slate-500 uppercase tracking-widest">
|
|
TERMINAL:// V2.0
|
|
</span>
|
|
</div>
|
|
<div className="flex gap-4 items-center">
|
|
<Link
|
|
href="/blog"
|
|
className="font-mono text-xs text-slate-600 dark:text-slate-400 uppercase tracking-wider hover:text-cyan-600 dark:hover:text-cyan-400"
|
|
>
|
|
[BLOG]
|
|
</Link>
|
|
<Link
|
|
href="/about"
|
|
className="font-mono text-xs text-slate-600 dark:text-slate-400 uppercase tracking-wider hover:text-cyan-600 dark:hover:text-cyan-400"
|
|
>
|
|
[ABOUT]
|
|
</Link>
|
|
<ThemeToggle />
|
|
</div>
|
|
</div>
|
|
|
|
<div className="border-l-4 border-cyan-700 dark:border-cyan-900 pl-6 mb-8">
|
|
<p className="font-mono text-xs text-slate-500 dark:text-slate-500 uppercase tracking-widest mb-2">
|
|
DOCUMENT LEVEL-1 //
|
|
</p>
|
|
<h1 className="text-4xl md:text-6xl lg:text-7xl font-mono font-bold text-slate-900 dark:text-slate-100 uppercase tracking-tight mb-6">
|
|
BUILD. WRITE.
|
|
<br />
|
|
SHARE.
|
|
</h1>
|
|
<p className="text-base md:text-lg lg:text-xl text-slate-700 dark:text-slate-400 font-mono leading-relaxed max-w-2xl">
|
|
> Explore ideas
|
|
</p>
|
|
</div>
|
|
|
|
<div className="flex gap-4 flex-wrap mt-12">
|
|
<Link
|
|
href="/blog"
|
|
className="px-6 md:px-8 py-3 md:py-4 bg-cyan-700 dark:bg-cyan-900 text-white dark:text-slate-100 border-2 border-cyan-600 dark:border-cyan-700 font-mono font-bold uppercase text-xs md:text-sm tracking-wider hover:bg-cyan-600 dark:hover:bg-cyan-800 hover:border-cyan-500 dark:hover:border-cyan-600 rounded-none transition-colors duration-200"
|
|
>
|
|
[CHECK POSTS]
|
|
</Link>
|
|
<Link
|
|
href="/about"
|
|
className="px-6 md:px-8 py-3 md:py-4 bg-transparent text-slate-700 dark:text-slate-300 border-2 border-slate-400 dark:border-slate-700 font-mono font-bold uppercase text-xs md:text-sm tracking-wider hover:bg-slate-200 dark:hover:bg-slate-800 hover:border-slate-500 dark:hover:border-slate-600 rounded-none transition-colors duration-200"
|
|
>
|
|
[ABOUT ME]
|
|
</Link>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
{/* Featured Posts Grid - from worktree-agent-1 */}
|
|
<section className="py-24 bg-zinc-100 dark:bg-slate-900 border-t-4 border-slate-300 dark:border-slate-800 transition-colors duration-300">
|
|
<div className="max-w-7xl mx-auto px-6">
|
|
<div className="border-l-4 border-emerald-700 dark:border-emerald-900 pl-6 mb-12">
|
|
<p className="font-mono text-xs text-slate-500 dark:text-slate-500 uppercase tracking-widest mb-2">
|
|
ARCHIVE ACCESS // RECENT ENTRIES
|
|
</p>
|
|
<h2 className="text-3xl md:text-5xl font-mono font-bold text-slate-900 dark:text-slate-100 uppercase tracking-tight">
|
|
> RECENT ENTRIES
|
|
</h2>
|
|
</div>
|
|
|
|
<div className="grid gap-8 md:grid-cols-2 lg:grid-cols-3">
|
|
{featuredPosts.map((post, index) => (
|
|
<article
|
|
key={post.slug}
|
|
className="group relative bg-white dark:bg-slate-900 border-4 border-slate-300 dark:border-slate-700 overflow-hidden hover:border-cyan-700 dark:hover:border-cyan-900 transition-colors duration-300"
|
|
>
|
|
<div className="aspect-video relative overflow-hidden bg-zinc-200 dark:bg-zinc-900">
|
|
{post.frontmatter.image ? (
|
|
<Image
|
|
src={post.frontmatter.image}
|
|
alt={post.frontmatter.title}
|
|
fill
|
|
className="object-cover grayscale group-hover:grayscale-0 transition-all duration-300"
|
|
/>
|
|
) : (
|
|
<div className="w-full h-full bg-zinc-300 dark:bg-zinc-800 flex items-center justify-center">
|
|
<span className="font-mono text-6xl text-slate-400 dark:text-slate-700">
|
|
#{String(index + 1).padStart(2, '0')}
|
|
</span>
|
|
</div>
|
|
)}
|
|
<div className="absolute inset-0 bg-zinc-100/60 dark:bg-zinc-900/60"></div>
|
|
<div className="absolute top-0 left-0 right-0 bg-white/90 dark:bg-slate-900 border-b-2 border-slate-300 dark:border-slate-700 px-4 py-2">
|
|
<span className="font-mono text-xs text-cyan-600 dark:text-cyan-400 uppercase tracking-wider">
|
|
FILE#{String(index + 1).padStart(3, '0')} // {post.frontmatter.category}
|
|
</span>
|
|
</div>
|
|
</div>
|
|
<div className="p-6 border-t-4 border-slate-300 dark:border-slate-800">
|
|
<div className="border-l-4 border-emerald-700 dark:border-emerald-900 pl-4">
|
|
<h3 className="text-xl font-mono font-bold text-slate-900 dark:text-slate-100 mb-3 uppercase tracking-tight">
|
|
{post.frontmatter.title}
|
|
</h3>
|
|
<p className="text-slate-600 dark:text-slate-400 text-sm leading-relaxed mb-4 font-mono">
|
|
{post.frontmatter.description}
|
|
</p>
|
|
<div className="flex items-center gap-4 text-xs text-slate-500 dark:text-slate-500 font-mono mb-4">
|
|
<span>{formatDate(post.frontmatter.date)}</span>
|
|
<span>//</span>
|
|
<span>{post.readingTime} MIN</span>
|
|
</div>
|
|
</div>
|
|
<Link
|
|
href={`/blog/${post.slug}`}
|
|
className="inline-flex items-center text-cyan-600 dark:text-cyan-400 font-mono text-xs font-bold uppercase tracking-wider hover:text-cyan-500 dark:hover:text-cyan-300 border-2 border-slate-400 dark:border-slate-700 px-4 py-2 hover:border-cyan-700 dark:hover:border-cyan-900 transition-colors duration-200"
|
|
>
|
|
[ACCESEAZĂ] >>
|
|
</Link>
|
|
</div>
|
|
</article>
|
|
))}
|
|
</div>
|
|
|
|
<div className="mt-12 flex gap-4 justify-center flex-wrap">
|
|
{allPosts.length > 6 && (
|
|
<Link
|
|
href="/blog"
|
|
className="inline-flex items-center px-8 py-4 bg-transparent text-slate-700 dark:text-slate-300 border-2 border-slate-400 dark:border-slate-700 font-mono font-bold uppercase text-sm tracking-wider hover:bg-slate-200 dark:hover:bg-slate-800 hover:border-slate-500 dark:hover:border-slate-600 transition-colors duration-200"
|
|
>
|
|
[SEE POSTS] >>
|
|
</Link>
|
|
)}
|
|
<Link
|
|
href="/tags"
|
|
className="inline-flex items-center px-8 py-4 bg-transparent text-slate-700 dark:text-slate-300 border-2 border-slate-400 dark:border-slate-700 font-mono font-bold uppercase text-sm tracking-wider hover:bg-slate-200 dark:hover:bg-slate-800 hover:border-slate-500 dark:hover:border-slate-600 transition-colors duration-200"
|
|
>
|
|
[SEE ALL TAGS] >>
|
|
</Link>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
{/* Stats Section - from worktree-agent-1 */}
|
|
{/* <section className="py-24 bg-zinc-50 dark:bg-zinc-900 border-y-4 border-slate-300 dark:border-slate-800 transition-colors duration-300">
|
|
<div className="max-w-7xl mx-auto px-6">
|
|
<div className="border-l-4 border-teal-700 dark:border-teal-900 pl-6 mb-12">
|
|
<p className="font-mono text-xs text-slate-500 dark:text-slate-500 uppercase tracking-widest mb-2">
|
|
SYSTEM STATISTICS // DATABASE METRICS
|
|
</p>
|
|
<h2 className="text-3xl md:text-5xl font-mono font-bold text-slate-900 dark:text-slate-100 uppercase tracking-tight">
|
|
> METRICS
|
|
</h2>
|
|
</div>
|
|
|
|
<div className="grid grid-cols-1 md:grid-cols-3 gap-8">
|
|
<div className="border-4 border-slate-300 dark:border-slate-700 bg-white dark:bg-slate-900 p-8 text-center transition-colors duration-300">
|
|
<div className="text-6xl font-mono font-bold text-cyan-600 dark:text-cyan-400 mb-4">
|
|
{allPosts.length}+
|
|
</div>
|
|
<p className="text-slate-600 dark:text-slate-400 font-mono text-sm uppercase tracking-wider border-t-2 border-slate-300 dark:border-slate-800 pt-4">
|
|
PUBLISHED
|
|
</p>
|
|
</div>
|
|
|
|
<div className="border-4 border-slate-300 dark:border-slate-700 bg-white dark:bg-slate-900 p-8 text-center transition-colors duration-300">
|
|
<div className="text-6xl font-mono font-bold text-emerald-600 dark:text-emerald-400 mb-4">
|
|
50K+
|
|
</div>
|
|
<p className="text-slate-600 dark:text-slate-400 font-mono text-sm uppercase tracking-wider border-t-2 border-slate-300 dark:border-slate-800 pt-4">
|
|
CITITORI LUNARI
|
|
</p>
|
|
</div>
|
|
|
|
<div className="border-4 border-slate-300 dark:border-slate-700 bg-white dark:bg-slate-900 p-8 text-center transition-colors duration-300">
|
|
<div className="text-6xl font-mono font-bold text-teal-600 dark:text-teal-400 mb-4">
|
|
99%
|
|
</div>
|
|
<p className="text-slate-600 dark:text-slate-400 font-mono text-sm uppercase tracking-wider border-t-2 border-slate-300 dark:border-slate-800 pt-4">
|
|
SATISFACȚIE
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section> */}
|
|
|
|
{/* Newsletter CTA - from worktree-agent-1 */}
|
|
{/* <section className="py-24 bg-zinc-100 dark:bg-slate-900 border-t-4 border-slate-300 dark:border-slate-800 transition-colors duration-300">
|
|
<div className="max-w-3xl mx-auto px-6">
|
|
<div className="border-4 border-slate-300 dark:border-slate-700 bg-white dark:bg-zinc-900 p-12 transition-colors duration-300">
|
|
<p className="font-mono text-xs text-slate-500 dark:text-slate-500 uppercase tracking-widest mb-2">
|
|
NEWSLETTER SUBSCRIPTION
|
|
</p>
|
|
<h2 className="text-3xl font-mono font-bold text-slate-900 dark:text-slate-100 uppercase mb-4">
|
|
> RĂMÂI LA CURENT_
|
|
</h2>
|
|
<p className="text-slate-700 dark:text-slate-400 font-mono text-sm mb-8 border-l-2 border-cyan-700 dark:border-cyan-900 pl-4">
|
|
Primește cele mai noi articole direct în inbox
|
|
</p>
|
|
<form className="flex gap-0 flex-col sm:flex-row border-2 border-slate-400 dark:border-slate-700">
|
|
<input
|
|
type="email"
|
|
placeholder="email@exemplu.com"
|
|
className="flex-1 px-6 py-4 bg-zinc-100 dark:bg-slate-800 text-slate-900 dark:text-white font-mono border-b-2 sm:border-b-0 sm:border-r-2 border-slate-400 dark:border-slate-700 focus:bg-zinc-200 dark:focus:bg-slate-750 focus:outline-none placeholder:text-slate-400 dark:placeholder:text-slate-600 transition-colors duration-200"
|
|
/>
|
|
<button
|
|
type="submit"
|
|
className="px-8 py-4 bg-cyan-700 dark:bg-cyan-900 text-white dark:text-slate-100 font-mono font-bold uppercase text-sm tracking-wider hover:bg-cyan-600 dark:hover:bg-cyan-800 whitespace-nowrap border-t-2 sm:border-t-0 sm:border-l-2 border-cyan-600 dark:border-cyan-700 transition-colors duration-200"
|
|
>
|
|
[ABONEAZĂ-TE]
|
|
</button>
|
|
</form>
|
|
<p className="text-slate-500 dark:text-slate-600 font-mono text-xs mt-4 uppercase">
|
|
// Fără spam. Dezabonare oricând.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</section> */}
|
|
</main>
|
|
)
|
|
}
|