Commit Graph

63 Commits

Author SHA1 Message Date
svemagie
c839d8ac43 fix: use INDIEKIT_URL for blogroll/podroll/news status checks
Some checks failed
Build & Deploy / build-and-deploy (push) Has been cancelled
Pages nav links were always hidden because status data files fetched
from SITE_URL (public) instead of INDIEKIT_URL (internal IndieKit API).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 09:56:18 +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
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
97161ff53c fix: where deduplication 2026-03-25 16:40:06 +01:00
svemagie
d4a9b1565d fix: "home" locations not counted 2026-03-25 16:34:11 +01:00
svemagie
796318e161 feat(listening): cache Funkwhale cover images locally at build time
Wasabi S3 presigned URLs expire after 1 hour, causing broken images on
the listening page. Download cover art at build time, serve from
/images/funkwhale-cache/, and GC any images no longer referenced by
current listening/favorites data.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 07:01: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
5f1c56ce24 switch CV to static data, remove API/file fetching
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 22:58:51 +01:00
svemagie
ebbc33afba style: hearts for loved tracks 2026-03-17 08:56:14 +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
514a2a0291 update: cv with Luhmann & Berger / Luckmann as specializations 2026-03-15 15:52:06 +01:00
svemagie
087ec137a1 update cv 2026-03-13 14:50:13 +01:00
svemagie
24b7519f63 updated cv 2026-03-13 14:43:53 +01:00
svemagie
89d7441627 feat: changelog style category and badge 2026-03-11 09:00:00 +01:00
svemagie
ec9887a6d7 fix: social activity widget - Bluesky and Mastodon feeds not rendering
- deploy.yml: add missing BLUESKY_HANDLE env var to Build site step
- deploy.yml: fix GITHUB_USERNAME secret name (was GH_USERNAME)
- mastodonFeed.js: read MASTODON_URL first, fall back to MASTODON_INSTANCE
- mastodonFeed.js: add early-return guard when instance/user vars are empty
- mastodonFeed.js: also accept MASTODON_USERNAME as fallback for MASTODON_USER

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-10 01:31:19 +01:00
svemagie
a675908497 Fix Bluesky feed handle normalization for social activity widget 2026-03-09 22:46:06 +01:00
svemagie
0f5e8d1ec9 Add scheduled listening refresh and configurable fetch cache 2026-03-09 15:02:50 +01:00
svemagie
672f184f62 feat(where): align checkin parsing and simplify where layout 2026-03-08 16:16:42 +01:00
svemagie
c7a30102b7 refactor(where): read local checkins from content 2026-03-08 15:47:10 +01:00
svemagie
0e66579f36 feat(where): add OwnYourSwarm checkins page and metadata 2026-03-08 15:27:56 +01:00
svemagie
f65a4148e6 Revert "fix(site): normalize malformed SITE_SOCIAL input"
This reverts commit 435be45517.
2026-03-08 14:35:30 +01:00
svemagie
435be45517 fix(site): normalize malformed SITE_SOCIAL input 2026-03-08 14:34:04 +01:00
svemagie
5c8736833a cv ohne types 2026-03-08 09:03:59 +01:00
svemagie
610131c5c8 cv ohne type? 2026-03-08 08:56:44 +01:00
svemagie
c12ccd5360 Enrich CV static data from giersig.eu 2026-03-08 07:04:53 +01:00
svemagie
68d71efbf6 Populate static CV fallback content 2026-03-08 06:56:55 +01:00
svemagie
69da442fe0 Add repo-managed static CV data fallbacks 2026-03-08 06:49:12 +01:00
svemagie
dd400cbef5 Fetch CV data via API with file fallback 2026-03-08 06:46:07 +01:00
svemagie
b3525b6944 Fix Last.fm listening fetch parameters 2026-03-08 06:26:14 +01:00
svemagie
e54624f7c0 Harden listening data endpoints with route fallbacks 2026-03-08 06:19:11 +01:00
svemagie
722ff22328 Fix GitHub widget/data endpoints to prefer /github/api routes 2026-03-08 05:44:47 +01:00
svemagie
98a1898fd1 fix: normalize permalinks and page updated dates 2026-03-08 02:45:11 +01:00
Ricardo
9b5fe6014d feat: redesign starred page with GitHub Lists tabs, sort, and filters
- Add tab bar for GitHub Lists (All, per-list tabs, Uncategorized)
- Add sort controls (stars, recently starred, recently updated, name)
- Add filter controls (language, star count range, archived toggle)
- Add language color dots, formatted star/fork counts, topic overflow
- Fix starred count on GitHub activity page (fetch totalCount from API)
- All rendering remains client-side via Alpine.js (no build OOM risk)

