fix/parameters-for-translations #15
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 { Metadata } from 'next'
|
||||||
import { Navbar } from '@/components/blog/navbar'
|
import { Navbar } from '@/components/blog/navbar'
|
||||||
import {setRequestLocale} from 'next-intl/server'
|
import {setRequestLocale, getTranslations} from 'next-intl/server'
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: 'About',
|
title: 'About',
|
||||||
@@ -14,6 +14,7 @@ type Props = {
|
|||||||
export default async function AboutPage({params}: Props) {
|
export default async function AboutPage({params}: Props) {
|
||||||
const {locale} = await params
|
const {locale} = await params
|
||||||
setRequestLocale(locale)
|
setRequestLocale(locale)
|
||||||
|
const t = await getTranslations('About')
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Navbar />
|
<Navbar />
|
||||||
@@ -22,10 +23,10 @@ export default async function AboutPage({params}: Props) {
|
|||||||
{/* Classification Header */}
|
{/* Classification Header */}
|
||||||
<div className="border-2 border-[rgb(var(--border-primary))] p-8 mb-10">
|
<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">
|
<p className="text-[rgb(var(--text-muted))] font-mono text-xs uppercase tracking-widest mb-4">
|
||||||
>> _DOC://PUBLIC_ACCESS
|
{t('classificationHeader')}
|
||||||
</p>
|
</p>
|
||||||
<h1 className="text-4xl md:text-5xl font-mono font-bold uppercase text-[rgb(var(--text-primary))] tracking-tight">
|
<h1 className="text-4xl md:text-5xl font-mono font-bold uppercase text-[rgb(var(--text-primary))] tracking-tight">
|
||||||
ABOUT ME_
|
{t('mainTitle')}
|
||||||
</h1>
|
</h1>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -35,12 +36,10 @@ export default async function AboutPage({params}: Props) {
|
|||||||
<section className="border-2 border-[rgb(var(--border-primary))] p-8">
|
<section className="border-2 border-[rgb(var(--border-primary))] p-8">
|
||||||
<div className="border-l-4 border-[var(--neon-cyan)] pl-6">
|
<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">
|
<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,
|
{t('introParagraph1')}
|
||||||
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.
|
|
||||||
</p>
|
</p>
|
||||||
<p className="font-mono text-sm text-[rgb(var(--text-muted))] uppercase tracking-wider">
|
<p className="font-mono text-sm text-[rgb(var(--text-muted))] uppercase tracking-wider">
|
||||||
STATUS: ACTIVE // ROLE: DAD + DEV + LIFE ENTHUSIAST
|
{t('introLabel')}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
@@ -48,46 +47,39 @@ export default async function AboutPage({params}: Props) {
|
|||||||
{/* Life & Values Section */}
|
{/* Life & Values Section */}
|
||||||
<section className="border-2 border-[rgb(var(--border-primary))] p-8">
|
<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))]">
|
<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>
|
</h2>
|
||||||
<div className="space-y-4">
|
<div className="space-y-4">
|
||||||
<div className="border-l-4 border-[var(--neon-pink)] pl-6">
|
<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">
|
<h3 className="font-mono text-sm font-bold text-[var(--neon-pink)] uppercase mb-2">
|
||||||
[FAMILY FIRST]
|
{t('familyFirstTitle')}
|
||||||
</h3>
|
</h3>
|
||||||
<p className="font-mono text-sm text-[rgb(var(--text-primary))] leading-relaxed">
|
<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
|
{t('familyFirstText')}
|
||||||
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.
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div className="border-l-4 border-[var(--neon-cyan)] pl-6">
|
<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">
|
<h3 className="font-mono text-sm font-bold text-[var(--neon-cyan)] uppercase mb-2">
|
||||||
[ACTIVE LIFESTYLE]
|
{t('activeLifestyleTitle')}
|
||||||
</h3>
|
</h3>
|
||||||
<p className="font-mono text-sm text-[rgb(var(--text-primary))] leading-relaxed">
|
<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
|
{t('activeLifestyleText')}
|
||||||
sports, or just staying on the move - physical activity keeps me sharp,
|
|
||||||
balanced, and ready for whatever life throws my way.
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div className="border-l-4 border-[var(--neon-green)] pl-6">
|
<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">
|
<h3 className="font-mono text-sm font-bold text-[var(--neon-green)] uppercase mb-2">
|
||||||
[ENJOYING THE SIMPLE THINGS]
|
{t('simpleThingsTitle')}
|
||||||
</h3>
|
</h3>
|
||||||
<p className="font-mono text-sm text-[rgb(var(--text-primary))] leading-relaxed">
|
<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
|
{t('simpleThingsText')}
|
||||||
evening after a long day, or just not doing anything a blowing some steam off.
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div className="border-l-4 border-[var(--neon-orange)] pl-6">
|
<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">
|
<h3 className="font-mono text-sm font-bold text-[var(--neon-orange)] uppercase mb-2">
|
||||||
[TECH WITH PURPOSE]
|
{t('techPurposeTitle')}
|
||||||
</h3>
|
</h3>
|
||||||
<p className="font-mono text-sm text-[rgb(var(--text-primary))] leading-relaxed">
|
<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
|
{t('techPurposeText')}
|
||||||
a tool, not a lifestyle. Tech should serve life, not the other way around.
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -96,51 +88,46 @@ export default async function AboutPage({params}: Props) {
|
|||||||
{/* Content Section */}
|
{/* Content Section */}
|
||||||
<section className="border-2 border-[rgb(var(--border-primary))] p-8">
|
<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))]">
|
<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>
|
</h2>
|
||||||
<p className="font-mono text-sm text-[rgb(var(--text-muted))] uppercase tracking-wider mb-6">
|
<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>
|
</p>
|
||||||
<ul className="space-y-3">
|
<ul className="space-y-3">
|
||||||
<li className="flex items-start gap-3">
|
<li className="flex items-start gap-3">
|
||||||
<span className="text-[var(--neon-pink)] font-mono font-bold">></span>
|
<span className="text-[var(--neon-pink)] font-mono font-bold">></span>
|
||||||
<span className="font-mono text-sm text-[rgb(var(--text-primary))] leading-relaxed">
|
<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
|
<strong>{t('contentThoughts')}</strong> - {t('contentThoughtsDesc')}
|
||||||
between
|
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
<li className="flex items-start gap-3">
|
<li className="flex items-start gap-3">
|
||||||
<span className="text-[var(--neon-pink)] font-mono font-bold">></span>
|
<span className="text-[var(--neon-pink)] font-mono font-bold">></span>
|
||||||
<span className="font-mono text-sm text-[rgb(var(--text-primary))] leading-relaxed">
|
<span className="font-mono text-sm text-[rgb(var(--text-primary))] leading-relaxed">
|
||||||
<strong>Life & Family</strong> - Adventures in parenting, sports, and enjoying
|
<strong>{t('contentLifeFamily')}</strong> - {t('contentLifeFamilyDesc')}
|
||||||
the simple things
|
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
<li className="flex items-start gap-3">
|
<li className="flex items-start gap-3">
|
||||||
<span className="text-[var(--neon-cyan)] font-mono font-bold">></span>
|
<span className="text-[var(--neon-cyan)] font-mono font-bold">></span>
|
||||||
<span className="font-mono text-sm text-[rgb(var(--text-primary))] leading-relaxed">
|
<span className="font-mono text-sm text-[rgb(var(--text-primary))] leading-relaxed">
|
||||||
<strong>Tech Research</strong> - When I dive into interesting technologies and
|
<strong>{t('contentTechResearch')}</strong> - {t('contentTechResearchDesc')}
|
||||||
experiments
|
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
<li className="flex items-start gap-3">
|
<li className="flex items-start gap-3">
|
||||||
<span className="text-[var(--neon-cyan)] font-mono font-bold">></span>
|
<span className="text-[var(--neon-cyan)] font-mono font-bold">></span>
|
||||||
<span className="font-mono text-sm text-[rgb(var(--text-primary))] leading-relaxed">
|
<span className="font-mono text-sm text-[rgb(var(--text-primary))] leading-relaxed">
|
||||||
<strong>System Administration</strong> - Self-hosting, infrastructure, and
|
<strong>{t('contentSysAdmin')}</strong> - {t('contentSysAdminDesc')}
|
||||||
DevOps adventures
|
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
<li className="flex items-start gap-3">
|
<li className="flex items-start gap-3">
|
||||||
<span className="text-[var(--neon-cyan)] font-mono font-bold">></span>
|
<span className="text-[var(--neon-cyan)] font-mono font-bold">></span>
|
||||||
<span className="font-mono text-sm text-[rgb(var(--text-primary))] leading-relaxed">
|
<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>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
<li className="flex items-start gap-3">
|
<li className="flex items-start gap-3">
|
||||||
<span className="text-[var(--neon-green)] font-mono font-bold">></span>
|
<span className="text-[var(--neon-green)] font-mono font-bold">></span>
|
||||||
<span className="font-mono text-sm text-[rgb(var(--text-primary))] leading-relaxed">
|
<span className="font-mono text-sm text-[rgb(var(--text-primary))] leading-relaxed">
|
||||||
<strong>Random Stuff</strong> - Because life doesn't fit into neat
|
<strong>{t('contentRandom')}</strong> - {t('contentRandomDesc')}
|
||||||
categories!
|
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
@@ -149,40 +136,39 @@ export default async function AboutPage({params}: Props) {
|
|||||||
{/* Areas of Focus Section */}
|
{/* Areas of Focus Section */}
|
||||||
<section className="border-2 border-[rgb(var(--border-primary))] p-8">
|
<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))]">
|
<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>
|
</h2>
|
||||||
<div className="grid md:grid-cols-2 gap-4">
|
<div className="grid md:grid-cols-2 gap-4">
|
||||||
<div className="border border-[rgb(var(--border-primary))] p-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">
|
<h3 className="font-mono text-xs font-bold text-[var(--neon-pink)] uppercase mb-2">
|
||||||
[BEING A DAD]
|
{t('focusBeingDadTitle')}
|
||||||
</h3>
|
</h3>
|
||||||
<p className="font-mono text-xs text-[rgb(var(--text-primary))] leading-relaxed">
|
<p className="font-mono text-xs text-[rgb(var(--text-primary))] leading-relaxed">
|
||||||
Playing with my boy, teaching moments, watching him grow, building memories
|
{t('focusBeingDadText')}
|
||||||
together
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div className="border border-[rgb(var(--border-primary))] p-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">
|
<h3 className="font-mono text-xs font-bold text-[var(--neon-cyan)] uppercase mb-2">
|
||||||
[STAYING ACTIVE]
|
{t('focusStayingActiveTitle')}
|
||||||
</h3>
|
</h3>
|
||||||
<p className="font-mono text-xs text-[rgb(var(--text-primary))] leading-relaxed">
|
<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>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div className="border border-[rgb(var(--border-primary))] p-4">
|
<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">
|
<h3 className="font-mono text-xs font-bold text-[var(--neon-green)] uppercase mb-2">
|
||||||
[TECHNOLOGY & SYSTEMS]
|
{t('focusTechnologyTitle')}
|
||||||
</h3>
|
</h3>
|
||||||
<p className="font-mono text-xs text-[rgb(var(--text-primary))] leading-relaxed">
|
<p className="font-mono text-xs text-[rgb(var(--text-primary))] leading-relaxed">
|
||||||
Software development, infrastructure, DevOps, self-hosting adventures
|
{t('focusTechnologyText')}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div className="border border-[rgb(var(--border-primary))] p-4">
|
<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">
|
<h3 className="font-mono text-xs font-bold text-[var(--neon-orange)] uppercase mb-2">
|
||||||
[LIFE BALANCE]
|
{t('focusLifeBalanceTitle')}
|
||||||
</h3>
|
</h3>
|
||||||
<p className="font-mono text-xs text-[rgb(var(--text-primary))] leading-relaxed">
|
<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>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -190,42 +176,42 @@ export default async function AboutPage({params}: Props) {
|
|||||||
{/* Tech Stack Section */}
|
{/* Tech Stack Section */}
|
||||||
<section className="border-2 border-[rgb(var(--border-primary))] p-8">
|
<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))]">
|
<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>
|
</h2>
|
||||||
<p className="font-mono text-sm text-[rgb(var(--text-muted))] uppercase tracking-wider mb-6">
|
<p className="font-mono text-sm text-[rgb(var(--text-muted))] uppercase tracking-wider mb-6">
|
||||||
TOOLS I USE // WHEN NEEDED
|
{t('techStackSubtitle')}
|
||||||
</p>
|
</p>
|
||||||
<div className="grid md:grid-cols-2 gap-4">
|
<div className="grid md:grid-cols-2 gap-4">
|
||||||
<div className="border border-[rgb(var(--border-primary))] p-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">
|
<h3 className="font-mono text-xs font-bold text-[var(--neon-cyan)] uppercase mb-2">
|
||||||
[DEVELOPMENT]
|
{t('techStackDevelopmentTitle')}
|
||||||
</h3>
|
</h3>
|
||||||
<p className="font-mono text-xs text-[rgb(var(--text-primary))] leading-relaxed">
|
<p className="font-mono text-xs text-[rgb(var(--text-primary))] leading-relaxed">
|
||||||
.NET, Golang, TypeScript, Next.js, React
|
{t('techStackDevelopmentText')}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div className="border border-[rgb(var(--border-primary))] p-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">
|
<h3 className="font-mono text-xs font-bold text-[var(--neon-cyan)] uppercase mb-2">
|
||||||
[INFRASTRUCTURE]
|
{t('techStackInfrastructureTitle')}
|
||||||
</h3>
|
</h3>
|
||||||
<p className="font-mono text-xs text-[rgb(var(--text-primary))] leading-relaxed">
|
<p className="font-mono text-xs text-[rgb(var(--text-primary))] leading-relaxed">
|
||||||
Windows Server, Linux, Docker, Hyper-V
|
{t('techStackInfrastructureText')}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div className="border border-[rgb(var(--border-primary))] p-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">
|
<h3 className="font-mono text-xs font-bold text-[var(--neon-cyan)] uppercase mb-2">
|
||||||
[DESIGN]
|
{t('techStackDesignTitle')}
|
||||||
</h3>
|
</h3>
|
||||||
<p className="font-mono text-xs text-[rgb(var(--text-primary))] leading-relaxed">
|
<p className="font-mono text-xs text-[rgb(var(--text-primary))] leading-relaxed">
|
||||||
Tailwind CSS, Markdown, Terminal aesthetics
|
{t('techStackDesignText')}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div className="border border-[rgb(var(--border-primary))] p-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">
|
<h3 className="font-mono text-xs font-bold text-[var(--neon-cyan)] uppercase mb-2">
|
||||||
[SELF-HOSTING]
|
{t('techStackSelfHostingTitle')}
|
||||||
</h3>
|
</h3>
|
||||||
<p className="font-mono text-xs text-[rgb(var(--text-primary))] leading-relaxed">
|
<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>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -233,7 +219,7 @@ export default async function AboutPage({params}: Props) {
|
|||||||
{/* Contact Section */}
|
{/* Contact Section */}
|
||||||
<section className="border-2 border-[rgb(var(--border-primary))] p-8">
|
<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))]">
|
<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>
|
</h2>
|
||||||
<div className="border-l-4 border-[var(--neon-pink)] pl-6">
|
<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">
|
{/* <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 { SearchBar } from '@/components/blog/search-bar'
|
||||||
import { SortDropdown } from '@/components/blog/sort-dropdown'
|
import { SortDropdown } from '@/components/blog/sort-dropdown'
|
||||||
import { TagFilter } from '@/components/blog/tag-filter'
|
import { TagFilter } from '@/components/blog/tag-filter'
|
||||||
import { Navbar } from '@/components/blog/navbar'
|
|
||||||
|
|
||||||
interface BlogPageClientProps {
|
interface BlogPageClientProps {
|
||||||
posts: Post[]
|
posts: Post[]
|
||||||
@@ -142,7 +141,7 @@ export default function BlogPageClient({ posts, allTags }: BlogPageClientProps)
|
|||||||
disabled={currentPage === 1}
|
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"
|
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>
|
</button>
|
||||||
<div className="flex items-center gap-2">
|
<div className="flex items-center gap-2">
|
||||||
{Array.from({ length: totalPages }, (_, i) => i + 1).map(page => (
|
{Array.from({ length: totalPages }, (_, i) => i + 1).map(page => (
|
||||||
@@ -164,7 +163,7 @@ export default function BlogPageClient({ posts, allTags }: BlogPageClientProps)
|
|||||||
disabled={currentPage === totalPages}
|
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"
|
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>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -2,8 +2,10 @@ import { getAllPosts } from '@/lib/markdown'
|
|||||||
import BlogPageClient from './blog-client'
|
import BlogPageClient from './blog-client'
|
||||||
import { setRequestLocale } from 'next-intl/server'
|
import { setRequestLocale } from 'next-intl/server'
|
||||||
|
|
||||||
export default async function BlogPage() {
|
export default async function BlogPage({ params }: { params: Promise<{ locale: string }> }) {
|
||||||
const posts = await getAllPosts()
|
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()
|
const allTags = Array.from(new Set(posts.flatMap(post => post.frontmatter.tags))).sort()
|
||||||
|
|
||||||
return <BlogPageClient posts={posts} allTags={allTags} />
|
return <BlogPageClient posts={posts} allTags={allTags} />
|
||||||
|
|||||||
@@ -3,9 +3,18 @@ import Image from 'next/image'
|
|||||||
import { getAllPosts } from '@/lib/markdown'
|
import { getAllPosts } from '@/lib/markdown'
|
||||||
import { formatDate } from '@/lib/utils'
|
import { formatDate } from '@/lib/utils'
|
||||||
import { ThemeToggle } from '@/components/theme-toggle'
|
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 allPosts = await getAllPosts()
|
||||||
const featuredPosts = allPosts.slice(0, 6)
|
const featuredPosts = allPosts.slice(0, 6)
|
||||||
|
|
||||||
@@ -24,7 +33,7 @@ export default async function HomePage() {
|
|||||||
<div className="flex items-center gap-3">
|
<div className="flex items-center gap-3">
|
||||||
<Image src="/logo.png" alt="Logo" width={32} height={32} className="opacity-80" />
|
<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">
|
<span className="font-mono text-xs text-slate-500 uppercase tracking-widest">
|
||||||
TERMINAL:// V2.0
|
{t('terminalVersion')}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex gap-4 items-center">
|
<div className="flex gap-4 items-center">
|
||||||
@@ -32,13 +41,13 @@ export default async function HomePage() {
|
|||||||
href="/blog"
|
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"
|
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>
|
||||||
<Link
|
<Link
|
||||||
href="/about"
|
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"
|
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>
|
</Link>
|
||||||
<ThemeToggle />
|
<ThemeToggle />
|
||||||
</div>
|
</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">
|
<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">
|
<p className="font-mono text-xs text-slate-500 dark:text-slate-500 uppercase tracking-widest mb-2">
|
||||||
DOCUMENT LEVEL-1 //
|
{t('documentLevel')}
|
||||||
</p>
|
</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">
|
<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.
|
{t('heroTitle')}
|
||||||
<br />
|
|
||||||
SHARE.
|
|
||||||
</h1>
|
</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">
|
<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>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -63,13 +70,13 @@ export default async function HomePage() {
|
|||||||
href="/blog"
|
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"
|
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>
|
||||||
<Link
|
<Link
|
||||||
href="/about"
|
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"
|
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>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -81,10 +88,10 @@ export default async function HomePage() {
|
|||||||
<div className="max-w-7xl mx-auto px-6">
|
<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">
|
<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">
|
<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>
|
</p>
|
||||||
<h2 className="text-3xl md:text-5xl font-mono font-bold text-slate-900 dark:text-slate-100 uppercase tracking-tight">
|
<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>
|
</h2>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -134,7 +141,7 @@ export default async function HomePage() {
|
|||||||
href={`/blog/${post.slug}`}
|
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"
|
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>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
</article>
|
</article>
|
||||||
@@ -147,14 +154,14 @@ export default async function HomePage() {
|
|||||||
href="/blog"
|
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"
|
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>
|
||||||
)}
|
)}
|
||||||
<Link
|
<Link
|
||||||
href="/tags"
|
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"
|
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>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
title: 'Why I created this page'
|
title: 'First post'
|
||||||
description: 'First post'
|
description: 'First post'
|
||||||
date: '2025-12-02'
|
date: '2025-12-02'
|
||||||
author: 'Rares'
|
author: 'Rares'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
title: 'Why I created this page'
|
title: 'Primul post'
|
||||||
description: 'First post'
|
description: 'Primul post'
|
||||||
date: '2025-12-02'
|
date: '2025-12-02'
|
||||||
author: 'Rares'
|
author: 'Rares'
|
||||||
category: 'Opinion'
|
category: 'Opinion'
|
||||||
|
|||||||
@@ -18,6 +18,21 @@
|
|||||||
"about": "About"
|
"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": {
|
"BlogListing": {
|
||||||
"title": "Blog",
|
"title": "Blog",
|
||||||
"subtitle": "Latest articles and thoughts",
|
"subtitle": "Latest articles and thoughts",
|
||||||
@@ -29,7 +44,9 @@
|
|||||||
"filterByTag": "Filter by tag",
|
"filterByTag": "Filter by tag",
|
||||||
"clearFilters": "Clear filters",
|
"clearFilters": "Clear filters",
|
||||||
"foundPosts": "Found {count} posts",
|
"foundPosts": "Found {count} posts",
|
||||||
"noPosts": "No posts found"
|
"noPosts": "No posts found",
|
||||||
|
"prev": "< PREV",
|
||||||
|
"next": "NEXT >"
|
||||||
},
|
},
|
||||||
|
|
||||||
"BlogPost": {
|
"BlogPost": {
|
||||||
@@ -53,7 +70,54 @@
|
|||||||
|
|
||||||
"About": {
|
"About": {
|
||||||
"title": "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": {
|
"NotFound": {
|
||||||
|
|||||||
@@ -18,6 +18,21 @@
|
|||||||
"about": "Despre"
|
"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": {
|
"BlogListing": {
|
||||||
"title": "Blog",
|
"title": "Blog",
|
||||||
"subtitle": "Ultimele articole și gânduri",
|
"subtitle": "Ultimele articole și gânduri",
|
||||||
@@ -29,7 +44,9 @@
|
|||||||
"filterByTag": "Filtrează după etichetă",
|
"filterByTag": "Filtrează după etichetă",
|
||||||
"clearFilters": "Șterge filtrele",
|
"clearFilters": "Șterge filtrele",
|
||||||
"foundPosts": "{count} articole găsite",
|
"foundPosts": "{count} articole găsite",
|
||||||
"noPosts": "Niciun articol găsit"
|
"noPosts": "Niciun articol găsit",
|
||||||
|
"prev": "< PREV",
|
||||||
|
"next": "NEXT >"
|
||||||
},
|
},
|
||||||
|
|
||||||
"BlogPost": {
|
"BlogPost": {
|
||||||
@@ -53,7 +70,54 @@
|
|||||||
|
|
||||||
"About": {
|
"About": {
|
||||||
"title": "Despre",
|
"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": {
|
"NotFound": {
|
||||||
|
|||||||
Reference in New Issue
Block a user