Files
mypage/app/page.tsx
2025-12-02 17:57:31 +02:00

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">
&gt; 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">
&gt; 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Ă] &gt;&gt;
</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] &gt;&gt;
</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] &gt;&gt;
</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">
&gt; 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">
&gt; 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>
)
}