summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsophie <sophies@disroot.org>2026-08-31 10:42:13 +0200
committersophie <sophies@disroot.org>2026-08-31 10:42:13 +0200
commitfe437f882228b58bf16c2994470f80a2dbc134de (patch)
tree11ad203b624a80b92dad9aaddac3ef50f4e526d6
git commit
-rw-r--r-- got send0
-rw-r--r--404.html46
-rw-r--r--AGPL-SOURCE-LINK.html15
-rw-r--r--COPYING661
l---------LICENSE1
-rw-r--r--NOTICE22
-rw-r--r--SOURCE12
-rw-r--r--about.html244
-rw-r--r--ai.txt3
-rw-r--r--assets/_.icobin0 -> 3397 bytes
-rw-r--r--assets/_.jpegbin0 -> 24555 bytes
-rw-r--r--assets/agpl.pngbin0 -> 1729 bytes
-rw-r--r--assets/animatroninci.webpbin0 -> 1046 bytes
-rw-r--r--assets/bluesky.pngbin0 -> 4149 bytes
-rw-r--r--assets/caddy.pngbin0 -> 1816 bytes
-rw-r--r--assets/eightyeight.pngbin0 -> 777 bytes
-rw-r--r--assets/gnu.webpbin0 -> 1428 bytes
-rw-r--r--assets/helix.webpbin0 -> 1698 bytes
-rw-r--r--assets/humanstxt.gifbin0 -> 987 bytes
-rw-r--r--assets/images/icons/cross.pngbin0 -> 655 bytes
-rw-r--r--assets/images/icons/heart.pngbin0 -> 749 bytes
-rw-r--r--assets/librefm.pngbin0 -> 890 bytes
-rw-r--r--assets/lunaisafox.gif.crdownloadbin0 -> 1344 bytes
-rw-r--r--assets/made-on-gnu-linux.pngbin0 -> 456 bytes
-rw-r--r--assets/marque.pngbin0 -> 2002 bytes
-rw-r--r--assets/nix_dark.webpbin0 -> 1340 bytes
-rw-r--r--assets/oli.gifbin0 -> 2847 bytes
-rw-r--r--assets/oli.webpbin0 -> 2202 bytes
-rw-r--r--assets/orange-team.svg1
-rw-r--r--assets/php.webpbin0 -> 926 bytes
-rw-r--r--assets/pulp_fiction.icobin0 -> 10813 bytes
-rw-r--r--assets/sarascafe.gifbin0 -> 4098 bytes
-rw-r--r--assets/site-button.pngbin0 -> 1775 bytes
-rw-r--r--assets/site-button.webpbin0 -> 56304 bytes
-rw-r--r--assets/stuff.gifbin0 -> 1344 bytes
-rw-r--r--assets/stuff.webpbin0 -> 398 bytes
-rw-r--r--assets/tallyhall.gifbin0 -> 5298 bytes
-rw-r--r--assets/tangled.pngbin0 -> 2259 bytes
-rw-r--r--assets/warning-page-contains-javascript.gifbin0 -> 424 bytes
-rw-r--r--assets/warning-page-contains-javascript.webpbin0 -> 286 bytes
-rw-r--r--atproto/index.html50
-rw-r--r--blank.html38
-rw-r--r--contact.html103
-rw-r--r--counter.php69
-rw-r--r--fakeindex.html70
-rw-r--r--fonts/APACHE-IBMPlex.txt1
-rw-r--r--fonts/AtkinsonHyperlegible-Bold.woff2bin0 -> 17524 bytes
-rw-r--r--fonts/AtkinsonHyperlegible-Regular.woff2bin0 -> 17208 bytes
-rw-r--r--fonts/Atkinson_Hyperlegible_Next/AtkinsonHyperlegibleNext-Italic-VariableFont_wght.ttfbin0 -> 123148 bytes
-rw-r--r--fonts/Atkinson_Hyperlegible_Next/AtkinsonHyperlegibleNext-VariableFont_wght.ttfbin0 -> 113948 bytes
-rw-r--r--fonts/Atkinson_Hyperlegible_Next/README.txt77
-rw-r--r--fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-Bold.ttfbin0 -> 47968 bytes
-rw-r--r--fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-BoldItalic.ttfbin0 -> 52280 bytes
-rw-r--r--fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-ExtraBold.ttfbin0 -> 48044 bytes
-rw-r--r--fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-ExtraBoldItalic.ttfbin0 -> 52392 bytes
-rw-r--r--fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-ExtraLight.ttfbin0 -> 48076 bytes
-rw-r--r--fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-ExtraLightItalic.ttfbin0 -> 52436 bytes
-rw-r--r--fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-Italic.ttfbin0 -> 52316 bytes
-rw-r--r--fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-Light.ttfbin0 -> 48088 bytes
-rw-r--r--fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-LightItalic.ttfbin0 -> 52504 bytes
-rw-r--r--fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-Medium.ttfbin0 -> 48036 bytes
-rw-r--r--fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-MediumItalic.ttfbin0 -> 52328 bytes
-rw-r--r--fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-Regular.ttfbin0 -> 48064 bytes
-rw-r--r--fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-SemiBold.ttfbin0 -> 47956 bytes
-rw-r--r--fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-SemiBoldItalic.ttfbin0 -> 52364 bytes
-rw-r--r--fonts/IBMPlexMono-Regular.woff2bin0 -> 14708 bytes
-rw-r--r--fonts/IBMPlexSerif-Bold.woff2bin0 -> 19904 bytes
-rw-r--r--fonts/IBMPlexSerif-Regular.woff2bin0 -> 19580 bytes
-rw-r--r--fonts/NOTICE11
-rw-r--r--fonts/OFL-AtkinsonHyperlegible.txt92
-rw-r--r--fonts/OFL-AtkinsonHyperlegibleNext.txt93
-rw-r--r--fonts/OFL-IBMPlex.txt93
-rw-r--r--fonts/PF.woff2bin0 -> 14736 bytes
-rw-r--r--fonts/aachen-bold/Aachen Bold/Aachen Bold.otfbin0 -> 30628 bytes
-rw-r--r--fonts/aachen-bold/Aachen Bold/readme.html190
-rw-r--r--girl.html66
-rw-r--r--gpg-key.asc19
-rw-r--r--hello.html60
-rw-r--r--humans.txt9
-rw-r--r--index.html305
-rw-r--r--jsonifyleaflet.sh38
-rw-r--r--now.html62
-rw-r--r--publications.js50
-rw-r--r--publications.json27
-rw-r--r--readme.txt5
-rw-r--r--robots.txt316
-rw-r--r--scrobbles.js69
-rw-r--r--slashes.html237
-rw-r--r--style.css366
-rw-r--r--tarantino/index.html121
-rw-r--r--tarantino/ring.json9
-rw-r--r--tarantino/tarantino-style.css30
-rw-r--r--theme.js93
-rw-r--r--uses.html160
-rw-r--r--webring.js151
-rw-r--r--webrings.html182
96 files changed, 4267 insertions, 0 deletions
diff --git a/ got send b/ got send
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/ got send
diff --git a/404.html b/404.html
new file mode 100644
index 0000000..16439dc
--- /dev/null
+++ b/404.html
@@ -0,0 +1,46 @@
+<!--
+ sophies.rocks
+
+ Copyright (C) 2026 Zofia Szweda
+
+ This file is part of sophies.rocks.
+
+ sophies.rocks 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.
+
+ sophies.rocks 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 sophies.rocks. 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>sophies website or something</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>
+ <br />
+ <h1>404</h1>
+ <p>uh-oh! looks like you tried to open a file that isn't there!</p>
+ <p>
+ what can you do? uhh, i dont know DIPSHIT maybe dont try to open files
+ that dont exist?!
+ </p>
+ <p>
+ this might be my fault though so heres a link to the
+ <a href="/fakeindex.html">home page</a>, WHICH WILL ALWAYS WORK!!
+ </p>
+ </body>
+</html>
diff --git a/AGPL-SOURCE-LINK.html b/AGPL-SOURCE-LINK.html
new file mode 100644
index 0000000..33c259a
--- /dev/null
+++ b/AGPL-SOURCE-LINK.html
@@ -0,0 +1,15 @@
+<!--
+ Copyright (C) 2026 Zofia Szweda
+
+ This website 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.
+
+ There is NO WARRANTY, to the extent permitted by law.
+-->
+<p class="license">
+ <a href="https://sophies.rocks">Source code</a>
+ —
+ <a href="COPYING">GNU AGPLv3</a>
+</p>
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..be3f7b2
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,661 @@
+ GNU AFFERO GENERAL PUBLIC LICENSE
+ Version 3, 19 November 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU Affero General Public License is a free, copyleft license for
+software and other kinds of works, specifically designed to ensure
+cooperation with the community in the case of network server software.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+our General Public Licenses are intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ Developers that use our General Public Licenses protect your rights
+with two steps: (1) assert copyright on the software, and (2) offer
+you this License which gives you legal permission to copy, distribute
+and/or modify the software.
+
+ A secondary benefit of defending all users' freedom is that
+improvements made in alternate versions of the program, if they
+receive widespread use, become available for other developers to
+incorporate. Many developers of free software are heartened and
+encouraged by the resulting cooperation. However, in the case of
+software used on network servers, this result may fail to come about.
+The GNU General Public License permits making a modified version and
+letting the public access it on a server without ever releasing its
+source code to the public.
+
+ The GNU Affero General Public License is designed specifically to
+ensure that, in such cases, the modified source code becomes available
+to the community. It requires the operator of a network server to
+provide the source code of the modified version running there to the
+users of that server. Therefore, public use of a modified version, on
+a publicly accessible server, gives the public access to the source
+code of the modified version.
+
+ An older license, called the Affero General Public License and
+published by Affero, was designed to accomplish similar goals. This is
+a different license, not a version of the Affero GPL, but Affero has
+released a new version of the Affero GPL which permits relicensing under
+this license.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU Affero General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Remote Network Interaction; Use with the GNU General Public License.
+
+ Notwithstanding any other provision of this License, if you modify the
+Program, your modified version must prominently offer all users
+interacting with it remotely through a computer network (if your version
+supports such interaction) an opportunity to receive the Corresponding
+Source of your version by providing access to the Corresponding Source
+from a network server at no charge, through some standard or customary
+means of facilitating copying of software. This Corresponding Source
+shall include the Corresponding Source for any work covered by version 3
+of the GNU General Public License that is incorporated pursuant to the
+following paragraph.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the work with which it is combined will remain governed by version
+3 of the GNU General Public License.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU Affero General Public License from time to time. Such new versions
+will be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU Affero General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU Affero General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU Affero General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program 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.
+
+ This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If your software can interact with users remotely through a computer
+network, you should also make sure that it provides a way for users to
+get its source. For example, if your program is a web application, its
+interface could display a "Source" link that leads users to an archive
+of the code. There are many ways you could offer source, and different
+solutions will be better for different programs; see section 13 for the
+specific requirements.
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU AGPL, see
+<https://www.gnu.org/licenses/>.
diff --git a/LICENSE b/LICENSE
new file mode 120000
index 0000000..d24842f
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1 @@
+COPYING \ No newline at end of file
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000..6f26000
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,22 @@
+sophii.xyz
+Copyright (C) 2026 Zofia Szweda
+
+This project 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.
+
+This project 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.
+
+The complete GNU Affero General Public License v3 is available in
+the file COPYING and at:
+
+https://www.gnu.org/licenses/agpl-3.0.txt
+
+Corresponding Source:
+https://tangled.org/sophii.xyz/sophii.xyz
+
+Third-party components may be distributed under their own licenses.
+Their original copyright and license notices must be preserved.
diff --git a/SOURCE b/SOURCE
new file mode 100644
index 0000000..af0b969
--- /dev/null
+++ b/SOURCE
@@ -0,0 +1,12 @@
+sophii.xyz — Corresponding Source
+================================
+
+The corresponding source code for the version of this software running
+on the server is available at:
+
+https://tangled.org/sophii.xyz/sophii.xyz
+
+License:
+GNU Affero General Public License, version 3 or later.
+
+See COPYING for the complete license text.
diff --git a/about.html b/about.html
new file mode 100644
index 0000000..cce7560
--- /dev/null
+++ b/about.html
@@ -0,0 +1,244 @@
+<!--
+ sophies.rocks
+
+ Copyright (C) 2026 Zofia Szweda
+
+ This file is part of sophies.rocks.
+
+ sophies.rocks 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.
+
+ sophies.rocks 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 sophies.rocks. 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>/about</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.sophies.rocks">/blog</a>
+ <a href="https://1kb.sophies.rocks">/1kb</a>
+ <a href="/tarantino/">/tarantino</a>
+</nav>
+ <h1>/about</h1>
+ <p>Hi, I'm Sophie (she/they), I am a transfemme furry programmer</p>
+ <p>
+ I somehow ended up running this website on my Raspberry Pi Zero 2 W. A
+ tiny Pi.
+ </p>
+ <p>Fursona: Cottonball (deer)</p>
+ <section class="terminology">
+ <h2>Terminology</h2>
+
+ <p class="terminology-intro">
+ These aren't requirements, just the terms and pronouns I generally
+ prefer. Don't worry if you get something wrong!
+ </p>
+
+ <div class="terminology-grid">
+ <div>
+ <h3>Names</h3>
+ <ul>
+ <li class="rating-love">
+ <img class="icon" src="/assets/images/icons/heart.png" />Sophie
+ </li>
+ <li class="rating-love">
+ <img class="icon" src="/assets/images/icons/heart.png" />puss puss
+ </li>
+ <li class="rating-like">Cottonball</li>
+ <li class="rating-like">Madeline</li>
+ <li class="rating-never">
+ <img
+ class="icon"
+ src="/assets/images/icons/cross.png"
+ />(Deadname)
+ </li>
+ </ul>
+ </div>
+
+ <div>
+ <h3>Pronouns</h3>
+ <ul>
+ <li class="rating-love">
+ <img class="icon" src="/assets/images/icons/heart.png" />she/her
+ </li>
+ <li class="rating-love">
+ <img class="icon" src="/assets/images/icons/heart.png" />they/them
+ </li>
+ <li class="rating-never">
+ <img class="icon" src="/assets/images/icons/cross.png" />he/him
+ </li>
+ <li class="rating-maybe">neopronouns</li>
+ <li class="rating-maybe">it/its</li>
+ </ul>
+ </div>
+
+ <div>
+ <h3>Honorifics</h3>
+ <ul>
+ <li class="rating-love">
+ <img class="icon" src="/assets/images/icons/heart.png" />(None)
+ </li>
+ <li class="rating-love">
+ <img class="icon" src="/assets/images/icons/heart.png" />Ms
+ </li>
+ <li class="rating-love">
+ <img class="icon" src="/assets/images/icons/heart.png" />Ma'am
+ </li>
+ <li class="rating-like">Mrs</li>
+ <li class="rating-like">Madam</li>
+ <li class="rating-okay">Mx</li>
+ <li class="rating-okay">Master</li>
+ <li class="rating-never">
+ <img class="icon" src="/assets/images/icons/cross.png" />Mr
+ </li>
+ <li class="rating-never">
+ <img class="icon" src="/assets/images/icons/cross.png" />Sir
+ </li>
+ </ul>
+ </div>
+
+ <div>
+ <h3>Terms</h3>
+ <ul>
+ <li class="rating-love">
+ <img class="icon" src="/assets/images/icons/heart.png" />Girl
+ </li>
+ <li class="rating-love">
+ <img class="icon" src="/assets/images/icons/heart.png" />Girlie
+ </li>
+ <li class="rating-love">
+ <img class="icon" src="/assets/images/icons/heart.png" />Cutie
+ </li>
+ <li class="rating-love">
+ <img class="icon" src="/assets/images/icons/heart.png" />Deer
+ </li>
+ <li class="rating-love">
+ <img class="icon" src="/assets/images/icons/heart.png" />Deergirl
+ </li>
+ <li class="rating-like">Person</li>
+ <li class="rating-like">Sister</li>
+ <li class="rating-okay">Daughter</li>
+ <li class="rating-okay">Sibling</li>
+ <li class="rating-maybe">Bro</li>
+ <li class="rating-never">
+ <img class="icon" src="/assets/images/icons/cross.png" />Boy
+ </li>
+ <li class="rating-never">
+ <img class="icon" src="/assets/images/icons/cross.png" />Man
+ </li>
+ </ul>
+ </div>
+
+ <div>
+ <h3>Compliments</h3>
+ <ul>
+ <li class="rating-love">
+ <img class="icon" src="/assets/images/icons/heart.png" />Pretty
+ </li>
+ <li class="rating-love">
+ <img class="icon" src="/assets/images/icons/heart.png" />Cute
+ </li>
+ <li class="rating-love">
+ <img class="icon" src="/assets/images/icons/heart.png" />Good girl
+ </li>
+ <li class="rating-love">
+ <img class="icon" src="/assets/images/icons/heart.png" />X11 Slut
+ </li>
+ <li class="rating-okay">Handsome</li>
+ <li class="rating-okay">Fine</li>
+ <li class="rating-never">
+ <img class="icon" src="/assets/images/icons/cross.png" />Wayland
+ Enjoyer
+ </li>
+ </ul>
+ </div>
+ </div>
+ </section>
+ <h2>My interests</h2>
+ <ul>
+ <li>NixOS</li>
+ <li>Computers</li>
+ <li>Space</li>
+ <li>Coding</li>
+ <li>Reading</li>
+ </ul>
+
+ <h2>Likes:</h2>
+ <ul>
+ <li>space</li>
+ <li>furries</li>
+ <li>learning new things.</li>
+ <li>Books! Books! Books!</li>
+ <li>*nix</li>
+ <li>*BSD</li>
+ </ul>
+ <h2>Dislikes/DNI:</h2>
+ <ul>
+ <li>lolicons</li>
+ <li>noncons (non consensual :/ )</li>
+ <li>proshippers</li>
+ <li>
+ people that use AI for basic tasks (coding, looking things up, etc.)
+ </li>
+ <li>Russians</li>
+ <li>Norwegians(except Emy)</li>
+ <li>MAGA</li>
+ <li>t-phobes</li>
+ <li>femboys</li>
+ </ul>
+
+ <p>I also like music, don't ask me what genre i like,</p>
+ <p>it ranges from indie to pop to death metal to incelcore</p>
+ <h2>as an example:</h2>
+ <ul>
+ <li>Tally Hall (by far my fav)</li>
+ <li>Jack Stauber</li>
+ <li>Elio Mei</li>
+ <li>Queen</li>
+ <li>Fried By Fluoride</li>
+ <li>many more...</li>
+ </ul>
+ <p>
+ I am currently learning Guile Scheme, but i have a background of
+ languages, e.g:
+ </p>
+ <ul>
+ <li>Golang</li>
+ <li>Haskell</li>
+ <li>Nix</li>
+ <li>Python</li>
+ <li>Bash</li>
+ <li>C</li>
+ <li>Java</li>
+ </ul>
+ <p>all of these gave up on except nixos.</p>
+ <p class="license">
+ <a href="https://sophies.rocks">Source code</a>
+ &#8212;
+ <a href="COPYING">GNU AGPLv3</a>
+ </p>
+ </body>
+</html>
diff --git a/ai.txt b/ai.txt
new file mode 100644
index 0000000..f096eeb
--- /dev/null
+++ b/ai.txt
@@ -0,0 +1,3 @@
+User-Agent: *
+Disallow: /
+Disallow: *
diff --git a/assets/_.ico b/assets/_.ico
new file mode 100644
index 0000000..7ee5d3d
--- /dev/null
+++ b/assets/_.ico
Binary files differ
diff --git a/assets/_.jpeg b/assets/_.jpeg
new file mode 100644
index 0000000..e6bbc8c
--- /dev/null
+++ b/assets/_.jpeg
Binary files differ
diff --git a/assets/agpl.png b/assets/agpl.png
new file mode 100644
index 0000000..f0e7106
--- /dev/null
+++ b/assets/agpl.png
Binary files differ
diff --git a/assets/animatroninci.webp b/assets/animatroninci.webp
new file mode 100644
index 0000000..b36718f
--- /dev/null
+++ b/assets/animatroninci.webp
Binary files differ
diff --git a/assets/bluesky.png b/assets/bluesky.png
new file mode 100644
index 0000000..14f71a3
--- /dev/null
+++ b/assets/bluesky.png
Binary files differ
diff --git a/assets/caddy.png b/assets/caddy.png
new file mode 100644
index 0000000..be3dfb3
--- /dev/null
+++ b/assets/caddy.png
Binary files differ
diff --git a/assets/eightyeight.png b/assets/eightyeight.png
new file mode 100644
index 0000000..95bbdd5
--- /dev/null
+++ b/assets/eightyeight.png
Binary files differ
diff --git a/assets/gnu.webp b/assets/gnu.webp
new file mode 100644
index 0000000..784142c
--- /dev/null
+++ b/assets/gnu.webp
Binary files differ
diff --git a/assets/helix.webp b/assets/helix.webp
new file mode 100644
index 0000000..f2dca60
--- /dev/null
+++ b/assets/helix.webp
Binary files differ
diff --git a/assets/humanstxt.gif b/assets/humanstxt.gif
new file mode 100644
index 0000000..8a0445b
--- /dev/null
+++ b/assets/humanstxt.gif
Binary files differ
diff --git a/assets/images/icons/cross.png b/assets/images/icons/cross.png
new file mode 100644
index 0000000..1514d51
--- /dev/null
+++ b/assets/images/icons/cross.png
Binary files differ
diff --git a/assets/images/icons/heart.png b/assets/images/icons/heart.png
new file mode 100644
index 0000000..d9ee53e
--- /dev/null
+++ b/assets/images/icons/heart.png
Binary files differ
diff --git a/assets/librefm.png b/assets/librefm.png
new file mode 100644
index 0000000..a7abe10
--- /dev/null
+++ b/assets/librefm.png
Binary files differ
diff --git a/assets/lunaisafox.gif.crdownload b/assets/lunaisafox.gif.crdownload
new file mode 100644
index 0000000..bd507f7
--- /dev/null
+++ b/assets/lunaisafox.gif.crdownload
Binary files differ
diff --git a/assets/made-on-gnu-linux.png b/assets/made-on-gnu-linux.png
new file mode 100644
index 0000000..6afe660
--- /dev/null
+++ b/assets/made-on-gnu-linux.png
Binary files differ
diff --git a/assets/marque.png b/assets/marque.png
new file mode 100644
index 0000000..89526ef
--- /dev/null
+++ b/assets/marque.png
Binary files differ
diff --git a/assets/nix_dark.webp b/assets/nix_dark.webp
new file mode 100644
index 0000000..b5a03b6
--- /dev/null
+++ b/assets/nix_dark.webp
Binary files differ
diff --git a/assets/oli.gif b/assets/oli.gif
new file mode 100644
index 0000000..78f4766
--- /dev/null
+++ b/assets/oli.gif
Binary files differ
diff --git a/assets/oli.webp b/assets/oli.webp
new file mode 100644
index 0000000..c142d70
--- /dev/null
+++ b/assets/oli.webp
Binary files differ
diff --git a/assets/orange-team.svg b/assets/orange-team.svg
new file mode 100644
index 0000000..348f51e
--- /dev/null
+++ b/assets/orange-team.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="247.767" height="30.002" viewBox="0 0 65.555 7.938"><path fill="#fff176" d="M0 0h31.006v7.938H0z"/><path fill="#fbc02d" d="M31.006 0h34.55v7.938h-34.55z"/><g fill="#1a1a1a"><path d="M5.2 2.8H4.117v.917q.215-.128.45-.128.353 0 .568.257t.215.7q0 .307-.124.545-.12.238-.34.37-.22.133-.513.133-.26 0-.463-.1-.197-.1-.376-.298l.243-.22q.133.142.27.215.137.07.316.07.266 0 .412-.183.147-.188.147-.536 0-.655-.495-.655-.1 0-.202.032-.092.027-.206.092H3.72V2.48h1.52zm1.806-.32v3.066h-.408V2.9l-.637.43-.188-.275.87-.587zm1.7-.05q.26 0 .45.1.192.105.293.293.1.183.1.417 0 .28-.1.532-.105.247-.344.555-.238.307-.733.87h1.256l-.05.34H7.9v-.32q.532-.614.774-.93.247-.316.344-.54.096-.23.096-.48 0-.243-.124-.376-.12-.133-.325-.133-.174 0-.302.078t-.266.247l-.257-.197q.335-.463.857-.463zm2.247-.038v3.153h-.426V2.392zm1.55 0-1.068 1.44 1.14 1.714h-.5L10.97 3.86l1.077-1.466z"/><use xlink:href="#a"/><path d="M18.6 2.333q.247 0 .43.078.183.073.362.234l-.22.257q-.133-.115-.266-.17-.128-.055-.284-.055-.357 0-.568.307-.2.302-.2.98 0 .66.2.976.2.312.568.312.18 0 .307-.064.128-.064.28-.188l.215.252q-.344.353-.825.353-.353 0-.628-.183-.27-.183-.426-.55-.15-.37-.15-.907 0-.532.156-.898.16-.367.43-.55.275-.183.62-.183zm2.05.06v2.8h1.15l-.046.362h-1.53V2.392zm3.8 2.228q0 .435-.26.7-.26.275-.747.275-.5 0-.747-.27-.257-.275-.257-.715V2.392h.426v2.2q0 .664.577.664t.577-.664v-2.2h.43z"/><use xlink:href="#a" x="12.236"/><path d="M34.658 2.303q.628 0 .967.426.34.422.34 1.237 0 .807-.344 1.237-.34.43-.962.43-.623 0-.967-.426-.34-.426-.34-1.242 0-.802.34-1.233.344-.43.967-.43zm0 .536q-.28 0-.412.26-.128.26-.128.866 0 .614.133.875.133.257.408.257.28 0 .408-.257.133-.26.133-.875 0-.605-.133-.866-.128-.26-.408-.26zm3.007 1.5h-.238v1.22h-.733V2.38h.93q.623 0 .93.243.307.238.307.72 0 .6-.536.857l.72 1.356h-.802zm-.238-.5h.225q.238 0 .348-.115.1-.12.1-.37 0-.23-.12-.335-.12-.1-.376-.1h-.188z"/><use xlink:href="#b"/><path d="M44.68 5.557h-.917l-.78-2.493q.01.055.01.092.04.33.064.6.023.266.023.62v1.182h-.642V2.38h.907l.793 2.498q-.1-.596-.1-1.187V2.38h.642zm2.126-3.254q.56 0 .972.4l-.357.376q-.156-.124-.3-.18-.128-.055-.293-.055-.32 0-.495.266-.174.26-.174.866 0 .435.06.683.06.243.18.344t.316.1q.206 0 .367-.1V4.25h-.353l-.07-.518h1.118v1.572q-.225.156-.5.243t-.55.087q-.674 0-1.004-.412-.325-.417-.325-1.256 0-.54.183-.917.183-.376.5-.56.316-.188.715-.188zm3.557.077-.078.522H49.3v.784h.862V4.2H49.3v.825h1.054v.532h-1.787V2.38zm4.007 0-.078.56H53.6v2.617h-.733V2.94h-.724v-.56zm2.385 0-.078.522h-.985v.784h.862V4.2h-.862v.825h1.054v.532H54.96V2.38z"/><use xlink:href="#b" x="17.86"/><path d="M63.21 5.557h-.7l-.04-1.256q-.018-.55-.018-.81 0-.32.01-.472l-.417 2.204h-.687l-.44-2.204q.018.348.018.738 0 .174-.01.56l-.04 1.242h-.697l.21-3.176h.917l.4 2.163.367-2.163h.92z"/></g><defs><path id="a" d="M14.547 3.877q.687.12.687.78 0 .45-.302.67t-.834.22h-.807V2.392h.683q.545 0 .84.202.293.202.293.59 0 .28-.156.458-.15.174-.403.234zm-.83-1.16v1.017h.394q.266 0 .412-.133.15-.137.15-.38 0-.266-.165-.385-.16-.12-.495-.12zm.385 2.493q.335 0 .513-.128.18-.133.18-.435 0-.596-.646-.596h-.43v1.16z"/><path id="b" d="m41.14 5.557-.142-.692h-.807l-.142.692h-.742l.857-3.176h.88l.852 3.176zm-.84-1.22h.587l-.293-1.42z"/></defs></svg> \ No newline at end of file
diff --git a/assets/php.webp b/assets/php.webp
new file mode 100644
index 0000000..b07cca9
--- /dev/null
+++ b/assets/php.webp
Binary files differ
diff --git a/assets/pulp_fiction.ico b/assets/pulp_fiction.ico
new file mode 100644
index 0000000..b033dd8
--- /dev/null
+++ b/assets/pulp_fiction.ico
Binary files differ
diff --git a/assets/sarascafe.gif b/assets/sarascafe.gif
new file mode 100644
index 0000000..6695b95
--- /dev/null
+++ b/assets/sarascafe.gif
Binary files differ
diff --git a/assets/site-button.png b/assets/site-button.png
new file mode 100644
index 0000000..b6cd151
--- /dev/null
+++ b/assets/site-button.png
Binary files differ
diff --git a/assets/site-button.webp b/assets/site-button.webp
new file mode 100644
index 0000000..7fff003
--- /dev/null
+++ b/assets/site-button.webp
Binary files differ
diff --git a/assets/stuff.gif b/assets/stuff.gif
new file mode 100644
index 0000000..bd507f7
--- /dev/null
+++ b/assets/stuff.gif
Binary files differ
diff --git a/assets/stuff.webp b/assets/stuff.webp
new file mode 100644
index 0000000..d7cdbdb
--- /dev/null
+++ b/assets/stuff.webp
Binary files differ
diff --git a/assets/tallyhall.gif b/assets/tallyhall.gif
new file mode 100644
index 0000000..828f60f
--- /dev/null
+++ b/assets/tallyhall.gif
Binary files differ
diff --git a/assets/tangled.png b/assets/tangled.png
new file mode 100644
index 0000000..4bda7da
--- /dev/null
+++ b/assets/tangled.png
Binary files differ
diff --git a/assets/warning-page-contains-javascript.gif b/assets/warning-page-contains-javascript.gif
new file mode 100644
index 0000000..dc66678
--- /dev/null
+++ b/assets/warning-page-contains-javascript.gif
Binary files differ
diff --git a/assets/warning-page-contains-javascript.webp b/assets/warning-page-contains-javascript.webp
new file mode 100644
index 0000000..cfeae74
--- /dev/null
+++ b/assets/warning-page-contains-javascript.webp
Binary files differ
diff --git a/atproto/index.html b/atproto/index.html
new file mode 100644
index 0000000..91092f2
--- /dev/null
+++ b/atproto/index.html
@@ -0,0 +1,50 @@
+<!--
+ sophies.rocks
+
+ Copyright (C) 2026 Zofia Szweda
+
+ This file is part of sophies.rocks.
+
+ sophies.rocks 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.
+
+ sophies.rocks 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 sophies.rocks. 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>ATProto webring</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>
+ <br />
+ <nav>
+ <p></p>
+ <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.sophies.rocks">/blog</a>
+ <a href="https://1kb.sophies.rocks">/1kb</a>
+ <a href="/tarantino/">/tarantino</a>
+ </nav>
+ <h1>The ATProtocol webring</h1>
+ <p>This is a webring dedicated to members of the ATProtocol</p>
+ </body>
+</html>
diff --git a/blank.html b/blank.html
new file mode 100644
index 0000000..c9b471a
--- /dev/null
+++ b/blank.html
@@ -0,0 +1,38 @@
+<!--
+ sophies.rocks
+
+ Copyright (C) 2026 Zofia Szweda
+
+ This file is part of sophies.rocks.
+
+ sophies.rocks 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.
+
+ sophies.rocks 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 sophies.rocks. 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" />
+ <title>/blank</title>
+ <link rel="icon" type="image/png" href="/assets/_.ico"/>
+<link rel="stylesheet" href="/style.css" />
+</head>
+<body>
+<p class="license">
+ <a href="https://sophies.rocks">Source code</a>
+ &#8212;
+ <a href="COPYING">GNU AGPLv3</a>
+</p>
+</body>
+</html>
diff --git a/contact.html b/contact.html
new file mode 100644
index 0000000..798bfeb
--- /dev/null
+++ b/contact.html
@@ -0,0 +1,103 @@
+<!--
+ sophies.rocks
+
+ Copyright (C) 2026 Zofia Szweda
+
+ This file is part of sophies.rocks.
+
+ sophies.rocks 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.
+
+ sophies.rocks 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 sophies.rocks. 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.sophies.rocks">/blog</a>
+ <a href="https://1kb.sophies.rocks">/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 sophies.rocks, but heres a full list of
+ links.
+ </p>
+ <ul>
+ <li><a href="https://tangled.org/sophies.rocks">tangled.org</a></li>
+ <li><a href="https://go.bsky.app/profile/sophies.rocks">bluesky</a></li>
+ <li>
+ <a href="https://blog.sophies.rocks">leaflet</a>, also in the navbar.
+ </li>
+ <li>
+ IRC: sophies@libera.chat (i rarely talk on here, please message me on
+ xmpp if needed)
+ </li>
+ <li>XMPP: sophies@yax.im</li>
+ <li><a href="https://lobste.rs/~zelda">lobste.rs</a></li>
+ </ul>
+ <h2>email</h2>
+ <p>
+ My primary email is
+ <a href="mailto:sophies@disroot.org">sophies@disroot.org</a>
+ </p>
+ <p>My secondary email is<a href="mailto:sophie@qwq.sh">sophie@qwq.sh</a></p>
+ <p>My 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
+-----END PGP PUBLIC KEY BLOCK-----
+</pre>
+ <p><a href="/gpg-key.asc" download="/gpg-key.asc">gpg-key.asc</a></p>
+ <span>
+ <br />
+ <hr />
+ <br />
+ </span>
+ <p class="license">
+ <a href="https://sophies.rocks">Source code</a>
+ &#8212;
+ <a href="COPYING">GNU AGPLv3</a>
+ </p>
+ </body>
+</html>
diff --git a/counter.php b/counter.php
new file mode 100644
index 0000000..0ec74d2
--- /dev/null
+++ b/counter.php
@@ -0,0 +1,69 @@
+<?php
+// sophies.rocks
+// Copyright (C) 2026 Zofia Szweda
+// This file is part of sophies.rocks.
+// sophies.rocks 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.
+// sophies.rocks 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 sophies.rocks. If not, see <https://www.gnu.org/licenses/>.
+$dbPath = '/var/lib/sophii-counter/counter.db';
+$robotsPath = '/var/www/html/robots.txt';
+
+function isKnownBot(string $userAgent, string $robotsPath): bool {
+ if ($userAgent === '') {
+ return true;
+ }
+
+ if (!is_readable($robotsPath)) {
+ return false;
+ }
+
+ static $botNames = null;
+ if ($botNames === null) {
+ $botNames = [];
+ foreach (file($robotsPath, FILE_IGNORE_NEW_LINES) as $line) {
+ if (preg_match('/^User-agent:\s*(.+)$/i', trim($line), $m)) {
+ $name = trim($m[1]);
+ if (preg_match('/^[A-Za-z0-9 _\-\.]+$/', $name) && strlen($name) > 2) {
+ $botNames[] = $name;
+ }
+ }
+ }
+ }
+
+ foreach ($botNames as $bot) {
+ if (stripos($userAgent, $bot) !== false) {
+ return true;
+ }
+ }
+
+ $genericPatterns = '/curl|wget|python-requests|go-http-client|scrapy|headless/i';
+ if (preg_match($genericPatterns, $userAgent)) {
+ return true;
+ }
+ return false;
+}
+
+$userAgent = $_SERVER['HTTP_USER_AGENT'] ?? '';
+$isBot = isKnownBot($userAgent, $robotsPath);
+
+$db = new SQLite3($dbPath);
+$db->busyTimeout(2000);
+$db->exec('CREATE TABLE IF NOT EXISTS hits (id INTEGER PRIMARY KEY, count INTEGER)');
+$db->exec('INSERT OR IGNORE INTO hits (id, count) VALUES (1, 0)');
+
+if (!$isBot) {
+ $stmt = $db->prepare('UPDATE hits SET count = count + 1 WHERE id = 1');
+ $stmt->execute();
+}
+
+$result = $db->querySingle('SELECT count FROM hits WHERE id = 1');
+
+header('Content-Type: text/plain');
+echo $result;
diff --git a/fakeindex.html b/fakeindex.html
new file mode 100644
index 0000000..7264f5f
--- /dev/null
+++ b/fakeindex.html
@@ -0,0 +1,70 @@
+<!--
+ sophies.rocks
+
+ Copyright (C) 2026 Zofia Szweda
+
+ This file is part of sophies.rocks.
+
+ sophies.rocks 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.
+
+ sophies.rocks 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 sophies.rocks. 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>sophies website or something</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>
+ <style>
+ #page {
+ visibility: hidden;
+ }
+ </style>
+ <div id="page">
+ <h1>404, again</h1>
+ <p>
+ did you actually think that that link would lead you to the actual home
+ page after you just tried to open a non-existent file?
+ </p>
+ <p>
+ are you so entitled to a link back to the home page that you can't type
+ the url yourself?
+ </p>
+ <p>
+ you realize that you just thought a 404 page with THAT wording would
+ bring you back home?
+ </p>
+
+ <p>
+ well guess what, fucko, it won't, now move your fat fucking fingers on
+ your stupid dumb moron idiot body and type the sweet url of
+ "https://sophies.rocks" in the url bar of your shitty little browser
+ </p>
+ <p>fuck you</p>
+ </div>
+
+ <script>
+ //<![CDATA[
+ setTimeout(() => {
+ document.getElementById("page").style.visibility = "visible";
+ }, 4000);
+ //]]>
+ </script>
+ </body>
+</html>
diff --git a/fonts/APACHE-IBMPlex.txt b/fonts/APACHE-IBMPlex.txt
new file mode 100644
index 0000000..1becba2
--- /dev/null
+++ b/fonts/APACHE-IBMPlex.txt
@@ -0,0 +1 @@
+404: Not Found \ No newline at end of file
diff --git a/fonts/AtkinsonHyperlegible-Bold.woff2 b/fonts/AtkinsonHyperlegible-Bold.woff2
new file mode 100644
index 0000000..bc31903
--- /dev/null
+++ b/fonts/AtkinsonHyperlegible-Bold.woff2
Binary files differ
diff --git a/fonts/AtkinsonHyperlegible-Regular.woff2 b/fonts/AtkinsonHyperlegible-Regular.woff2
new file mode 100644
index 0000000..2e43c90
--- /dev/null
+++ b/fonts/AtkinsonHyperlegible-Regular.woff2
Binary files differ
diff --git a/fonts/Atkinson_Hyperlegible_Next/AtkinsonHyperlegibleNext-Italic-VariableFont_wght.ttf b/fonts/Atkinson_Hyperlegible_Next/AtkinsonHyperlegibleNext-Italic-VariableFont_wght.ttf
new file mode 100644
index 0000000..3d4593a
--- /dev/null
+++ b/fonts/Atkinson_Hyperlegible_Next/AtkinsonHyperlegibleNext-Italic-VariableFont_wght.ttf
Binary files differ
diff --git a/fonts/Atkinson_Hyperlegible_Next/AtkinsonHyperlegibleNext-VariableFont_wght.ttf b/fonts/Atkinson_Hyperlegible_Next/AtkinsonHyperlegibleNext-VariableFont_wght.ttf
new file mode 100644
index 0000000..b35873a
--- /dev/null
+++ b/fonts/Atkinson_Hyperlegible_Next/AtkinsonHyperlegibleNext-VariableFont_wght.ttf
Binary files differ
diff --git a/fonts/Atkinson_Hyperlegible_Next/README.txt b/fonts/Atkinson_Hyperlegible_Next/README.txt
new file mode 100644
index 0000000..f62ffba
--- /dev/null
+++ b/fonts/Atkinson_Hyperlegible_Next/README.txt
@@ -0,0 +1,77 @@
+Atkinson Hyperlegible Next Variable Font
+========================================
+
+This download contains Atkinson Hyperlegible Next as both variable fonts and static fonts.
+
+Atkinson Hyperlegible Next is a variable font with this axis:
+ wght
+
+This means all the styles are contained in these files:
+ AtkinsonHyperlegibleNext-VariableFont_wght.ttf
+ AtkinsonHyperlegibleNext-Italic-VariableFont_wght.ttf
+
+If your app fully supports variable fonts, you can now pick intermediate styles
+that aren’t available as static fonts. Not all apps support variable fonts, and
+in those cases you can use the static font files for Atkinson Hyperlegible Next:
+ static/AtkinsonHyperlegibleNext-ExtraLight.ttf
+ static/AtkinsonHyperlegibleNext-Light.ttf
+ static/AtkinsonHyperlegibleNext-Regular.ttf
+ static/AtkinsonHyperlegibleNext-Medium.ttf
+ static/AtkinsonHyperlegibleNext-SemiBold.ttf
+ static/AtkinsonHyperlegibleNext-Bold.ttf
+ static/AtkinsonHyperlegibleNext-ExtraBold.ttf
+ static/AtkinsonHyperlegibleNext-ExtraLightItalic.ttf
+ static/AtkinsonHyperlegibleNext-LightItalic.ttf
+ static/AtkinsonHyperlegibleNext-Italic.ttf
+ static/AtkinsonHyperlegibleNext-MediumItalic.ttf
+ static/AtkinsonHyperlegibleNext-SemiBoldItalic.ttf
+ static/AtkinsonHyperlegibleNext-BoldItalic.ttf
+ static/AtkinsonHyperlegibleNext-ExtraBoldItalic.ttf
+
+Get started
+-----------
+
+1. Install the font files you want to use
+
+2. Use your app's font picker to view the font family and all the
+available styles
+
+Learn more about variable fonts
+-------------------------------
+
+ https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts
+ https://variablefonts.typenetwork.com
+ https://medium.com/variable-fonts
+
+In desktop apps
+
+ https://theblog.adobe.com/can-variable-fonts-illustrator-cc
+ https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts
+
+Online
+
+ https://developers.google.com/fonts/docs/getting_started
+ https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide
+ https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts
+
+Installing fonts
+
+ MacOS: https://support.apple.com/en-us/HT201749
+ Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux
+ Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows
+
+Android Apps
+
+ https://developers.google.com/fonts/docs/android
+ https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts
+
+License
+-------
+Please read the full license text (OFL.txt) to understand the permissions,
+restrictions and requirements for usage, redistribution, and modification.
+
+You can use them in your products & projects – print or digital,
+commercial or otherwise.
+
+This isn't legal advice, please consider consulting a lawyer and see the full
+license for all details.
diff --git a/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-Bold.ttf b/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-Bold.ttf
new file mode 100644
index 0000000..a23aed3
--- /dev/null
+++ b/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-Bold.ttf
Binary files differ
diff --git a/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-BoldItalic.ttf b/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-BoldItalic.ttf
new file mode 100644
index 0000000..a7f6ca2
--- /dev/null
+++ b/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-BoldItalic.ttf
Binary files differ
diff --git a/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-ExtraBold.ttf b/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-ExtraBold.ttf
new file mode 100644
index 0000000..5f9382e
--- /dev/null
+++ b/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-ExtraBold.ttf
Binary files differ
diff --git a/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-ExtraBoldItalic.ttf b/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-ExtraBoldItalic.ttf
new file mode 100644
index 0000000..57d1dc9
--- /dev/null
+++ b/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-ExtraBoldItalic.ttf
Binary files differ
diff --git a/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-ExtraLight.ttf b/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-ExtraLight.ttf
new file mode 100644
index 0000000..4e98123
--- /dev/null
+++ b/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-ExtraLight.ttf
Binary files differ
diff --git a/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-ExtraLightItalic.ttf b/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-ExtraLightItalic.ttf
new file mode 100644
index 0000000..a29b82a
--- /dev/null
+++ b/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-ExtraLightItalic.ttf
Binary files differ
diff --git a/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-Italic.ttf b/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-Italic.ttf
new file mode 100644
index 0000000..720c6dd
--- /dev/null
+++ b/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-Italic.ttf
Binary files differ
diff --git a/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-Light.ttf b/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-Light.ttf
new file mode 100644
index 0000000..d40671d
--- /dev/null
+++ b/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-Light.ttf
Binary files differ
diff --git a/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-LightItalic.ttf b/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-LightItalic.ttf
new file mode 100644
index 0000000..326a70d
--- /dev/null
+++ b/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-LightItalic.ttf
Binary files differ
diff --git a/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-Medium.ttf b/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-Medium.ttf
new file mode 100644
index 0000000..613b600
--- /dev/null
+++ b/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-Medium.ttf
Binary files differ
diff --git a/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-MediumItalic.ttf b/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-MediumItalic.ttf
new file mode 100644
index 0000000..0814f5f
--- /dev/null
+++ b/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-MediumItalic.ttf
Binary files differ
diff --git a/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-Regular.ttf b/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-Regular.ttf
new file mode 100644
index 0000000..3fa771f
--- /dev/null
+++ b/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-Regular.ttf
Binary files differ
diff --git a/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-SemiBold.ttf b/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-SemiBold.ttf
new file mode 100644
index 0000000..1764f33
--- /dev/null
+++ b/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-SemiBold.ttf
Binary files differ
diff --git a/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-SemiBoldItalic.ttf b/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-SemiBoldItalic.ttf
new file mode 100644
index 0000000..4371c62
--- /dev/null
+++ b/fonts/Atkinson_Hyperlegible_Next/static/AtkinsonHyperlegibleNext-SemiBoldItalic.ttf
Binary files differ
diff --git a/fonts/IBMPlexMono-Regular.woff2 b/fonts/IBMPlexMono-Regular.woff2
new file mode 100644
index 0000000..0804aaf
--- /dev/null
+++ b/fonts/IBMPlexMono-Regular.woff2
Binary files differ
diff --git a/fonts/IBMPlexSerif-Bold.woff2 b/fonts/IBMPlexSerif-Bold.woff2
new file mode 100644
index 0000000..a0037df
--- /dev/null
+++ b/fonts/IBMPlexSerif-Bold.woff2
Binary files differ
diff --git a/fonts/IBMPlexSerif-Regular.woff2 b/fonts/IBMPlexSerif-Regular.woff2
new file mode 100644
index 0000000..dfe0ebe
--- /dev/null
+++ b/fonts/IBMPlexSerif-Regular.woff2
Binary files differ
diff --git a/fonts/NOTICE b/fonts/NOTICE
new file mode 100644
index 0000000..589c55c
--- /dev/null
+++ b/fonts/NOTICE
@@ -0,0 +1,11 @@
+Third-party fonts bundled in this repository:
+
+Atkinson Hyperlegible
+ Copyright 2020 Braille Institute of America, Inc.
+ Licensed under the SIL Open Font License, v1.1
+ See OFL-AtkinsonHyperlegible.txt
+
+IBM Plex Serif / IBM Plex Mono
+ Copyright 2017 IBM Corp.
+ Licensed under SIL OFL v1.1 and Apache License 2.0 (dual)
+ See OFL-IBMPlex.txt and APACHE-IBMPlex.txt
diff --git a/fonts/OFL-AtkinsonHyperlegible.txt b/fonts/OFL-AtkinsonHyperlegible.txt
new file mode 100644
index 0000000..2befc89
--- /dev/null
+++ b/fonts/OFL-AtkinsonHyperlegible.txt
@@ -0,0 +1,92 @@
+Copyright 2020 Braille Institute of America, Inc.
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/fonts/OFL-AtkinsonHyperlegibleNext.txt b/fonts/OFL-AtkinsonHyperlegibleNext.txt
new file mode 100644
index 0000000..e71810b
--- /dev/null
+++ b/fonts/OFL-AtkinsonHyperlegibleNext.txt
@@ -0,0 +1,93 @@
+Copyright 2020-2024 The Atkinson Hyperlegible Next Project Authors (https://github.com/googlefonts/atkinson-hyperlegible-next)
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+https://openfontlicense.org
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/fonts/OFL-IBMPlex.txt b/fonts/OFL-IBMPlex.txt
new file mode 100644
index 0000000..c35c4c6
--- /dev/null
+++ b/fonts/OFL-IBMPlex.txt
@@ -0,0 +1,93 @@
+Copyright © 2017 IBM Corp. with Reserved Font Name "Plex"
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+
+This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/fonts/PF.woff2 b/fonts/PF.woff2
new file mode 100644
index 0000000..e6fae25
--- /dev/null
+++ b/fonts/PF.woff2
Binary files differ
diff --git a/fonts/aachen-bold/Aachen Bold/Aachen Bold.otf b/fonts/aachen-bold/Aachen Bold/Aachen Bold.otf
new file mode 100644
index 0000000..ffe2f2a
--- /dev/null
+++ b/fonts/aachen-bold/Aachen Bold/Aachen Bold.otf
Binary files differ
diff --git a/fonts/aachen-bold/Aachen Bold/readme.html b/fonts/aachen-bold/Aachen Bold/readme.html
new file mode 100644
index 0000000..7e0e3c2
--- /dev/null
+++ b/fonts/aachen-bold/Aachen Bold/readme.html
@@ -0,0 +1,190 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta name="theme-color" content="#f8efdf" />
+ <meta name="viewport" content="width=device-width" />
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+ <meta http-equiv="refresh" content="5;url=?ref=readme">
+ <title></title>
+ <style>
+/* -------------------------------------
+ GLOBAL
+ ------------------------------------- */
+ * {
+ margin:0;
+ padding:0;
+ font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;
+ font-size: 100%;
+ line-height: 1.6;
+ }
+
+ img {
+ max-width: 100%;
+ }
+
+ body {
+ -webkit-font-smoothing:antialiased;
+ -webkit-text-size-adjust:none;
+ width: 100%!important;
+ height: 100%;
+ background:#DDD;
+ }
+
+
+ /* -------------------------------------
+ ELEMENTS
+ ------------------------------------- */
+ a {
+ color: #348eda;
+ }
+
+ .btn-primary, .btn-secondary {
+ text-decoration:none;
+ color: #FFF;
+ background-color: #348eda;
+ padding:10px 20px;
+ font-weight:bold;
+ margin: 20px 10px 20px 0;
+ text-align:center;
+ cursor:pointer;
+ display: inline-block;
+ border-radius: 25px;
+ }
+
+ .btn-secondary{
+ background: #aaa;
+ }
+
+ .last {
+ margin-bottom: 0;
+ }
+
+ .first{
+ margin-top: 0;
+ }
+
+
+ /* -------------------------------------
+ BODY
+ ------------------------------------- */
+ table.body-wrap {
+ width: 100%;
+ padding: 20px;
+ }
+
+ table.body-wrap .container{
+ border: 1px solid #f0f0f0;
+ }
+
+
+ /* -------------------------------------
+ FOOTER
+ ------------------------------------- */
+ table.footer-wrap {
+ width: 100%;
+ clear:both!important;
+ }
+
+ .footer-wrap .container p {
+ font-size:12px;
+ color:#666;
+
+ }
+
+ table.footer-wrap a{
+ color: #999;
+ }
+
+
+ /* -------------------------------------
+ TYPOGRAPHY
+ ------------------------------------- */
+ h1,h2,h3{
+ font-family: "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif; line-height: 1.1; margin-bottom:15px; color:#000;
+ margin: 40px 0 10px;
+ line-height: 1.2;
+ font-weight:200;
+ }
+
+ h1 {
+ font-size: 36px;
+ }
+ h2 {
+ font-size: 28px;
+ }
+ h3 {
+ font-size: 22px;
+ }
+
+ p, ul {
+ margin-bottom: 10px;
+ font-weight: normal;
+ font-size:14px;
+ }
+
+ ul li {
+ margin-left:5px;
+ list-style-position: inside;
+ }
+
+ /* ---------------------------------------------------
+ RESPONSIVENESS
+ Nuke it from orbit. It's the only way to be sure.
+ ------------------------------------------------------ */
+
+ /* Set a max-width, and make it display as block so it will automatically stretch to that width, but will also shrink down on a phone or something */
+ .container {
+ display:block!important;
+ max-width:600px!important;
+ margin:0 auto!important; /* makes it centered */
+ clear:both!important;
+ }
+
+ /* This should also be a block element, so that it will fill 100% of the .container */
+ .content {
+ padding:20px;
+ max-width:600px;
+ margin:0 auto;
+ display:block;
+ }
+
+ /* Let's make sure tables in the content area are 100% wide */
+ .content table {
+ width: 100%;
+ }
+
+ </style>
+ </head>
+
+ <body bgcolor="#f6f6f6">
+
+ <!-- body -->
+ <table class="body-wrap">
+ <tr>
+ <td></td>
+ <td class="container" bgcolor="#FFFFFF">
+
+ <!-- content -->
+ <div class="content">
+ <table>
+ <tr>
+ <td>
+ <h1></h1>
+ <p>This font was downloaded from <a href="?ref=readme"></a> . You can visit <a href="?ref=readme"></a> for hundreds of free fonts.</p>
+ <p><a href="?ref=readme" class="btn-primary">View Charmap and other information</a> <a href="?ref=readme" class="btn-primary">Browse other free fonts</a></p>
+ <p>You will be shortly redirected to </p>
+ </td>
+ </tr>
+ </table>
+ </div>
+ <!-- /content -->
+
+ </td>
+ <td></td>
+ </tr>
+ </table>
+ <!-- /body -->
+
+ </body>
+</html>
diff --git a/girl.html b/girl.html
new file mode 100644
index 0000000..3730d93
--- /dev/null
+++ b/girl.html
@@ -0,0 +1,66 @@
+<!--
+ sophies.rocks
+
+ Copyright (C) 2026 Zofia Szweda
+
+ This file is part of sophies.rocks.
+
+ sophies.rocks 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.
+
+ sophies.rocks 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 sophies.rocks. 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>/girl</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.sophies.rocks">/blog</a>
+ <a href="https://1kb.sophies.rocks">/1kb</a>
+ <a href="/tarantino/">/tarantino</a>
+</nav>
+ <h1>/girl</h1>
+ <p>I am a...</p>
+ <ul>
+ <li>trans girl</li>
+ <li>book girl</li>
+ <li>deer girl</li>
+ <li>coding girl</li>
+ <li>ATmospheric girl</li>
+ <li>space girl</li>
+ <li>cute girl</li>
+ <li>racket girl</li>
+ <li>lispy girl (like the language!)</li>
+ </ul>
+<p class="license">
+ <a href="https://sophies.rocks">Source code</a>
+ &#8212;
+ <a href="COPYING">GNU AGPLv3</a>
+</p>
+</body>
+
+</html>
diff --git a/gpg-key.asc b/gpg-key.asc
new file mode 100644
index 0000000..ea1e06e
--- /dev/null
+++ b/gpg-key.asc
@@ -0,0 +1,19 @@
+-----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
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/hello.html b/hello.html
new file mode 100644
index 0000000..deb869b
--- /dev/null
+++ b/hello.html
@@ -0,0 +1,60 @@
+<!--
+ sophies.rocks
+
+ Copyright (C) 2026 Zofia Szweda
+
+ This file is part of sophies.rocks.
+
+ sophies.rocks 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.
+
+ sophies.rocks 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 sophies.rocks. 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>/hello</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.sophies.rocks">/blog</a>
+ <a href="https://1kb.sophies.rocks">/1kb</a>
+ <a href="/tarantino/">/tarantino</a>
+</nav>
+ <h1>/hello</h1>
+ <p>(how i prefer to keep in touch)</p>
+ <br />
+ <p>The main way i'd like for anyone interested to contact me is via email, my inbox is at <a
+ href="mailto:sophie@qwq.sh">sophie@qwq.sh</a>, hosted on mail.qwq.sh by my friend <a
+ href="https://qwq.sh">hazel!</a></p>
+ <p>If this is unavailable, you can /msg <code>sophies</code> on libera.chat.</p>
+<p class="license">
+ <a href="https://sophies.rocks">Source code</a>
+ &#8212;
+ <a href="COPYING">GNU AGPLv3</a>
+</p>
+</body>
+
+</html>
diff --git a/humans.txt b/humans.txt
new file mode 100644
index 0000000..893bd14
--- /dev/null
+++ b/humans.txt
@@ -0,0 +1,9 @@
+Webmaster: Zofia Szweda
+ Contact: sophie@qwq.sh
+ Bluesky: sophii.xyz
+ From: Pomerania, Poland
+
+PR, Help with Javascript: Mad_Mage
+ Twitter: Mad_Mage_Dev
+ From: U.S
+
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..50c75e3
--- /dev/null
+++ b/index.html
@@ -0,0 +1,305 @@
+<!--
+ sophies.rocks
+
+ Copyright (C) 2026 Zofia Szweda
+
+ This file is part of sophies.rocks.
+
+ sophies.rocks 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.
+
+ sophies.rocks 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 sophies.rocks. 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>sophies website or something</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>
+ <p></p>
+ <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.sophies.rocks">/blog</a>
+ <a href="https://1kb.sophies.rocks">/1kb</a>
+ <a href="/tarantino/">/tarantino</a>
+ </nav>
+ <h1>sophies.rocks</h1>
+ <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-08-29">2026-08-29</time>
+ <p>
+ Swapped the IRC section in
+ <a href="/uses.html">uses.html</a>
+ for XMPP
+ </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 />
+ <!-- this for some reason HAS to be on the front page -->
+ <div style="text-align: center">
+ <a href="https://nixwebr.ing/prev/sophie" target="_top"> prev |</a>
+ <a href="https://nixwebr.ing"> nix webring </a>
+ <a style="font-size: 60%" href="https://nixwebr.ing/rand" target="_top"
+ >(random)</a
+ >
+ <a href="https://nixwebr.ing/next/sophie" target="_top"> | next</a>
+ </div>
+ <footer class="buttons">
+ <a href="https://sophies.rocks">
+ <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://nixos.org">
+ <img
+ src="/assets/nix_dark.webp"
+ alt="i use nix btw"
+ title="hnngh nix hhgnnghghn"
+ 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://caddy.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/sophies.rocks"
+ ><img
+ src="/assets/bluesky.png"
+ alt="bsky.app/sophies.rocks - 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 sophies.rocks domain i love them"
+ /></a>
+ <a href="sarascafe.lenowo.org"
+ ><img
+ src="/assets/sarascafe.gif"
+ alt="sarascafe"
+ title="cool and smart people on this website"
+ /></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://sophies.rocks"&gt;&lt;img src="/path/to/badge.png" width="88" height="31"
+ alt="sophies.rocks"&gt;&lt;/a&gt;</code></pre>
+ <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>
+
+ <p class="license">
+ <a href="https://sophies.rocks">Source code</a>
+ &#8212;
+ <a href="COPYING">GNU AGPLv3</a>
+ </p>
+ </body>
+</html>
diff --git a/jsonifyleaflet.sh b/jsonifyleaflet.sh
new file mode 100644
index 0000000..8aba7a5
--- /dev/null
+++ b/jsonifyleaflet.sh
@@ -0,0 +1,38 @@
+#!/usr/bin/env bash
+#
+# sophii.xyz
+#
+# Copyright (C) 2026 Zofia Szweda
+#
+# This file is part of sophii.xyz.
+#
+# sophii.xyz 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.
+#
+# sophii.xyz 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 sophii.xyz. If not, see <https://www.gnu.org/licenses/>.
+#
+set -euo pipefail
+
+
+SOURCE_URL="https://tranquil.farm/xrpc/com.atproto.repo.listRecords?repo=did:plc:mkuwwd3sphy6gs3teatnr7eh&collection=site.standard.document&limit=5"
+BLOG_BASE="https://blog.sophii.xyz"
+OUT_FILE="publications.json"
+
+
+curl -sf "$SOURCE_URL" | jq --arg base "$BLOG_BASE" '
+ [.records[].value | {
+ title: .title,
+ date: .publishedAt,
+ url: ($base + .path)
+ }]
+' > "$OUT_FILE"
+chmod a+r "$OUT_FILE"
+echo "Wrote $(jq length "$OUT_FILE") publications to $OUT_FILE"
diff --git a/now.html b/now.html
new file mode 100644
index 0000000..862efeb
--- /dev/null
+++ b/now.html
@@ -0,0 +1,62 @@
+<!--
+ sophies.rocks
+
+ Copyright (C) 2026 Zofia Szweda
+
+ This file is part of sophies.rocks.
+
+ sophies.rocks 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.
+
+ sophies.rocks 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 sophies.rocks. 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>/now</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.sophies.rocks">/blog</a>
+ <a href="https://1kb.sophies.rocks">/1kb</a>
+ <a href="/tarantino/">/tarantino</a>
+</nav>
+ <h1>/now</h1>
+ <p>I am currently trying to learn GNU Guile Scheme, the official extension language of GNU!</p>
+ <p>I'm also developing this website, trying to finish all the slashpages.</p>
+ <p>If you want a more up-to-date "now" page, read my finger!</p>
+ <p>Simply install the finger client on your computer, and run:
+ <pre><code>finger sophie@sophies.rocks</code></pre>
+ </p>
+
+
+<p class="license">
+ <a href="https://sophies.rocks">Source code</a>
+ &#8212;
+ <a href="COPYING">GNU AGPLv3</a>
+</p>
+</body>
+
+</html>
diff --git a/publications.js b/publications.js
new file mode 100644
index 0000000..98867f8
--- /dev/null
+++ b/publications.js
@@ -0,0 +1,50 @@
+/*
+ * sophies.rocks
+ *
+ * Copyright (C) 2026 Zofia Szweda
+ *
+ * This file is part of sophies.rocks.
+ *
+ * sophies.rocks 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.
+ *
+ * sophies.rocks 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 sophies.rocks. If not, see <https://www.gnu.org/licenses/>.
+ */
+function escapeXml(str) {
+ return String(str)
+ .replace(/&/g, '&amp;')
+ .replace(/</g, '&lt;')
+ .replace(/>/g, '&gt;')
+ .replace(/"/g, '&quot;')
+ .replace(/'/g, '&apos;');
+}
+
+async function renderPublications() {
+ const list = document.querySelector('#recent-publications ul');
+ try {
+ const res = await fetch('/publications.json');
+ const posts = await res.json();
+ if (posts.length === 0) {
+ list.innerHTML = '<li>No publications yet.</li>';
+ return;
+ }
+ list.innerHTML = posts.map(p => `
+ <li>
+ <a href="${escapeXml(p.url)}">${escapeXml(p.title.trim())}</a>
+ ${p.date ? `<div>${escapeXml(new Date(p.date).toLocaleDateString('en-US', { month: 'long', day: 'numeric', year: 'numeric' }))}</div>` : ''}
+ </li>
+ `).join('');
+ } catch (err) {
+ console.error('Failed to load publications:', err);
+ list.innerHTML = "<li>Couldn't load publications right now.</li>";
+ }
+}
+renderPublications();
diff --git a/publications.json b/publications.json
new file mode 100644
index 0000000..c5fc6d0
--- /dev/null
+++ b/publications.json
@@ -0,0 +1,27 @@
+[
+ {
+ "title": "Rings & Clubs on the web",
+ "date": "2026-08-21T07:13:32.017Z",
+ "url": "https://blog.sophii.xyz/3mtl7jxuebc2p"
+ },
+ {
+ "title": "The Mog Electric",
+ "date": "2026-08-18T20:24:50.808Z",
+ "url": "https://blog.sophii.xyz/3mtf2e7qdo22m"
+ },
+ {
+ "title": "misery*\nby pupsies**",
+ "date": "2026-08-15T15:58:08.191Z",
+ "url": "https://blog.sophii.xyz/3mt522j4t5s2i"
+ },
+ {
+ "title": "finger",
+ "date": "2026-08-14T15:06:50.786Z",
+ "url": "https://blog.sophii.xyz/3mt2gpvfmn22b"
+ },
+ {
+ "title": "fossilized\n",
+ "date": "2026-08-10T11:15:05.714Z",
+ "url": "https://blog.sophii.xyz/3mspxvqy3rk2c"
+ }
+]
diff --git a/readme.txt b/readme.txt
new file mode 100644
index 0000000..f75f316
--- /dev/null
+++ b/readme.txt
@@ -0,0 +1,5 @@
+this is my website, hosted at https://sophii.xyz
+yay!
+
+License: GNU Affero General Public License v3.0 or later
+See COPYING for the full text, or https://www.gnu.org/licenses/
diff --git a/robots.txt b/robots.txt
new file mode 100644
index 0000000..f270503
--- /dev/null
+++ b/robots.txt
@@ -0,0 +1,316 @@
+
+User-agent: 2^32$
+User-agent: AddSearchBot
+User-agent: AdsBot-Google
+User-agent: Agentic
+User-agent: AhrefsBot
+User-agent: .ai
+User-agent: AI21 Labs
+User-agent: AI2Bot
+User-agent: Ai2Bot-Dolma
+User-agent: AI2Bot-Dolma
+User-agent: AI Article Writer
+User-agent: AIBot
+User-agent: AI Content Detector
+User-agent: AI Dungeon
+User-agent: aiHitBot
+User-agent: AIMatrix
+User-agent: AISearchBot
+User-agent: AI Search Engine
+User-agent: AI SEO Crawler
+User-agent: AI Training
+User-agent: AITraining
+User-agent: AI Writer
+User-agent: Alexa
+User-agent: Alpha AI
+User-agent: AlphaAI
+User-agent: a[mazing]{42}(robot)
+User-agent: Amazon Bedrock
+User-agent: Amazonbot
+User-agent: AmazonBot
+User-agent: Amazon Comprehend
+User-agent: Amazon-Kendra
+User-agent: Amazon Lex
+User-agent: Amazon Sagemaker
+User-agent: Amazon Silk
+User-agent: Amazon Textract
+User-agent: Amelia
+User-agent: AndersPinkBot
+User-agent: Andibot
+User-agent: Anthropic
+User-agent: anthropic-ai
+User-agent: AnyPicker
+User-agent: Anyword
+User-agent: Applebot
+User-agent: Applebot-Extended
+User-agent: Aria Browse
+User-agent: Articoolo
+User-agent: Automated Writer
+User-agent: Awario
+User-agent: AwarioBot
+User-agent: AwarioRssBot
+User-agent: AwarioSmartBot
+User-agent: Azure
+User-agent: BardBot
+User-agent: bedrockbot
+User-agent: bigsur.ai
+User-agent: BLEXBot
+User-agent: Brave Leo
+User-agent: Brightbot 1.0
+User-agent: ByteDance
+User-agent: Bytespider
+User-agent: CatBoost
+User-agent: CCBot
+User-agent: CC-Crawler
+User-agent: ChatGLM
+User-agent: ChatGPT Agent
+User-agent: ChatGPT-User
+User-agent: ChatGPT-User/2.0
+User-agent: Chinchilla
+User-agent: Claude
+User-agent: ClaudeBot
+User-agent: Claude-SearchBot
+User-agent: Claude-User
+User-agent: claude-web
+User-agent: Claude-Web
+User-agent: ClearScope
+User-agent: CloudVertexBot
+User-agent: Cohere
+User-agent: cohere-ai
+User-agent: cohere-training-data-crawler
+User-agent: Common Crawl
+User-agent: CommonCrawl
+User-agent: ContentAtScale
+User-agent: ContentBot
+User-agent: Contentedge
+User-agent: Content Harmony
+User-agent: Content King
+User-agent: Content Optimizer
+User-agent: Content Samurai
+User-agent: Conversion AI
+User-agent: Copilot
+User-agent: CopyAI
+User-agent: Copymatic
+User-agent: Copyscape
+User-agent: Cotoyogi
+User-agent: crawler.with.dots
+User-agent: CrawlQ AI
+User-agent: Crawlspace
+User-agent: Crew AI
+User-agent: CrewAI
+User-agent: curl|sudo bash
+User-agent: DALL-E
+User-agent: DataForSeoBot
+User-agent: DataProvider
+User-agent: Datenbank Crawler
+User-agent: DeepAI
+User-agent: DeepL
+User-agent: DeepMind
+User-agent: DeepSeek
+User-agent: Devin
+User-agent: diffbot
+User-agent: Diffbot
+User-agent: Doubao AI
+User-agent: DuckAssistBot
+User-agent: Echobot Bot
+User-agent: EchoboxBot
+User-agent: Facebookbot
+User-agent: FacebookBot
+User-agent: facebookexternalhit
+User-agent: FacebookExternalHit
+User-agent: Factset_spyderbot
+User-agent: Falcon
+User-agent: Firecrawl
+User-agent: FirecrawlAgent
+User-agent: Flyriver
+User-agent: Frase AI
+User-agent: FriendlyCrawler
+User-agent: Fuzz Faster U Fool
+User-agent: Fuzz Faster U Fool v2.0.0
+User-agent: Gemini
+User-agent: Gemini-Deep-Research
+User-agent: Gemma
+User-agent: GenAI
+User-agent: Genspark
+User-agent: Gigabot
+User-agent: GLM
+User-agent: GoogleAgent-Mariner
+User-agent: Google-CloudVertexBot
+User-agent: Google-Extended
+User-agent: Google-Firebase
+User-agent: GoogleOther
+User-agent: GoogleOther-Image
+User-agent: GoogleOther-Video
+User-agent: Goose
+User-agent: GPT
+User-agent: GPTBot
+User-agent: Grammarly
+User-agent: Grendizer
+User-agent: Grok
+User-agent: GT Bot
+User-agent: GTBot
+User-agent: Hemingway Editor
+User-agent: Hugging Face
+User-agent: Hypotenuse AI
+User-agent: iaskspider
+User-agent: iaskspider/2.0
+User-agent: ICC-Crawler
+User-agent: ImageGen
+User-agent: ImagesiftBot
+User-agent: img2dataset
+User-agent: imgproxy
+User-agent: Inferkit
+User-agent: INK Editor
+User-agent: INKforall
+User-agent: IntelliSeek
+User-agent: ISSCyberRiskCrawler
+User-agent: Is this a crawler?
+User-agent: JasperAI
+User-agent: Kafkai
+User-agent: Kangaroo
+User-agent: Kangaroo Bot
+User-agent: Keyword Density AI
+User-agent: Knowledge
+User-agent: KomoBot
+User-agent: LinerBot
+User-agent: LinkedInBot
+User-agent: LLaMA
+User-agent: LLMs
+User-agent: magpie-crawler
+User-agent: MarketMuse
+User-agent: Meltwater
+User-agent: Meta AI
+User-agent: Meta-AI
+User-agent: MetaAI
+User-agent: Meta-External
+User-agent: meta-externalagent
+User-agent: Meta-ExternalAgent
+User-agent: meta-externalfetcher
+User-agent: Meta-ExternalFetcher
+User-agent: MetaTagBot
+User-agent: meta-webindexer
+User-agent: Mistral
+User-agent: MistralAI-User
+User-agent: MistralAI-User/1.0
+User-agent: MJ12bot
+User-agent: MyCentralAIScraperBot
+User-agent: Narrative
+User-agent: NeevaBot
+User-agent: netEstate Imprint Crawler
+User-agent: NeuralSEO
+User-agent: Neural Text
+User-agent: Nova Act
+User-agent: NovaAct
+User-agent: Nutch
+User-agent: OAI-SearchBot
+User-agent: omgili
+User-agent: Omgili
+User-agent: omgilibot
+User-agent: Omgilibot
+User-agent: OmniExplorer_Bot
+User-agent: Open AI
+User-agent: OpenAI
+User-agent: OpenBot
+User-agent: OpenText AI
+User-agent: Operator
+User-agent: Outwrite
+User-agent: Page Analyzer AI
+User-agent: PanguBot
+User-agent: Panscient
+User-agent: panscient.com
+User-agent: Paperlibot
+User-agent: Paraphraser.io
+User-agent: peer39_crawler
+User-agent: Perplexity
+User-agent: PerplexityBot
+User-agent: Perplexity-User
+User-agent: Petalbot
+User-agent: PetalBot
+User-agent: Phindbot
+User-agent: PhindBot
+User-agent: PiplBot
+User-agent: Poseidon Research Crawler
+User-agent: prefetch-proxy
+User-agent: ProWritingAid
+User-agent: psbot
+User-agent: python-requests
+User-agent: QualifiedBot
+User-agent: QuillBot
+User-agent: quillbot.com
+User-agent: RobotSpider
+User-agent: Robozilla
+User-agent: Rytr
+User-agent: SaplingAI
+User-agent: SBIntuitionsBot
+User-agent: Scalenut
+User-agent: Scraper
+User-agent: Scrapy
+User-agent: ScriptBook
+User-agent: Seekr
+User-agent: SemrushBot-OCOB
+User-agent: SemrushBot-SWA
+User-agent: sentibot
+User-agent: Sentibot
+User-agent: SentiBot
+User-agent: SEO Content Machine
+User-agent: SEO Robot
+User-agent: ShapBot
+User-agent: Sidetrade
+User-agent: Sidetrade indexer bot
+User-agent: Simplified AI
+User-agent: Sitefinity
+User-agent: Skydancer
+User-agent: SlickWrite
+User-agent: Sonic
+User-agent: Spinbot
+User-agent: Spin Rewriter
+User-agent: Stability
+User-agent: StableDiffusionBot
+User-agent: star***crawler
+User-agent: Sudowrite
+User-agent: SummalyBot
+User-agent: Super Agent
+User-agent: Surfer AI
+User-agent: Teoma
+User-agent: TerraCotta
+User-agent: Text Blaze
+User-agent: TextCortex
+User-agent: The Knowledge AI
+User-agent: Thinkbot
+User-agent: ThinkChaos
+User-agent: TikTokSpider
+User-agent: Timpibot
+User-agent: TimpiBot
+User-agent: TurnitinBot
+User-agent: VelenPublicWebCrawler
+User-agent: Vidnami AI
+User-agent: WARDBot
+User-agent: Webzio
+User-agent: webzio-extended
+User-agent: Webzio-Extended
+User-agent: Whisper
+User-agent: WordAI
+User-agent: Wordtune
+User-agent: WormsGTP
+User-agent: wpbot
+User-agent: WPBot
+User-agent: Writecream
+User-agent: WriterZen
+User-agent: Writescope
+User-agent: Writesonic
+User-agent: xAI
+User-agent: xBot
+User-agent: YaK
+User-agent: YandexAdditional
+User-agent: YandexAdditionalBot
+User-agent: Youbot
+User-agent: YouBot
+User-agent: Zerochat
+User-agent: Zero GTP
+User-agent: Zhipu
+User-agent: Zimm
+Disallow: /
+Disallow: *
+DisallowAITraining: /
+
+Content-Usage: ai=n
diff --git a/scrobbles.js b/scrobbles.js
new file mode 100644
index 0000000..a05cd82
--- /dev/null
+++ b/scrobbles.js
@@ -0,0 +1,69 @@
+/*
+ * sophies.rocks
+ *
+ * Copyright (C) 2026 Zofia Szweda
+ *
+ * This file is part of sophies.rocks.
+ *
+ * sophies.rocks 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.
+ *
+ * sophies.rocks 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 sophies.rocks. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+const LIBREFM_USER = 'sophii.xyz';
+const LIBREFM_API_KEY = '00000000000000000000000000000000';
+const LIBREFM_CACHE_KEY = 'scrobbles-cache';
+const LIBREFM_CACHE_TTL_MS = 60_000;
+
+async function loadScrobbles(limit = 7) {
+ const cached = localStorage.getItem(LIBREFM_CACHE_KEY);
+ if (cached) {
+ const { data, ts } = JSON.parse(cached);
+ if (Date.now() - ts < LIBREFM_CACHE_TTL_MS) return data;
+ }
+
+ const url = `https://libre.fm/2.0/?method=user.getrecenttracks&user=${LIBREFM_USER}&api_key=${LIBREFM_API_KEY}&format=json&limit=${limit}`;
+ const res = await fetch(url);
+ if (!res.ok) throw new Error('Could not fetch scrobbles');
+ const data = await res.json();
+ const tracks = data.recenttracks?.track ?? [];
+
+ localStorage.setItem(LIBREFM_CACHE_KEY, JSON.stringify({ data: tracks, ts: Date.now() }));
+ return tracks;
+}
+
+async function renderScrobbles() {
+ const list = document.querySelector('#recent-scrobbles ul');
+ try {
+ const tracks = await loadScrobbles();
+ if (tracks.length === 0) {
+ list.innerHTML = '<li>No scrobbles yet.</li>';
+ return;
+ }
+ list.innerHTML = '';
+ tracks.forEach(track => {
+ const li = document.createElement('li');
+ const artist = track.artist?.['#text'] ?? '';
+ const nowPlaying = track['@attr']?.nowplaying === 'true';
+ li.innerHTML = `
+ <a href="${track.url}">${track.name}</a>
+ <div>${artist}${nowPlaying ? ' - listening now' : ''}</div>
+ `;
+ list.appendChild(li);
+ });
+ } catch (err) {
+ console.error('Failed to load libre.fm scrobbles:', err);
+ list.innerHTML = "<li>Couldn't load scrobbles right now.</li>";
+ }
+}
+
+renderScrobbles();
diff --git a/slashes.html b/slashes.html
new file mode 100644
index 0000000..5b37417
--- /dev/null
+++ b/slashes.html
@@ -0,0 +1,237 @@
+<!--
+ sophies.rocks
+
+ Copyright (C) 2026 Zofia Szweda
+
+ This file is part of sophies.rocks.
+
+ sophies.rocks 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.
+
+ sophies.rocks 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 sophies.rocks. 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>/slashes</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.sophies.rocks">/blog</a>
+ <a href="https://1kb.sophies.rocks">/1kb</a>
+ <a href="/tarantino/">/tarantino</a>
+</nav>
+ <h1>/slashes</h1>
+ <p>All the slashpages on the website</p>
+ <p>(this isn't yet accurate, i am migrating it over from my gopherhole, most of the links dont work)</p>
+ <p>Goal: add every page from <a href="https://slashpages.net">slashpages.net</a> to this website</p>
+
+ <h2>status</h2>
+ <p><strong>total pages:</strong> 55 &#160; <strong>done:</strong> 13</p>
+
+ <h2>list</h2>
+ <dl class="slashlist">
+
+ <dt><a href="/about.html">/about</a> <span class="tag done">done</span></dt>
+ <dd>/about.html</dd>
+
+ <dt><a href="/ai.html">/ai</a> <span class="tag done">done</span></dt>
+ <dd>/ai.html</dd>
+
+ <dt><a href="/blank.html">/blank</a> <span class="tag done">done</span></dt>
+ <dd>/blank.html</dd>
+
+ <dt>/blogroll <span class="tag todo">todo</span></dt>
+ <dd>a list of other sites i read and reccomend</dd>
+
+ <dt>/calendar <span class="tag todo">todo</span></dt>
+ <dd>a list of dates from movies, tv shows, etc.</dd>
+
+ <dt>/canon <span class="tag todo">todo</span></dt>
+ <dd>annotated bibliography of references, the things that shaped me</dd>
+
+ <dt>/carry <span class="tag todo">todo</span></dt>
+ <dd>items i carry daily</dd>
+
+ <dt>/caw <span class="tag todo">todo</span></dt>
+ <dd>crows.</dd>
+
+ <dt><a href="/phlog.html">/log</a> <span class="tag done">done</span></dt>
+ <dd>/phlog.html <span class="tag todo">todo: rename</span></dd>
+
+ <dt><a href="/maccas.html">/mcdonalds</a> <span class="tag done">done</span></dt>
+ <dd>/maccas.html</dd>
+
+ <dt>/colophon <span class="tag todo">todo</span></dt>
+ <dd>a page that describes how the site is made, tools n stuff</dd>
+
+ <dt>/community <span class="tag todo">todo</span></dt>
+ <dd>a page outlining what a community is about and its values</dd>
+
+ <dt>/concerts <span class="tag todo">todo</span></dt>
+ <dd>a list of the concerts i've been to</dd>
+
+ <dt><a href="/contact.html">/contact</a> <span class="tag done">done</span></dt>
+ <dd>/contact.html</dd>
+
+ <dt>/daylists <span class="tag kill">kill</span></dt>
+ <dd>i dont use spotify</dd>
+
+ <dt><a href="/death.html">/death</a> <span class="tag done">done</span></dt>
+ <dd>/death.html</dd>
+
+ <dt>/disability <span class="tag todo">todo</span></dt>
+ <dd>have to get diagnosed first</dd>
+
+ <dt>/elsewhere <span class="tag todo">todo</span></dt>
+ <dd>a list of output or writings on sites other than this</dd>
+
+ <dt>/feeds <span class="tag todo">todo</span></dt>
+ <dd>page listing RSS/Atom/JSON and other feeds.</dd>
+
+ <dt>/for <span class="tag todo">todo</span></dt>
+ <dd>a page where i honor my loved ones or thank others</dd>
+
+ <dt>/glossary <span class="tag todo">todo</span></dt>
+ <dd>a list of words i often use and their meanings</dd>
+
+ <dt>/green <span class="tag todo">todo</span></dt>
+ <dd>a page that describes how i contribute to the environment</dd>
+
+ <dt><a href="/girl.html">/girl</a> <span class="tag done">done</span></dt>
+ <dd>/girl.html</dd>
+
+ <dt>/hats <span class="tag todo">todo</span></dt>
+ <dd>my hats</dd>
+
+ <dt><a href="/hello.html">/hello</a> <span class="tag done">done</span></dt>
+ <dd>a list of the ways i prefer to keep in touch</dd>
+
+ <dt>/hills <span class="tag todo">todo</span></dt>
+ <dd>a list of the hills im willing to die on</dd>
+
+ <dt>/ideas <span class="tag todo">todo</span></dt>
+ <dd>things i want to make</dd>
+
+ <dt>/interests <span class="tag todo">todo</span></dt>
+ <dd>a list of things im passionate about</dd>
+
+ <dt>/sale <span class="tag todo">todo</span></dt>
+ <dd>yard sale!!</dd>
+
+ <dt>/links <span class="tag todo">todo</span></dt>
+ <dd>a list of links to sites i like or want to bookmark</dd>
+
+ <dt>/next <span class="tag todo">todo</span></dt>
+ <dd>what i'm gonna do next</dd>
+
+ <dt>/nope <span class="tag todo">todo</span></dt>
+ <dd>a list of things i dont like/dont wanna do</dd>
+
+ <dt><a href="/now.html">/now</a> <span class="tag done">done</span></dt>
+ <dd>/now.html</dd>
+
+ <dt>/pfp <span class="tag todo">todo</span></dt>
+ <dd>a timeline of all my pfp pictures</dd>
+
+ <dt>/podroll <span class="tag maybe">todo?</span></dt>
+ <dd>a list of podcasts i reccomend, if i get into podcasts</dd>
+
+ <dt>/posse <span class="tag todo">todo</span></dt>
+ <dd>a page outlining my strategy for POSSE/cross-posting</dd>
+
+ <dt>/postroll <span class="tag todo">todo</span></dt>
+ <dd>a list of interesting blog posts i read</dd>
+
+ <dt>/pricing <span class="tag maybe">todo?</span></dt>
+ <dd>a page for those that want to buy my products</dd>
+
+ <dt>/questions <span class="tag todo">todo</span></dt>
+ <dd>questions i wanna ask or im thinking about</dd>
+
+ <dt>/save <span class="tag todo">todo</span></dt>
+ <dd>a list of referral links and discount codes for things i like</dd>
+
+ <dt>/hosted <span class="tag todo">todo</span></dt>
+ <dd>a page listing the services im hosting or managing myself</dd>
+
+ <dt>/shoebox <span class="tag todo">todo</span></dt>
+ <dd>a bit of website where for the odds-and-ends</dd>
+
+ <dt>/since <span class="tag todo">todo</span></dt>
+ <dd>habit tracker showing time since i started/stopped doing x</dd>
+
+ <dt>/sitemap <span class="tag todo">todo</span></dt>
+ <dd>a list of pages on here</dd>
+
+ <dt><a href="/slashes.html">/slashes</a> <span class="tag done">done</span></dt>
+ <dd>this!</dd>
+
+ <dt>/someday <span class="tag todo">todo</span></dt>
+ <dd>things i someday want to achieve/accomplish/learn/etc.</dd>
+
+ <dt>/style <span class="tag todo">todo</span></dt>
+ <dd>personal style/design style guide</dd>
+
+ <dt><a href="/ways.html">/ways</a> <span class="tag done">done</span></dt>
+ <dd>/ways.html</dd>
+
+ <dt>/coffee <span class="tag todo">todo</span></dt>
+ <dd>donations</dd>
+
+ <dt>/top4 <span class="tag todo">todo</span></dt>
+ <dd>top 4 of any topic! (top 3 + honor mention)</dd>
+
+ <dt><a href="/uses.html">/uses</a> <span class="tag done">done</span></dt>
+ <dd>/uses.html</dd>
+
+ <dt>/verify <span class="tag todo">todo</span></dt>
+ <dd>a page to list and prove online identities</dd>
+
+ <dt>/where <span class="tag todo">todo</span></dt>
+ <dd>let others know my current location!</dd>
+
+ <dt>/why <span class="tag todo">todo</span></dt>
+ <dd>what i care about, where im heading and how i hope to exist</dd>
+
+ <dt><a href="/wish.html">/wish</a> <span class="tag done">done</span></dt>
+ <dd>/wish.html</dd>
+
+ <dt>/yep <span class="tag todo">todo</span></dt>
+ <dd>list of things i agree with or will do</dd>
+
+ </dl>
+
+ <p>I took time out of my day to write this out by hand.</p>
+ <p>Love!<br />Sophie</p>
+
+<p class="license">
+ <a href="https://sophies.rocks">Source code</a>
+ &#8212;
+ <a href="COPYING">GNU AGPLv3</a>
+</p>
+</body>
+
+</html>
diff --git a/style.css b/style.css
new file mode 100644
index 0000000..e88b7a4
--- /dev/null
+++ b/style.css
@@ -0,0 +1,366 @@
+/*
+ * sophies.rocks
+ *
+ * Copyright (C) 2026 Zofia Szweda
+ *
+ * This file is part of sophies.rocks.
+ *
+ * sophies.rocks 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.
+ *
+ * sophies.rocks 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 sophies.rocks. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+:root {
+ --bg: #f8efdf;
+ --text: #33281c;
+ --accent: #b8783e;
+ --border: #e4e0d8;
+ --muted: #7a6a54
+}
+
+* {
+ box-sizing: border-box;
+}
+
+p {
+ margin: 0.4rem 0;
+}
+
+body {
+ font-family: "Atkinson Hyperlegible Next", -apple-system, "Segoe UI", sans-serif;
+ background: var(--bg);
+ color: var(--text);
+ max-width: 680px;
+ margin: 0 auto;
+ padding: 4rem 1.5rem;
+ line-height: 1.65;
+ font-size: 1.05rem;
+}
+
+h1,
+h2,
+h3 {
+ font-family: "IBM Plex Serif", Georgia, serif;
+ font-weight: 600;
+ line-height: 1.25;
+ margin-top: 3rem;
+}
+
+
+h1 {
+ font-size: 2.1rem;
+ margin-top: 0;
+ letter-spacing: -0.02em;
+}
+
+h2 {
+ font-size: 1.4rem;
+}
+
+a {
+ color: var(--accent);
+ text-decoration: underline;
+ text-decoration-color: rgba(181, 83, 60, 0.3);
+ text-underline-offset: 3px;
+}
+
+nav {
+ display: flex;
+ flex-wrap: nowrap;
+ justify-content: flex-end;
+ gap: 1.5rem;
+ margin-bottom: 3rem;
+ padding-bottom: 1rem;
+ border-bottom: 1px solid var(--border);
+ font-size: 1rem;
+ color: var(--muted);
+}
+
+code,
+pre {
+ font-family: "IBM Plex Mono", "Courier New", monospace;
+ margin: 0.4rem 0;
+}
+
+code {
+ background: #f0ede6;
+ padding: 0.15em 0.4em;
+ border-radius: 4px;
+ font-size: 0.9em;
+}
+
+.buttons {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.5rem;
+ margin-top: 3rem;
+}
+
+#recent {
+ margin-top: 3rem;
+}
+
+#recent h2 {
+ margin-top: 0;
+}
+
+#recent-now p {
+ margin: 0;
+}
+
+.recent-grid {
+ display: grid;
+ grid-template-columns: 2fr 1fr;
+ gap: 1.5rem;
+ margin-top: 1.5rem;
+ align-items: stretch;
+}
+
+.recent-column {
+ display: flex;
+ flex-direction: column;
+ gap: 1.5rem;
+ min-height: 0;
+}
+
+.recent-box {
+ border: 1px solid #ddd;
+ padding: 1.25rem 1.5rem;
+}
+
+.recent-box h3 {
+ margin-top: 0;
+ font-size: 1.1rem;
+}
+
+.recent-box ul {
+ list-style: none;
+ padding-left: 0;
+ margin: 1rem 0 0;
+}
+
+
+.recent-box li+li {
+ margin-top: 1.2rem;
+}
+
+.recent-box li a {
+ font-weight: 600;
+}
+
+
+#recent-now {
+ flex: 1;
+ min-height: 0;
+ max-height: 180px;
+ overflow-y: auto;
+ scrollbar-width: thin;
+ scrollbar-color: var(--accent) var(--bg);
+}
+
+#recent-now::-webkit-scrollbar {
+ width: 8px;
+}
+
+#recent-now::-webkit-scrollbar-track {
+ background: var(--bg);
+}
+
+#recent-now::-webkit-scrollbar-thumb {
+ background: var(--accent);
+ border-radius: 4px;
+}
+
+#recent-now::-webkit-scrollbar-thumb:hover {
+ background: var(--text);
+}
+
+#recent-now ul {
+ list-style: none;
+ padding-left: 0;
+ margin: 1rem 0 0;
+}
+
+#recent-now li {
+ margin: 0 0 1rem;
+}
+
+#recent-now li:last-child {
+ margin-bottom: 0;
+}
+
+#recent-now time {
+ display: block;
+ font-size: 0.8em;
+ color: var(--muted);
+ font-family: "IBM Plex Mono", monospace;
+}
+
+@media (max-width: 550px) {
+
+ .recent-grid,
+ .terminology-grid {
+ grid-template-columns: 1fr;
+ }
+}
+
+@font-face {
+ font-family: "IBM Plex Serif";
+ src: url("fonts/IBMPlexSerif-Regular.woff2") format("woff2");
+ font-weight: 400;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: "IBM Plex Serif";
+ src: url("fonts/IBMPlexSerif-Bold.woff2") format("woff2");
+ font-weight: 700;
+ font-display: swap;
+}
+
+@font-face {
+ font-family: "IBM Plex Mono";
+ src: url("fonts/IBMPlexMono-Regular.woff2") format("woff2");
+ font-weight: 400;
+ font-display: swap;
+}
+
+
+@font-face {
+ font-family: "Atkinson Hyperlegible Next";
+ src: url("fonts/Atkinson_Hyperlegible_Next/AtkinsonHyperlegibleNext-VariableFont_wght.ttf") format("truetype-variations");
+ font-weight: 400 700;
+ font-display: swap;
+}
+
+.pgp-label {
+ margin: 0;
+ margin-bottom: 0;
+}
+
+.pgp-key {
+ all: revert;
+ white-space: pre-wrap;
+ font-family: "Atkinson Hyperlegible Next";
+ margin: 0;
+}
+
+
+.tag {
+ font-size: 0.7em;
+ padding: 0.1em 0.5em;
+ border-radius: 4px;
+ font-family: "IBM Plex Mono", monospace;
+ text-transform: uppercase;
+ margin-left: 0.4em;
+}
+
+.tag.done {
+ background: #dcead9;
+ color: #2e5c31;
+}
+
+.tag.todo {
+ background: #f0ede6;
+ color: var(--muted);
+}
+
+.tag.kill {
+ background: #f2dcd8;
+ color: #8a3b32;
+}
+
+.tag.maybe {
+ background: #f3e6c8;
+ color: #7a5a1c;
+}
+
+dl.slashlist dt {
+ font-weight: 600;
+ margin-top: 1.2em;
+}
+
+dl.slashlist dd {
+ margin-left: 0;
+ color: var(--muted);
+ font-size: 0.95em;
+}
+
+.terminology {
+ margin-top: 3rem;
+}
+
+.terminology-intro {
+ color: var(--muted);
+}
+
+.terminology-grid {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ gap: 1.5rem;
+ margin-top: 2rem;
+}
+
+.terminology-grid>div {
+ border: 1px solid var(--border);
+ padding: 1rem 1.25rem;
+ border-radius: 6px;
+}
+
+.terminology-grid h3 {
+ margin-top: 0;
+ margin-bottom: 0.75rem;
+}
+
+.terminology-grid ul {
+ list-style: none;
+ padding-left: 0;
+ margin: 0;
+}
+
+.terminology-grid li {
+ margin: 0.35rem 0;
+}
+
+.terminology-grid .icon {
+ width: 16px;
+ height: 16px;
+ object-fit: contain;
+ vertical-align: -3px;
+ margin-right: 0.35rem;
+}
+
+.rating-love {
+ color: var(--accent);
+ font-weight: 700;
+}
+
+.rating-like {
+ color: var(--text);
+}
+
+.rating-okay {
+ color: #628c58;
+}
+
+.rating-maybe {
+ color: #a66b3d;
+}
+
+.rating-no {
+ color: #a34f45;
+}
+
+.rating-never {
+ color: #a34f45;
+ font-weight: 700;
+} \ No newline at end of file
diff --git a/tarantino/index.html b/tarantino/index.html
new file mode 100644
index 0000000..c005933
--- /dev/null
+++ b/tarantino/index.html
@@ -0,0 +1,121 @@
+<!--
+ sophies.rocks
+
+ Copyright (C) 2026 Zofia Szweda
+
+ This file is part of sophies.rocks.
+
+ sophies.rocks 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.
+
+ sophies.rocks 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 sophies.rocks. 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="#000000" />
+ <meta charset="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>Tarantino webring</title>
+ <link rel="icon" type="image/png" href="/assets/pulp_fiction.ico" />
+ <link rel="stylesheet" href="/style.css" />
+ <link rel="stylesheet" href="/tarantino/tarantino-style.css" />
+ </head>
+ <body>
+ <span><img src="/assets/pulp_fiction.ico" /></span>
+ <h1>
+ The <span style="font-size: 140%">Quentin Tarantino</span>
+ webring
+ </h1>
+ <p>This is a webring dedicated to fans of Quentin Tarantino.</p>
+
+ <h2>Members</h2>
+ <table id="members-table">
+ <thead>
+ <tr>
+ <th>Name</th>
+ <th>Site</th>
+ </tr>
+ </thead>
+ <tbody id="members-tbody"></tbody>
+ </table>
+ <h2>Rules</h2>
+ <ul>
+ <li>No bigotry allowed on your website</li>
+ <li>
+ Your website has to be made with your own 2 hands, this means that it
+ cannot be something like your leaflet, strawpage, etc.
+ </li>
+ <li>
+ your application must contain the word "zucchini" in it, because you're
+ a good person and read these rules.
+ </li>
+ <li>
+ If your website contains NSFW content, it must be properly marked, same
+ goes with flashing lights and gore.
+ </li>
+ <li>
+ Your website has to already have the webring's widget visible somewhere
+ on it before application
+ </li>
+ <li>
+ your site does NOT have to be oriented around Quentin Tarantino (any
+ website will do, aslong as you are a fan of his)
+ </li>
+ <li>
+ your website has to be something on it, it cannot be just a blank page
+ or 3 lines of text.
+ </li>
+ <li>i reserve the right to reject any applications under my own terms</li>
+ </ul>
+ <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)
+ with the subject: "Webring application"
+ </p>
+ <p>
+ Please put your name and the URL of the homepage of your website in the
+ body text, as well as listing if there are any content warnings (gore,
+ nsfw, flashing)
+ </p>
+ <h2>Widget</h2>
+ <p>Paste this snippet anywhere on your site:</p>
+ <code>
+ <pre>
+ &lt;nav style="display: flex; align-items: center; justify-content: center;"&gt;
+ &lt;a id="ring-prev" href="#"&gt;prev&lt;/a&gt;
+ &lt;span&gt;|&lt;/span&gt;
+ &lt;a href="https://sophies.rocks/tarantino/"&gt;TARANTINO&lt;/a&gt;
+ &lt;a id="ring-random" href="#" style="font-size: 60%;"&gt;(random)&lt;/a&gt;
+ &lt;span&gt;|&lt;/span&gt;
+ &lt;a id="ring-next" href="#"&gt;next&lt;/a&gt;
+ &lt;/nav&gt;
+ &lt;script src="https://sophies.rocks/webring.js" defer&gt;&lt;/script&gt;
+ </pre
+ >
+ </code>
+ <p>keep in mind that widget-less sites will be removed.</p>
+ <p>Below is an example of a correctly added widget (colors may vary):</p>
+ <nav
+ id="ring-nav"
+ style="display: flex; align-items: center; justify-content: center"
+ >
+ <a id="ring-prev" href="#">prev</a>
+ <span>|</span>
+ <a href="/tarantino/">TARANTINO</a>
+ <a id="ring-random" href="#" style="font-size: 60%">(random)</a>
+ <span>|</span>
+ <a id="ring-next" href="#">next</a>
+ </nav>
+ <script src="/webring.js" defer></script>
+ </body>
+</html>
diff --git a/tarantino/ring.json b/tarantino/ring.json
new file mode 100644
index 0000000..0b59186
--- /dev/null
+++ b/tarantino/ring.json
@@ -0,0 +1,9 @@
+{
+ "members": [
+ {
+ "name": "sophie",
+ "url": "https://sophies.rocks",
+ "content_warnings": []
+ }
+ ]
+} \ No newline at end of file
diff --git a/tarantino/tarantino-style.css b/tarantino/tarantino-style.css
new file mode 100644
index 0000000..4b084b0
--- /dev/null
+++ b/tarantino/tarantino-style.css
@@ -0,0 +1,30 @@
+@font-face {
+ font-family: 'Pulp Fiction';
+ src: url('/fonts/PF.woff2') format('woff2');
+}
+
+body {
+ background: #000;
+ color: #f5f0e6;
+}
+
+h1,
+h2 {
+ font-family: 'Pulp Fiction', 'Impact', sans-serif;
+ color: #f5da1e
+}
+
+
+a {
+ color: #f5da1e;
+ text-decoration-color: rgba(245, 218, 30, 0.4);
+}
+
+a:hover {
+ color: #cc0000;
+}
+
+code {
+ background: #1a1a1a;
+ color: #f5f0e6;
+} \ No newline at end of file
diff --git a/theme.js b/theme.js
new file mode 100644
index 0000000..1a3a574
--- /dev/null
+++ b/theme.js
@@ -0,0 +1,93 @@
+/*
+ * sophies.rocks
+ *
+ * Copyright (C) 2026 Zofia Szweda
+ *
+ * This file is part of sophies.rocks.
+ *
+ * sophies.rocks 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.
+ *
+ * sophies.rocks 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 sophies.rocks. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+(function () {
+ const THEMES = ['style', 'style-lightluster', 'style-tsoding', 'style-ashen'];
+ const DEFAULT_THEME = 'style';
+ const STORAGE_KEY = 'theme';
+
+ const saved = localStorage.getItem(STORAGE_KEY);
+ const theme = THEMES.includes(saved) ? saved : DEFAULT_THEME;
+
+ const link = document.createElement('link');
+ link.rel = 'stylesheet';
+ link.id = 'theme-link';
+ link.href = `${theme}.css`;
+ document.head.appendChild(link);
+ const style = document.createElement('style');
+ style.textContent = `
+ #menu-toggle {
+ position: fixed;
+ top: 1rem;
+ left: 1rem;
+ z-index: 100;
+ font-size: 1.3rem;
+ background: none;
+ border: none;
+ cursor: pointer;
+ }
+ #menu-panel {
+ position: fixed;
+ top: 3rem;
+ left: 1rem;
+ z-index: 100;
+ background: var(--bg, #fff);
+ border: 1px solid var(--border, #ccc);
+ padding: 0.75rem;
+ border-radius: 4px;
+ }
+ #menu-panel[hidden] { display: none; }
+ `;
+ document.head.appendChild(style);
+
+ window.addEventListener('DOMContentLoaded', () => {
+ const toggle = document.getElementById('menu-toggle');
+ if (!toggle) return; // page doesn't have the button, skip menu setup
+
+ const panel = document.createElement('div');
+ panel.id = 'menu-panel';
+ panel.hidden = true;
+ panel.innerHTML = `
+ <label for="theme-picker">theme:</label>
+ <select id="theme-picker">
+ <option value="style">default</option>
+ <option value="style-lightluster">lightluster</option>
+ <option value="style-tsoding">tsoding</option>
+ <option value="style-ashen">ashen</option>
+ </select>
+ `;
+ toggle.insertAdjacentElement('afterend', panel);
+
+ toggle.addEventListener('click', () => {
+ const isHidden = panel.hidden;
+ panel.hidden = !isHidden;
+ toggle.setAttribute('aria-expanded', String(isHidden));
+ });
+
+ const picker = document.getElementById('theme-picker');
+ picker.value = theme;
+ picker.addEventListener('change', () => {
+ const chosen = picker.value;
+ document.getElementById('theme-link').href = `${chosen}.css`;
+ localStorage.setItem(STORAGE_KEY, chosen);
+ });
+ });
+})();
diff --git a/uses.html b/uses.html
new file mode 100644
index 0000000..2efd856
--- /dev/null
+++ b/uses.html
@@ -0,0 +1,160 @@
+<!--
+ sophies.rocks
+
+ Copyright (C) 2026 Zofia Szweda
+
+ This file is part of sophies.rocks.
+
+ sophies.rocks 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.
+
+ sophies.rocks 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 sophies.rocks. 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>/uses</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.sophies.rocks">/blog</a>
+ <a href="https://1kb.sophies.rocks">/1kb</a>
+ <a href="/tarantino/">/tarantino</a>
+ </nav>
+ <h1>/uses</h1>
+ <h2>Hardware</h2>
+ <p>Laptop: Lenovo V15 G3</p>
+ <p>Specs: Intel Core i3-1215U + iGPU + 8gb ram + ditto, but with zram</p>
+ <p>Peripherals:</p>
+ <ul>
+ <li>
+ <a
+ href="https://www.logitechg.com/en-us/shop/p/g203-lightsync-rgb-gaming-mouse"
+ >Logitech G203 Lightsync (mouse, wired)</a
+ >
+ </li>
+ <li>
+ <a
+ href="https://brandclub.com/JBL-Tune-570BT-OnEar-Wireless-Bluetooth/p/G820245QV/product"
+ >JBL Tune 570 BT</a
+ >
+ </li>
+ <li>
+ <a href="https://www.casio.com/us/watches/casio/product.F-91W-1/"
+ >Casio F91-W</a
+ >
+ </li>
+ <li>SW35 (cheap aliexpress split keyboard)</li>
+ </ul>
+ <p>
+ "homelab":
+ <a href="https://www.raspberrypi.com/products/raspberry-pi-zero-2-w/"
+ >Raspberry Pi Zero 2 W</a
+ >
+ </p>
+ <h2>Software</h2>
+ <p>Kernel: Linux 6.12.107</p>
+ <p>OS: <a href="https://debian.org">Debian</a> 13 GNU/Linux</p>
+ <p>
+ I am considering switching to
+ <a href="https://www.freebsd.org">FreeBSD</a> or
+ <a href="https://www.openbsd.org">OpenBSD</a>
+ </p>
+ <p>WM: <a href="https://dwm.suckless.org">dwm</a></p>
+ <p>(also considering StumpWM)</p>
+ <p>(honorable mention: <a href="https://xmonad.org">xmonad</a>)</p>
+ <h2>terminal</h2>
+ <p>
+ Emulator: <a href="https://github.com/alacritty/alacritty/">alacritty</a>
+ </p>
+ <p>Shell: <a href="https://fishshell.com/">fish</a></p>
+ <p>
+ Editor: <a href="https://helix-editor.com">helix</a>, i'm a huge fan of
+ Emacs and VIm, though.
+ </p>
+ <p>
+ Font: Currently hopping between
+ <a href="https://commitmono.com">Commit Mono</a> and
+ <a href="https://usgraphics.com/products/berkeley-mono">Berkeley Mono</a>
+ </p>
+ <p>
+ (berkeley mono is definitely not pirated and i am definitely using
+ <a
+ href="https://tangled.org/strings/did:plc:mkuwwd3sphy6gs3teatnr7eh/3mu3elu2voq22"
+ >this nix expression</a
+ >
+ to install it)
+ </p>
+ <h2>VCS</h2>
+ <p>VCS: <a href="https://gameoftrees.org">Game Of Trees</a>(got)</p>
+ <p>Forge: <a href="https://tangled.org">tangled.org</a></p>
+ <h2>Music</h2>
+ <p>Download: <a href="https://nicotine-plus.org">Nicotine+</a></p>
+ <p>Daemon: <a href="https://musicpd.org">mpd</a></p>
+ <p>
+ Scrobbler:
+ <a href="https://github.com/MusicPlayerDaemon/mpdscribble">mpdscribble</a>
+ to <a href="https://libre.fm">libre.fm</a>
+ </p>
+ <p>
+ RPC:
+ <a href="https://github.com/JakeStanger/mpd-discord-rpc"
+ >mpd-discord-rpc</a
+ >
+ </p>
+ <p>
+ Player: <a href="https://wiki.archlinux.org/title/Ncmpcpp">ncmpcpp</a>
+ </p>
+ <h2>Chat</h2>
+ <p>
+ <a href="https://github.com/4evy/nixcord">NixCord</a> (discord,
+ declaratively! with nix!!)
+ </p>
+ <h3>XMPP</h3>
+ <p>Client: <a href="https://gajim.org">Gajim</a></p>
+ <p>JID: sophies@yax.im</p>
+ <h2>Web &amp; Friends</h2>
+ <p>Browser: <a href="https://vivaldi.com">Vivaldi</a></p>
+ <p style="font-size: 80%">
+ (psst, i also reccomend the
+ <a href="https://helium.computer">helium</a> browser)
+ </p>
+ <p>Extensions:</p>
+ <ul>
+ <li>Ublock Origin</li>
+ <li>Bitwarden</li>
+ </ul>
+ <h2>ATProto</h2>
+ <p>
+ <a href="https://bsky.app">bsky</a> client:
+ <a href="https://mu.social/">mu.social</a>, however i also reccomend
+ <a href="//blacksky.community/">blacksky</a>
+ </p>
+ <p class="license">
+ <a href="https://sophies.rocks">Source code</a>
+ &#8212;
+ <a href="COPYING">GNU AGPLv3</a>
+ </p>
+ </body>
+</html>
diff --git a/webring.js b/webring.js
new file mode 100644
index 0000000..5e53ec5
--- /dev/null
+++ b/webring.js
@@ -0,0 +1,151 @@
+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://sophies.rocks/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;
+ }
+}
+
+function warningLabel(m) {
+ return m.content_warnings?.length ? ` (cw: ${m.content_warnings.join(', ')})` : '';
+}
+
+function ensureWarningDialog() {
+ let dialog = document.getElementById('ring-warning-dialog');
+ if (dialog) return dialog;
+
+ 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 = `
+ background: var(--bg, #fff);
+ color: var(--text, #000);
+ border: 1px solid var(--border, #ccc);
+ border-radius: 6px;
+ max-width: 28rem;
+ padding: 1rem;
+ `;
+ document.body.appendChild(dialog);
+
+ dialog.querySelector('button[value="cancel"]').addEventListener('click', () => dialog.close('cancel'));
+ dialog.querySelector('button[value="continue"]').addEventListener('click', () => dialog.close('continue'));
+
+ 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();
+}
+
+function wireNavLink(id, 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');
+}
+
+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);
+}
+
+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');
+ }
+ }
+
+ renderMembersTable(members);
+ } catch (err) {
+ console.error('tarantino webring failed:', err);
+ }
+}
+
+initRing();
diff --git a/webrings.html b/webrings.html
new file mode 100644
index 0000000..beeec8a
--- /dev/null
+++ b/webrings.html
@@ -0,0 +1,182 @@
+<!--
+ sophies.rocks
+
+ Copyright (C) 2026 Zofia Szweda
+
+ This file is part of sophies.rocks.
+
+ sophies.rocks 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.
+
+ sophies.rocks 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 sophies.rocks. If not, see <https://www.gnu.org/licenses/>.
+-->
+
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta name="theme-color" content="#f8efdf" />
+ <meta charset="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>/webrings</title>
+ <link rel="icon" type="image/png" href="/assets/_.ico" />
+ <link rel="stylesheet" href="https://jack-dawlia.neocities.org/page/shrines/ultrakill/ULTRARING/onionring.css">
+ <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.sophies.rocks">/blog</a>
+ <a href="https://1kb.sophies.rocks">/1kb</a>
+ <a href="/tarantino/">/tarantino</a>
+</nav>
+ <h1>Webrings</h1>
+ <!-- no ai webring -->
+ <div style="text-align:center">
+ <a href="https://baccyflap.com/noai/?prv&s=ale" target="_top">« prev</a> |
+ <a href="https://baccyflap.com/noai" target="_blank">no ai webring</a>
+ <a style="font-size:60%" href="https://baccyflap.com/noai/?rnd" target="_top">(random)</a> |
+ <a href="https://baccyflap.com/noai/?nxt&s=ale" target="_top">next »</a>
+ </div>
+ <hr>
+ </hr>
+ <!-- yuri webring -->
+ <div style="text-align-last: center;">
+ <a href="https://lunamilk.neocities.org/webring/yuriwebring">
+ <img src="https://file.garden/Zuy95U5nUSPb-gio/website/webring/yuriwebring1.png" height="26px"></a><br />
+ <a href="https://lunamilk.neocities.org/webring/yuriwebring/webring?action=previous">
+ <img src="https://file.garden/Zuy95U5nUSPb-gio/website/webring/arrow%20left.png"></a>
+ <a href="https://lunamilk.neocities.org/webring/yuriwebring/webring?action=random">
+ random</a>
+ <a href="https://lunamilk.neocities.org/webring/yuriwebring/webring?action=next">
+ <img src="https://file.garden/Zuy95U5nUSPb-gio/website/webring/arrow%20right.png"></a>
+ </div>
+ <hr>
+ </hr>
+ <!-- hollowknight webring -->
+ <center>
+ <div id='Hallownest-bugs'>
+ <script type="text/javascript"
+ src="https://samsolarsystem.neocities.org/onionring-variables-Hallownest-bugs.js"></script>
+ <script type="text/javascript"
+ src="https://samsolarsystem.neocities.org/onionring-widget-Hallownest-bugs-knight.js"></script>
+ </div>
+ </center>
+ <hr>
+ </hr>
+ <!-- *nix (unix webring) -->
+ <center>
+ <div id="nixring" style="display: inline-flex; gap: 8px; align-items: center; justify-content: center;">
+ <style type="text/css" scoped>
+ #nixring {
+ text-align: center;
+ color: black;
+ }
+
+ #nixring a {
+ color: black;
+ text-decoration: none;
+ }
+ </style>
+ <a href="https://softmachine.dev/webring/linuxring/redirect?url=https%3A%2F{sophies.rocks}%2F&go=prev">←</a>
+ <a href="https://softmachine.dev/webring/linuxring">
+ <div>*nixRing<br><img style="height: 25px;" src="https://softmachine.dev/webring/linuxring/icon/tux.png"></div>
+ </a>
+ <a href="https://softmachine.dev/webring/linuxring/redirect?url=https%3A%2F{sophies.rocks}%2F&go=next">→</a>
+ </div>
+ </center>
+ <hr>
+ </hr>
+ <!-- transfem webring -->
+ <center>
+ <script defer src="https://fem.nz/ring/transfemring.js" data-widget="transgender"></script>
+ <hr>
+ </hr>
+ <!-- pony webring -->
+
+ <div>
+ <center>
+ <a href="https://silversneasel.neocities.org/ponyring/main"><b>PonyRing!<br><img
+ src="https://silversneasel.neocities.org/pictures/ponyring/widget/g4-1.png" height="90"></b></a><br />
+ <a href="https://silversneasel.neocities.org/ponyring/main?action=previous">&lt;-
+ </a>
+ <a href="https://silversneasel.neocities.org/ponyring/main?action=random">random</a>
+ <a href="https://silversneasel.neocities.org/ponyring/main?action=next">-&gt;</a><br>
+ </center>
+ </div>
+ <hr>
+ </hr>
+ <!-- nix/os ring -->
+ <div style="text-align:center">
+ <a href="https://nixwebr.ing/prev/sophie" target="_top"> prev</a>
+ <a href="https://nixwebr.ing" target="_blank">nix webring</a>
+ <a style="font-size:60%" href="https://nixwebr.ing/rand" target="_top">(random)</a>
+ <a href="https://nixwebr.ing/next/sophie" target="_top">next</a>
+ </div>
+ <hr>
+ </hr>
+ <!-- the ULTRARing -->
+ <div id='ultraring'>
+ <script type="text/javascript"
+ src="https://jack-dawlia.neocities.org/page/shrines/ultrakill/ULTRARING/onionring-variables.js"></script>
+ <script type="text/javascript"
+ src="https://jack-dawlia.neocities.org/page/shrines/ultrakill/ULTRARING/onionring-widget-4.js"></script>
+ <noscript>
+ This site is part of <a href="https://jack-dawlia.neocities.org/page/shrines/ultrakill/ULTRARING">ULTRARING</a>!
+ </noscript>
+ </div>
+ <hr></hr>
+ <!-- astronomy ring -->
+ <div style="text-align:center">
+ <script type="text/javascript" src="https://astroring.auroradynia.com/ring.js"></script>
+ </div>
+ <hr></hr>
+<!-- roboring -->
+<div style="text-align:center">
+ <a href="https://stellophiliac.github.io/roboring/xmlisbetter/previous">←</a>
+ <a href="https://stellophiliac.github.io/roboring">roboring</a>
+ <a href="https://stellophiliac.github.io/roboring/xmlisbetter/next">→</a>
+</div>
+<hr></hr>
+<div style="text-align:center">
+ <a href="https://webring.bucketfish.me/redirect.html?to=prev&amp;name=sophie">prev</a> |
+ <a href="https://webring.bucketfish.me/"> bucketfish webring</a>
+ <a style="font-size:60%" href="https://webring.bucketfish.me/redirect.html?to=random&amp;name=sophie" target="_top">(random)</a> |
+ <a href="https://webring.bucketfish.me/redirect.html?to=next&amp;name=sophie"> next</a>
+</div>
+<hr></hr>
+ <nav
+ id="ring-nav"
+ style="display: flex; align-items: center; justify-content: center"
+ >
+ <a id="ring-prev" href="#">prev</a>
+ <span>|</span>
+ <a href="/tarantino/">TARANTINO</a>
+ <a id="ring-random" href="#" style="font-size: 60%">(random)</a>
+ <span>|</span>
+ <a id="ring-next" href="#">next</a>
+</nav>
+ <script src="/webring.js" defer></script>
+<hr></hr>
+ <p class="license">
+ <a href="https://sophies.rocks">Source code</a>
+ &#8212;
+ <a href="COPYING">GNU AGPLv3</a>
+ </p>
+</body>
+
+</html>