Confab-Link: http://localhost:8080/sessions/b130e9e5-4723-435d-8d5a-fc38113381c9
2026-03-03 11:01:05 +01:00
Ricardo
a39b20375d fix: make starred page client-side rendered to avoid OOM
5,137 starred repos in Nunjucks template + Pagefind indexing exceeded
the 2048MB Eleventy heap limit during build. Switched to Alpine.js
client-side rendering:

- _data/githubStarred.js: returns only buildDate (no API fetch)
- starred.njk: fetches /githubapi/api/starred/all via Alpine.js
- Added client-side text search (replaces separate Pagefind index)
- Removed pagefind-starred build step and --exclude-selectors flag

Confab-Link: http://localhost:8080/sessions/b130e9e5-4723-435d-8d5a-fc38113381c9
2026-03-02 13:40:33 +01:00
Ricardo
9d29f24d93 feat: add /github/starred/ page with Pagefind search and live updates
- New starred.njk page rendering all ~5k starred repos as searchable cards
- Separate Pagefind index (pagefind-starred) for starred-only search
- Alpine.js live updates section for stars added since last build
- Load More pagination (50 at a time, all in DOM)
- githubStarred.js data file fetching from plugin API (1d cache)
- Link from /github/ to /github/starred/
- Exclude starred cards from main site Pagefind index

