From daccc7f65d3e76cd2067cacb355b35ca21495053 Mon Sep 17 00:00:00 2001 From: Zofia Szweda Date: Sat, 12 Sep 2026 12:29:26 +0200 Subject: idk read diff --- .oxlintrc.json | 15 ++++ contact.html | 157 +++++++++++++++++++----------------- gpg-key.asc | 31 +++---- hello.html | 2 +- index.html | 70 +++++++++++++++- index.html.bak | 223 +++++++++++++++++++++++++++++++++++++++++++++++++++ style.css | 4 +- tarantino/index.html | 2 +- webring.js | 206 +++++++++++++++++++++++------------------------ 9 files changed, 514 insertions(+), 196 deletions(-) create mode 100644 .oxlintrc.json create mode 100644 index.html.bak 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 . --> - - - - - - /contact - - - - - - -

/contact

-

Where can you find me?

-

- my handle in the ATmosphere is roughlynamed.net, but heres a full list of - links. -

- -

email

-

- My primary email is - sophies@disroot.org -

-

GPG fingerprint: 3258 B28C 124A B089 1D6C 9E92 9B72 909E EF00 CBD0

-

My full gpg key is:

-
+
+    
+        
+        
+        
+        
+        
+            /contact
+        
+        
+        
+    
+    
+        
+        

+ /contact +

+

+ Where can you find me? +

+

+ my handle in the ATmosphere is roughlynamed.net, but heres a full list of links. +

+ +

+ email +

+

+ My primary email is roughlynamed@disroot.org +

+

+ GPG fingerprint: 3258 B28C 124A B089 1D6C 9E92 9B72 909E EF00 CBD0 +

+

+ My full gpg key is: +

+
 -----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-----
-
-

Download

- -
-
-
-
-

- Source code - — - GNU AGPLv3 -

- +
+

+ Download +


+
+
+

+ Source code — GNU AGPLv3 +

+ 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 @@

/hello

(how i prefer to keep in touch)



-

If you would like to contact me, please email sophies@disroot.org

+

If you would like to contact me, please email roughlynamed@disroot.org

If you cannot access your email or prefer something else, please message me on sophies@yax.im via XMPP


diff --git a/index.html b/index.html index 167652f..b1aef17 100644 --- a/index.html +++ b/index.html @@ -166,7 +166,75 @@


- my 88x31 button! swimming.cat oli.xenia.gay lunaisafox.xyz https://8bitosc.net Warning: Page contains JavaScript! made on gnu/linux debian.org gnu.org agpl free software, made with freedom made with helix caddy.com 512kb.club humans.txt of this website bsky.app/roughlynamed.net - my bluesky profile https://php.net https://libre.fm https://tangled.org https://tallyhall.com petrapixel https://marque.at sarascafe raspberrypi.com xmpp.org +
+ my 88x31 button! +
+
+ swimming.cat +
+
+ oli.xenia.gay +
+
+ lunaisafox.xyz +
+
+ https://8bitosc.net +
+
+ Warning: Page contains JavaScript! +
made on gnu/linux +
+ debian.org +
+
+ gnu.org +
+
+ agpl free software, made with freedom +
+
+ made with helix +
+
+ caddy.com +
+
+ 512kb.club +
+
+ humans.txt of this website +
+
+ bsky.app/roughlynamed.net - my bluesky profile +
+
+ https://php.net +
+
+ https://libre.fm +
+
+ https://tangled.org +
+
+ https://tallyhall.com +
+
+ petrapixel +
+
+ https://marque.at +
+
+ sarascafe +
+
+ raspberrypi.com +
+
+ xmpp.org +

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 @@ + + + + + + + + + + + a roughly named site + + + + + + +
+

+

+ roughlynamed.net +

+
+

+ you are visitor: ... +

+
+

+ Recent +

+
+
+
+

+ Publications +

+
    +
  • Loading... +
  • +
+
+
+

+ Changelog +

+
    +
  • + +

    + Added /ai +

    +

    + Made the changelog resizable +

    +
  • +
  • + +

    + changed CSS colors, CSS will be changed periodically, CSS changes will not be included in the changelog +

    +
  • +
  • + +

    + Changed Source Code link in all pages +

    +

    + Added twitch to /contact +

    +
  • +
  • + +

    + Renamed Pi 0 2 w -> Pi 0 w in /uses +

    +

    + Added a "powered by [RASPBERRY PI LOGO] 88x31 button +

    +

    + Swapped out NixOS 88x31 button with a Debian 88x31 +

    +

    + Swapped the IRC section in uses.html for XMPP +

    +

    + Added a list of ATproto based apps i use in uses.html +

    +
  • +
  • + +

    + Add a section for ATproto in /uses +

    +
  • +
  • + +

    + Added this beatiful changelog you're reading right now, +

    +

    + also swap out Atkinson Hyperlegible for Atkinson Hyperlegible Next +

    +
  • +
+
+
+
+

+ Listening +

+
    +
  • Loading... +
  • +
+
+
+
+

+ where the /bin/fsck am I?! +

+

+ you're in my website! a personal one, of a polish furry transfemme programmer +

+

+ i like writing, and linux, and space, i like alot of things! +

+

+ i hope you like it in here! :D +

+

+ fun fact: every single page* here is compatible with XHTML. +

+

+ in this websites Caddyfile, the content-type is set to xhtml, and every html tag has xmlns="http://www.w3.org/1999/xhtml" inside. +

+

+ (the reason theres an asterisks is because i cant control the scripts inside webrings.html) +

+

+ (which also means that i would have to download every script and fix it myself) +

+

+ (which i dont really wanna do) +

+
+
+
+ my 88x31 button! swimming.cat oli.xenia.gay + lunaisafox.xyz https://8bitosc.net Warning: Page contains JavaScript! made on gnu/linux + gnu.org agpl free software, made with freedom made with helix caddy.com 512kb.club humans.txt of this website + https://php.net https://libre.fm https://tangled.org https://tallyhall.com petrapixel https://marque.at sarascafe raspberrypi.com + xmpp.org +
+

+ if you want to link back, PLEASE DONT HOTLINK! it hurts my little pi, instead save the image and do: +

+
<a href="https://roughlynamed.net"><img src="/path/to/badge.png" width="88" height="31"
+      alt="roughlynamed.net"></a>
+

+ the theme on this website changes every now and then, be warned! +

+ + + + +

+ Source code — GNU AGPLv3 +

+ + 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 @@

Join

If you would like to join this webring, please - email me (sophies@disroot.org) + email me (roughlynamed@disroot.org) with the subject: "Webring application"

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 = `

`; - 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(); -- cgit v1.2.3