diff --git a/webring/db/members.rec b/webring/db/members.rec
new file mode 100644
index 0000000..3210b51
--- /dev/null
+++ b/webring/db/members.rec
@@ -0,0 +1,20 @@
+%rec: member
+%doc: a member of the webring
+%key: id
+%unique: id name url feed
+%auto: id created
+%type: id int
+%type: created date
+%type: title,url,feed line
+%typedef: Name_t regexp /[a-z]{3,13}/
+%type: name Name_t
+%allowed: id created title name url feed
+%mandatory: id title name url
+%sort: id
+
+id: 0
+created: Mon, 30 Oct 2023 13:38:40 -0600
+name: dozens
+title: dozens
+url: https://tilde.town/~dozens
+feed:
diff --git a/webring/index.html b/webring/index.html
new file mode 100644
index 0000000..3f39567
--- /dev/null
+++ b/webring/index.html
@@ -0,0 +1,107 @@
+
+
+
+
+
+ webring
+
+
+
+
+ the benevolent tildepals basement heroes 43beans commonheath of casakhstan webring
+
+
+
+
+
+ snippet
+
+ code snippet to add to member site
+
+ all you have to do
+ (after you've been added to the db)
+ is add a few anchor tags to your site.
+ you can do something like this,
+ replacing "yoursitename"
+ with the value of "name"
+ you provide in members.rec
+
+
+<div>
+<p>this site is a member of a very powerful webring!</p>
+<p>
+ < <a href="https://friends.m455.casa/webring/index.html?name=yoursitename&dir=prev">previous</a> |
+ <a href="https://friends.m455.casa/webring/index.html">all</a> |
+ <a href="https://friends.m455.casa/webring/index.html?name=yoursitename&dir=next">next</a> >
+</p>
+</div>
+
+
+ that would end up looking something like this:
+
+
+
+
+
this site is a member of a very powerful webring!
+
+ < previous |
+ all |
+ next >
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/webring/justfile b/webring/justfile
new file mode 100644
index 0000000..0a3c3be
--- /dev/null
+++ b/webring/justfile
@@ -0,0 +1,38 @@
+# list all recipes
+default:
+ just --list --unsorted
+
+# add a new webring member
+new:
+ #!/usr/bin/env sh
+ read -p "name (lowercase, 3-13 characters): " name
+ read -p "title: " title
+ read -p "url: " url
+ read -p "feed: " feed
+ recins --verbose -t member \
+ -f "name" -v "$name" \
+ -f "title" -v "$title" \
+ -f "url" -v "$url" \
+ -f "feed" -v "$feed" \
+ db/members.rec
+alias add := new
+
+# build html
+html:
+ recsel db/members.rec \
+ | rec2csv \
+ | csvjson \
+ | jq '. | {data: .}' \
+ | mustache - src/example.html index.html
+
+# build opml
+opml:
+ recsel db/members.rec \
+ | rec2csv \
+ | csvjson \
+ | jq '. | {data: .}' \
+ | jq '{ data: [ .data[] | select(.feed != null) ] }' \
+ | mustache - src/example.opml webring.opml
+
+# compile html and opml
+build: html opml
diff --git a/webring/src/example.html b/webring/src/example.html
new file mode 100644
index 0000000..0bbaa4c
--- /dev/null
+++ b/webring/src/example.html
@@ -0,0 +1,111 @@
+
+
+
+
+
+ webring
+
+
+
+
+ the benevolent tildepals basement heroes 43beans commonheath of casakhstan webring
+
+
+
+
+
+ snippet
+
+ code snippet to add to member site
+
+ all you have to do
+ (after you've been added to the db)
+ is add a few anchor tags to your site.
+ you can do something like this,
+ replacing "yoursitename"
+ with the value of "name"
+ you provide in members.rec
+
+
+<div>
+<p>this site is a member of a very powerful webring!</p>
+<p>
+ < <a href="https://friends.m455.casa/webring/index.html?name=yoursitename&dir=prev">previous</a> |
+ <a href="https://friends.m455.casa/webring/index.html">all</a> |
+ <a href="https://friends.m455.casa/webring/index.html?name=yoursitename&dir=next">next</a> >
+</p>
+</div>
+
+
+ that would end up looking something like this:
+
+
+
+
+
this site is a member of a very powerful webring!
+
+ < previous |
+ all |
+ next >
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/webring/src/example.opml b/webring/src/example.opml
new file mode 100644
index 0000000..24b0917
--- /dev/null
+++ b/webring/src/example.opml
@@ -0,0 +1,16 @@
+
+
+
+ tildepals webring
+ tildepals webring
+ dozens
+ dozens@tilde.team
+
+
+
+ {{#data}}
+
+ {{/data}}
+
+
+
diff --git a/webring/webring.opml b/webring/webring.opml
new file mode 100644
index 0000000..17b6a2c
--- /dev/null
+++ b/webring/webring.opml
@@ -0,0 +1,13 @@
+
+
+
+ webring
+ webring
+ dozens
+ dozens@tilde.team
+
+
+
+
+
+