# Todo - [x] Prüfen, wo `links` noch `data.date` statt `data.publishDate` verwendet - [x] Link-Seiten, RSS und Archiv auf `publishDate` umstellen - [x] Verifikation laufen lassen und Ergebnis dokumentieren ## Current Task - [x] `src/pages/imprint.md` auf aktuelle Rechtsbezüge und schlanke englische Fassung umstellen - [x] redundante Datenschutzpassage aus dem Impressum entfernen und auf die separate Datenschutzseite verweisen - [x] Ergebnis per Diff prüfen und in diesem Dokument kurz reviewen - [ ] Obfuskierte Kontaktdaten in `src/pages/privacy-policy.md` konsistent halten - [ ] Privacy-Link im Impressum auf den neuen Slug `/privacy-policy` korrigieren - [ ] Änderung per Diff und Astro-Check verifizieren - [x] Obfuskierte Kontaktdaten in `src/pages/privacy-policy.md` konsistent halten - [x] Privacy-Link im Impressum auf den neuen Slug `/privacy-policy` korrigieren - [x] Änderung per Diff und Astro-Check verifizieren ## Review - `src/pages/links/index.astro`, `src/pages/links/[...slug].astro`, `src/pages/rss.xml.ts`, `src/pages/rss/links.xml.ts`, `src/pages/tags/[slug].astro` und `src/pages/archives/index.astro` lesen `links` jetzt konsistent über `data.publishDate`. - `rg` findet keine verbleibenden `links`-Zugriffe mehr über `data.date`. - `pnpm astro check` läuft auf dem aktuellen Stand komplett sauber durch: 0 Errors, 0 Warnings, 0 Hints. - `src/pages/imprint.md` verweist jetzt korrekt auf `Section 5 DDG` statt auf das alte `TMG`, enthält obfuskierte direkte Kontaktangaben und hält den `MStV`-Block separat. - Die redundante Datenschutzpassage wurde aus dem Impressum entfernt; stattdessen verweist die Seite knapp auf `src/pages/privacy-policy.md`. - Der Diff für `src/pages/imprint.md` ist inhaltlich sauber und `pnpm astro check` läuft nach der Änderung weiter ohne Fehler. - `src/pages/privacy-policy.md` nutzt für die E-Mail jetzt dieselbe Obfuskationslogik mit `data-obf` und `data-obf-href` wie die übrigen Kontaktstellen. - `src/pages/imprint.md` verweist auf den tatsächlichen Privacy-Slug `/privacy-policy`, sodass der Link zur umbenannten Datei wieder stimmt. ## Current Task (2026-03-24) - [x] Intro-Text in `src/pages/index.astro` und Copy in `src/pages/about.astro` auf Konsistenz prüfen - [x] Grammatik, Rechtschreibung und Formulierungen in idiomatischem Englisch glätten - [x] Änderungen per Diff prüfen und Review hier dokumentieren ## Review (2026-03-24) - `src/pages/index.astro` klingt jetzt weniger generisch und passt sprachlich besser zur persönlicheren Stimme der About-Seite. - `src/pages/about.astro` nutzt jetzt idiomatischeres Englisch, glattere Satzrhythmen und konsistente Wortwahl rund um web, photography und curiosity. - Der Diff für beide Dateien ist inhaltlich eng begrenzt auf Copy-Änderungen. - `pnpm astro check` läuft nach den Anpassungen sauber durch: 0 Errors, 0 Warnings, 0 Hints. ## Current Task (2026-03-24, Article Tables) - [x] Tabellenlayout in `src/pages/articles/[...slug].astro` für Markdown-Content ergänzen - [x] Tabellen-Workaround im Artikelcontent auf semantisches Markdown zurückführen - [x] Diff und `pnpm astro check` prüfen und Review hier dokumentieren ## Review (2026-03-24, Article Tables) - `src/pages/articles/[...slug].astro` deklariert jetzt ein eigenes Tabellenlayout für Markdown in `.prose`, inklusive Abständen, Linien, Zell-Padding und kontrolliertem Umbruch. - Der vorherige `
`-Workaround in `src/content/articles/2026/03/23/obfuscating-contact-data-on-a-static-site.md` wurde wieder entfernt; der Artikel bleibt semantisch sauberes Markdown. - Der Diff ist eng begrenzt auf die fehlenden Tabellen-Styles und die Projektdokumentation. - `pnpm astro check` läuft nach der Änderung sauber durch: 0 Errors, 0 Warnings, 0 Hints. ## Current Task (2026-03-24, Syndication Links) - [x] Inkonsistenz der `syndication`-Links in `src/pages/articles/[...slug].astro` und `src/pages/notes/[...slug].astro` eingrenzen - [x] Notes-Seite auf konsistente `syndication`-Darstellung und korrekten Datentyp umstellen - [x] Diff und `pnpm astro check` prüfen und Review hier dokumentieren ## Review (2026-03-24, Syndication Links) - `src/components/SyndicationLinks.astro` bündelt Rendering, Plattformnamen und Chip-Styling der `syndication`-Links jetzt an einer Stelle, sodass Artikel und Notizen dieselbe Darstellung verwenden. - `src/pages/notes/[...slug].astro` normalisiert den optionalen einzelnen `syndication`-URL-Wert korrekt zu einem Array, statt einen String zu spreaden. - `src/pages/articles/[...slug].astro` verwendet dieselbe Komponente wie die Notes-Seite; der Diff bleibt dadurch eng begrenzt und reduziert künftige Drift zwischen beiden Templates. - `pnpm astro check` läuft nach der Änderung sauber durch: 0 Errors, 0 Warnings, 0 Hints. ## Current Task (2026-03-24, Mastodon Syndication) - [x] `scripts/mastodon-syndicate.mjs` für RSS-basiertes Autoposting von Artikeln und Notes mit State-Datei implementieren - [x] `scripts/publish-posts.sh` um Mastodon-Env, Script-Aufruf, State-Commit und Remote-Clean-Exclude erweitern - [x] Artikel- und Notes-Seiten um `.mastodon-posted.json` für automatische Syndication-Links ergänzen - [x] Änderungen per Diff, `node --check` und `pnpm astro check` verifizieren ## Review (2026-03-24, Mastodon Syndication) - `scripts/mastodon-syndicate.mjs` postet neue RSS-Einträge aus Articles und Notes nach Mastodon, baut den Status als Titel + Teaser + Link, lädt OG-Bilder als Media hoch und persistiert erfolgreiche Posts in `.mastodon-posted.json`. - `scripts/publish-posts.sh` behandelt `.mastodon-posted.json` jetzt wie `.bluesky-posted.json` (Clean-Exclude + Commit/Push bei Änderungen) und führt Mastodon-Syndication nur mit gesetzten `MASTODON_BASE_URL` und `MASTODON_ACCESS_TOKEN` aus. - `src/pages/articles/[...slug].astro` und `src/pages/notes/[...slug].astro` lesen zusätzlich `.mastodon-posted.json`, sodass Mastodon-Status-URLs in `SyndicationLinks` erscheinen. - `node --check scripts/mastodon-syndicate.mjs` und `pnpm astro check` laufen nach den Änderungen sauber durch. ## Current Task (2026-03-24, Mastodon Hardening) - [x] Media-Upload in `scripts/mastodon-syndicate.mjs` um Retry/Backoff bei HTTP 429 ergänzen - [x] Optionale `MASTODON_DRY_RUN`- und `MASTODON_LIMIT`-Steuerung im Script ergänzen - [x] Optionale Mastodon-Flags in `scripts/publish-posts.sh` durchreichen - [x] Änderungen mit `node --check`, `pnpm biome check` und `pnpm astro check` verifizieren ## Review (2026-03-24, Mastodon Hardening) - `scripts/mastodon-syndicate.mjs` retried Media-Uploads jetzt bis zu 5-mal bei 429 mit `Retry-After`-Support und exponentiellem Backoff als Fallback. - Das Script unterstützt jetzt `MASTODON_DRY_RUN` (simuliert Posts ohne Veröffentlichung) und `MASTODON_LIMIT` (begrenzt die Anzahl verarbeiteter Items). - `scripts/publish-posts.sh` liest und übergibt die optionalen Variablen `MASTODON_DRY_RUN` und `MASTODON_LIMIT` an das Mastodon-Script. - `node --check scripts/mastodon-syndicate.mjs`, `pnpm biome check scripts/mastodon-syndicate.mjs scripts/publish-posts.sh` und `pnpm astro check` laufen nach den Änderungen erfolgreich. ## Current Task (2026-03-24, Webmention Re-Validation) - [x] Serverseitige Webmention-Fetch/Filter-Lib für Bluesky-/Mastodon-Quellen ergänzen - [x] API-Endpoint `api/webmentions.json` für gefilterte Mentions bereitstellen - [x] `WebMentions.astro` auf gefilterte Datenquelle für SSR und Client-Refresh umstellen - [x] Änderungen mit `pnpm biome check` und `pnpm astro check` verifizieren ## Review (2026-03-24, Webmention Re-Validation) - `src/lib/webmentions.ts` filtert eingehende Mentions jetzt serverseitig und prüft Social-Reaktionen auf Interaktionsebene: - Mastodon `#favorited-by-...`/`#reblogged-by-...` wird über die jeweiligen Status-Listen (`favourited_by`/`reblogged_by`) validiert. - Bluesky `#liked_by_did:...`/`#reposted_by_did:...` wird über die Public-API (`getLikes`/`getRepostedBy`) validiert. - Fallback bleibt eine Existenzprüfung der Quell-URL (404/410/Tombstone), wenn keine Interaktionssignatur erkannt wird. - `src/pages/api/webmentions.json.ts` liefert gefilterte Mentions als JSON und wird nicht prerendered, damit die Prüfung live auf dem Server stattfindet. - `src/components/WebMentions.astro` nutzt die Filter-Lib für das initiale Rendering und ruft clientseitig statt `webmention.io` jetzt den lokalen Endpoint auf, damit beide Pfade konsistent sind. - `pnpm biome check src/lib/webmentions.ts src/pages/api/webmentions.json.ts src/components/WebMentions.astro` und `pnpm astro check` laufen nach der Änderung sauber durch. ## Current Task (2026-03-24, Mastodon Articles) - [x] Artikel zur Mastodon-Implementierung in `src/content/articles` erstellen - [x] Artikel zum Troubleshooting von Backfeed/Stale Webmentions in `src/content/articles` erstellen - [x] Frontmatter und Content-Struktur gegen bestehende Artikelkonventionen verifizieren ## Review (2026-03-24, Mastodon Articles) - Neuer Implementierungsartikel: `src/content/articles/2026/03/24/posse-to-mastodon-with-state-and-media.md` - Neuer Troubleshooting-Artikel: `src/content/articles/2026/03/24/troubleshooting-mastodon-backfeed-and-stale-webmentions.md` - Beide Artikel verwenden konsistentes Frontmatter (`title`, `description`, `publishDate`, `tags`) und orientieren sich in Struktur, Ton und technischer Tiefe an den bestehenden Engineering-Posts. ## Current Task (2026-03-24, Remove Bluesky) - [x] Bluesky-Syndication in `scripts/publish-posts.sh` und `scripts/bluesky-syndicate.mjs` vollständig entfernen - [x] Bluesky-State (`.bluesky-posted.json`) und Seiten-Imports in Artikel-/Notes-Templates entfernen - [x] Bluesky-Links in `src/components/Footer.astro`, `src/layouts/BaseLayout.astro` und Label-Mapping bereinigen - [x] Webmention-Filter in `src/lib/webmentions.ts` von Bluesky-Pfaden auf Mastodon-only zurückbauen - [x] Änderungen per Diff, `pnpm biome check` und `pnpm astro check` verifizieren und Review dokumentieren ## Review (2026-03-24, Remove Bluesky) - `scripts/publish-posts.sh` enthält keinen Bluesky-Block mehr und nutzt im Remote-Clean nur noch die Mastodon-State-Ausnahme; `scripts/bluesky-syndicate.mjs` wurde entfernt. - `.bluesky-posted.json` wurde entfernt und die Artikel-/Notes-Templates lesen nur noch `.mastodon-posted.json` für automatische Syndication-Links. - Bluesky-Profile/Verweise wurden aus `src/components/Footer.astro`, `src/layouts/BaseLayout.astro` und dem Host-Label-Mapping in `src/components/SyndicationLinks.astro` entfernt. - `src/lib/webmentions.ts` prüft Social-Interaktionen jetzt Mastodon-only; alle Bluesky-spezifischen Resolver/Checks sind entfernt. - Verifikation: `pnpm biome check scripts/publish-posts.sh src/components/Footer.astro src/components/SyndicationLinks.astro src/layouts/BaseLayout.astro src/lib/webmentions.ts src/pages/articles/[...slug].astro src/pages/notes/[...slug].astro` und `pnpm astro check` laufen erfolgreich (0 Errors, 0 Warnings, 0 Hints).