Skip to content
HN On Hacker News ↗

You need a webring!

▲ 82 points 58 comments by forthwall 14h ago HN discussion ↗

Pangram verdict · v3.3

We believe that this document is fully human-written

0 %

AI likelihood · overall

Human
100% human-written 0% AI-generated
SEGMENTS · HUMAN 2 of 2
SEGMENTS · AI 0 of 2
WORD COUNT 407
PEAK AI % 0% · §1
Analyzed
Jul 5
backend: pangram/v3.3
Segments scanned
2 windows
avg 204 words each
Distribution
100 / 0%
human / AI fraction
Verdict
Human
Pangram v3.3

Article text · 407 words · 2 segments analyzed

Human AI-generated
§1 Human · 0%

Posted on July 5, 2026 • 0 views

You need a webring! Yes, you! If you have (1) a personal website and (2) n+0 friends, you should set up a webring. What is a webring? Well its just a circular linked list of websites that have some topic assiged to it. It could be a hobby, a passion, or just your friends! The lore behind webrings is pretty deep, I would read more about it here linky. But to be honest, all you need to know is it's just fun. How does one set up a webring? The easy but tedious way: Just manually tell your group to link each other your websites so it loops. Site A would link to Site B, B to C and C back to A. The more complexish way Set up a web server that stores a json file of all your friends websites, then just have a /prev and /next route that will auto navigate. import ring from './ring.json';

const {members} = ring;

export default { /** * This is the standard fetch handler for a Cloudflare Worker * * @param request - The request submitted to the Worker from the client * @param env - The interface to reference bindings declared in wrangler.jsonc * @param ctx - The execution context of the Worker * @returns The response to be sent back to the client */ async fetch(request, env, ctx): Promise<Response> { const pathname = new URL(request.url).pathname; // get referrer

const referrer = new URL(request.url).searchParams.get('from') || request.headers.get('referer') || request.headers.get('referrer') || ''; const currentMember = members.find(member => member.url === referrer);

if (!

§2 Human · 0%

currentMember) { return new Response('Member not found', {status: 404}); }

switch (pathname) { case '/': return new Response('Zadu'); case '/next': const nextMember = members[(members.indexOf(currentMember) + 1) % members.length];

// redirect to the next member's URL return Response.redirect(nextMember.url, 302); case '/prev': const prevMember = members[(members.indexOf(currentMember) - 1 + members.length) % members.length];

// redirect to the previous member's URL return Response.redirect(prevMember.url, 302); case '/random': const randomMember = members[Math.floor(Math.random() * members.length)];

// redirect to a random member's URL return Response.redirect(randomMember.url, 302); default: // If the pathname does not match any known routes, return a 404 response return new Response('Not Found', {status: 404}); } }, } satisfies ExportedHandler<Env>; I personally used a cloudflare worker for this, since that is free and I don't expect heavy usage from it. You can see the full soure code here.

Moar: On America’s 250th, the continuing story.