- datenschutz.astro: DSGVO privacy policy (server logfiles, Hetzner as Auftragsverarbeiter per Art. 28, cookieless Umami, self-hosted fonts, data-subject rights, supervisory-authority complaint). - consts.ts: extract shared LEGAL entity data; Impressum now reads from it. - blog: "Why my calendar app has no internet permission" and "Open standards as a constraint, not a checkbox". - uses.astro: colophon of the site stack, Floret apps, and self-hosted infra. - Footer: add Uses + Datenschutz links alongside Impressum. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
27 lines
668 B
Plaintext
27 lines
668 B
Plaintext
---
|
|
import { Icon } from 'astro-icon/components';
|
|
import { SITE, SOCIALS } from '../consts';
|
|
const year = new Date().getFullYear();
|
|
---
|
|
|
|
<footer class="site-footer">
|
|
<div class="site-footer__inner">
|
|
<p>
|
|
© {year} {SITE.author} · <a href="/uses">Uses</a> ·
|
|
<a href="/impressum">Impressum</a> · <a href="/datenschutz">Datenschutz</a>
|
|
</p>
|
|
{
|
|
SOCIALS.length > 0 && (
|
|
<nav aria-label="Social" class="socials">
|
|
{SOCIALS.map((s) => (
|
|
<a href={s.href} rel="me noopener">
|
|
<Icon name={s.icon} />
|
|
{s.label}
|
|
</a>
|
|
))}
|
|
</nav>
|
|
)
|
|
}
|
|
</div>
|
|
</footer>
|