diff options
| author | Zofia Szweda <sophies@disroot.org> | 2026-09-12 12:29:26 +0200 |
|---|---|---|
| committer | Zofia Szweda <sophies@disroot.org> | 2026-09-12 12:29:27 +0200 |
| commit | daccc7f65d3e76cd2067cacb355b35ca21495053 (patch) | |
| tree | 54aaec32800fc76bd6d449360a001119a8a7e9ee | |
| parent | bde7e3b08d42c3410bbabb12a180b9c54d603427 (diff) | |
idk read diff
| -rw-r--r-- | .oxlintrc.json | 15 | ||||
| -rw-r--r-- | contact.html | 157 | ||||
| -rw-r--r-- | gpg-key.asc | 31 | ||||
| -rw-r--r-- | hello.html | 2 | ||||
| -rw-r--r-- | index.html | 70 | ||||
| -rw-r--r-- | index.html.bak | 223 | ||||
| -rw-r--r-- | style.css | 4 | ||||
| -rw-r--r-- | tarantino/index.html | 2 | ||||
| -rw-r--r-- | webring.js | 206 |
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> - — - <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----- @@ -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"> @@ -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 > 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 > 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&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 -> 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 > 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><a href="https://roughlynamed.net"><img src="/path/to/badge.png" width="88" height="31" + alt="roughlynamed.net"></a></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> @@ -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> @@ -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(); |
