GDPR compliance: self-host all assets, add Impressum + Datenschutz

- Self-host Tailwind, Plotly, D3.js (no more CDN requests)
- Self-host Inter font (no more Google Fonts requests)
- Replace JetBrains Mono with system monospace font stack
- Zero external requests when visiting the site (GDPR-safe)
- Add /impressum page (§5 TMG, §18 MStV)
- Add /datenschutz page (DSGVO Art. 13/14)
- Hosting: Hetzner, no cookies, no tracking, no analytics
- Add Impressum/Datenschutz links to sidebar footer
- Configure Flask static_folder for local asset serving

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-07 08:20:52 +01:00
parent 75c4da72e0
commit da2a989744
13 changed files with 345 additions and 8 deletions

View File

@@ -4,10 +4,9 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}IETF Draft Analyzer{% endblock %}</title>
<script src="https://cdn.tailwindcss.com"></script>
<script src="https://cdn.plot.ly/plotly-2.35.0.min.js"></script>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
<script src="/static/js/tailwind.js"></script>
<script src="/static/js/plotly.min.js"></script>
<link rel="stylesheet" href="/static/css/fonts.css">
<script>
tailwind.config = {
darkMode: 'class',
@@ -15,7 +14,7 @@
extend: {
fontFamily: {
sans: ['Inter', 'system-ui', 'sans-serif'],
mono: ['JetBrains Mono', 'monospace'],
mono: ['ui-monospace', 'SFMono-Regular', 'Menlo', 'Consolas', 'monospace'],
},
}
}
@@ -135,8 +134,12 @@
</a>
</div>
</nav>
<div class="p-4 border-t border-slate-800 text-xs text-slate-600">
IETF Draft Analyzer v0.3
<div class="p-4 border-t border-slate-800 text-xs text-slate-600 space-y-1">
<div>IETF Draft Analyzer v0.3</div>
<div class="flex gap-3">
<a href="/impressum" class="hover:text-slate-400 transition">Impressum</a>
<a href="/datenschutz" class="hover:text-slate-400 transition">Datenschutz</a>
</div>
</div>
</aside>