summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.oxlintrc.json15
-rw-r--r--contact.html157
-rw-r--r--gpg-key.asc31
-rw-r--r--hello.html2
-rw-r--r--index.html70
-rw-r--r--index.html.bak223
-rw-r--r--style.css4
-rw-r--r--tarantino/index.html2
-rw-r--r--webring.js206
9 files changed, 514 insertions, 196 deletions
diff --git a/.oxlintrc.json b/.oxlintrc.json
new file mode 100644
index 0000000..75868c2
--- /dev/null
+++ b/.oxlintrc.json
@@ -0,0 +1,15 @@
+{
+ "$schema": "./node_modules/oxlint/configuration_schema.json",
+ "plugins": [
+ "typescript",
+ "unicorn",
+ "oxc"
+ ],
+ "categories": {
+ "correctness": "error"
+ },
+ "rules": {},
+ "env": {
+ "builtin": true
+ }
+} \ No newline at end of file
diff --git a/contact.html b/contact.html
index 9452511..c703196 100644
--- a/contact.html
+++ b/contact.html
@@ -19,82 +19,91 @@
along with roughlynamed.net. If not, see <https://www.gnu.org/licenses/>.
-->
<!DOCTYPE html>
-<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta name="theme-color" content="#f8efdf" />
- <meta charset="UTF-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>/contact</title>
- <link rel="icon" type="image/png" href="/assets/_.ico" />
- <link rel="stylesheet" href="/style.css" />
- </head>
-
- <body>
- <nav>
- <a href="/">index</a>
- <a href="/about.html">/about</a>
- <a href="/contact.html">/contact</a>
- <a href="/slashes.html">/slashes</a>
- <a href="/uses.html">/uses</a>
- <a href="/webrings.html">/webrings</a>
- <a href="https://blog.roughlynamed.net">/blog</a>
- <a href="https://1kb.roughlynamed.net">/1kb</a>
- <a href="/tarantino/">/tarantino</a>
- </nav>
- <h1>/contact</h1>
- <p>Where can you find me?</p>
- <p>
- my handle in the ATmosphere is roughlynamed.net, but heres a full list of
- links.
- </p>
- <ul>
- <li><a href="https://tangled.org/roughlynamed.net">tangled.org</a></li>
- <li><a href="https://bsky.app/profile/roughlynamed.net">bluesky</a></li>
- <li>
- <a href="https://blog.roughlynamed.net">leaflet</a>, also in the navbar.
- </li>
- <li><a href="xmpp:roughlynamed@yax.im">xmpp:roughlynamed@yax.im</a></li>
- <li><a href="https://lobste.rs/~zelda">lobste.rs</a></li>
- <li>Twitch: sophiesdotrocks</li>
- </ul>
- <h2>email</h2>
- <p>
- My primary email is
- <a href="mailto:sophies@disroot.org">sophies@disroot.org</a>
- </p>
- <p>GPG fingerprint: 3258 B28C 124A B089 1D6C 9E92 9B72 909E EF00 CBD0</p>
- <p>My full gpg key is:</p>
- <pre class="pgp-key">
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <meta name="theme-color" content="#f8efdf" />
+ <meta charset="UTF-8" />
+ <meta name="description" content="where to find me on the internet" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>
+ /contact
+ </title>
+ <link rel="icon" type="image/png" href="/assets/_.ico" />
+ <link rel="stylesheet" href="/style.css" />
+ </head>
+ <body>
+ <nav>
+ <a href="/">index</a> <a href="/about.html">/about</a> <a href="/contact.html">/contact</a> <a href="/slashes.html">/slashes</a> <a href="/uses.html">/uses</a> <a href="/webrings.html">/webrings</a> <a href="https://blog.roughlynamed.net">/blog</a> <a href="https://1kb.roughlynamed.net">/1kb</a> <a href="/tarantino/">/tarantino</a>
+ </nav>
+ <h1>
+ /contact
+ </h1>
+ <p>
+ Where can you find me?
+ </p>
+ <p>
+ my handle in the ATmosphere is roughlynamed.net, but heres a full list of links.
+ </p>
+ <ul>
+ <li>
+ <a href="https://tangled.org/roughlynamed.net">tangled.org</a>
+ </li>
+ <li>
+ <a href="https://bsky.app/profile/roughlynamed.net">bluesky</a>
+ </li>
+ <li>
+ <a href="https://blog.roughlynamed.net">leaflet</a>, also in the navbar.
+ </li>
+ <li>
+ <a href="xmpp:roughlynamed@yax.im">xmpp:roughlynamed@yax.im</a>
+ </li>
+ <li>
+ <a href="https://lobste.rs/~zelda">lobste.rs</a>
+ </li>
+ <li>Twitch: sophiesdotrocks
+ </li>
+ </ul>
+ <h2>
+ email
+ </h2>
+ <p>
+ My primary email is <a href="mailto:roughlynamed@disroot.org">roughlynamed@disroot.org</a>
+ </p>
+ <p>
+ GPG fingerprint: 3258 B28C 124A B089 1D6C 9E92 9B72 909E EF00 CBD0
+ </p>
+ <p>
+ My full gpg key is:
+ </p>
+ <pre class="pgp-key">
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEao6haBYJKwYBBAHaRw8BAQdAHduoS7AzzvVrVUxH2HtlCJBkxB/K70xPJD+X
-vOr7S4+0IlpvZmlhIFN6d2VkYSA8c29waGllc0BkaXNyb290Lm9yZz6IkAQTFgoA
-OBYhBDJYsowSSrCJHWyekptykJ7vAMvQBQJqjqFoAhsBBQsJCAcCBhUKCQgLAgQW
-AgMBAh4BAheAAAoJEJtykJ7vAMvQRw8BAIaaxpzUWNwA7zb7d9sCAjGL0GLBlsWL
-QxMcE6BxJEdyAP0UfohhRt4rP6BM9jDqyBpuZ+ypIwABPIzs6usYODRuCbg4BGqO
-oYoSCisGAQQBl1UBBQEBB0DQt1EZabjLldglY/I+vx+RSJmth2hWd1LpFfg78+Cx
-BgMBCAeIeAQYFgoAIBYhBDJYsowSSrCJHWyekptykJ7vAMvQBQJqjqGKAhsMAAoJ
-EJtykJ7vAMvQ0V4BAOGc4/8fm/58NVgCQAgvA8+FnOFt+sVrNM2/fAb1QtePAQCx
-E3Yi87YfNOrJ12MWuy0/ZB7eTXM5l7IjKGnSXtKoArgzBGqOpLIWCSsGAQQB2kcP
-AQEHQA9P4PQrSoIMkzD83+wm2UWVKJXNS6eafIy+PjXWUSO3iO8EGBYKACAWIQQy
-WLKMEkqwiR1snpKbcpCe7wDL0AUCao6ksgIbAgCBCRCbcpCe7wDL0HYgBBkWCgAd
-FiEEGlwtrqDKgG589MwsQ7ExqaH7TasFAmqOpLIACgkQQ7ExqaH7TatVMwEA947/
-KME2uHuQRV4epPbn+MgfTKtVDzol41RQHv2GUH8A/jNoD9WUnbiX7nIG2zFWiIVB
-xkvmj5eMTCznyN091QAKTw8BAMP97VQOduWrLROga6oU6TPw1xrPIWzkM3TSr+pY
-i7cXAP0buK+/cs1h+uocQKzojIvuF7joZD/h+P7n5+7V93+0Ag==
-=Oo4W
+vOr7S4+0K01hZ2RhbGVuYSBTendlZGEgPHJvdWdobHluYW1lZEBkaXNyb290Lm9y
+Zz6IkwQTFgoAOwIbAQULCQgHAgYVCgkICwIEFgIDAQIeAQIXgBYhBDJYsowSSrCJ
+HWyekptykJ7vAMvQBQJqpAKHAhkBAAoJEJtykJ7vAMvQ890A/1zZwBf6UUJb6AYg
+WWnSmjo5SPDmUxMu81k58fzjo524AP97D9ieWIyHjprp6XbRMEPz0WLpz936Yozl
+WU8XeN7eArg4BGqOoYoSCisGAQQBl1UBBQEBB0DQt1EZabjLldglY/I+vx+RSJmt
+h2hWd1LpFfg78+CxBgMBCAeIeAQYFgoAIBYhBDJYsowSSrCJHWyekptykJ7vAMvQ
+BQJqjqGKAhsMAAoJEJtykJ7vAMvQ0V4BAOGc4/8fm/58NVgCQAgvA8+FnOFt+sVr
+NM2/fAb1QtePAQCxE3Yi87YfNOrJ12MWuy0/ZB7eTXM5l7IjKGnSXtKoArgzBGqO
+pLIWCSsGAQQB2kcPAQEHQA9P4PQrSoIMkzD83+wm2UWVKJXNS6eafIy+PjXWUSO3
+iO8EGBYKACAWIQQyWLKMEkqwiR1snpKbcpCe7wDL0AUCao6ksgIbAgCBCRCbcpCe
+7wDL0HYgBBkWCgAdFiEEGlwtrqDKgG589MwsQ7ExqaH7TasFAmqOpLIACgkQQ7Ex
+qaH7TatVMwEA947/KME2uHuQRV4epPbn+MgfTKtVDzol41RQHv2GUH8A/jNoD9WU
+nbiX7nIG2zFWiIVBxkvmj5eMTCznyN091QAKTw8BAMP97VQOduWrLROga6oU6TPw
+1xrPIWzkM3TSr+pYi7cXAP0buK+/cs1h+uocQKzojIvuF7joZD/h+P7n5+7V93+0
+Ag==
+=E2zZ
-----END PGP PUBLIC KEY BLOCK-----
-</pre>
- <p><a href="/gpg-key.asc" download="/gpg-key.asc">Download</a></p>
- <span>
- <br />
- <hr />
- <br />
- </span>
- <p class="license">
- <a href="https://tangled.org/roughlynamed.net/sophii.xyz">Source code</a>
- &#8212;
- <a href="COPYING">GNU AGPLv3</a>
- </p>
- </body>
+ </pre>
+ <p>
+ <a href="/gpg-key.asc" download="/gpg-key.asc">Download</a>
+ </p><span><br /></span>
+ <hr />
+ <span><br /></span>
+ <p class="license">
+ <a href="https://tangled.org/roughlynamed.net/sophii.xyz">Source code</a> — <a href="COPYING">GNU AGPLv3</a>
+ </p>
+ </body>
</html>
diff --git a/gpg-key.asc b/gpg-key.asc
index ea1e06e..f1f0a92 100644
--- a/gpg-key.asc
+++ b/gpg-key.asc
@@ -1,19 +1,20 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEao6haBYJKwYBBAHaRw8BAQdAHduoS7AzzvVrVUxH2HtlCJBkxB/K70xPJD+X
-vOr7S4+0IlpvZmlhIFN6d2VkYSA8c29waGllc0BkaXNyb290Lm9yZz6IkAQTFgoA
-OBYhBDJYsowSSrCJHWyekptykJ7vAMvQBQJqjqFoAhsBBQsJCAcCBhUKCQgLAgQW
-AgMBAh4BAheAAAoJEJtykJ7vAMvQRw8BAIaaxpzUWNwA7zb7d9sCAjGL0GLBlsWL
-QxMcE6BxJEdyAP0UfohhRt4rP6BM9jDqyBpuZ+ypIwABPIzs6usYODRuCbg4BGqO
-oYoSCisGAQQBl1UBBQEBB0DQt1EZabjLldglY/I+vx+RSJmth2hWd1LpFfg78+Cx
-BgMBCAeIeAQYFgoAIBYhBDJYsowSSrCJHWyekptykJ7vAMvQBQJqjqGKAhsMAAoJ
-EJtykJ7vAMvQ0V4BAOGc4/8fm/58NVgCQAgvA8+FnOFt+sVrNM2/fAb1QtePAQCx
-E3Yi87YfNOrJ12MWuy0/ZB7eTXM5l7IjKGnSXtKoArgzBGqOpLIWCSsGAQQB2kcP
-AQEHQA9P4PQrSoIMkzD83+wm2UWVKJXNS6eafIy+PjXWUSO3iO8EGBYKACAWIQQy
-WLKMEkqwiR1snpKbcpCe7wDL0AUCao6ksgIbAgCBCRCbcpCe7wDL0HYgBBkWCgAd
-FiEEGlwtrqDKgG589MwsQ7ExqaH7TasFAmqOpLIACgkQQ7ExqaH7TatVMwEA947/
-KME2uHuQRV4epPbn+MgfTKtVDzol41RQHv2GUH8A/jNoD9WUnbiX7nIG2zFWiIVB
-xkvmj5eMTCznyN091QAKTw8BAMP97VQOduWrLROga6oU6TPw1xrPIWzkM3TSr+pY
-i7cXAP0buK+/cs1h+uocQKzojIvuF7joZD/h+P7n5+7V93+0Ag==
-=Oo4W
+vOr7S4+0K01hZ2RhbGVuYSBTendlZGEgPHJvdWdobHluYW1lZEBkaXNyb290Lm9y
+Zz6IkwQTFgoAOwIbAQULCQgHAgYVCgkICwIEFgIDAQIeAQIXgBYhBDJYsowSSrCJ
+HWyekptykJ7vAMvQBQJqpAKHAhkBAAoJEJtykJ7vAMvQ890A/1zZwBf6UUJb6AYg
+WWnSmjo5SPDmUxMu81k58fzjo524AP97D9ieWIyHjprp6XbRMEPz0WLpz936Yozl
+WU8XeN7eArg4BGqOoYoSCisGAQQBl1UBBQEBB0DQt1EZabjLldglY/I+vx+RSJmt
+h2hWd1LpFfg78+CxBgMBCAeIeAQYFgoAIBYhBDJYsowSSrCJHWyekptykJ7vAMvQ
+BQJqjqGKAhsMAAoJEJtykJ7vAMvQ0V4BAOGc4/8fm/58NVgCQAgvA8+FnOFt+sVr
+NM2/fAb1QtePAQCxE3Yi87YfNOrJ12MWuy0/ZB7eTXM5l7IjKGnSXtKoArgzBGqO
+pLIWCSsGAQQB2kcPAQEHQA9P4PQrSoIMkzD83+wm2UWVKJXNS6eafIy+PjXWUSO3
+iO8EGBYKACAWIQQyWLKMEkqwiR1snpKbcpCe7wDL0AUCao6ksgIbAgCBCRCbcpCe
+7wDL0HYgBBkWCgAdFiEEGlwtrqDKgG589MwsQ7ExqaH7TasFAmqOpLIACgkQQ7Ex
+qaH7TatVMwEA947/KME2uHuQRV4epPbn+MgfTKtVDzol41RQHv2GUH8A/jNoD9WU
+nbiX7nIG2zFWiIVBxkvmj5eMTCznyN091QAKTw8BAMP97VQOduWrLROga6oU6TPw
+1xrPIWzkM3TSr+pYi7cXAP0buK+/cs1h+uocQKzojIvuF7joZD/h+P7n5+7V93+0
+Ag==
+=E2zZ
-----END PGP PUBLIC KEY BLOCK-----
diff --git a/hello.html b/hello.html
index 2a46a37..c88a8a9 100644
--- a/hello.html
+++ b/hello.html
@@ -46,7 +46,7 @@
<h1>/hello</h1>
<p>(how i prefer to keep in touch)</p>
<br></br>
- <p>If you would like to contact me, please email <a href="mailto:sophies@disroot.org">sophies@disroot.org</a></p>
+ <p>If you would like to contact me, please email <a href="mailto:roughlynamed@disroot.org">roughlynamed@disroot.org</a></p>
<p>If you cannot access your email or prefer something else, please message me on <a href="xmpp:sophies@yax.im">sophies@yax.im</a> via XMPP</p>
<br/>
<p class="license">
diff --git a/index.html b/index.html
index 167652f..b1aef17 100644
--- a/index.html
+++ b/index.html
@@ -166,7 +166,75 @@
<hr />
</main>
<footer class="buttons">
- <a href="https://roughlynamed.net"><img src="/assets/eightyeight.png" alt="my 88x31 button!" title="hey its me!" /></a> <a href="https://swimming.cat"><img src="/assets/site-button.webp" alt="swimming.cat" title="ashley website!!" /></a> <a href="https://oli.xenia.gay"><img src="/assets/oli.gif" alt="oli.xenia.gay" /></a> <a href="http://lunaisafox.xyz"><img src="/assets/stuff.gif" alt="lunaisafox.xyz" /></a> <a href="https://8bitosc.net"><img src="https://8bitosc.net/img/88x31/jay.gif" width="88" height="31" alt="https://8bitosc.net" /></a> <a href="https://devhumor.com/content/uploads/images/June2018/thanks_javascript.png"><img class="_88x31" src="/assets/warning-page-contains-javascript.gif" alt="Warning: Page contains JavaScript!" title="I HATE JAVASCRIPT!!!!!" /></a> <img src="/assets/made-on-gnu-linux.png" width="88" height="31" alt="made on gnu/linux" title="this is fact-checked by true sophies." /> <a href="https://debian.org"><img src="/assets/debian.gif" alt="debian.org" title="Debian GNU/Linux" width="88" height="31" /></a> <a href="https://gnu.org"><img src="/assets/gnu.webp" alt="gnu.org" title="gnu's not unlikely" width="88" height="31" /></a> <a href="https://gnu.org"><img src="/assets/agpl.png" alt="agpl free software, made with freedom" title="there is a license header in each file. i love gnu and gpl!" /></a> <a href="https://helix-editor.com"><img src="/assets/helix.webp" alt="made with helix" title="i believe in helix supremacy" width="88" height="31" /></a> <a href="https://caddyserver.com"><img src="/assets/caddy.png" alt="caddy.com" title="this website runs on caddy!" width="88" height="31" /></a> <a href="https://512kb.club"><img src="/assets/orange-team.svg" alt="512kb.club" title="my website is under 250 kb!" width="88" height="31" /></a> <a href="/humans.txt"><img src="/assets/humanstxt.gif" alt="humans.txt of this website" title="the web is made for humans" /></a> <a href="https://go.bsky.app/profile/roughlynamed.net"><img src="/assets/bluesky.png" alt="bsky.app/roughlynamed.net - my bluesky profile" title="follow me on bluesky!" /></a> <a href="https://php.net"><img src="/assets/php.webp" alt="https://php.net" title="i hate php" /></a> <a href="https://libre.fm"><img src="/assets/librefm.png" alt="https://libre.fm" title="libre.fm &gt; last.fm" /></a> <a href="https://tangled.org"><img src="/assets/tangled.png" alt="https://tangled.org" title="tangled.org rules (i made this button!)" /></a> <a href="https://tallyhall.com"><img src="/assets/tallyhall.gif" alt="https://tallyhall.com" title="tally hall is the best band" /></a> <a href="https://petrapixel.neocities.org/" target="_blank"><img src="https://cdn.jsdelivr.net/gh/petracoding/petrapixel.neocities.org@latest/public/assets/img/linkback.gif" alt="petrapixel" title="tarantino webring is on petrapixel's webring list" /></a> <a href="https://marque.at/"><img src="/assets/marque.png" alt="https://marque.at" title="marque bought me roughlynamed.net domain i love them" /></a> <a href="https://sarascafe.lenowo.org"><img src="/assets/sarascafe.gif" alt="sarascafe" title="cool and smart people on this website" /></a> <a href="https://www.raspberrypi.com"><img src="/assets/pipowered.png" alt="raspberrypi.com" title="pi 0 w" /></a> <a href="https://xmpp.org"><img src="/assets/xmpp.png" alt="xmpp.org" title="Find me on XMPP (sophies@yax.im)" /></a>
+ <div>
+ <a href="https://roughlynamed.net"><img src="/assets/eightyeight.png" alt="my 88x31 button!" title="hey its me!" /></a>
+ </div>
+ <div>
+ <a href="https://swimming.cat"><img src="/assets/site-button.webp" alt="swimming.cat" title="ashley website!!" /></a>
+ </div>
+ <div>
+ <a href="https://oli.xenia.gay"><img src="/assets/oli.gif" alt="oli.xenia.gay" /></a>
+ </div>
+ <div>
+ <a href="http://lunaisafox.xyz"><img src="/assets/stuff.gif" alt="lunaisafox.xyz" /></a>
+ </div>
+ <div>
+ <a href="https://8bitosc.net"><img src="https://8bitosc.net/img/88x31/jay.gif" width="88" height="31" alt="https://8bitosc.net" /></a>
+ </div>
+ <div>
+ <a href="https://devhumor.com/content/uploads/images/June2018/thanks_javascript.png"><img class="_88x31" src="/assets/warning-page-contains-javascript.gif" alt="Warning: Page contains JavaScript!" title="I HATE JAVASCRIPT!!!!!" /></a>
+ </div><img src="/assets/made-on-gnu-linux.png" width="88" height="31" alt="made on gnu/linux" title="this is fact-checked by true sophies." />
+ <div>
+ <a href="https://debian.org"><img src="/assets/debian.gif" alt="debian.org" title="Debian GNU/Linux" width="88" height="31" /></a>
+ </div>
+ <div>
+ <a href="https://gnu.org"><img src="/assets/gnu.webp" alt="gnu.org" title="gnu's not unlikely" width="88" height="31" /></a>
+ </div>
+ <div>
+ <a href="https://gnu.org"><img src="/assets/agpl.png" alt="agpl free software, made with freedom" title="there is a license header in each file. i love gnu and gpl!" /></a>
+ </div>
+ <div>
+ <a href="https://helix-editor.com"><img src="/assets/helix.webp" alt="made with helix" title="i believe in helix supremacy" width="88" height="31" /></a>
+ </div>
+ <div>
+ <a href="https://caddyserver.com"><img src="/assets/caddy.png" alt="caddy.com" title="this website runs on caddy!" width="88" height="31" /></a>
+ </div>
+ <div>
+ <a href="https://512kb.club"><img src="/assets/orange-team.svg" alt="512kb.club" title="my website is under 250 kb!" width="88" height="31" /></a>
+ </div>
+ <div>
+ <a href="/humans.txt"><img src="/assets/humanstxt.gif" alt="humans.txt of this website" title="the web is made for humans" /></a>
+ </div>
+ <div>
+ <a href="https://go.bsky.app/profile/roughlynamed.net"><img src="/assets/bluesky.png" alt="bsky.app/roughlynamed.net - my bluesky profile" title="follow me on bluesky!" /></a>
+ </div>
+ <div>
+ <a href="https://php.net"><img src="/assets/php.webp" alt="https://php.net" title="i hate php" /></a>
+ </div>
+ <div>
+ <a href="https://libre.fm"><img src="/assets/librefm.png" alt="https://libre.fm" title="libre.fm &gt; last.fm" /></a>
+ </div>
+ <div>
+ <a href="https://tangled.org"><img src="/assets/tangled.png" alt="https://tangled.org" title="tangled.org rules (i made this button!)" /></a>
+ </div>
+ <div>
+ <a href="https://tallyhall.com"><img src="/assets/tallyhall.gif" alt="https://tallyhall.com" title="tally hall is the best band" /></a>
+ </div>
+ <div>
+ <a href="https://petrapixel.neocities.org/" target="_blank"><img src="https://cdn.jsdelivr.net/gh/petracoding/petrapixel.neocities.org@latest/public/assets/img/linkback.gif" alt="petrapixel" title="tarantino webring is on petrapixel's webring list" /></a>
+ </div>
+ <div>
+ <a href="https://marque.at/"><img src="/assets/marque.png" alt="https://marque.at" title="marque bought me roughlynamed.net domain i love them" /></a>
+ </div>
+ <div>
+ <a href="https://sarascafe.lenowo.org"><img src="/assets/sarascafe.gif" alt="sarascafe" title="cool and smart people on this website" /></a>
+ </div>
+ <div>
+ <a href="https://www.raspberrypi.com"><img src="/assets/pipowered.png" alt="raspberrypi.com" title="pi 0 w" /></a>
+ </div>
+ <div>
+ <a href="https://xmpp.org"><img src="/assets/xmpp.png" alt="xmpp.org" title="Find me on XMPP (sophies@yax.im)" /></a>
+ </div>
</footer>
<p class="button-code-label">
if you want to link back, PLEASE DONT HOTLINK! it hurts my little pi, instead save the image and do:
diff --git a/index.html.bak b/index.html.bak
new file mode 100644
index 0000000..413ad87
--- /dev/null
+++ b/index.html.bak
@@ -0,0 +1,223 @@
+<!--
+ roughlynamed.net
+
+ Copyright (C) 2026 Magdalena Szweda
+
+ This file is part of roughlynamed.net.
+
+ roughlynamed.net is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as
+ published by the Free Software Foundation, either version 3 of
+ the License, or (at your option) any later version.
+
+ roughlynamed.net is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with roughlynamed.net. If not, see <https://www.gnu.org/licenses/>.
+-->
+<!DOCTYPE html>
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <meta charset="UTF-8" />
+ <meta name="description" content="homepage for roughlynamed.net" />
+ <meta name="generator" content="HTML Tidy for HTML5 for Linux version 5.8.0" />
+ <meta name="theme-color" content="#f8efdf" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>
+ a roughly named site
+ </title>
+ <link rel="icon" type="image/png" href="/assets/_.ico" />
+ <link rel="preconnect" href="https://libre.fm" />
+ <link rel="stylesheet" href="/style.css" />
+ </head>
+ <body>
+ <script src="https://keepandroidopen.org/banner.js?size=minimal&amp;animation=off"></script><br />
+ <nav>
+ <a href="/">index</a> <a href="/about.html">/about</a> <a href="/contact.html">/contact</a> <a href="/slashes.html">/slashes</a> <a href="/uses.html">/uses</a>
+ <a href="/webrings.html">/webrings</a> <a href="https://blog.roughlynamed.net">/blog</a> <a href="https://1kb.roughlynamed.net">/1kb</a> <a href=
+ "/tarantino/">/tarantino</a>
+ </nav>
+ <h1>
+ roughlynamed.net
+ </h1>
+ <main>
+ <p id="visitor-count">
+ you are visitor: ...
+ </p>
+ <section id="recent">
+ <h2>
+ Recent
+ </h2>
+ <div class="recent-grid">
+ <div class="recent-column">
+ <div id="recent-publications" class="recent-box">
+ <h3>
+ Publications
+ </h3>
+ <ul>
+ <li>Loading...
+ </li>
+ </ul>
+ </div>
+ <div id="recent-now" class="recent-box">
+ <h3>
+ Changelog
+ </h3>
+ <ul>
+ <li>
+ <time datetime="2026-09-6">2026-09-6</time>
+ <p>
+ Added <a href="/ai.html">/ai</a>
+ </p>
+ <p>
+ Made the changelog resizable
+ </p>
+ </li>
+ <li>
+ <time datetime="2026-09-5">2026-09-5</time>
+ <p>
+ changed CSS colors, CSS will be changed periodically, CSS changes will not be included in the changelog
+ </p>
+ </li>
+ <li>
+ <time datetime="2026-09-3">2026-09-3</time>
+ <p>
+ Changed Source Code link in all pages
+ </p>
+ <p>
+ Added twitch to <a href="/contact.html">/contact</a>
+ </p>
+ </li>
+ <li>
+ <time datetime="2026-08-29">2026-08-29</time>
+ <p>
+ Renamed Pi 0 2 w -&gt; Pi 0 w in <a href="/uses.html">/uses</a>
+ </p>
+ <p>
+ Added a "powered by [RASPBERRY PI LOGO] 88x31 button
+ </p>
+ <p>
+ Swapped out NixOS 88x31 button with a Debian 88x31
+ </p>
+ <p>
+ Swapped the IRC section in <a href="/uses.html">uses.html</a> for XMPP
+ </p>
+ <p>
+ Added a list of ATproto based apps i use in <a href="/uses.html">uses.html</a>
+ </p>
+ </li>
+ <li>
+ <time datetime="2026-08-29">2026-08-29</time>
+ <p>
+ Add a section for ATproto in <a href="/uses.html">/uses</a>
+ </p>
+ </li>
+ <li>
+ <time datetime="2026-08-27">2026-08-27</time>
+ <p>
+ Added this beatiful changelog you're reading right now,
+ </p>
+ <p>
+ also swap out Atkinson Hyperlegible for Atkinson Hyperlegible Next
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <div id="recent-scrobbles" class="recent-box">
+ <h3>
+ Listening
+ </h3>
+ <ul>
+ <li>Loading...
+ </li>
+ </ul>
+ </div>
+ </div>
+ </section>
+ <h2>
+ where the <code>/bin/fsck</code> am I?!
+ </h2>
+ <p>
+ you're in my website! a personal one, of a polish furry transfemme programmer
+ </p>
+ <p>
+ i like writing, and linux, and space, i like alot of things!
+ </p>
+ <p>
+ i hope you like it in here! :D
+ </p>
+ <p>
+ fun fact: every single page* here is compatible with XHTML.
+ </p>
+ <p>
+ in this websites Caddyfile, the content-type is set to xhtml, and every html tag has <code>xmlns="http://www.w3.org/1999/xhtml"</code> inside.
+ </p>
+ <p>
+ (the reason theres an asterisks is because i cant control the scripts inside webrings.html)
+ </p>
+ <p>
+ (which also means that i would have to download every script and fix it myself)
+ </p>
+ <p>
+ (which i dont really wanna do)
+ </p>
+ <hr />
+ </main>
+ <footer class="buttons">
+ <a href="https://roughlynamed.net"><img src="/assets/eightyeight.png" alt="my 88x31 button!" title="hey its me!" /></a> <a href="https://swimming.cat"><img src=
+ "/assets/site-button.webp" alt="swimming.cat" title="ashley website!!" /></a> <a href="https://oli.xenia.gay"><img src="/assets/oli.gif" alt="oli.xenia.gay" /></a>
+ <a href="http://lunaisafox.xyz"><img src="/assets/stuff.gif" alt="lunaisafox.xyz" /></a> <a href="https://8bitosc.net"><img src="https://8bitosc.net/img/88x31/jay.gif"
+ width="88" height="31" alt="https://8bitosc.net" /></a> <a href="https://devhumor.com/content/uploads/images/June2018/thanks_javascript.png"><img class="_88x31" src=
+ "/assets/warning-page-contains-javascript.gif" alt="Warning: Page contains JavaScript!" title="I HATE JAVASCRIPT!!!!!" /></a> <img src="/assets/made-on-gnu-linux.png"
+ width="88" height="31" alt="made on gnu/linux" title="this is fact-checked by true sophies." /> <a href="https://debian.org"><img src="/assets/debian.gif" alt=
+ "debian.org" title="Debian GNU/Linux" width="88" height="31" /></a> <a href="https://gnu.org"><img src="/assets/gnu.webp" alt="gnu.org" title="gnu's not unlikely"
+ width="88" height="31" /></a> <a href="https://gnu.org"><img src="/assets/agpl.png" alt="agpl free software, made with freedom" title=
+ "there is a license header in each file. i love gnu and gpl!" /></a> <a href="https://helix-editor.com"><img src="/assets/helix.webp" alt="made with helix" title=
+ "i believe in helix supremacy" width="88" height="31" /></a> <a href="https://caddyserver.com"><img src="/assets/caddy.png" alt="caddy.com" title=
+ "this website runs on caddy!" width="88" height="31" /></a> <a href="https://512kb.club"><img src="/assets/orange-team.svg" alt="512kb.club" title=
+ "my website is under 250 kb!" width="88" height="31" /></a> <a href="/humans.txt"><img src="/assets/humanstxt.gif" alt="humans.txt of this website" title=
+ "the web is made for humans" /></a> <a href="https://go.bsky.app/profile/roughlynamed.net"><img src="/assets/bluesky.png" alt=
+ "bsky.app/roughlynamed.net - my bluesky profile" title="follow me on bluesky!" /></a> <a href="https://php.net"><img src="/assets/php.webp" alt="https://php.net"
+ title="i hate php" /></a> <a href="https://libre.fm"><img src="/assets/librefm.png" alt="https://libre.fm" title="libre.fm &gt; last.fm" /></a> <a href=
+ "https://tangled.org"><img src="/assets/tangled.png" alt="https://tangled.org" title="tangled.org rules (i made this button!)" /></a> <a href=
+ "https://tallyhall.com"><img src="/assets/tallyhall.gif" alt="https://tallyhall.com" title="tally hall is the best band" /></a> <a href=
+ "https://petrapixel.neocities.org/" target="_blank"><img src="https://cdn.jsdelivr.net/gh/petracoding/petrapixel.neocities.org@latest/public/assets/img/linkback.gif"
+ alt="petrapixel" title="tarantino webring is on petrapixel's webring list" /></a> <a href="https://marque.at/"><img src="/assets/marque.png" alt="https://marque.at"
+ title="marque bought me roughlynamed.net domain i love them" /></a> <a href="https://sarascafe.lenowo.org"><img src="/assets/sarascafe.gif" alt="sarascafe" title=
+ "cool and smart people on this website" /></a> <a href="https://www.raspberrypi.com"><img src="/assets/pipowered.png" alt="raspberrypi.com" title="pi 0 w" /></a>
+ <a href="https://xmpp.org"><img src="/assets/xmpp.png" alt="xmpp.org" title="Find me on XMPP (sophies@yax.im)" /></a>
+ </footer>
+ <p class="button-code-label">
+ if you want to link back, PLEASE DONT HOTLINK! it hurts my little pi, instead save the image and do:
+ </p>
+ <pre><code>&lt;a href="https://roughlynamed.net"&gt;&lt;img src="/path/to/badge.png" width="88" height="31"
+ alt="roughlynamed.net"&gt;&lt;/a&gt;</code></pre>
+ <p>
+ the theme on this website changes every now and then, be warned!
+ </p>
+ <script>
+ //<![CDATA[
+ fetch("/counter.php")
+ .then((r) => r.text())
+ .then((n) => {
+ document.getElementById("visitor-count").textContent =
+ `you are visitor: ${n}`;
+ })
+ .catch(() => {
+ document.getElementById("visitor-count").textContent =
+ "you are visitor: ???";
+ });
+ //]]>
+ </script>
+ <script src="/scrobbles.js" defer="defer"></script>
+ <script src="/publications.js" defer="defer"></script>
+ <script src="/height.js"></script>
+ <p class="license">
+ <a href="https://tangled.org/roughlynamed.net/sophii.xyz">Source code</a> — <a href="COPYING">GNU AGPLv3</a>
+ </p>
+ </body>
+</html>
diff --git a/style.css b/style.css
index 0bc9257..8e57a6a 100644
--- a/style.css
+++ b/style.css
@@ -127,7 +127,9 @@ code {
gap: 0.5rem;
margin-top: 3rem;
}
-
+.buttons div {
+ display: inline-block;
+}
#recent {
margin-top: 3rem;
}
diff --git a/tarantino/index.html b/tarantino/index.html
index 71101c6..c4021ae 100644
--- a/tarantino/index.html
+++ b/tarantino/index.html
@@ -79,7 +79,7 @@
<h2>Join</h2>
<p>
If you would like to join this webring, please
- <a href="mailto:sophies@disroot.org">email me</a> (sophies@disroot.org)
+ <a href="mailto:roughlynamed@disroot.org">email me</a> (roughlynamed@disroot.org)
with the subject: "Webring application"
</p>
<p>
diff --git a/webring.js b/webring.js
index 7ab184f..621e281 100644
--- a/webring.js
+++ b/webring.js
@@ -2,47 +2,47 @@ const RING_CACHE_KEY = 'tarantino-ring-cache';
const RING_CACHE_TTL_MS = 5 * 60_000;
async function fetchRingMembers() {
- const cached = localStorage.getItem(RING_CACHE_KEY);
- if (cached) {
- const { data, ts } = JSON.parse(cached);
- if (Date.now() - ts < RING_CACHE_TTL_MS) return data;
- }
-
- const res = await fetch('https://roughlynamed.net/tarantino/ring.json');
- if (!res.ok) throw new Error(`tarantino webring fetch failed: ${res.status}`);
- const { members } = await res.json();
-
- localStorage.setItem(RING_CACHE_KEY, JSON.stringify({ data: members, ts: Date.now() }));
- return members;
+ const cached = localStorage.getItem(RING_CACHE_KEY);
+ if (cached) {
+ const { data, ts } = JSON.parse(cached);
+ if (Date.now() - ts < RING_CACHE_TTL_MS) return data;
+ }
+
+ const res = await fetch('https://roughlynamed.net/tarantino/ring.json');
+ if (!res.ok) throw new Error(`tarantino webring fetch failed: ${res.status}`);
+ const { members } = await res.json();
+
+ localStorage.setItem(RING_CACHE_KEY, JSON.stringify({ data: members, ts: Date.now() }));
+ return members;
}
function originOf(member) {
- try {
- return new URL(member.url).origin;
- } catch (err) {
- console.error('tarantino webring: bad url on member', member, err);
- return null;
- }
+ try {
+ return new URL(member.url).origin;
+ } catch (err) {
+ console.error('tarantino webring: bad url on member', member, err);
+ return null;
+ }
}
function warningLabel(m) {
- return m.content_warnings?.length ? ` (cw: ${m.content_warnings.join(', ')})` : '';
+ return m.content_warnings?.length ? ` (cw: ${m.content_warnings.join(', ')})` : '';
}
function ensureWarningDialog() {
- let dialog = document.getElementById('ring-warning-dialog');
- if (dialog) return dialog;
+ let dialog = document.getElementById('ring-warning-dialog');
+ if (dialog) return dialog;
- dialog = document.createElement('dialog');
- dialog.id = 'ring-warning-dialog';
- dialog.innerHTML = `
+ dialog = document.createElement('dialog');
+ dialog.id = 'ring-warning-dialog';
+ dialog.innerHTML = `
<p id="ring-warning-text"></p>
<menu style="display: flex; gap: 0.5rem; justify-content: flex-end; padding: 0; margin: 0.75rem 0 0;">
<button type="button" value="cancel">cancel</button>
<button type="button" value="continue" autofocus>continue</button>
</menu>
`;
- dialog.style.cssText = `
+ dialog.style.cssText = `
background: var(--bg, #fff);
color: var(--text, #000);
border: 1px solid var(--border, #ccc);
@@ -50,102 +50,102 @@ function ensureWarningDialog() {
max-width: 28rem;
padding: 1rem;
`;
- document.body.appendChild(dialog);
+ document.body.appendChild(dialog);
- dialog.querySelector('button[value="cancel"]').addEventListener('click', () => dialog.close('cancel'));
- dialog.querySelector('button[value="continue"]').addEventListener('click', () => dialog.close('continue'));
+ dialog.querySelector('button[value="cancel"]').addEventListener('click', () => dialog.close('cancel'));
+ dialog.querySelector('button[value="continue"]').addEventListener('click', () => dialog.close('continue'));
- return dialog;
+ return dialog;
}
function confirmIfFlagged(e, member) {
- if (!member.content_warnings?.length) return;
- e.preventDefault();
-
- const dialog = ensureWarningDialog();
- dialog.querySelector('#ring-warning-text').textContent =
- `Heads up: this site is flagged for ${member.content_warnings.join(', ')}. Continue?`;
-
- dialog.addEventListener(
- 'close',
- () => {
- if (dialog.returnValue === 'continue') location.href = member.url;
- },
- { once: true }
- );
-
- dialog.showModal();
+ if (!member.content_warnings?.length) return;
+ e.preventDefault();
+
+ const dialog = ensureWarningDialog();
+ dialog.querySelector('#ring-warning-text').textContent =
+ `Heads up: this site is flagged for ${member.content_warnings.join(', ')}. Continue?`;
+
+ dialog.addEventListener(
+ 'close',
+ () => {
+ if (dialog.returnValue === 'continue') location.href = member.url;
+ },
+ { once: true }
+ );
+
+ dialog.showModal();
}
function wireNavLink(id, member) {
- const el = document.getElementById(id);
- if (!el || !member) return;
- el.href = member.url;
- el.addEventListener('click', e => confirmIfFlagged(e, member));
+ const el = document.getElementById(id);
+ if (!el || !member) return;
+ el.href = member.url;
+ el.addEventListener('click', e => confirmIfFlagged(e, member));
}
function disableNavLink(id) {
- const el = document.getElementById(id);
- if (!el) return;
- el.removeAttribute('href');
- el.setAttribute('aria-disabled', 'true');
+ const el = document.getElementById(id);
+ if (!el) return;
+ el.removeAttribute('href');
+ el.setAttribute('aria-disabled', 'true');
}
function renderMembersTable(members) {
- const tbody = document.getElementById('members-tbody');
- if (!tbody) return;
-
- const frag = document.createDocumentFragment();
- for (const m of members) {
- const tr = document.createElement('tr');
-
- const nameTd = document.createElement('td');
- nameTd.textContent = m.name;
-
- const linkTd = document.createElement('td');
- const a = document.createElement('a');
- a.href = m.url;
- a.textContent = m.url + warningLabel(m);
- a.addEventListener('click', e => confirmIfFlagged(e, m));
- linkTd.appendChild(a);
-
- tr.append(nameTd, linkTd);
- frag.appendChild(tr);
- }
- tbody.appendChild(frag);
+ const tbody = document.getElementById('members-tbody');
+ if (!tbody) return;
+
+ const frag = document.createDocumentFragment();
+ for (const m of members) {
+ const tr = document.createElement('tr');
+
+ const nameTd = document.createElement('td');
+ nameTd.textContent = m.name;
+
+ const linkTd = document.createElement('td');
+ const a = document.createElement('a');
+ a.href = m.url;
+ a.textContent = m.url + warningLabel(m);
+ a.addEventListener('click', e => confirmIfFlagged(e, m));
+ linkTd.appendChild(a);
+
+ tr.append(nameTd, linkTd);
+ frag.appendChild(tr);
+ }
+ tbody.appendChild(frag);
}
async function initRing() {
- try {
- const members = await fetchRingMembers();
- const me = members.findIndex(m => originOf(m) === location.origin);
-
- if (me === -1) {
- console.error('this site is not in the tarantino webring');
- } else if (members.length <= 1) {
- disableNavLink('ring-prev');
- disableNavLink('ring-next');
- disableNavLink('ring-random');
- } else {
- const next = members[(me + 1) % members.length];
- const prev = members[(me - 1 + members.length) % members.length];
- const others = members.filter((_, i) => i !== me);
-
- wireNavLink('ring-prev', prev);
- wireNavLink('ring-next', next);
-
- if (others.length > 0) {
- const random = others[Math.floor(Math.random() * others.length)];
- wireNavLink('ring-random', random);
- } else {
- disableNavLink('ring-random');
- }
+ try {
+ const members = await fetchRingMembers();
+ const me = members.findIndex(m => originOf(m) === location.origin);
+
+ if (me === -1) {
+ console.error('this site is not in the tarantino webring');
+ } else if (members.length <= 1) {
+ disableNavLink('ring-prev');
+ disableNavLink('ring-next');
+ disableNavLink('ring-random');
+ } else {
+ const next = members[(me + 1) % members.length];
+ const prev = members[(me - 1 + members.length) % members.length];
+ const others = members.filter((_, i) => i !== me);
+
+ wireNavLink('ring-prev', prev);
+ wireNavLink('ring-next', next);
+
+ if (others.length > 0) {
+ const random = others[Math.floor(Math.random() * others.length)];
+ wireNavLink('ring-random', random);
+ } else {
+ disableNavLink('ring-random');
+ }
+ }
+
+ renderMembersTable(members);
+ } catch (err) {
+ console.error('tarantino webring failed:', err);
}
-
- renderMembersTable(members);
- } catch (err) {
- console.error('tarantino webring failed:', err);
- }
}
initRing();