0fa10315b2
- Tapping an object on the desk opens a window (desktop) or a bottom sheet (mobile) instead of flipping: projects, now, servers, reading, about, contact - Desktop windows in poster style (2px ink rule, hard offset shadow), open from the tapped object, thrown by the title bar with momentum and elastic viewport edges, stack by focus, minimize into a tray, Escape closes the top window, focus moves to close and returns to the trigger - Mobile sheets via vaul 1.1.2: drag down to dismiss, overlay, focus trap - Project window shows live/source links from Directus when present - Hero "Write me" opens the contact window; still a plain #contact link without JavaScript - Shared current-book loader for desk, deck and reading window - Texts in de/en, i18n key check extended Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
298 lines
10 KiB
JSON
298 lines
10 KiB
JSON
{
|
||
"nav": {
|
||
"home": "Home",
|
||
"about": "About",
|
||
"projects": "Projects",
|
||
"contact": "Contact"
|
||
},
|
||
"common": {
|
||
"back": "Back",
|
||
"backToHome": "Back to Home",
|
||
"backToProjects": "Back to Projects",
|
||
"viewAllProjects": "View All Projects",
|
||
"loading": "Loading..."
|
||
},
|
||
"consent": {
|
||
"title": "Privacy settings",
|
||
"description": "We use optional services (analytics and chat) to improve the site. You can change your choice anytime.",
|
||
"essential": "Essential",
|
||
"analytics": "Analytics",
|
||
"chat": "Chatbot",
|
||
"alwaysOn": "Always on",
|
||
"acceptAll": "Accept all",
|
||
"acceptSelected": "Accept selected",
|
||
"rejectAll": "Reject all",
|
||
"hide": "Hide"
|
||
},
|
||
"home": {
|
||
"hero": {
|
||
"kicker": "Dennis Konkol — Osnabrück, Germany",
|
||
"claim": "I self-host half my life. The rest I code.",
|
||
"intro": "IT admin in Osnabrück and master's student. From February 2027 I look after Microsoft 365 full-time, until then my master's thesis.",
|
||
"countdown": "{days, plural, one {# day to go.} other {# days to go.}}",
|
||
"ctaWork": "See projects",
|
||
"ctaContact": "Write me"
|
||
},
|
||
"tisch": {
|
||
"title": "The desk.",
|
||
"allProjects": "All projects",
|
||
"hintBoard": "Everything here can be touched. Throw it, stack it, tap for details.",
|
||
"hintDeck": "Swipe the cards aside, tap for details.",
|
||
"tidy": "Tidy up",
|
||
"mess": "Mess it up",
|
||
"flip": "tap for details",
|
||
"details": "Open project",
|
||
"prev": "Previous card",
|
||
"next": "Next card",
|
||
"ticketTitle": "Master's thesis · due 15 Feb 2027",
|
||
"ticketDays": "days until submission",
|
||
"ticketJob": "from 02/2027: M365 administrator",
|
||
"ticketStub": "Now",
|
||
"serverTitle": "What I run",
|
||
"servers": {
|
||
"ingress": {
|
||
"name": "netcup · front door",
|
||
"detail": "Traefik, Dokploy, this site"
|
||
},
|
||
"mail": {
|
||
"name": "IONOS · mail and photos",
|
||
"detail": "mailcow, Immich"
|
||
},
|
||
"home": {
|
||
"name": "Home · Raspberry Pi",
|
||
"detail": "Home Assistant, Paperless"
|
||
}
|
||
},
|
||
"serverNote": "Guarded by CrowdSec, daily backups with restic.",
|
||
"bookLabel": "Reading now",
|
||
"bookFallback": "To the library",
|
||
"photoCaption": "That's me.",
|
||
"sticker": "Runs on my own servers."
|
||
},
|
||
"windows": {
|
||
"close": "Close",
|
||
"minimize": "Minimize",
|
||
"openWindows": "Open windows",
|
||
"projectPage": "Project page",
|
||
"source": "Source",
|
||
"live": "See it live",
|
||
"stack": "Stack",
|
||
"year": "Year",
|
||
"now": {
|
||
"title": "now.txt · October 2026",
|
||
"days": "days until my master's thesis is due",
|
||
"study": {
|
||
"label": "Study",
|
||
"text": "Federated reinforcement learning for a logistics hub, due mid-February 2027"
|
||
},
|
||
"work": {
|
||
"label": "Work",
|
||
"text": "IT at a company in Osnabrück, from February 2027 full-time as Microsoft 365 administrator"
|
||
},
|
||
"side": {
|
||
"label": "On the side",
|
||
"text": "nightly, an app for thoughts between 2 and 5 a.m."
|
||
}
|
||
},
|
||
"server": {
|
||
"title": "servers · all green",
|
||
"headline": "Three machines, one VPN."
|
||
},
|
||
"read": {
|
||
"title": "reading · from Hardcover",
|
||
"progress": "read",
|
||
"empty": "No book on the nightstand right now.",
|
||
"library": "To the library"
|
||
},
|
||
"about": {
|
||
"title": "about me",
|
||
"p1": "I grew up in Lingen and now live in Osnabrück. It all started with a Raspberry Pi and the question whether I could store my photos myself. That turned into three servers.",
|
||
"p2": "When I'm not at the computer, I'm at Body Attack on Tuesdays, on the slopes in winter, or playing board games with friends.",
|
||
"facts": {
|
||
"laptop": {
|
||
"label": "Work machine",
|
||
"value": "MacBook Pro M4 Pro"
|
||
},
|
||
"pc": {
|
||
"label": "For games",
|
||
"value": "PC with RTX 3080"
|
||
},
|
||
"study": {
|
||
"label": "Study",
|
||
"value": "Master's in computer science"
|
||
},
|
||
"languages": {
|
||
"label": "Languages",
|
||
"value": "German, English"
|
||
}
|
||
}
|
||
},
|
||
"contact": {
|
||
"title": "contact",
|
||
"body": "For projects, questions about my setup or just because. I usually reply within a day or two.",
|
||
"copy": "Copy address",
|
||
"copied": "Copied",
|
||
"form": "To the form"
|
||
}
|
||
},
|
||
"about": {
|
||
"title": "Behind the Code",
|
||
"p1": "Ever since I set up my first home server, I've been hooked on infrastructure. Currently studying in Osnabrück, I split my time between developing modern web apps with Next.js and building mobile experiences with Flutter.",
|
||
"p2": "For me, it doesn't stop at the code. I genuinely enjoy managing my own Docker clusters, optimizing CI/CD pipelines, and making sure everything is stable and secure. DevOps isn't just a part of my job – it's how I think about building things.",
|
||
"p3": "When the servers are running smoothly, you'll find me jogging through the city, gaming, or tinkering with new automation workflows in n8n.",
|
||
"funFactTitle": "Hardcore Analog",
|
||
"funFactBody": "Despite my love for automation and the cloud, my most important ideas are still born on paper with a fountain pen. It's my way of staying grounded.",
|
||
"techStackTitle": "My Tech Stack",
|
||
"hobbiesTitle": "When I'm Not Coding",
|
||
"techStack": {
|
||
"categories": {
|
||
"frontendMobile": "Frontend & Mobile",
|
||
"backendDevops": "Backend & DevOps",
|
||
"toolsAutomation": "Tools & Automation",
|
||
"securityAdmin": "Security & Admin"
|
||
},
|
||
"items": {
|
||
"selfHostedServices": "Self-hosted services"
|
||
}
|
||
},
|
||
"hobbies": {
|
||
"selfHosting": "Self-Hosting & DevOps",
|
||
"gaming": "Gaming",
|
||
"gameServers": "Setting up game servers",
|
||
"jogging": "Jogging to clear my mind and stay active"
|
||
},
|
||
"currentlyReading": {
|
||
"title": "Currently Reading",
|
||
"progress": "Progress"
|
||
},
|
||
"readBooks": {
|
||
"title": "Read",
|
||
"finishedAt": "Finished",
|
||
"showMore": "{count} more",
|
||
"showLess": "Show less",
|
||
"readMore": "Read more",
|
||
"collapseReview": "Show less",
|
||
"empty": "Books finished in Hardcover will appear here automatically."
|
||
},
|
||
"activity": {
|
||
"idleStatus": "System Idle / Mind Active",
|
||
"codingNow": "Coding Now",
|
||
"gaming": "Gaming",
|
||
"listening": "Listening",
|
||
"inGame": "In Game"
|
||
}
|
||
},
|
||
"projects": {
|
||
"title": "Selected Work",
|
||
"subtitle": "Projects that pushed my boundaries.",
|
||
"featured": "Featured",
|
||
"viewAll": "View Archive",
|
||
"noProjects": "No projects yet."
|
||
},
|
||
"contact": {
|
||
"title": "Contact Me",
|
||
"subtitle": "Interested in working together or have questions about my projects? Feel free to reach out!",
|
||
"getInTouch": "Get In Touch",
|
||
"getInTouchBody": "I'm always available to discuss new opportunities, interesting projects, or simply chat about technology and innovation.",
|
||
"info": {
|
||
"email": "Email",
|
||
"location": "Location",
|
||
"locationValue": "Osnabrück, Germany"
|
||
},
|
||
"form": {
|
||
"title": "Send Message",
|
||
"sending": "Sending message…",
|
||
"send": "Send Message",
|
||
"labels": {
|
||
"name": "Name",
|
||
"email": "Email",
|
||
"subject": "Subject",
|
||
"message": "Message",
|
||
"requiredMarker": "*"
|
||
},
|
||
"placeholders": {
|
||
"name": "Your name",
|
||
"email": "your@email.com",
|
||
"subject": "What's this about?",
|
||
"message": "Tell me more about your project or question…"
|
||
},
|
||
"errors": {
|
||
"nameRequired": "Name is required",
|
||
"nameMin": "Name must be at least 2 characters",
|
||
"emailRequired": "Email is required",
|
||
"emailInvalid": "Please enter a valid email address",
|
||
"subjectRequired": "Subject is required",
|
||
"subjectMin": "Subject must be at least 3 characters",
|
||
"messageRequired": "Message is required",
|
||
"messageMin": "Message must be at least 10 characters"
|
||
},
|
||
"characters": "{count} characters"
|
||
}
|
||
}
|
||
},
|
||
"projects": {
|
||
"shared": {
|
||
"featured": "Featured"
|
||
},
|
||
"list": {
|
||
"title": "My Projects",
|
||
"intro": "Explore my portfolio of projects, from web applications to mobile apps. Each project showcases different skills and technologies.",
|
||
"searchPlaceholder": "Search projects...",
|
||
"all": "All",
|
||
"noResults": "No projects found matching your criteria.",
|
||
"clearFilters": "Clear filters"
|
||
},
|
||
"detail": {
|
||
"links": "Project Links",
|
||
"liveDemo": "Live Demo",
|
||
"liveNotAvailable": "Live demo not available",
|
||
"viewSource": "View Source",
|
||
"techStack": "Tech Stack"
|
||
}
|
||
},
|
||
"footer": {
|
||
"role": "Software Engineer",
|
||
"madeIn": "Made in Germany",
|
||
"legalNotice": "Legal notice",
|
||
"privacyPolicy": "Privacy policy",
|
||
"privacySettings": "Privacy settings",
|
||
"privacySettingsTitle": "Show privacy settings banner again",
|
||
"builtWith": "Built with",
|
||
"aiDisclaimer": "Some content on this site may be AI-assisted.",
|
||
"backToTop": "Back to top",
|
||
"systemsOnline": "Systems Online"
|
||
},
|
||
"notFound": {
|
||
"title": "Page not Found",
|
||
"description": "The content you are looking for has been moved, deleted, or never existed.",
|
||
"returnHome": "Return Home",
|
||
"goBack": "Go Back",
|
||
"exploreWork": "Explore Work",
|
||
"exploreWorkDesc": "Maybe what you need is in my project archive?",
|
||
"viewProjects": "View Projects",
|
||
"errorReport": "Error Report"
|
||
},
|
||
"books": {
|
||
"title": "Library",
|
||
"subtitle": "Books that shaped my mindset and expanded my horizons.",
|
||
"backHome": "Back Home",
|
||
"empty": "No books yet."
|
||
},
|
||
"about": {
|
||
"status": "Status",
|
||
"aiAssistant": "AI Assistant",
|
||
"library": "Library",
|
||
"viewAll": "View All",
|
||
"myGear": "My Gear",
|
||
"gearMain": "Main",
|
||
"gearPC": "PC",
|
||
"gearServer": "Server",
|
||
"gearOS": "OS",
|
||
"curiosity": "Curiosity beyond software engineering.",
|
||
"connect": "Connect",
|
||
"email": "Email",
|
||
"code": "Code",
|
||
"professional": "Professional"
|
||
}
|
||
}
|