page webring

in autumn 2025, as the leaves fell and the air turned crisp, teens in Hack Club spent 2 months designing and making their own personal website, as part of the personal site ysws event. these sites gave an outlet for them to showcase themselves, their hobbies and their interests to the world.

this webring is a collection of those personal websites, so people (like you!!) can go explore, find new friends, and get inspiration for making your own personal site.

enter the webring →

join

made a personal website? part of hack club? dm @gideon to get added!

you should include:

don’t have a button yet? make one! you can use a design tool like Figma, a pixel art editor like Aseprite, or generate one online, for example here or here. make sure it’s an image 88px wide and 31px tall, and remember to be creative!


include

next you want to include the webring on your personal website! it’s super easy, just add this script tag to the very end of your website’s body:

<script src="https://pagering.gideon.sh/embed.js"></script>

then, wherever you want the webring link to appear in your page, add:

<pagering-link></pagering-link>
screenshot of the webring link, light background

there are also some extra options you can configure:

<pagering-link theme="dark"></pagering-link>
screenshot of the webring link, dark background

api

don’t worry be api 🙂

GET /to/*: navigate to these pages to redirect to members of the webring

# GET /to/random     → to a random member
GET /to/random
# GET /to/[id]       → to a specific member
GET /to/acon
# GET /to/[id]/next  → to the next member
GET /to/acon/next
# GET /to/[id]/prev  → to the previous member
GET /to/acon/prev

302 Found

GET /api/v1/members: get all members of the webring

GET /api/v1/members

200 OK
[
  {
    "id": "acon",
    "name": "acon",
    "url": "https://aconlin.com",
    "buttonUrl": "/buttons/acon.gif"
  },
  ...
]

GET /api/v1/members/[id]: get a specific member by id, and the previous and next members

GET /api/v1/members/acon

200 OK
{
  "current": {
    "id": "acon",
    "name": "acon",
    "url": "https://aconlin.com",
    "buttonUrl": "/buttons/acon.gif"
  },
  "prev": { ... },
  "next": { ... }
}

GET /api/v1/embed: get all members, and the current, previous, and next members for the current site.

If you’re calling this from a server, set your ‘Origin’ header to your site’s URL (including http:// or https://)

GET /api/v1/embed
# provided by your browser :)
Origin: https://aconlin.com

200 OK
{
  "current": {
    "id": "acon",
    "name": "acon",
    "url": "https://aconlin.com",
    "buttonUrl": "/buttons/acon.gif"
  },
  "prev": { ... },
  "next": { ... },
  "members": [ ... ]
}

made with 🩶 and 💻 in hack club by heygideon. personal website ysws by acon.