Confab-Link: http://localhost:8080/sessions/b130e9e5-4723-435d-8d5a-fc38113381c9
2026-03-02 13:15:12 +01:00
Ricardo
ab31e080bb feat: update interests templates for category-based data model
Interests are now grouped by category (matching skills pattern).
Updated cv-interests.njk to iterate categories, cv.js fallback to {},
and cv.njk hasCvData check to include interests.
2026-02-25 14:56:11 +01:00
Ricardo
42a5c67896 feat: add Markdown for Agents — serve clean Markdown to AI agents
Generate index.md alongside index.html for /articles/ at build time.
Agents can access clean Markdown via .md URL extension or Accept:
text/markdown content negotiation. Includes configurable content-signal
policy (ai-train, search, ai-input) and a master on/off toggle via
MARKDOWN_AGENTS_ENABLED env var.
2026-02-24 20:24:06 +01:00
Ricardo
7110ba3879 fix: compute ogSlug from permalink in template to avoid Eleventy 3.x race condition
Both page.url AND page.inputPath are unreliable in eleventyComputed due to
Eleventy 3.x parallel rendering (issue #3183). They return values from OTHER
pages being processed concurrently, causing og:image meta tags to reference
wrong OG images.

Fix: compute ogSlug directly in base.njk from the permalink data value using
existing Nunjucks filters (ogSlug, hasOgImage). permalink comes from frontmatter
(per-file data) and is immune to cross-page contamination.
2026-02-24 18:33:46 +01:00
Ricardo
a7e68ee941 fix: derive ogSlug from inputPath to fix Eleventy 3.x race condition
page.url in eleventyComputed returns URLs from other pages being
processed concurrently in Eleventy 3.x parallel rendering. This caused
OG images to show wrong post types and titles (e.g., a note showing
"Reply" badge from a completely different post).

Fix: use page.inputPath (physical file path) which is always correct,
matching the approach already used by the permalink computation.
2026-02-24 17:55:31 +01:00
Ricardo
910889cde8 fix: remove trailing slash from site.url to prevent double-slash URLs
site.url had a trailing slash (added for Mastodon rel=me verification),
which caused double slashes in all URL constructions like
{{ site.url }}/auth → https://rmendes.net//auth

This broke IndieAuth login — indielogin.com read the authorization_endpoint
link tag with //auth and redirected users there, which 404'd in nginx.

Split into site.url (no slash, for URL construction) and site.me /
site.author.url (with slash, for Mastodon rel=me strict matching).

Also fixed twitter:image meta tags to use smart slash logic matching
the og:image pattern (check if path starts with / before prepending one).
2026-02-24 16:18:52 +01:00
Ricardo
f5f77cb4a3 fix: normalize site URL with trailing slash for Mastodon rel=me verification
Mastodon's VerifyLinkService uses strict string comparison against
account.url (which includes trailing slash from the AP actor's url
field). The h-card self-link used SITE_URL without trailing slash,
causing the comparison to fail silently.
2026-02-24 13:56:29 +01:00
Ricardo
90ff9068a1 feat: use AP handle as primary fediverse identity
Rename getMastodonHandle() to getFediverseCreator() and prefer the
site's own ActivityPub handle (ACTIVITYPUB_HANDLE) over the external
Mastodon account for the fediverse:creator meta tag. The Mastodon
account is a syndication target, not the canonical identity.
2026-02-24 12:08:02 +01:00
Ricardo
c7f2841625 fix: auto-convert stale /content/ permalinks in data cascade
Posts published between Jan 19 – Feb 6 2026 (pre-beta.37 preset) had
permalink: /content/TYPE/YYYY-MM-DD-SLUG/ in frontmatter. The data
cascade trusted these values, causing Eleventy to generate pages at
/content/ paths instead of canonical URLs. This left 86 posts (including
articles like collecteur-de-flux-rss) returning 404 at their canonical
URLs.

The markdown files were fixed on the server (permalink lines removed),
but this adds a safety net: any remaining or future /content/ permalinks
are auto-converted to /TYPE/YYYY/MM/DD/SLUG/ format.
2026-02-23 12:31:44 +01:00
Ricardo
e1f4b2cd90 feat: eliminate URL dualism — computed permalinks, conversations support
- Add computed permalink in data cascade for existing posts without
  frontmatter permalink (converts file path to Indiekit URL)
- Fix ogSlug filter and computed data for new 5-segment URL structure
- Add conversations API as build-time data source
- Merge conversations + webmentions in webmentionsForUrl filter with
  deduplication and legacy /content/ URL alias computation
- Sidebar widget fetches from both webmention-io and conversations APIs
- Update webmention-debug page with conversationMentions parameter
2026-02-23 09:38:30 +01:00
Ricardo
c70b51b499 feat: add ActivityPub actor rel="me" link for Mastodon verification
Add ACTIVITYPUB_HANDLE env var support to site.js social links.
Add activitypub globe icon to h-card sidebar widget.
2026-02-22 12:14:06 +01:00
rmdes
fa7bfb26ea feat: add comment system components and recent comments widget
- Comment area on post pages (IndieAuth sign-in, submit, display)
- Alpine.js client-side component for auth flow and comment CRUD
- Recent comments sidebar widget with build-time data fetching
- Include comments.js in base layout, comments.njk before webmentions

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 21:56:15 +01:00
Ricardo
66e55af7ee feat: add configurable CV page layout with builder support
CV page now reads layout config from cv-page.json when available,
supporting single-column, two-column, and full-width hero layouts with
configurable sections, sidebar widgets, and footer columns. Falls back
to the previous hardcoded layout when no config exists.
2026-02-20 15:17:32 +01:00
Ricardo
3bf0e78f74 feat: add filtered section templates for work/personal type distinction
Add thin-wrapper templates for work/personal filtering of CV sections:
- 8 new templates: cv-{experience,education,skills,interests}-{personal,work}.njk
- cv-languages.njk: standalone languages section (split from education)
- homepage-section.njk: 9 new routes for filtered variants
- cv.njk: uses work-only variants for the /cv/ page
- Base templates: filterType support in experience, education, skills, interests
- _data/cv.js: skillTypes and interestTypes fallback fields
2026-02-20 13:11:37 +01:00
Ricardo
2ebe63ffff fix: use eleventyComputed for OG slug to avoid Nunjucks race condition
Eleventy 3.x renders Nunjucks templates in parallel, causing page.url
to return wrong values in {% set %} tags. This caused OG images to be
mismatched between pages (e.g., bookmark showed note's OG image).

Move ogSlug and hasOgImage computation to eleventyComputed, which runs
during the sequential data cascade phase before parallel rendering.
The computed values are then available as plain template variables.

Refs: https://github.com/11ty/eleventy/issues/3183
2026-02-18 17:17:30 +01:00
rmdes
afc394525b feat: add textcasting support, feed attachments, and protocol badges
- Add _textcasting extension to JSON feed with support/monetization config
- Add feedAttachments filter for photo/audio/video media in feed items
- Add content_text and date_modified fields to feed items
- Add protocol badges (ATmosphere, Fediverse, Web) on reply posts
- Add support configuration via environment variables in site data

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 08:42:59 +01:00