Commit Graph

297 Commits

Author SHA1 Message Date
svemagie
b00ed0607d fix: footer
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 1m25s
2026-04-01 15:05:52 +02:00
svemagie
aec1047341 feat: This Website kills fascists
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 1m33s
2026-04-01 14:58:57 +02:00
svemagie
b21e361ab5 fix: refererrer 2026-04-01 10:51:31 +02:00
svemagie
d46731ca88 fix gitea fetch
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 1m45s
2026-03-31 21:50:41 +02:00
svemagie
a9368757de fix gitea fetching & cosmetics
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 1m40s
2026-03-31 21:33:26 +02:00
svemagie
fab646f7ab fix: github->gitea icon, no footer link 2026-03-31 19:01:26 +02:00
svemagie
4911219549 chore: replace GitHub icon with official Gitea SVG in sidebar widget
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 1m21s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 15:27:17 +02:00
svemagie
a6f87de59d chore: switch GitHub widget and changelog to Gitea
- Sidebar "GitHub" widget renamed to "Gitea", links point to gitea.giersig.eu/giersig.eu
- Runtime widget JS fetches commits/repos/PRs directly from Gitea API
- Build-time data files (githubActivity, githubRepos) switched from GitHub API to Gitea API
- changelog.njk fetches from Gitea API directly with client-side commit categorisation
- GITEA_URL / GITEA_ORG added to deploy.yml build env

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 12:46:01 +02:00
svemagie
be6d9a89ec fix: link dashboard 2026-03-29 08:51:37 +02:00
svemagie
bab485d085 feat: more umami 2026-03-25 21:25:58 +01:00
svemagie
0514786396 fix: umami proxy 2026-03-25 13:02:47 +01:00
svemagie
c77ba40835 fix: umami host 2026-03-25 12:11:03 +01:00
svemagie
89fbd222f2 feat: add Umami reader-source tracking tags
Classify visitors by referrer into segments (direct, search, fediverse,
bluesky, indieweb, web) via a custom umami.track('reader-source') event.
Add noscript pixels to RSS/JSON feeds so feed-reader activity appears
under virtual /rss/* paths in Umami.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 09:04:34 +01:00
svemagie
5e5c88c825 feat: umami tracking 2026-03-25 08:22:54 +01:00
svemagie
0bc2dc3e88 fix: replace eleventy-plugin-footnotes with markdown-it-footnote
Switch from KittyGiraudel's shortcode-based footnotes plugin to
markdown-it-footnote, which handles standard [^1] Markdown syntax
used in Obsidian notes. Remove the {% footnotes %} shortcode from
the post layout as the plugin renders footnotes automatically.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 19:32:40 +01:00
svemagie
5354b3349d feat: add eleventy-plugin-footnotes for accessible footnotes
Registers the KittyGiraudel footnotes plugin and adds {% footnotes %}
to post.njk below the article content.

Usage in content:
  {% footnoteref "id" "Footnote text here" %}anchor text{% endfootnoteref %}

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 19:08:03 +01:00
svemagie
85beed8ef3 feat: See Also includes in-text links to other blog posts
Adds seeAlsoLinks filter that extracts all internal blog.giersig.eu
links from the raw markdown source and merges them with the explicit
`related` frontmatter field, deduplicated. The section now surfaces
automatically whenever an article links to another post inline.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 18:45:58 +01:00
svemagie
7917e945e0 fix: move See Also and Linked From inside article, below AI disclaimer
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 18:18:03 +01:00
svemagie
2e416ab2e1 feat: See Also and Linked From sections on posts
- `backlinksWith` filter scans raw source files to find posts that
  link to the current post (backlinks), with per-build caching.
- `postByUrl` filter looks up a post by absolute URL for title display.
- post.njk: "See Also" renders resolved `related` URLs with titles;
  "Linked From" lists backlinks computed at build time.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 18:13:59 +01:00
svemagie
4cc002795f feat(been): cluster duplicate checkins with Leaflet.markercluster 2026-03-20 22:07:37 +01:00
svemagie
0755564ef6 feat: conditionally load Leaflet on pages with leafletMap: true 2026-03-20 21:51:54 +01:00
svemagie
9ff16cb032 fix(social-activity): include boosts in Mastodon feed
@svemagie@indieweb.social's activity is primarily boosts, so
exclude_reblogs=true left mastodonFeed empty and the Mastodon tab
hidden. Remove that filter and resolve content/author/url from
status.reblog when the post is a boost. Add a "boosted from" label
in the widget for context.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-20 08:19:09 +01:00
svemagie
aa666fa93b a11y: fix contrast failures on post-type labels and AI links (WCAG AA)
Bump sky-600→sky-700, green-600→green-800, amber-600→amber-800 in
light mode across recent-posts, featured-posts, and ai-usage components.
Dark-mode -400 variants remain unchanged (already 7–9:1 on #1d2021).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 20:55:42 +01:00
svemagie
3eaa702a14 style: bump post type label from text-sm to text-base
Gives the Note/Like/Reply/etc. label slightly more visual weight
than the font-mono text-sm metadata below it.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 17:12:41 +01:00
svemagie
c7d4a84a53 fix: left-align post meta (Planted/Tended/tags)
Add items-start to the flex-col post-meta wrapper so rows
align left instead of centering.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 15:35:39 +01:00
svemagie
40cc35ca39 style: switch accent from Gruvbox blue to Gruvbox yellow; fix Tended layout
- Replace accent palette (#076678 blue → #b57614 yellow light,
  #83a598 green → #fabd2f yellow dark) across config, critical CSS,
  pagefind overrides, and all hardcoded hex references
- Stack post meta rows (Planted / Tended) vertically via flex-col

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 15:28:43 +01:00
svemagie
1ed4cb4663 style: serve Lora locally, lighten bg, bump article font size
- Install @fontsource/lora and serve latin/latin-ext woff2 files
  (weights 400/700, normal + italic) via Eleventy passthrough copy
- Lora now leads the serif font stack in Tailwind and critical CSS,
  with Iowan Old Style / Palatino as system-font fallbacks
- Light-mode background lightened: #fbf1c7 → #fefcf0 (still warm,
  noticeably less yellow)
- Article prose bumped: post.njk prose-lg, page.njk prose-xl

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 14:59:03 +01:00
svemagie
66414d8cd6 style: adopt Gruvbox-inspired palette and serif typography
Inspired by brennan.day — warm cream backgrounds (#fbf1c7),
Iowan Old Style/Palatino serif font, Gruvbox blue accent (#076678),
and matching code syntax theme in both light and dark modes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 14:33:58 +01:00
svemagie
d9ac9bffc5 feat: add soft-delete filter and content-warning support
Filter posts with `deleted: true` from all collections so soft-deleted
posts no longer appear on the blog. Add content-warning support: on
listing pages, CW posts show a warning label instead of content; on
single post pages, content is wrapped in a collapsible <details>.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 00:59:19 +01:00
svemagie
2a2d4f68ac feat: filter self-Bluesky interactions from sidebar webmentions widget
Apply the same isSelfBsky() filter already used in post-interactions.njk
to the sidebar webmentions widget, hiding own Bluesky account entries
from both the conversations and webmentions merge loops.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 08:04:28 +01:00
svemagie
63b1c0bca6 fix(design): add whitespace 2026-03-17 07:54:44 +01:00
svemagie
ca8362d1ee fix(blog): move tags and garden badge inline with Planted date
Tended date now appears on its own line below, matching the desired
layout: Planted + tags + badge on line 1, Tended on line 2.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 07:48:27 +01:00
svemagie
52b453a5b5 feat(blog): add Planted/Tended date labels to post template
Show "Planted:" before publish date and "Tended:" with the updated date
when posts have an `updated` front matter field. Also updates JSON-LD
dateModified to use the updated date when available.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 07:37:17 +01:00
svemagie
46d99170d4 fix(webmentions): rename h2 to Interactions and apply text-lg font-semibold style
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 01:04:45 +01:00
svemagie
216073cf8f refactor(post): replace custom Interactions with Webmentions section, renamed to Interactions
Remove post-interactions.njk include and rename the Webmentions heading to "Interactions".

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 00:51:22 +01:00
svemagie
a166af2306 chore: sync upstream — performance, webmentions v2, OG v3
- _data: switch to cachedFetch wrapper (10s timeout + 4h watch cache)
- js/webmentions.js: owner reply threading, platform provenance badges, DOM dedup, Micropub reply support
- js/comments.js: owner detection, reply system, Alpine.store integration
- _includes/components/webmentions.njk: data-wm-* attrs, provenance badge slots, reply buttons
- _includes/components/comments.njk: owner-aware comment form, threaded replies
- widgets/toc.njk: Alpine.js tocScanner upgrade (replaces is-land/inline-JS)
- lib/og.js + og-cli.js: OG card v3 (light theme, avatar, batched spawn, DESIGN_VERSION=3)
- eleventy.config.js: hasOgImage cache, memoized date filters, batched OG/unfurl, post-build GC, YouTube check opt
- base.njk: Inter font preloads + toc-scanner.js script
- critical.css: font-face declarations (font-display:optional)
- tailwind.css: font-display swap→optional
- tailwind.config.js: prose link colors -700→-600
- Color design system: accent-700/300 → accent-600/400 across components

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-15 23:56:56 +01:00
svemagie
ba1dba4661 feat: integrate eleventy-plugin-mermaid for diagram support
Adds @kevingimbel/eleventy-plugin-mermaid so mermaid fenced code blocks
render as interactive diagrams in the browser.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-15 13:01:01 +01:00
svemagie
e8ba3b9ae6 feat: nested tags (Obsidian-style) for categories system
Adds hierarchical tag support using "/" separator (e.g. "tech/programming/js").
- New filters: nestedSlugify, categoryMatches, categoryBreadcrumb,
  categoryGroupByRoot, categoryDirectChildren
- categories collection auto-generates ancestor pages for nested tags
- categories.njk: breadcrumb nav, sub-tags section, ancestor-aware post matching
- categories-index.njk: grouped tree view (root + indented children)
- categories widget: shows root tags only with child count badge
- All category links updated from slugify → nestedSlugify (backward-compatible)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-15 10:56:34 +01:00
svemagie
04b6ed1217 feat: derive gardenStage from nested tags (garden/cultivate)
- eleventyComputed in content.11tydata.js resolves gardenStage from
  category/tags at build time — no explicit gardenStage frontmatter needed
- withoutGardenTags filter strips garden/* from category pill rendering
- categories collection excludes garden/* entries (no phantom category pages)
- All list templates and post layout use withoutGardenTags filter
2026-03-15 09:41:18 +01:00
svemagie
01a36d4163 feat: show garden badge in all post list views and overviews
- garden-badge.njk now resolves stage from post.data.gardenStage in
  list contexts (no set required), or gardenStage in post page context
- Badge added after categories in: blog, articles, notes, photos,
  bookmarks, likes, replies, reposts, recent-posts section
- Badge is clickable, links to /garden/#<stage>
2026-03-15 09:04:29 +01:00
svemagie
43101e622a feat: add /garden to nav, evergreen stage, remove /where from nav
- Add /garden as first item in Pages dropdown (desktop + mobile)
- Remove /where from nav dropdown
- Add evergreen (🌳) garden stage to filter, CSS badge, and garden page

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-15 08:51:01 +01:00
svemagie
f8bceb9e20 small visual fix 2026-03-14 20:55:05 +01:00
svemagie
558c125a49 footer: remove Eleventy from Powered by 2026-03-14 20:54:00 +01:00
svemagie
aca2e97be2 footer: add coffee icon after Eleventy in Powered by 2026-03-14 20:51:51 +01:00
svemagie
69a0442aa5 fix(widgets): use full Bluesky self-filter logic for sidebar webmentions (did:plc + bsky.app/profile) 2026-03-14 20:05:23 +01:00
svemagie
f08e267f25 fix(widgets): hide own Bluesky handle (svemagie.bsky.social) from sidebar webmentions 2026-03-14 19:52:21 +01:00
svemagie
31d2ec0e4e chore: opt out of fed.brid.gy (meta tag + nginx header instructions) 2026-03-14 19:45:26 +01:00
svemagie
48da3404ea feat: Garden dev 0.1 2026-03-14 16:53:31 +01:00
svemagie
3a8c24eb7f Merge branch 'main' of github.com:svemagie/blog 2026-03-14 16:16:32 +01:00
svemagie
7f4e8c93e2 fix(a11y): fix WCAG AA contrast and WCAG 2.5.3 failures from third report
- css/tailwind.css: upgrade nav/mobile-nav/theme-toggle text from
  surface-600 (fails 4.5:1) to surface-700 across .site-nav, .nav-dropdown-menu,
  .menu-toggle, .mobile-nav, .mobile-nav-toggle, .theme-toggle, .mobile-theme-toggle
- post.njk: fix AI disclosure details and 'Also on:' span to surface-700
- webmentions.njk: fix summary to surface-700; fix Send button from
  bg-accent-600 (3.18:1) to bg-accent-700 (4.95:1)
- h-card.njk: fix p-adr address and PGP key link to surface-700
- base.njk: fix mobile theme toggle aria-label per WCAG 2.5.3
- post-categories.njk: fix category pills text-accent-700 to text-accent-800
- post-navigation.njk: fix no-OG fallback Previous/Next labels to surface-700

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 16:13:06 +01:00