From f54ed0f4a6f0fdadd9b33eb4cd0b74601e13bc4c Mon Sep 17 00:00:00 2001 From: CJSatnarine Date: Mon, 16 Mar 2026 11:40:50 -0400 Subject: [PATCH] initial commit --- .gitignore | 1 + README.md | 1 + data/assets/style.css | 136 +++++++++++++++++++++++++++++++++++ data/templates/grid.html | 24 +++++++ data/templates/index.html | 61 ++++++++++++++++ data/templates/random.html | 29 ++++++++ data/templates/redirect.html | 18 +++++ ringfairy.toml | 23 ++++++ websites.json | 9 +++ 9 files changed, 302 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 data/assets/style.css create mode 100644 data/templates/grid.html create mode 100644 data/templates/index.html create mode 100644 data/templates/random.html create mode 100644 data/templates/redirect.html create mode 100644 ringfairy.toml create mode 100644 websites.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..32b1f34 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +3dworldring.cjsatnarine.space diff --git a/README.md b/README.md new file mode 100644 index 0000000..80999bd --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +Webring for 3D worlds. diff --git a/data/assets/style.css b/data/assets/style.css new file mode 100644 index 0000000..4ff8fec --- /dev/null +++ b/data/assets/style.css @@ -0,0 +1,136 @@ +body { + font-family: sans-serif; + line-height: 1.6; + background-color: #111; + color: #fff; + max-width: 80%; + margin: auto; +} + +h1 { + text-align: center; +} + +h1,h2,h3,h4 { + font-family: Courier New, Courier, Consolas, monospace; +} + +a { + color: #f3c; + text-decoration: none; + background-color: transparent; +} + +a:hover, a:focus { + text-decoration: none; + background-color: #f3c; + color: #fff; +} + +table { + width: 90%; + border-collapse: collapse; + margin: 12px auto; + font-size: 1em; +} + +tr { + margin-bottom: 10px; +} + +tr:nth-child(odd) { + background-color: #222; /* Light gray for odd rows */ +} + +tr:hover { + background-color: #444; /* hover effect for table rows */ +} + +th, td { + padding: 10px; + border: 2px solid #666; + text-align: left; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +th { + background-color: #444; + text-align: center; + font-size: 1.1em; + font-family: Courier New, Courier, Consolas, monospace; +} + +.container { + max-width: 800px; + margin: auto; + padding: 12px; +} + +@media screen and (max-width: 600px) { + body { + font-size: 90%; + } + + table { + width: 100%; + display: block; + overflow-x: auto; + white-space: nowrap; + } + + th, td { + display: block; + text-align: left; + white-space: normal; + } + + tr { + display: flex; + flex-direction: column; + } + +} +:root { + --card-border: #446868; + --card-link-color: #88bebe; +} +.cards-container { + width: 90%; + margin-left: auto; + margin-right: auto; +} +.cards-container a { + color: var(--card-link-color); +} +.cards { + display: grid; + grid-gap: 0.5rem; + grid-template-columns: repeat(auto-fit, minmax(25rem, 1fr)); +} +.card { + border: 2px solid var(--card-border); + border-radius: 0.5rem; +} +.card-name { + background-color: var(--card-border); + font-size: 1.25rem; + padding: 0.25rem; + border-radius: 0.25rem 0.25rem 0 0; + text-transform: lowercase; +} +.card-content { + padding: 0.5rem; +} +.card-link { + font-size: .95rem; + text-transform: lowercase; +} +.card-text { + font-size: 0.75rem; +} +.card-slug { + font-size: 0.75rem; +} + diff --git a/data/templates/grid.html b/data/templates/grid.html new file mode 100644 index 0000000..a42c2ae --- /dev/null +++ b/data/templates/grid.html @@ -0,0 +1,24 @@ + + + + + + + {{ ring_name }} List + + +
+

{{ ring_name }} List

+

{{ ring_description }}

+

Add all sites with declared RSS feeds to your feed reader with this OPML link.

+ + {{ grid_of_sites | safe }} + +
+
+

Last updated: {{ current_time }}

+

Powered by ringfairy!

+
+
+ + diff --git a/data/templates/index.html b/data/templates/index.html new file mode 100644 index 0000000..e427c60 --- /dev/null +++ b/data/templates/index.html @@ -0,0 +1,61 @@ + + + + + + + {{ ring_name }} List + + +

{{ ring_name }} List

+

{{ ring_description }}

+

Add all sites with declared RSS feeds to your feed reader with this OPML link.

+ + {% if sites %} + + + + + + + + + + + {% for site in sites %} + + + + + + + {% endfor %} + +
NameURLAboutOwner
{{ site.website.slug }} + {{ site.website.url }} + {% if site.website.rss %} + [rss] + {% endif %} + {% if site.website.atom %} + [atom] + {% endif %} + {{ site.website.about | default(value="") }}{{ site.website.owner | default(value="") }}
+ {% endif %} + + {% if failed_sites %} + The following member sites were not included in this iteration of the webring: + + {% endif %} + + +
+ + + diff --git a/data/templates/random.html b/data/templates/random.html new file mode 100644 index 0000000..b4a5816 --- /dev/null +++ b/data/templates/random.html @@ -0,0 +1,29 @@ + + + + + Redirecting... + + + + + + + +

A fairy is guiding you to a most suitable destination...

+ + + diff --git a/data/templates/redirect.html b/data/templates/redirect.html new file mode 100644 index 0000000..0ae260d --- /dev/null +++ b/data/templates/redirect.html @@ -0,0 +1,18 @@ + + + + + + Redirecting... + + + + +

A fairy is teleporting you to {{ url }}...!

+ + diff --git a/ringfairy.toml b/ringfairy.toml new file mode 100644 index 0000000..328d47c --- /dev/null +++ b/ringfairy.toml @@ -0,0 +1,23 @@ +base_url = "https://3dworldring.cjsatnarine.space" +ring_name = "3dworldring" +ring_description = "Webring for 3D worlds." +ring_owner = "CJ Satnarine" +ring_owner_site = "https://cjsatnarine.space" + +filepath_list = ["./websites.json"] # Website list; should be a JSON file with 'name', 'url', etc +path_output = "./3dworldring.cjsatnarine.space" # Generated files will be saved in this folder. +path_assets = "./data/assets" # All contents of the asset folder will be copied directly into the output directory +path_templates = "./data/templates" # The folder containing HTML templates to use, ie, anything with {{ tags }} +filename_template_random = "random.html" +filename_template_redirect = "redirect.html" # This template gets reused to build the redirect pages for each site, and is ignored when building the other custom templates + +client_user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36" +client_header = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" +audit_retries_delay = 100 +audit_retries_max = 2 + +shuffle = false # Randomizes website sequence when generating +verbose = false # Enables verbose logging +skip_minify = false # If your generated HTML have issues, or you want hand-editable output, try skip minification +skip_verify = false # Skips verification of the URLs in the list. Might be unwise! +dry_run = false # Perform a dry run without writing any files. Can be used to check the site audit for example. diff --git a/websites.json b/websites.json new file mode 100644 index 0000000..12e266b --- /dev/null +++ b/websites.json @@ -0,0 +1,9 @@ +[ + { + "name": "The Study", + "slug": "cjsatnarine_study", + "url": "https://study.cjsatnarine.space", + "about": "a little study", + "owner": "CJSatnarine" + } +]