Files
portfolio/messages/en.json
T
denshooter 6c2da49bfa feat: plakat redesign phase 4 (chat window, contact, footer, cleanup)
- 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>
2026-10-15 23:49:43 +02:00

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."
}
}