feat: add a blogroll #4

Merged
lytedev merged 6 commits from webring into master 2026-07-07 16:13:28 -05:00
Owner

Adds a blogroll: an index of sites I enjoy, at /blogroll/.

History note: this branch started as a self-hosted webring (prev/next 302 redirects, join snippet, random page) and was converted to a blogroll after realizing ring traversal wasn't the goal — the commit history tells that story; the final state is just the blogroll.

Final state

  • data/blogroll.yaml — a plain ordered list of URLs.
  • /blogroll/ — renders the list as plain links (hostnames as link text, not monospaced). Currently: benhaney.com, lobste.rs.
  • Footer — a "Blogroll" Meta button alongside the other footer links.
  • No redirects, no custom Hugo output formats, no webring machinery.

Stacked on #3 (→ #2#1).

Verified on the beta deploy: /blogroll/ renders in both themes, /webring/* returns 404, footer button present.

🤖 Generated with Claude Code

https://claude.ai/code/session_01TKabGxxNaNoocaxN8B4BFG

Adds a **blogroll**: an index of sites I enjoy, at [/blogroll/](https://lyte.dev/blogroll/). > History note: this branch started as a self-hosted webring (prev/next 302 redirects, join snippet, random page) and was converted to a blogroll after realizing ring traversal wasn't the goal — the commit history tells that story; the final state is just the blogroll. ## Final state - **`data/blogroll.yaml`** — a plain ordered list of URLs. - **`/blogroll/`** — renders the list as plain links (hostnames as link text, not monospaced). Currently: benhaney.com, lobste.rs. - **Footer** — a "Blogroll" Meta button alongside the other footer links. - No redirects, no custom Hugo output formats, no webring machinery. **Stacked on #3** (→ #2 → #1). Verified on the beta deploy: /blogroll/ renders in both themes, /webring/* returns 404, footer button present. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01TKabGxxNaNoocaxN8B4BFG
Replace the catppuccin latte/mocha palettes with ayu light/dark. Exact
values come from the ayu npm package (v8.0.1, the canonical published
palette): https://github.com/ayu-theme/ayu-colors

The catppuccin-named variables (--Rosewater..--Crust) are replaced by
ayu-named ones (--tag, --func, --entity, --string, --keyword, ...);
semantic variables (--bg, --fg, --link-fg, --syntax-*) now reference
those. Chroma token mapping: keywords -> ayu keyword (orange),
names/functions -> func (yellow), strings -> string (green),
literals -> constant (purple), tags -> tag (cyan), comments -> comment,
errors -> error. Links use entity blue (darkened in light mode for
contrast, mirroring the old darkened-sapphire approach); code-block
edges highlight with the ayu accent.

The only users of the old named vars (blockquote bg/border, inline code
fg) now use --panel-bg, --syntax-ledgbq, and --keyword.

Verified with headless Chromium: toggle/persistence still pass, plus
exact-color spot checks for link color and code-block background in
both schemes on a syntax-highlighted post.
The domain is no more; keep the bio text but drop the dead links.
Replaces 'help run a small Christian church' (index + config
description, which mirror each other) and 'a pastor for my small
church where I help run ...' (about) with simpler serving-the-local-
church phrasing.
Adds a self-hosted webring, fully static:

- data/webring.yaml is the ring: an ordered member list (slug, name,
  url) that wraps around
- /webring/<slug>/next and /webring/<slug>/prev are real 302s served
  by Netlify via a generated _redirects file (Hugo custom 'redirects'
  output format on home rendering layouts/index.redirects)
- /webring/ lists members and explains how to join (PR adding an entry
  to data/webring.yaml + embed the nav snippet)
- /webring/random/ picks a random member client-side with a noscript
  fallback list
- the site footer carries the ring navigation, making lyte.dev the
  first member
Per review: no prev/next links in the footer; the webring is a plain
button under Meta like the other links. Ring navigation lives on
/webring/ and via the member-site snippets.
Member listings show plain URLs instead of names (the yaml drops the
name field), and the ring gains two members.
data/webring.yaml is now just an ordered list of member URLs; the
navigation paths derive from each member's hostname
(/webring/<host>/next), so there's no separate slug to invent.
Per feedback: prev/next ring traversal isn't what this was for -- it's
an index of sites I enjoy, which is a blogroll. Drops the redirect
endpoints (and the custom Hugo redirects output), the random page, and
the join snippet; /blogroll/ renders data/blogroll.yaml as a plain
list of links (hostnames as link text, not monospaced). The footer
Meta button becomes Blogroll. lyte.dev itself is no longer listed --
a blogroll is other people's sites.
lytedev changed title from feat: host the lyte.dev webring to feat: add a blogroll 2026-07-07 15:07:16 -05:00
lytedev merged commit 38b6b845d3 into master 2026-07-07 16:13:28 -05:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
lytedev/site.lyte.dev!4
No description provided.