9e6ae866d0
- AI chat moves into a window/sheet, opened from a new speech-bubble card on the desk; it now respects the chatbot consent and asks before sending anything to n8n (previously it ignored the consent) - Contact as red poster section with big mail address and the form on a paper card; validation errors are finally shown inline (aria-invalid, role=alert) - Footer as ink strip with dk0 wordmark, legal links and a button to reopen the privacy settings - "About me" in the header opens the about window on the home page - Remove the old About section and its parts (BentoChat, ActivityFeed, CurrentlyReading, ReadBooks), the unused ChatWidget, Projects and BentoGrid, their tests, wrappers, loaders, types and texts - scripts/directus-cleanup-redesign.mjs: dry run by default, --apply archives hobbies, tech stack categories and old content pages and deletes four unused message overrides after a full JSON backup; run only after the redesign is live on production Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
241 lines
8.3 KiB
JSON
241 lines
8.3 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.",
|
|
"chatCard": "Ask me something.",
|
|
"chatCardHint": "Open AI chat",
|
|
"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"
|
|
}
|
|
}
|
|
},
|
|
"chat": {
|
|
"title": "ask me · AI",
|
|
"welcome": "Hi! Ask me anything about Dennis, his projects or his setup.",
|
|
"consent": "The chat runs through an AI service in my n8n. Your messages are processed and briefly stored for that. Nothing is sent until you agree.",
|
|
"allow": "Allow chat",
|
|
"placeholder": "Your question …",
|
|
"send": "Send",
|
|
"error": "No connection right now. Try again in a moment.",
|
|
"thinking": "Writing a reply",
|
|
"note": "Answers come from an AI and can be wrong."
|
|
},
|
|
"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"
|
|
}
|
|
},
|
|
"contact": {
|
|
"title": "Write me.",
|
|
"subtitle": "For projects, questions about my setup or just because. I usually reply within a day or two.",
|
|
"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": "IT & self-hosting",
|
|
"madeIn": "self-hosted in Germany",
|
|
"legalNotice": "Legal notice",
|
|
"privacyPolicy": "Privacy policy",
|
|
"privacySettings": "Privacy settings",
|
|
"privacySettingsTitle": "Show privacy settings banner again",
|
|
"builtWith": "Built with Next.js and Directus, running on my own servers.",
|
|
"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."
|
|
}
|
|
}
|