2 Commits

Author SHA1 Message Date
RJ
b68325123b 📝 update copy
All checks were successful
PR Checks / lint-and-build (pull_request) Successful in 17s
2025-12-04 15:55:36 +02:00
RJ
087bccbb13 📝 add locale on blog ssr, add translations for other webpage content 2025-12-04 14:56:00 +02:00
9 changed files with 255 additions and 96 deletions

46
.vscode/launch.json vendored Normal file
View 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
}
]
}

View File

@@ -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">
&gt;&gt; _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&apos;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))]">
&gt; 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&apos;s building block towers, exploring parks, or just
enjoying the chaos of everyday life together. Tech can wait; these moments
can&apos;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&apos;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&apos;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&apos;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))]">
&gt; WHAT YOU&apos;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">&gt;</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">&gt;</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">&gt;</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">&gt;</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">&gt;</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">&gt;</span>
<span className="font-mono text-sm text-[rgb(var(--text-primary))] leading-relaxed">
<strong>Random Stuff</strong> - Because life doesn&apos;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))]">
&gt; 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&apos;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))]">
&gt; 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))]">
&gt; 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">

View File

@@ -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"
>
&lt; 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 &gt;
{t('next')}
</button>
</div>
</div>

View File

@@ -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} />

View File

@@ -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">
&gt; 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">
&gt; 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Ă] &gt;&gt;
{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] &gt;&gt;
{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] &gt;&gt;
{t('seeAllTagsButton')}
</Link>
</div>
</div>

View File

@@ -1,5 +1,5 @@
---
title: 'Why I created this page'
title: 'First post'
description: 'First post'
date: '2025-12-02'
author: 'Rares'

View File

@@ -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'

View File

@@ -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",
"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": {

View File

@@ -3,21 +3,32 @@
"siteTitle": "Blog Personal",
"siteDescription": "Gânduri despre tehnologie și dezvoltare"
},
"Navigation": {
"home": "Acasă",
"blog": "Blog",
"tags": "Etichete",
"about": "Despre"
},
"Breadcrumbs": {
"home": "Acasă",
"blog": "Blog",
"tags": "Etichete",
"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,9 +40,10 @@
"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": {
"readMore": "Citește mai mult",
"readingTime": "{minutes} min citire",
@@ -41,7 +53,6 @@
"relatedPosts": "Articole similare",
"sharePost": "Distribuie acest articol"
},
"Tags": {
"title": "Etichete",
"subtitle": "Navighează după subiect",
@@ -50,20 +61,64 @@
"relatedTags": "Etichete similare",
"quickNav": "Navigare rapidă"
},
"About": {
"title": "Despre",
"subtitle": "Află mai multe despre mine"
"subtitle": "Află mai multe despre mine",
"classificationHeader": ">> _DOC://PUBLIC_ACCESS",
"mainTitle": "DESPRE_",
"introLabel": "STATUS: ACTIV // ROL: TATĂ + DEV",
"introParagraph1": "Mi-am făcut un colțișor pe internet unde pot să împărtășesc cam tot ce vreau. O să găsești aici și tech, și viață, și haosul de zi cu zi.",
"lifeValuesTitle": "> VIAȚĂ & VALORI",
"familyFirstTitle": "[FAMILIA PE PRIMUL LOC]",
"familyFirstText": "Să fiu tată pentru un puști genial e cel mai important rol al meu. Timpul cu familia e sfânt fie că construim turnuri din cuburi, explorăm parcuri sau doar trăim frumos haosul de zi cu zi. Tech-ul poate să aștepte, momentele astea nu.",
"activeLifestyleTitle": "[STIL DE VIAȚĂ ACTIV]",
"activeLifestyleText": "Încerc să-mi țin corpul în mișcare. Sală, sport, orice mă scoate din scaun. Mă ajută să fiu mai clar la minte, mai echilibrat și pregătit de ce aruncă viața în mine.",
"simpleThingsTitle": "[BUCURIA LUCRURILOR SIMPLE]",
"simpleThingsText": "Viața e prea scurtă să n-o savurezi. O băutură bună, o seară liniștită după o zi grea sau pur și simplu să nu faci nimic și să lași aburii să iasă… și e perfect așa.",
"techPurposeTitle": "[TECH CU SENS]",
"techPurposeText": "Da, îmi place tehnologia self-hosting, privacy, joacă cu hardware. Dar pentru mine e o unealtă, nu un stil de viață. Tech-ul ar trebui să lucreze pentru tine, nu tu pentru el.",
"contentTitle": "> CE GĂSEȘTI AICI",
"contentSubtitle": "CONTENT SCOPE // DE LA TECH LA VIAȚĂ",
"contentThoughts": "Gânduri & Opinii",
"contentThoughtsDesc": "Cum văd eu viața, munca și tot ce e între ele",
"contentLifeFamily": "Viață & Familie",
"contentLifeFamilyDesc": "Aventuri de părinte, sport și bucuria lucrurilor mici",
"contentTechResearch": "Experimente Tech",
"contentTechResearchDesc": "Când mă afund în tehnologii interesante și experimente ciudate",
"contentSysAdmin": "Administrare Sisteme",
"contentSysAdminDesc": "Self-hosting, infrastructură și aventuri de tip DevOps",
"contentDevelopment": "Development Insights",
"contentDevelopmentDesc": "Lecții învățate din proiectele pe care le construiesc",
"contentRandom": "Chestii Random",
"contentRandomDesc": "Pentru că viața nu intră mereu frumos pe categorii!",
"focusTitle": "> ZONE DE FOCUS",
"focusBeingDadTitle": "[TATĂ ÎN PRIMUL RÂND]",
"focusBeingDadText": "Joacă cu băiatul meu, momente de învățat, să-l văd cum crește și să strângem amintiri împreună",
"focusStayingActiveTitle": "[SĂ RĂMÂN ACTIV]",
"focusStayingActiveText": "Sesiuni la sală, sport, să mă țin în formă și cu energie pentru tot ce am de dus",
"focusTechnologyTitle": "[TECH & SISTEME]",
"focusTechnologyText": "Dezvoltare software, infrastructură, DevOps, aventuri de self-hosting",
"focusLifeBalanceTitle": "[ECHILIBRU ÎN VIAȚĂ]",
"focusLifeBalanceText": "Relax cu prietenii, timp de respiro, apreciat momentele simple",
"techStackTitle": "> TECH STACK",
"techStackSubtitle": "UNELTELE PE CARE LE FOLOSESC // CÂND TREBUIE",
"techStackDevelopmentTitle": "[DEVELOPMENT]",
"techStackDevelopmentText": ".NET, Golang, TypeScript, Next.js, React",
"techStackInfrastructureTitle": "[INFRASTRUCTURĂ]",
"techStackInfrastructureText": "Windows Server, Linux, Docker, Hyper-V",
"techStackDesignTitle": "[DESIGN]",
"techStackDesignText": "Tailwind CSS, Markdown",
"techStackSelfHostingTitle": "[SELF-HOSTING]",
"techStackSelfHostingText": "Home lab, servicii cu focus pe privacy, control total, server Git",
"contactTitle": "> CONTACT"
},
"NotFound": {
"title": "Pagina nu a fost găsită",
"description": "Pagina pe care o cauți nu există",
"goHome": "Mergi la pagina principală"
},
"LanguageSwitcher": {
"switchLanguage": "Schimbă limba",
"currentLanguage": "Limba curentă"
}
}
}