staging #16
46
.vscode/launch.json
vendored
Normal file
46
.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Next.js: Full Stack",
|
||||
"type": "node-terminal",
|
||||
"request": "launch",
|
||||
"command": "npm run dev",
|
||||
"serverReadyAction": {
|
||||
"pattern": "started server on .+, url: (https?://.+)",
|
||||
"uriFormat": "%s",
|
||||
"action": "debugWithChrome"
|
||||
},
|
||||
"console": "integratedTerminal",
|
||||
"internalConsoleOptions": "neverOpen"
|
||||
},
|
||||
{
|
||||
"name": "Next.js: Frontend",
|
||||
"type": "chrome",
|
||||
"request": "launch",
|
||||
"url": "http://localhost:3030",
|
||||
"webRoot": "${workspaceFolder}",
|
||||
"sourceMapPathOverrides": {
|
||||
"webpack://_N_E/*": "${webRoot}/*"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Next.js: Backend",
|
||||
"type": "node",
|
||||
"request": "attach",
|
||||
"port": 9229,
|
||||
"restart": true,
|
||||
"sourceMaps": true,
|
||||
"sourceMapPathOverrides": {
|
||||
"webpack:///*": "${workspaceFolder}/*"
|
||||
}
|
||||
}
|
||||
],
|
||||
"compounds": [
|
||||
{
|
||||
"name": "Next.js: Debug Full Stack",
|
||||
"configurations": ["Next.js: Backend", "Next.js: Frontend"],
|
||||
"stopAll": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
import { Metadata } from 'next'
|
||||
import { Navbar } from '@/components/blog/navbar'
|
||||
import {setRequestLocale} from 'next-intl/server'
|
||||
import {setRequestLocale, getTranslations} from 'next-intl/server'
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'About',
|
||||
@@ -14,6 +14,7 @@ type Props = {
|
||||
export default async function AboutPage({params}: Props) {
|
||||
const {locale} = await params
|
||||
setRequestLocale(locale)
|
||||
const t = await getTranslations('About')
|
||||
return (
|
||||
<>
|
||||
<Navbar />
|
||||
@@ -22,10 +23,10 @@ export default async function AboutPage({params}: Props) {
|
||||
{/* Classification Header */}
|
||||
<div className="border-2 border-[rgb(var(--border-primary))] p-8 mb-10">
|
||||
<p className="text-[rgb(var(--text-muted))] font-mono text-xs uppercase tracking-widest mb-4">
|
||||
>> _DOC://PUBLIC_ACCESS
|
||||
{t('classificationHeader')}
|
||||
</p>
|
||||
<h1 className="text-4xl md:text-5xl font-mono font-bold uppercase text-[rgb(var(--text-primary))] tracking-tight">
|
||||
ABOUT ME_
|
||||
{t('mainTitle')}
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
@@ -35,12 +36,10 @@ export default async function AboutPage({params}: Props) {
|
||||
<section className="border-2 border-[rgb(var(--border-primary))] p-8">
|
||||
<div className="border-l-4 border-[var(--neon-cyan)] pl-6">
|
||||
<p className="font-mono text-base text-[rgb(var(--text-primary))] leading-relaxed mb-4">
|
||||
Welcome to my corner of the internet! This is where I share my thoughts, opinions,
|
||||
and experiences - from tech adventures to life as a family man. Yes, I love
|
||||
technology, but there's so much more to life than just code and servers.
|
||||
{t('introParagraph1')}
|
||||
</p>
|
||||
<p className="font-mono text-sm text-[rgb(var(--text-muted))] uppercase tracking-wider">
|
||||
STATUS: ACTIVE // ROLE: DAD + DEV + LIFE ENTHUSIAST
|
||||
{t('introLabel')}
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
@@ -48,46 +47,39 @@ export default async function AboutPage({params}: Props) {
|
||||
{/* Life & Values Section */}
|
||||
<section className="border-2 border-[rgb(var(--border-primary))] p-8">
|
||||
<h2 className="text-2xl font-mono font-bold uppercase text-[rgb(var(--text-primary))] mb-6 pb-3 border-b-2 border-[rgb(var(--border-primary))]">
|
||||
> LIFE & VALUES
|
||||
{t('lifeValuesTitle')}
|
||||
</h2>
|
||||
<div className="space-y-4">
|
||||
<div className="border-l-4 border-[var(--neon-pink)] pl-6">
|
||||
<h3 className="font-mono text-sm font-bold text-[var(--neon-pink)] uppercase mb-2">
|
||||
[FAMILY FIRST]
|
||||
{t('familyFirstTitle')}
|
||||
</h3>
|
||||
<p className="font-mono text-sm text-[rgb(var(--text-primary))] leading-relaxed">
|
||||
Being a dad to an amazing toddler is my most important role. Family time is
|
||||
sacred - whether it's building block towers, exploring parks, or just
|
||||
enjoying the chaos of everyday life together. Tech can wait; these moments
|
||||
can't.
|
||||
{t('familyFirstText')}
|
||||
</p>
|
||||
</div>
|
||||
<div className="border-l-4 border-[var(--neon-cyan)] pl-6">
|
||||
<h3 className="font-mono text-sm font-bold text-[var(--neon-cyan)] uppercase mb-2">
|
||||
[ACTIVE LIFESTYLE]
|
||||
{t('activeLifestyleTitle')}
|
||||
</h3>
|
||||
<p className="font-mono text-sm text-[rgb(var(--text-primary))] leading-relaxed">
|
||||
I believe in keeping the body active. Whether it's hitting the gym, playing
|
||||
sports, or just staying on the move - physical activity keeps me sharp,
|
||||
balanced, and ready for whatever life throws my way.
|
||||
{t('activeLifestyleText')}
|
||||
</p>
|
||||
</div>
|
||||
<div className="border-l-4 border-[var(--neon-green)] pl-6">
|
||||
<h3 className="font-mono text-sm font-bold text-[var(--neon-green)] uppercase mb-2">
|
||||
[ENJOYING THE SIMPLE THINGS]
|
||||
{t('simpleThingsTitle')}
|
||||
</h3>
|
||||
<p className="font-mono text-sm text-[rgb(var(--text-primary))] leading-relaxed">
|
||||
Life's too short not to enjoy it. A good drink, a relaxing
|
||||
evening after a long day, or just not doing anything a blowing some steam off.
|
||||
{t('simpleThingsText')}
|
||||
</p>
|
||||
</div>
|
||||
<div className="border-l-4 border-[var(--neon-orange)] pl-6">
|
||||
<h3 className="font-mono text-sm font-bold text-[var(--neon-orange)] uppercase mb-2">
|
||||
[TECH WITH PURPOSE]
|
||||
{t('techPurposeTitle')}
|
||||
</h3>
|
||||
<p className="font-mono text-sm text-[rgb(var(--text-primary))] leading-relaxed">
|
||||
Yes, I love tech - self-hosting, privacy, tinkering with hardware. But it's
|
||||
a tool, not a lifestyle. Tech should serve life, not the other way around.
|
||||
{t('techPurposeText')}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -96,51 +88,46 @@ export default async function AboutPage({params}: Props) {
|
||||
{/* Content Section */}
|
||||
<section className="border-2 border-[rgb(var(--border-primary))] p-8">
|
||||
<h2 className="text-2xl font-mono font-bold uppercase text-[rgb(var(--text-primary))] mb-6 pb-3 border-b-2 border-[rgb(var(--border-primary))]">
|
||||
> WHAT YOU'LL FIND HERE
|
||||
{t('contentTitle')}
|
||||
</h2>
|
||||
<p className="font-mono text-sm text-[rgb(var(--text-muted))] uppercase tracking-wider mb-6">
|
||||
CONTENT SCOPE // EVERYTHING FROM TECH TO LIFE
|
||||
{t('contentSubtitle')}
|
||||
</p>
|
||||
<ul className="space-y-3">
|
||||
<li className="flex items-start gap-3">
|
||||
<span className="text-[var(--neon-pink)] font-mono font-bold">></span>
|
||||
<span className="font-mono text-sm text-[rgb(var(--text-primary))] leading-relaxed">
|
||||
<strong>Thoughts & Opinions</strong> - My take on life, work, and everything in
|
||||
between
|
||||
<strong>{t('contentThoughts')}</strong> - {t('contentThoughtsDesc')}
|
||||
</span>
|
||||
</li>
|
||||
<li className="flex items-start gap-3">
|
||||
<span className="text-[var(--neon-pink)] font-mono font-bold">></span>
|
||||
<span className="font-mono text-sm text-[rgb(var(--text-primary))] leading-relaxed">
|
||||
<strong>Life & Family</strong> - Adventures in parenting, sports, and enjoying
|
||||
the simple things
|
||||
<strong>{t('contentLifeFamily')}</strong> - {t('contentLifeFamilyDesc')}
|
||||
</span>
|
||||
</li>
|
||||
<li className="flex items-start gap-3">
|
||||
<span className="text-[var(--neon-cyan)] font-mono font-bold">></span>
|
||||
<span className="font-mono text-sm text-[rgb(var(--text-primary))] leading-relaxed">
|
||||
<strong>Tech Research</strong> - When I dive into interesting technologies and
|
||||
experiments
|
||||
<strong>{t('contentTechResearch')}</strong> - {t('contentTechResearchDesc')}
|
||||
</span>
|
||||
</li>
|
||||
<li className="flex items-start gap-3">
|
||||
<span className="text-[var(--neon-cyan)] font-mono font-bold">></span>
|
||||
<span className="font-mono text-sm text-[rgb(var(--text-primary))] leading-relaxed">
|
||||
<strong>System Administration</strong> - Self-hosting, infrastructure, and
|
||||
DevOps adventures
|
||||
<strong>{t('contentSysAdmin')}</strong> - {t('contentSysAdminDesc')}
|
||||
</span>
|
||||
</li>
|
||||
<li className="flex items-start gap-3">
|
||||
<span className="text-[var(--neon-cyan)] font-mono font-bold">></span>
|
||||
<span className="font-mono text-sm text-[rgb(var(--text-primary))] leading-relaxed">
|
||||
<strong>Development Insights</strong> - Lessons learned from building software
|
||||
<strong>{t('contentDevelopment')}</strong> - {t('contentDevelopmentDesc')}
|
||||
</span>
|
||||
</li>
|
||||
<li className="flex items-start gap-3">
|
||||
<span className="text-[var(--neon-green)] font-mono font-bold">></span>
|
||||
<span className="font-mono text-sm text-[rgb(var(--text-primary))] leading-relaxed">
|
||||
<strong>Random Stuff</strong> - Because life doesn't fit into neat
|
||||
categories!
|
||||
<strong>{t('contentRandom')}</strong> - {t('contentRandomDesc')}
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -149,40 +136,39 @@ export default async function AboutPage({params}: Props) {
|
||||
{/* Areas of Focus Section */}
|
||||
<section className="border-2 border-[rgb(var(--border-primary))] p-8">
|
||||
<h2 className="text-2xl font-mono font-bold uppercase text-[rgb(var(--text-primary))] mb-6 pb-3 border-b-2 border-[rgb(var(--border-primary))]">
|
||||
> AREAS OF FOCUS
|
||||
{t('focusTitle')}
|
||||
</h2>
|
||||
<div className="grid md:grid-cols-2 gap-4">
|
||||
<div className="border border-[rgb(var(--border-primary))] p-4">
|
||||
<h3 className="font-mono text-xs font-bold text-[var(--neon-pink)] uppercase mb-2">
|
||||
[BEING A DAD]
|
||||
{t('focusBeingDadTitle')}
|
||||
</h3>
|
||||
<p className="font-mono text-xs text-[rgb(var(--text-primary))] leading-relaxed">
|
||||
Playing with my boy, teaching moments, watching him grow, building memories
|
||||
together
|
||||
{t('focusBeingDadText')}
|
||||
</p>
|
||||
</div>
|
||||
<div className="border border-[rgb(var(--border-primary))] p-4">
|
||||
<h3 className="font-mono text-xs font-bold text-[var(--neon-cyan)] uppercase mb-2">
|
||||
[STAYING ACTIVE]
|
||||
{t('focusStayingActiveTitle')}
|
||||
</h3>
|
||||
<p className="font-mono text-xs text-[rgb(var(--text-primary))] leading-relaxed">
|
||||
Gym sessions, sports, keeping fit, maintaining energy for life's demands
|
||||
{t('focusStayingActiveText')}
|
||||
</p>
|
||||
</div>
|
||||
<div className="border border-[rgb(var(--border-primary))] p-4">
|
||||
<h3 className="font-mono text-xs font-bold text-[var(--neon-green)] uppercase mb-2">
|
||||
[TECHNOLOGY & SYSTEMS]
|
||||
{t('focusTechnologyTitle')}
|
||||
</h3>
|
||||
<p className="font-mono text-xs text-[rgb(var(--text-primary))] leading-relaxed">
|
||||
Software development, infrastructure, DevOps, self-hosting adventures
|
||||
{t('focusTechnologyText')}
|
||||
</p>
|
||||
</div>
|
||||
<div className="border border-[rgb(var(--border-primary))] p-4">
|
||||
<h3 className="font-mono text-xs font-bold text-[var(--neon-orange)] uppercase mb-2">
|
||||
[LIFE BALANCE]
|
||||
{t('focusLifeBalanceTitle')}
|
||||
</h3>
|
||||
<p className="font-mono text-xs text-[rgb(var(--text-primary))] leading-relaxed">
|
||||
Relaxing with good company, enjoying downtime, appreciating the simple moments
|
||||
{t('focusLifeBalanceText')}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -190,42 +176,42 @@ export default async function AboutPage({params}: Props) {
|
||||
{/* Tech Stack Section */}
|
||||
<section className="border-2 border-[rgb(var(--border-primary))] p-8">
|
||||
<h2 className="text-2xl font-mono font-bold uppercase text-[rgb(var(--text-primary))] mb-6 pb-3 border-b-2 border-[rgb(var(--border-primary))]">
|
||||
> TECH STACK
|
||||
{t('techStackTitle')}
|
||||
</h2>
|
||||
<p className="font-mono text-sm text-[rgb(var(--text-muted))] uppercase tracking-wider mb-6">
|
||||
TOOLS I USE // WHEN NEEDED
|
||||
{t('techStackSubtitle')}
|
||||
</p>
|
||||
<div className="grid md:grid-cols-2 gap-4">
|
||||
<div className="border border-[rgb(var(--border-primary))] p-4">
|
||||
<h3 className="font-mono text-xs font-bold text-[var(--neon-cyan)] uppercase mb-2">
|
||||
[DEVELOPMENT]
|
||||
{t('techStackDevelopmentTitle')}
|
||||
</h3>
|
||||
<p className="font-mono text-xs text-[rgb(var(--text-primary))] leading-relaxed">
|
||||
.NET, Golang, TypeScript, Next.js, React
|
||||
{t('techStackDevelopmentText')}
|
||||
</p>
|
||||
</div>
|
||||
<div className="border border-[rgb(var(--border-primary))] p-4">
|
||||
<h3 className="font-mono text-xs font-bold text-[var(--neon-cyan)] uppercase mb-2">
|
||||
[INFRASTRUCTURE]
|
||||
{t('techStackInfrastructureTitle')}
|
||||
</h3>
|
||||
<p className="font-mono text-xs text-[rgb(var(--text-primary))] leading-relaxed">
|
||||
Windows Server, Linux, Docker, Hyper-V
|
||||
{t('techStackInfrastructureText')}
|
||||
</p>
|
||||
</div>
|
||||
<div className="border border-[rgb(var(--border-primary))] p-4">
|
||||
<h3 className="font-mono text-xs font-bold text-[var(--neon-cyan)] uppercase mb-2">
|
||||
[DESIGN]
|
||||
{t('techStackDesignTitle')}
|
||||
</h3>
|
||||
<p className="font-mono text-xs text-[rgb(var(--text-primary))] leading-relaxed">
|
||||
Tailwind CSS, Markdown, Terminal aesthetics
|
||||
{t('techStackDesignText')}
|
||||
</p>
|
||||
</div>
|
||||
<div className="border border-[rgb(var(--border-primary))] p-4">
|
||||
<h3 className="font-mono text-xs font-bold text-[var(--neon-cyan)] uppercase mb-2">
|
||||
[SELF-HOSTING]
|
||||
{t('techStackSelfHostingTitle')}
|
||||
</h3>
|
||||
<p className="font-mono text-xs text-[rgb(var(--text-primary))] leading-relaxed">
|
||||
Home lab, privacy-focused services, full control, Git server
|
||||
{t('techStackSelfHostingText')}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -233,7 +219,7 @@ export default async function AboutPage({params}: Props) {
|
||||
{/* Contact Section */}
|
||||
<section className="border-2 border-[rgb(var(--border-primary))] p-8">
|
||||
<h2 className="text-2xl font-mono font-bold uppercase text-[rgb(var(--text-primary))] mb-6 pb-3 border-b-2 border-[rgb(var(--border-primary))]">
|
||||
> CONTACT
|
||||
{t('contactTitle')}
|
||||
</h2>
|
||||
<div className="border-l-4 border-[var(--neon-pink)] pl-6">
|
||||
{/* <p className="font-mono text-sm text-[rgb(var(--text-primary))] leading-relaxed mb-4">
|
||||
|
||||
@@ -7,7 +7,6 @@ import { BlogCard } from '@/components/blog/blog-card'
|
||||
import { SearchBar } from '@/components/blog/search-bar'
|
||||
import { SortDropdown } from '@/components/blog/sort-dropdown'
|
||||
import { TagFilter } from '@/components/blog/tag-filter'
|
||||
import { Navbar } from '@/components/blog/navbar'
|
||||
|
||||
interface BlogPageClientProps {
|
||||
posts: Post[]
|
||||
@@ -142,7 +141,7 @@ export default function BlogPageClient({ posts, allTags }: BlogPageClientProps)
|
||||
disabled={currentPage === 1}
|
||||
className="px-6 py-3 font-mono text-sm uppercase border border-[rgb(var(--border-primary))] text-[rgb(var(--text-primary))] disabled:opacity-30 disabled:cursor-not-allowed hover:border-[var(--neon-cyan)] hover:text-[var(--neon-cyan)] transition-colors cursor-pointer"
|
||||
>
|
||||
< PREV
|
||||
{t('prev')}
|
||||
</button>
|
||||
<div className="flex items-center gap-2">
|
||||
{Array.from({ length: totalPages }, (_, i) => i + 1).map(page => (
|
||||
@@ -164,7 +163,7 @@ export default function BlogPageClient({ posts, allTags }: BlogPageClientProps)
|
||||
disabled={currentPage === totalPages}
|
||||
className="px-6 py-3 font-mono text-sm uppercase border border-[rgb(var(--border-primary))] text-[rgb(var(--text-primary))] disabled:opacity-30 disabled:cursor-not-allowed hover:border-[var(--neon-cyan)] hover:text-[var(--neon-cyan)] transition-colors cursor-pointer"
|
||||
>
|
||||
NEXT >
|
||||
{t('next')}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
import { getAllPosts } from '@/lib/markdown'
|
||||
import BlogPageClient from './blog-client'
|
||||
import {setRequestLocale} from 'next-intl/server'
|
||||
import { setRequestLocale } from 'next-intl/server'
|
||||
|
||||
export default async function BlogPage() {
|
||||
const posts = await getAllPosts()
|
||||
export default async function BlogPage({ params }: { params: Promise<{ locale: string }> }) {
|
||||
const { locale } = await params;
|
||||
await setRequestLocale(locale)
|
||||
const posts = await getAllPosts(locale)
|
||||
const allTags = Array.from(new Set(posts.flatMap(post => post.frontmatter.tags))).sort()
|
||||
|
||||
return <BlogPageClient posts={posts} allTags={allTags} />
|
||||
|
||||
@@ -3,9 +3,18 @@ import Image from 'next/image'
|
||||
import { getAllPosts } from '@/lib/markdown'
|
||||
import { formatDate } from '@/lib/utils'
|
||||
import { ThemeToggle } from '@/components/theme-toggle'
|
||||
import {setRequestLocale} from 'next-intl/server'
|
||||
import {setRequestLocale, getTranslations} from 'next-intl/server'
|
||||
|
||||
type Props = {
|
||||
params: Promise<{locale: string}>
|
||||
}
|
||||
|
||||
export default async function HomePage({params}: Props) {
|
||||
const {locale} = await params
|
||||
setRequestLocale(locale)
|
||||
const t = await getTranslations('Home')
|
||||
const tNav = await getTranslations('Navigation')
|
||||
|
||||
export default async function HomePage() {
|
||||
const allPosts = await getAllPosts()
|
||||
const featuredPosts = allPosts.slice(0, 6)
|
||||
|
||||
@@ -24,7 +33,7 @@ export default async function HomePage() {
|
||||
<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
|
||||
{t('terminalVersion')}
|
||||
</span>
|
||||
</div>
|
||||
<div className="flex gap-4 items-center">
|
||||
@@ -32,13 +41,13 @@ export default async function HomePage() {
|
||||
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]
|
||||
[{tNav('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]
|
||||
[{tNav('about')}]
|
||||
</Link>
|
||||
<ThemeToggle />
|
||||
</div>
|
||||
@@ -46,15 +55,13 @@ export default async function HomePage() {
|
||||
|
||||
<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 //
|
||||
{t('documentLevel')}
|
||||
</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.
|
||||
{t('heroTitle')}
|
||||
</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
|
||||
{t('heroSubtitle')}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -63,13 +70,13 @@ export default async function HomePage() {
|
||||
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]
|
||||
{t('checkPostsButton')}
|
||||
</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]
|
||||
{t('aboutMeButton')}
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
@@ -81,10 +88,10 @@ export default async function HomePage() {
|
||||
<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
|
||||
{t('recentEntriesLabel')}
|
||||
</p>
|
||||
<h2 className="text-3xl md:text-5xl font-mono font-bold text-slate-900 dark:text-slate-100 uppercase tracking-tight">
|
||||
> RECENT ENTRIES
|
||||
{t('recentEntriesTitle')}
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
@@ -134,7 +141,7 @@ export default async function HomePage() {
|
||||
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Ă] >>
|
||||
{t('accessButton')}
|
||||
</Link>
|
||||
</div>
|
||||
</article>
|
||||
@@ -147,14 +154,14 @@ export default async function HomePage() {
|
||||
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] >>
|
||||
{t('seePostsButton')}
|
||||
</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] >>
|
||||
{t('seeAllTagsButton')}
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
title: 'Why I created this page'
|
||||
title: 'First post'
|
||||
description: 'First post'
|
||||
date: '2025-12-02'
|
||||
author: 'Rares'
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: 'Why I created this page'
|
||||
description: 'First post'
|
||||
title: 'Primul post'
|
||||
description: 'Primul post'
|
||||
date: '2025-12-02'
|
||||
author: 'Rares'
|
||||
category: 'Opinion'
|
||||
|
||||
@@ -18,6 +18,21 @@
|
||||
"about": "About"
|
||||
},
|
||||
|
||||
"Home": {
|
||||
"terminalVersion": "TERMINAL:// V2.0",
|
||||
"documentLevel": "DOCUMENT LEVEL-1 //",
|
||||
"heroTitle": "BUILD. WRITE. SHARE.",
|
||||
"heroSubtitle": "> Explore ideas",
|
||||
"checkPostsButton": "[CHECK POSTS]",
|
||||
"aboutMeButton": "[ABOUT ME]",
|
||||
"recentEntriesLabel": "ARCHIVE ACCESS // RECENT ENTRIES",
|
||||
"recentEntriesTitle": "> RECENT ENTRIES",
|
||||
"fileLabel": "FILE#{number} // {category}",
|
||||
"accessButton": "[ACCESS] >>",
|
||||
"seePostsButton": "[SEE POSTS] >>",
|
||||
"seeAllTagsButton": "[SEE ALL TAGS] >>"
|
||||
},
|
||||
|
||||
"BlogListing": {
|
||||
"title": "Blog",
|
||||
"subtitle": "Latest articles and thoughts",
|
||||
@@ -29,7 +44,9 @@
|
||||
"filterByTag": "Filter by tag",
|
||||
"clearFilters": "Clear filters",
|
||||
"foundPosts": "Found {count} posts",
|
||||
"noPosts": "No posts found"
|
||||
"noPosts": "No posts found",
|
||||
"prev": "< PREV",
|
||||
"next": "NEXT >"
|
||||
},
|
||||
|
||||
"BlogPost": {
|
||||
@@ -53,7 +70,54 @@
|
||||
|
||||
"About": {
|
||||
"title": "About",
|
||||
"subtitle": "Learn more about me"
|
||||
"subtitle": "Learn more about me",
|
||||
"classificationHeader": ">> _DOC://PUBLIC_ACCESS",
|
||||
"mainTitle": "ABOUT ME_",
|
||||
"introLabel": "STATUS: ACTIVE // ROLE: DAD + DEV + LIFE ENTHUSIAST",
|
||||
"introParagraph1": "Welcome to my corner of the internet! This is where I share my thoughts, opinions, and experiences - from tech adventures to life as a family man. Yes, I love technology, but there's so much more to life than just code and servers.",
|
||||
"lifeValuesTitle": "> LIFE & VALUES",
|
||||
"familyFirstTitle": "[FAMILY FIRST]",
|
||||
"familyFirstText": "Being a dad to an amazing toddler is my most important role. Family time is sacred - whether it's building block towers, exploring parks, or just enjoying the chaos of everyday life together. Tech can wait; these moments can't.",
|
||||
"activeLifestyleTitle": "[ACTIVE LIFESTYLE]",
|
||||
"activeLifestyleText": "I believe in keeping the body active. Whether it's hitting the gym, playing sports, or just staying on the move - physical activity keeps me sharp, balanced, and ready for whatever life throws my way.",
|
||||
"simpleThingsTitle": "[ENJOYING THE SIMPLE THINGS]",
|
||||
"simpleThingsText": "Life's too short not to enjoy it. A good drink, a relaxing evening after a long day, or just not doing anything a blowing some steam off.",
|
||||
"techPurposeTitle": "[TECH WITH PURPOSE]",
|
||||
"techPurposeText": "Yes, I love tech - self-hosting, privacy, tinkering with hardware. But it's a tool, not a lifestyle. Tech should serve life, not the other way around.",
|
||||
"contentTitle": "> WHAT YOU'LL FIND HERE",
|
||||
"contentSubtitle": "CONTENT SCOPE // EVERYTHING FROM TECH TO LIFE",
|
||||
"contentThoughts": "Thoughts & Opinions",
|
||||
"contentThoughtsDesc": "My take on life, work, and everything in between",
|
||||
"contentLifeFamily": "Life & Family",
|
||||
"contentLifeFamilyDesc": "Adventures in parenting, sports, and enjoying the simple things",
|
||||
"contentTechResearch": "Tech Research",
|
||||
"contentTechResearchDesc": "When I dive into interesting technologies and experiments",
|
||||
"contentSysAdmin": "System Administration",
|
||||
"contentSysAdminDesc": "Self-hosting, infrastructure, and DevOps adventures",
|
||||
"contentDevelopment": "Development Insights",
|
||||
"contentDevelopmentDesc": "Lessons learned from building software",
|
||||
"contentRandom": "Random Stuff",
|
||||
"contentRandomDesc": "Because life doesn't fit into neat categories!",
|
||||
"focusTitle": "> AREAS OF FOCUS",
|
||||
"focusBeingDadTitle": "[BEING A DAD]",
|
||||
"focusBeingDadText": "Playing with my boy, teaching moments, watching him grow, building memories together",
|
||||
"focusStayingActiveTitle": "[STAYING ACTIVE]",
|
||||
"focusStayingActiveText": "Gym sessions, sports, keeping fit, maintaining energy for life's demands",
|
||||
"focusTechnologyTitle": "[TECHNOLOGY & SYSTEMS]",
|
||||
"focusTechnologyText": "Software development, infrastructure, DevOps, self-hosting adventures",
|
||||
"focusLifeBalanceTitle": "[LIFE BALANCE]",
|
||||
"focusLifeBalanceText": "Relaxing with good company, enjoying downtime, appreciating the simple moments",
|
||||
"techStackTitle": "> TECH STACK",
|
||||
"techStackSubtitle": "TOOLS I USE // WHEN NEEDED",
|
||||
"techStackDevelopmentTitle": "[DEVELOPMENT]",
|
||||
"techStackDevelopmentText": ".NET, Golang, TypeScript, Next.js, React",
|
||||
"techStackInfrastructureTitle": "[INFRASTRUCTURE]",
|
||||
"techStackInfrastructureText": "Windows Server, Linux, Docker, Hyper-V",
|
||||
"techStackDesignTitle": "[DESIGN]",
|
||||
"techStackDesignText": "Tailwind CSS, Markdown, Terminal aesthetics",
|
||||
"techStackSelfHostingTitle": "[SELF-HOSTING]",
|
||||
"techStackSelfHostingText": "Home lab, privacy-focused services, full control, Git server",
|
||||
"contactTitle": "> CONTACT"
|
||||
},
|
||||
|
||||
"NotFound": {
|
||||
|
||||
@@ -18,6 +18,21 @@
|
||||
"about": "Despre"
|
||||
},
|
||||
|
||||
"Home": {
|
||||
"terminalVersion": "TERMINAL:// V2.0",
|
||||
"documentLevel": "DOCUMENT LEVEL-1 //",
|
||||
"heroTitle": "BUILD. WRITE. SHARE.",
|
||||
"heroSubtitle": "> Explore ideas",
|
||||
"checkPostsButton": "[CHECK POSTS]",
|
||||
"aboutMeButton": "[ABOUT ME]",
|
||||
"recentEntriesLabel": "ARCHIVE ACCESS // RECENT ENTRIES",
|
||||
"recentEntriesTitle": "> RECENT ENTRIES",
|
||||
"fileLabel": "FILE#{number} // {category}",
|
||||
"accessButton": "[ACCESS] >>",
|
||||
"seePostsButton": "[SEE POSTS] >>",
|
||||
"seeAllTagsButton": "[SEE ALL TAGS] >>"
|
||||
},
|
||||
|
||||
"BlogListing": {
|
||||
"title": "Blog",
|
||||
"subtitle": "Ultimele articole și gânduri",
|
||||
@@ -29,7 +44,9 @@
|
||||
"filterByTag": "Filtrează după etichetă",
|
||||
"clearFilters": "Șterge filtrele",
|
||||
"foundPosts": "{count} articole găsite",
|
||||
"noPosts": "Niciun articol găsit"
|
||||
"noPosts": "Niciun articol găsit",
|
||||
"prev": "< PREV",
|
||||
"next": "NEXT >"
|
||||
},
|
||||
|
||||
"BlogPost": {
|
||||
@@ -53,7 +70,54 @@
|
||||
|
||||
"About": {
|
||||
"title": "Despre",
|
||||
"subtitle": "Află mai multe despre mine"
|
||||
"subtitle": "Află mai multe despre mine",
|
||||
"classificationHeader": ">> _DOC://PUBLIC_ACCESS",
|
||||
"mainTitle": "ABOUT ME_",
|
||||
"introLabel": "STATUS: ACTIVE // ROLE: DAD + DEV + LIFE ENTHUSIAST",
|
||||
"introParagraph1": "Welcome to my corner of the internet! This is where I share my thoughts, opinions, and experiences - from tech adventures to life as a family man. Yes, I love technology, but there's so much more to life than just code and servers.",
|
||||
"lifeValuesTitle": "> LIFE & VALUES",
|
||||
"familyFirstTitle": "[FAMILY FIRST]",
|
||||
"familyFirstText": "Being a dad to an amazing toddler is my most important role. Family time is sacred - whether it's building block towers, exploring parks, or just enjoying the chaos of everyday life together. Tech can wait; these moments can't.",
|
||||
"activeLifestyleTitle": "[ACTIVE LIFESTYLE]",
|
||||
"activeLifestyleText": "I believe in keeping the body active. Whether it's hitting the gym, playing sports, or just staying on the move - physical activity keeps me sharp, balanced, and ready for whatever life throws my way.",
|
||||
"simpleThingsTitle": "[ENJOYING THE SIMPLE THINGS]",
|
||||
"simpleThingsText": "Life's too short not to enjoy it. A good drink, a relaxing evening after a long day, or just not doing anything a blowing some steam off.",
|
||||
"techPurposeTitle": "[TECH WITH PURPOSE]",
|
||||
"techPurposeText": "Yes, I love tech - self-hosting, privacy, tinkering with hardware. But it's a tool, not a lifestyle. Tech should serve life, not the other way around.",
|
||||
"contentTitle": "> WHAT YOU'LL FIND HERE",
|
||||
"contentSubtitle": "CONTENT SCOPE // EVERYTHING FROM TECH TO LIFE",
|
||||
"contentThoughts": "Thoughts & Opinions",
|
||||
"contentThoughtsDesc": "My take on life, work, and everything in between",
|
||||
"contentLifeFamily": "Life & Family",
|
||||
"contentLifeFamilyDesc": "Adventures in parenting, sports, and enjoying the simple things",
|
||||
"contentTechResearch": "Tech Research",
|
||||
"contentTechResearchDesc": "When I dive into interesting technologies and experiments",
|
||||
"contentSysAdmin": "System Administration",
|
||||
"contentSysAdminDesc": "Self-hosting, infrastructure, and DevOps adventures",
|
||||
"contentDevelopment": "Development Insights",
|
||||
"contentDevelopmentDesc": "Lessons learned from building software",
|
||||
"contentRandom": "Random Stuff",
|
||||
"contentRandomDesc": "Because life doesn't fit into neat categories!",
|
||||
"focusTitle": "> AREAS OF FOCUS",
|
||||
"focusBeingDadTitle": "[BEING A DAD]",
|
||||
"focusBeingDadText": "Playing with my boy, teaching moments, watching him grow, building memories together",
|
||||
"focusStayingActiveTitle": "[STAYING ACTIVE]",
|
||||
"focusStayingActiveText": "Gym sessions, sports, keeping fit, maintaining energy for life's demands",
|
||||
"focusTechnologyTitle": "[TECHNOLOGY & SYSTEMS]",
|
||||
"focusTechnologyText": "Software development, infrastructure, DevOps, self-hosting adventures",
|
||||
"focusLifeBalanceTitle": "[LIFE BALANCE]",
|
||||
"focusLifeBalanceText": "Relaxing with good company, enjoying downtime, appreciating the simple moments",
|
||||
"techStackTitle": "> TECH STACK",
|
||||
"techStackSubtitle": "TOOLS I USE // WHEN NEEDED",
|
||||
"techStackDevelopmentTitle": "[DEVELOPMENT]",
|
||||
"techStackDevelopmentText": ".NET, Golang, TypeScript, Next.js, React",
|
||||
"techStackInfrastructureTitle": "[INFRASTRUCTURE]",
|
||||
"techStackInfrastructureText": "Windows Server, Linux, Docker, Hyper-V",
|
||||
"techStackDesignTitle": "[DESIGN]",
|
||||
"techStackDesignText": "Tailwind CSS, Markdown, Terminal aesthetics",
|
||||
"techStackSelfHostingTitle": "[SELF-HOSTING]",
|
||||
"techStackSelfHostingText": "Home lab, privacy-focused services, full control, Git server",
|
||||
"contactTitle": "> CONTACT"
|
||||
},
|
||||
|
||||
"NotFound": {
|
||||
|
||||
Reference in New Issue
Block a user