You Need a Webring

Hacker News Top Tools

Summary

A blog post explaining what a webring is and how to set one up using a Cloudflare Worker, with code examples and historical context.

No content available
Original Article
View Cached Full Text

Cached at: 07/05/26, 07:33 PM

# You need a webring! Source: [https://shub.club/writings/2026/july/you-need-a-webring](https://shub.club/writings/2026/july/you-need-a-webring) Posted onJuly 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](https://www.brisray.com/web/webring-history.htm)\. 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 (!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](https://github.com/4shub/ringdt)\. - Moar:[On America’s 250th, the continuing story\.](https://shub.club/writings/2026/july/america-a-continuing-story/)

Similar Articles

X402, a static blog monetization excercise

Hacker News Top

A developer implements a paywall for a static blog using the x402 payment middleware on Cloudflare Workers, exploring the potential of microtransaction-based monetization to replace ad revenue.

Workers Cache

Hacker News Top

Cloudflare launches Workers Cache, a tiered cache that sits in front of Workers, allowing cached responses to be served without invoking the Worker, reducing CPU time and improving performance.

@dulipeng: https://x.com/dulipeng/status/2067450611529093311

X AI KOLs Timeline

This article is a practical tutorial that details how to use the Cloudflare Workers/Pages free tier to deploy a low-cost VPN, based on the open-source project edgetunnel, and used with clients like Clash and Shadowrocket.