feat(app): add prerender, self-hosted fonts and privacy page

Fonts come from npm, not Google, so no third-party font requests.
Pages are prerendered at build time; browser-only code is guarded.
nginx serves per-route HTML, a real 404 and gzip.
This commit is contained in:
lobo committed 2026-10-20 15:43:31 +02:00
1 parent 57f861510e
commit 54b93055ba
42 files changed
+544 -88

No files matched your search

+38 -1
View File
@@ -33,7 +33,6 @@
"ROLE": "Senior Software Developer / Full-Stack Developer / Software Architect",
"LOCATION": "Munich · Remote",
"VIEW_PROJECTS": "View projects",
"CONTACT_ME": "Contact me",
"SECTION": {
"SKILLS": "Skills & Stack",
"LANGUAGES": "Languages & Frameworks",
@@ -416,6 +415,40 @@
"COUNTRY": "Germany",
"CONTACT": "Contact"
},
"PRIVACY": {
"TITLE": "Privacy policy",
"CONTROLLER": "Controller",
"SECTIONS": {
"HOSTING": {
"TITLE": "Hosting and server logs",
"TEXT": "This site is hosted by Hostinger [TODO: legal entity, address and log retention period to be confirmed; data processing agreement (Art. 28 GDPR) to be confirmed]. The web server writes server logs: IP address, time, requested URL and user agent. Purpose: operation and security of the site. Legal basis: Art. 6 (1) (f) GDPR. The logs are deleted after a short time [TODO: exact period]."
},
"STORAGE": {
"TITLE": "Local storage",
"TEXT": "The site stores only your language and theme (light or dark) in the local storage of your browser. There are no cookies, no tracking and no analytics tools."
},
"SERVICE_WORKER": {
"TITLE": "Service worker",
"TEXT": "A service worker keeps files of this site in the browser cache, so the site loads faster and works offline. No data is sent to third parties."
},
"FONTS": {
"TITLE": "Fonts",
"TEXT": "Fonts (Roboto, Material Icons) are loaded from this server. There is no connection to Google."
},
"EXTERNAL_LINKS": {
"TITLE": "External links",
"TEXT": "Links to Gitea, LinkedIn and Codeberg are only opened when you click them. From then on the privacy policy of the respective provider applies."
},
"RIGHTS": {
"TITLE": "Your rights",
"TEXT": "You have the right to access, rectification, erasure, restriction of processing, data portability and objection (Art. 15 to 21 GDPR). Contact: the e-mail address above."
},
"AUTHORITY": {
"TITLE": "Right to lodge a complaint",
"TEXT": "You can complain to a supervisory authority. Responsible: Bayerisches Landesamt für Datenschutzaufsicht (BayLDA), Promenade 18, 91522 Ansbach."
}
}
},
"PATHFINDING": {
"TITLE": "Pathfinding Algorithms",
"START_NODE": "Start Node",
@@ -738,6 +771,10 @@
"TITLE": "Imprint – Andreas Dahm",
"DESCRIPTION": "Legal information and contact details for the Andreas Dahm Playground website."
},
"PRIVACY": {
"TITLE": "Privacy policy – Andreas Dahm",
"DESCRIPTION": "Privacy policy for the Andreas Dahm Playground website."
},
"STOPWATCH": {
"TITLE": "Stopwatch – Andreas Dahm",
"DESCRIPTION": "A simple online stopwatch with configurable interval beeps."