chore: capture live server state before migration (2026-06-10)
This commit is contained in:
@@ -467,7 +467,7 @@ export default async function ProjectPage({ params }: Props) {
|
||||
<div className="mb-8">
|
||||
<Link
|
||||
href={`/${locale}/portfolio`}
|
||||
className="inline-flex items-center gap-2 text-zinc-400 hover:text-white transition-colors duration-300"
|
||||
className="inline-flex items-center gap-2 text-muted-foreground hover:text-foreground transition-colors duration-300"
|
||||
>
|
||||
<ArrowLeft className="h-4 w-4" />
|
||||
<span>{t('backToPortfolio')}</span>
|
||||
@@ -476,7 +476,7 @@ export default async function ProjectPage({ params }: Props) {
|
||||
|
||||
{/* Project Header */}
|
||||
<div className="mb-12">
|
||||
<div className="flex flex-wrap items-center gap-4 mb-6 text-zinc-400">
|
||||
<div className="flex flex-wrap items-center gap-4 mb-6 text-muted-foreground">
|
||||
{project.meta.date && (
|
||||
<div className="flex items-center gap-2">
|
||||
<Calendar className="h-4 w-4" />
|
||||
@@ -497,18 +497,18 @@ export default async function ProjectPage({ params }: Props) {
|
||||
)}
|
||||
</div>
|
||||
|
||||
<h1 className="text-3xl sm:text-4xl lg:text-5xl font-bold text-white mb-8">
|
||||
<h1 className="text-3xl sm:text-4xl lg:text-5xl font-bold text-foreground mb-8">
|
||||
{project.meta.title}
|
||||
</h1>
|
||||
|
||||
<p className="text-xl text-zinc-400">
|
||||
<p className="text-xl text-muted-foreground">
|
||||
{project.meta.description}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{/* Cover Image */}
|
||||
<div className="mb-12">
|
||||
<div className="relative aspect-video rounded-lg overflow-hidden bg-zinc-800">
|
||||
<div className="relative aspect-video rounded-lg overflow-hidden bg-card">
|
||||
<Image
|
||||
src={`/images/projects/${slug}/cover.avif`}
|
||||
alt={project.meta.title}
|
||||
@@ -517,28 +517,28 @@ export default async function ProjectPage({ params }: Props) {
|
||||
className="object-cover"
|
||||
priority
|
||||
/>
|
||||
<div className="absolute inset-0 bg-gradient-to-t from-zinc-900/50 to-transparent opacity-50" />
|
||||
<div className="absolute inset-0 bg-gradient-to-t from-background/50 to-transparent opacity-50" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Project Content */}
|
||||
<div className="prose prose-invert max-w-none">
|
||||
{/* Intro */}
|
||||
<div className="mb-12 p-6 bg-zinc-800/30 rounded-lg border border-zinc-800">
|
||||
<p className="text-lg text-zinc-300 m-0">
|
||||
<div className="mb-12 p-6 bg-card/30 rounded-lg border border-border">
|
||||
<p className="text-lg text-foreground/80 m-0">
|
||||
{project.content.intro}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{/* Challenge Section */}
|
||||
<section className="mb-12">
|
||||
<h2 className="text-2xl font-bold mb-4 text-white">{project.content.challenge.title}</h2>
|
||||
<p className="text-zinc-300 mb-4">{project.content.challenge.description}</p>
|
||||
<h2 className="text-2xl font-bold mb-4 text-foreground">{project.content.challenge.title}</h2>
|
||||
<p className="text-foreground/80 mb-4">{project.content.challenge.description}</p>
|
||||
{project.content.challenge.points && (
|
||||
<ul className="space-y-2">
|
||||
{project.content.challenge.points.map((point, index) => (
|
||||
<li key={index} className="text-zinc-300 flex items-start gap-2">
|
||||
<span className="text-zinc-500">•</span>
|
||||
<li key={index} className="text-foreground/80 flex items-start gap-2">
|
||||
<span className="text-muted-foreground">•</span>
|
||||
{point}
|
||||
</li>
|
||||
))}
|
||||
@@ -548,13 +548,13 @@ export default async function ProjectPage({ params }: Props) {
|
||||
|
||||
{/* Solution Section */}
|
||||
<section className="mb-12">
|
||||
<h2 className="text-2xl font-bold mb-4 text-white">{project.content.solution.title}</h2>
|
||||
<p className="text-zinc-300 mb-4">{project.content.solution.description}</p>
|
||||
<h2 className="text-2xl font-bold mb-4 text-foreground">{project.content.solution.title}</h2>
|
||||
<p className="text-foreground/80 mb-4">{project.content.solution.description}</p>
|
||||
{project.content.solution.points && (
|
||||
<ul className="space-y-2">
|
||||
{project.content.solution.points.map((point, index) => (
|
||||
<li key={index} className="text-zinc-300 flex items-start gap-2">
|
||||
<span className="text-zinc-500">•</span>
|
||||
<li key={index} className="text-foreground/80 flex items-start gap-2">
|
||||
<span className="text-muted-foreground">•</span>
|
||||
{point}
|
||||
</li>
|
||||
))}
|
||||
@@ -565,20 +565,20 @@ export default async function ProjectPage({ params }: Props) {
|
||||
{/* Technical Section */}
|
||||
{project.content.technical && (
|
||||
<section className="mb-12">
|
||||
<h2 className="text-2xl font-bold mb-4 text-white">{project.content.technical.title}</h2>
|
||||
<p className="text-zinc-300 mb-4">{project.content.technical.description}</p>
|
||||
<h2 className="text-2xl font-bold mb-4 text-foreground">{project.content.technical.title}</h2>
|
||||
<p className="text-foreground/80 mb-4">{project.content.technical.description}</p>
|
||||
{project.content.technical.points && (
|
||||
<ul className="space-y-2">
|
||||
{project.content.technical.points.map((point, index) => (
|
||||
<li key={index} className="text-zinc-300 flex items-start gap-2">
|
||||
<span className="text-zinc-500">•</span>
|
||||
<li key={index} className="text-foreground/80 flex items-start gap-2">
|
||||
<span className="text-muted-foreground">•</span>
|
||||
{point}
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
)}
|
||||
{project.content.technical.code && (
|
||||
<pre className="bg-zinc-800/50 p-4 rounded-lg overflow-x-auto mt-4">
|
||||
<pre className="bg-card/50 p-4 rounded-lg overflow-x-auto mt-4">
|
||||
<code className="text-sm">{project.content.technical.code}</code>
|
||||
</pre>
|
||||
)}
|
||||
@@ -588,13 +588,13 @@ export default async function ProjectPage({ params }: Props) {
|
||||
{/* Implementation Section */}
|
||||
{project.content.implementation && (
|
||||
<section className="mb-12">
|
||||
<h2 className="text-2xl font-bold mb-4 text-white">{project.content.implementation.title}</h2>
|
||||
<p className="text-zinc-300 mb-4">{project.content.implementation.description}</p>
|
||||
<h2 className="text-2xl font-bold mb-4 text-foreground">{project.content.implementation.title}</h2>
|
||||
<p className="text-foreground/80 mb-4">{project.content.implementation.description}</p>
|
||||
{project.content.implementation.points && (
|
||||
<ul className="space-y-2">
|
||||
{project.content.implementation.points.map((point, index) => (
|
||||
<li key={index} className="text-zinc-300 flex items-start gap-2">
|
||||
<span className="text-zinc-500">•</span>
|
||||
<li key={index} className="text-foreground/80 flex items-start gap-2">
|
||||
<span className="text-muted-foreground">•</span>
|
||||
{point}
|
||||
</li>
|
||||
))}
|
||||
@@ -605,13 +605,13 @@ export default async function ProjectPage({ params }: Props) {
|
||||
|
||||
{/* Results Section */}
|
||||
<section className="mb-12">
|
||||
<h2 className="text-2xl font-bold mb-4 text-white">{project.content.results.title}</h2>
|
||||
<p className="text-zinc-300 mb-4">{project.content.results.description}</p>
|
||||
<h2 className="text-2xl font-bold mb-4 text-foreground">{project.content.results.title}</h2>
|
||||
<p className="text-foreground/80 mb-4">{project.content.results.description}</p>
|
||||
{project.content.results.points && (
|
||||
<ul className="space-y-2">
|
||||
{project.content.results.points.map((point, index) => (
|
||||
<li key={index} className="text-zinc-300 flex items-start gap-2">
|
||||
<span className="text-zinc-500">•</span>
|
||||
<li key={index} className="text-foreground/80 flex items-start gap-2">
|
||||
<span className="text-muted-foreground">•</span>
|
||||
{point}
|
||||
</li>
|
||||
))}
|
||||
@@ -621,8 +621,8 @@ export default async function ProjectPage({ params }: Props) {
|
||||
|
||||
{/* Conclusion */}
|
||||
{project.content.conclusion && (
|
||||
<section className="mb-12 p-6 bg-zinc-800/30 rounded-lg border border-zinc-800">
|
||||
<p className="text-lg text-zinc-300 m-0">
|
||||
<section className="mb-12 p-6 bg-card/30 rounded-lg border border-border">
|
||||
<p className="text-lg text-foreground/80 m-0">
|
||||
{project.content.conclusion}
|
||||
</p>
|
||||
</section>
|
||||
@@ -631,14 +631,14 @@ export default async function ProjectPage({ params }: Props) {
|
||||
|
||||
{/* Technologies */}
|
||||
{project.meta.technologies && (
|
||||
<div className="mt-12 pt-6 border-t border-zinc-800">
|
||||
<div className="mt-12 pt-6 border-t border-border">
|
||||
<div className="flex items-center gap-4">
|
||||
<Tag className="h-4 w-4 text-zinc-400" />
|
||||
<Tag className="h-4 w-4 text-muted-foreground" />
|
||||
<div className="flex flex-wrap gap-2">
|
||||
{project.meta.technologies.map((tech, index) => (
|
||||
<span
|
||||
key={index}
|
||||
className="px-3 py-1 bg-zinc-800/50 border border-zinc-800 rounded-full text-sm text-zinc-300"
|
||||
className="px-3 py-1 bg-card/50 border border-border rounded-full text-sm text-foreground/80"
|
||||
>
|
||||
{tech}
|
||||
</span>
|
||||
|
||||
@@ -216,7 +216,7 @@ export default async function PortfolioPage({ params, searchParams }: Props) {
|
||||
<h1 className="text-3xl font-bold text-white mb-4">
|
||||
{t('sections.title')}
|
||||
</h1>
|
||||
<p className="text-zinc-400 max-w-2xl mx-auto">
|
||||
<p className="text-muted-foreground max-w-2xl mx-auto">
|
||||
{t('sections.subtitle')}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user