Skip to content

feat(content): link related posts and projects - #477

Merged
TheMeinerLP merged 2 commits into
mainfrom
feat/content-internal-links
Oct 10, 2026
Merged

TheMeinerLP merged 2 commits into
mainfrom
feat/content-internal-links

Conversation

@TheMeinerLP

Copy link
Copy Markdown
Collaborator

Summary

Adds internal links where the text already names the same thing, and a content test that every internal markdown link in content/ resolves to an existing page of its own locale.

Links are added only where the text supports them. No invented relationships.

Links added

Source page Target page Anchor text
content/blog/de/dev-blog-1.md /de/blog/resilienz-im-detail-priorityclasses-pdb-affinitaeten Kubernetes
content/blog/en/dev-blog-1.md /en/blog/resilience-in-detail-priorityclasses-pdb-affinities Kubernetes
content/blog/de/wenn-ein-server-ausfaellt-cluster-resilienz.md /de/bluemap BlueMap
content/blog/en/when-a-server-fails-cluster-resilience.md /en/bluemap BlueMap
content/blog/de/resilienz-im-detail-priorityclasses-pdb-affinitaeten.md /de/bluemap BlueMap
content/blog/de/resilienz-im-detail-priorityclasses-pdb-affinitaeten.md /de/blog/otis-zentrale-spielerstammdaten-minecraft Otis
content/blog/en/resilience-in-detail-priorityclasses-pdb-affinities.md /en/bluemap BlueMap
content/blog/en/resilience-in-detail-priorityclasses-pdb-affinities.md /en/blog/otis-central-player-data-minecraft Otis
content/blog/de/plugins-open-for-adoption.md /de/projects/anti-redstoneclock-remastered AntiRedstoneClock-Remastered (section heading)

The cluster-resilience pair already linked each other in both languages; that is unchanged. Every new link uses the absolute https://onelitefeather.net/... form that the existing cluster links use. The German and English prose is unchanged; only the link markup was added.

The DE/EN targets match: each German page links to its German counterpart and each English page to its English one.

Considered and not linked

  • Projects: no blog post is about Falco. Anti-RedstoneClock Remastered is only named in the 2025 adoption post, which is linked above. No internal link from the project pages.
  • Otis project page: not linked; it is not on main.
  • Otis posts: mention Minestom only as a platform Otis may run on in future. Linking that word to Falco would imply a relationship the text does not state.
  • Logging post (Paper plugins, Grafana Loki): no text ties its technique to any project.
  • Proxmox/Ansible post: no overlap with the cluster or BlueMap text.

POI projects result

No evidence. None of the POI bodies (DE or EN) mention Falco, Minestom, Anti-RedstoneClock, or any plugin or library build. projects: frontmatter is unchanged for every POI, so "Projekte in Verwendung" stays empty for now. This is the intended result of the evidence rule, not a gap in the test.

Test

New spec: tests/content/internal-links.spec.ts (12 tests).

  • Unit tests cover locale prefixes, cross-locale links, the absolute onelitefeather.net form, images, external links, query and fragment, the body-only rule, and missing pages.
  • The repository test reads the static routes from pages/ and the dynamic slugs from each collection. A new dynamic route fails until it has a slug source.
  • On main all existing internal links already resolved, so the spec was green before the link edits.
  • A deliberately broken probe link made the repository test fail, and the file was then restored.

Commits:

  • test(content): check that internal links resolve
  • feat(content): link related posts, projects and pois

Checks run on this branch:

  • pnpm test: 165 files, 1303 tests passed.
  • pnpm quality: no regression. ESLint errors 186 (baseline 186), ESLint warnings 17, TypeScript errors 3. The baseline was not changed.

Notes

  • The brief said 18 blog posts. main has 15 blog files (8 DE, 7 EN). Before this change, 11 of 15 had zero internal body links.
  • The title says "pois", but no POI links were added (see above). If you want the title to match the diff, rename it to feat(content): link related posts and projects before squash-merging.

https://claude.ai/code/session_019zws4ceJu2jctk3XT48fMX

Every internal markdown link in content/ must point to a page that exists
for the link's own locale. Static routes are read from pages/, dynamic
segments from the slugs the app queries.

Claude-Session: https://claude.ai/code/session_019zws4ceJu2jctk3XT48fMX
Link where the text already names the same thing: BlueMap and Otis in the
cluster-resilience posts (DE and EN), Kubernetes in the dev blog pointing
to the resilience deep dive, and the AntiRedstoneClock-Remastered section
of the adoption post to its project page. No POI links or projects
frontmatter were added: no POI text names a plugin or library or another
content page.

Claude-Session: https://claude.ai/code/session_019zws4ceJu2jctk3XT48fMX
@TheMeinerLP TheMeinerLP changed the title feat(content): link related posts, projects and pois feat(content): link related posts and projects Oct 10, 2026
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Oct 10, 2026 •

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
launchpad 278922f Commit Preview URL

Branch Preview URL
Oct 10 2026, 10:22 PM

@TheMeinerLP
TheMeinerLP merged commit 3fd6d5f into main Oct 10, 2026
8 checks passed
@TheMeinerLP
TheMeinerLP deleted the feat/content-internal-links branch October 10, 2026 22:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant