Compare commits

..

23 Commits

Author SHA1 Message Date
af296c7dc1 Merge pull request 'Small fixes to improve memory performance, temporary code deletion and small typo in img file location.' (#7) from development into main
All checks were successful
Website Sync / website-sync (push) Successful in 4s
Reviewed-on: #7
2026-03-16 17:20:28 -03:00
775641dc36 Small fixes to improve memory performance, temporary code deletion and small typo in img file location.
All checks were successful
Website Sync / website-sync (push) Successful in 4s
2026-03-16 17:10:25 -03:00
b679e911d5 Merge pull request 'Forgotten changes made to webring addition' (#6) from development into main
All checks were successful
Website Sync / website-sync (push) Successful in 3s
Reviewed-on: #6
2026-03-15 22:04:31 -03:00
eeefee56ac Forgotten changes made to webring addition
All checks were successful
Website Sync / website-sync (push) Successful in 4s
2026-03-15 22:04:09 -03:00
0a14374f0a Merge pull request 'Merge changes to webrings' (#5) from development into main
All checks were successful
Website Sync / website-sync (push) Successful in 4s
Reviewed-on: #5
2026-03-15 22:02:15 -03:00
75655be103 Preliminary adition to transing the internet webring, and tweaks and optimization to previous code regarding javascript to php rewrite, more concise and legible code functions.
All checks were successful
Website Sync / website-sync (push) Successful in 5s
2026-03-15 21:59:05 -03:00
ccaf930265 (tentative) addition to transfem webring, this includes a write to the original javascript script to php (currently using local information for performance reasons). Have to update ID when properly accepted into the webring!
All checks were successful
Website Sync / website-sync (push) Successful in 5s
2026-03-14 15:17:37 -03:00
04c0f7596d Merge pull request 'development' (#4) from development into main
All checks were successful
Website Sync / website-sync (push) Successful in 6s
Reviewed-on: #4
2026-02-18 20:03:54 -03:00
d6d1d60b0e Tweaks to styling, navbar image-border, and fixes to inconsistent responsive layout across pages other than main.php
All checks were successful
Website Sync / website-sync (push) Successful in 7s
2026-02-16 23:39:53 -03:00
f88db6a83b Uneeded separate file for nabvar, ../ don't make a difference when no directory is available upstream 2026-02-16 21:11:07 -03:00
04dca92778 Overarching changes to language changing, not definitive since I'm pondering other alternatives (separate files vs translation files, variables vs functions) 2026-02-16 21:08:36 -03:00
ae6cb85625 Merge pull request 'Add option to make comments invisible (not having to delete them). This is for moderation purposes.' (#3) from development into main
All checks were successful
Website Sync / website-sync (push) Successful in 6s
Reviewed-on: #3
2026-02-12 20:08:58 -03:00
14866f6b25 Add option to make comments invisible (not having to delete them). This is for moderation purposes.
All checks were successful
Website Sync / website-sync (push) Successful in 7s
2026-02-12 20:03:54 -03:00
0428f28dce Merge branch 'main' of ssh://ethernal.win:222/masiv/website
All checks were successful
Website Sync / website-sync (push) Successful in 6s
2026-02-11 10:13:34 -03:00
a481932f17 Fix to calculator lang change
All checks were successful
Website Sync / website-sync (push) Successful in 43s
2026-02-11 10:07:11 -03:00
178a7a0a39 Merge pull request 'development' (#2) from development into main
All checks were successful
Website Sync / website-sync (push) Successful in 6s
Reviewed-on: #2
2026-02-04 23:02:25 -03:00
de785a4f21 Remove temporary changes (problem lied on nginx config file, using main php instead of development) & fixing issue with password field presented as text field
All checks were successful
Website Sync / website-sync (push) Successful in 6s
2026-02-04 22:58:34 -03:00
e8a41a83f4 Renaming for testing for improper deployement serve
All checks were successful
Website Sync / website-sync (push) Successful in 6s
2026-02-04 22:50:29 -03:00
21f9efd4d0 Test copy
All checks were successful
Website Sync / website-sync (push) Successful in 6s
2026-02-04 22:48:05 -03:00
06b043a30b Minor fixes and config include
All checks were successful
Website Sync / website-sync (push) Successful in 6s
2026-02-04 22:46:46 -03:00
0249ebee76 Apply php prelimiary changes to spanish as well
All checks were successful
Website Sync / website-sync (push) Successful in 5s
2026-02-04 22:38:49 -03:00
a8e452ebf9 Fix url
All checks were successful
Website Sync / website-sync (push) Successful in 7s
2026-02-04 22:34:30 -03:00
3c82a8e92e Add temporary http redirect and previous files for AI/robots
All checks were successful
Website Sync / website-sync (push) Successful in 7s
2026-02-04 22:32:02 -03:00
60 changed files with 2525 additions and 1901 deletions

3
ai.txt Normal file
View File

@@ -0,0 +1,3 @@
User-Agent: *
Disallow: /
Disallow: *

View File

@@ -1 +1 @@
<?php header("Location: main_en.php");
<?php header("Location: main.php");

View File

@@ -1,44 +1,44 @@
<div class="logo">
<img src="img/logo/logo_smth.png" alt="">
<a href="main_en.html" class="logo-text">masiv's lair</a>
<img src="../../img/logo/logo_smth.png" alt="">
<a href="../../main.php" class="logo-text">masiv's lair</a>
</div>
<div class="about panel">
<b><a href="pages/articles/about_en.html">About me</a></b>
<b><a href="../../pages/articles/about.php"><?php echo $tr[$lang]["navbar.about"]; ?></a></b>
</div>
<div class="links">
<div class="social-media github">
<img src="img/icons/github.png" alt="">
<img src="../../img/icons/github.png" alt="">
<a href="https://github.com/masiv1001" target="_blank">masiv1001</a>
</div>
<div class="social-media instagram">
<img src="img/icons/instagram.png" alt="">
<img src="../../img/icons/instagram.png" alt="">
<a href="https://instagram.com/sietezip/" target="_blank">sietezip</a>
</div>
<div class="social-media pixelfed">
<img src="img/icons/pixelfed.png" alt="">
<img src="../../img/icons/pixelfed.png" alt="">
<a href="https://pixelfed.social/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media twitter">
<img src="img/icons/twitter.png" alt="">
<img src="../../img/icons/twitter.png" alt="">
<a href="https://twitter.com/_visam/" target="_blank">_visam</a>
</div>
<div class="social-media reddit">
<img src="img/icons/reddit.png" alt="">
<img src="../../img/icons/reddit.png" alt="">
<a href="https://www.reddit.com/user/masiv_o/" target="_blank">masiv_o</a>
</div>
<div class="social-media steam">
<img src="img/icons/steam.png" alt="">
<img src="../../img/icons/steam.png" alt="">
<a href="https://steamcommunity.com/id/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media osu">
<img src="img/icons/osu.png" alt="">
<img src="../../img/icons/osu.png" alt="">
<a href="https://osu.ppy.sh/users/19273464/" target="_blank">masiv_</a>
</div>
<div class="social-media mail">
<img src="img/icons/mail.png" alt="">
<div class="social-media mail last">
<img src="../../img/icons/mail.png" alt="">
<a href="mailto:masiv_@ethernal.win" target="_blank">masiv_ @ethernal.win</a>
</div>
</div>
<div class="lang-picker panel">
<b><a href="main_es.html">Español</a></b>
<b><a href="?langchange"><?php echo $tr[$lang]["navbar.langPicker"]; ?></a></b>
</div>

View File

@@ -1,9 +0,0 @@
<div class="header">
articles
</div>
<div class="content">
<a href="pages/articles/about-host_en.html">About this hosting</a>
<a href="pages/articles/diy-calculator_en.html">DIY Calculator</a>
<a >Website redesign</a> <!-- href="pages/articles/website-redesign_en.html" -->
<a >CSS Shenanigans</a> <!-- href="pages/articles/css-shenanigans_en.html" -->
</div>

View File

@@ -1,30 +1,25 @@
<div class="clip-box">
<div class="auto-scroll">
<div class="scroll_one">
<img src="../img/blinkies/0206-nyancat.gif" alt="">
<img src="../img/blinkies/bantimetravel_stamp.jpeg" alt="">
<img src="../img/blinkies/blinkiesCafe-cats.gif" alt="">
<img src="../img/blinkies/blinkiesCafe-nonbinary.gif" alt="">
<img src="../img/blinkies/blinkiesCafe-sudormrf.gif" alt="">
<img src="../img/blinkies/deletetiktok_pink_blinkie.webp" alt="">
<img src="../img/blinkies/dontfeedtheai.gif" alt="">
<img src="../img/blinkies/firefox_user.gif" alt="">
<img src="../img/blinkies/firefoxget.gif" alt="">
<img src="../img/blinkies/htmljunkie.gif" alt="">
<div class="spacer"></div>
</div>
<div class="scroll_two">
<img src="../img/blinkies/0206-nyancat.gif" alt="">
<img src="../img/blinkies/bantimetravel_stamp.jpeg" alt="">
<img src="../img/blinkies/blinkiesCafe-cats.gif" alt="">
<img src="../img/blinkies/blinkiesCafe-nonbinary.gif" alt="">
<img src="../img/blinkies/blinkiesCafe-sudormrf.gif" alt="">
<img src="../img/blinkies/deletetiktok_pink_blinkie.webp" alt="">
<img src="../img/blinkies/dontfeedtheai.gif" alt="">
<img src="../img/blinkies/firefox_user.gif" alt="">
<img src="../img/blinkies/firefoxget.gif" alt="">
<img src="../img/blinkies/htmljunkie.gif" alt="">
<div class="spacer"></div>
</div>
<!-- Have to replace this logic, maybe by having another way to modify behaviour of marquee -->
<?php for ($i = 0; $i <= 1; $i++) {
if ($i === 0) {
?><div class="scroll_one"><?php
} else if ($i === 1) {
?><div class="scroll_two"><?php
}
?>
<img src="../img/blinkies/0206-nyancat.gif" alt="">
<img src="../img/blinkies/bantimetravel_stamp.jpeg" alt="">
<img src="../img/blinkies/blinkiesCafe-cats.gif" alt="">
<img src="../img/blinkies/blinkiesCafe-nonbinary.gif" alt="">
<img src="../img/blinkies/blinkiesCafe-sudormrf.gif" alt="">
<img src="../img/blinkies/deletetiktok_pink_blinkie.webp" alt="">
<img src="../img/blinkies/dontfeedtheai.gif" alt="">
<img src="../img/blinkies/firefox_user.gif" alt="">
<img src="../img/blinkies/firefoxget.gif" alt="">
<img src="../img/blinkies/htmljunkie.gif" alt="">
<div class="spacer"></div>
</div>
<?php } ?>
</div>
</div>

View File

@@ -1,32 +0,0 @@
<div class="header">
services
</div>
<div class="content">
<div class="services-hint">
<img src="img/utilities/exclamation-mark.gif">
<p>Some may require an account! Invitation only.</p>
</div>
<div class="services">
<div>
<b>masivana</b>
<a class="button" href="https://movies.media.ethernal.win" target="_blank">Movies</a>
<a class="button" href="https://request.media.ethernal.win" target="_blank">Requests</a>
<a class="button" href="https://books.media.ethernal.win" target="_blank">Books</a>
<a class="button" href="https://tube.media.ethernal.win" target="_blank">Videos</a>
</div>
<div>
<b>cloud(s)</b>
<a class="button" href="https://photos.ethernal.win" target="_blank">Photos</a>
<a class="button" href="https://cloud2.ethernal.win" target="_blank">Cloud</a>
</div>
<div>
<b>misc.</b>
<a class="button" href="https://convert.ethernal.win" target="_blank">Converter</a>
<a class="button" href="https://pdf.ethernal.win" target="_blank">Pdf tools</a>
<a class="button" href="https://dl.ethernal.win" target="_blank">Vid. downloader</a>
<a class="button" href="https://analysis.ethernal.win" target="_blank">Chat stats</a>
<a class="button" href="https://draw.ethernal.win" target="_blank">Whiteboard</a>
<a class="button" href="https://gspanel.ethernal.win" target="_blank">Game panel</a>
</div>
</div>
</div>

View File

@@ -1,37 +0,0 @@
<hr>
<div class="update">
<div class="date">4 Feb 2026</div>
<h3 class="title">Under the hood changes</h3>
<p class="content">After some trial and error, I set-up
this site using a selfhosted git server, implementing and
pushing some changes I'm working on like php code to improve
website structure and maintenance, you can test the chat right
now, or you can visit
<a href="https://git.ethernal.win/masiv/website">https://git.ethernal.win/masiv/website</a> to see
the source code.
<img src="img/minis/pompompurin-heart.gif"> This is my first
time using git, php, and more, don't expect best practices
on the first try, rest assured I will keep improving :p</p>
</div>
<hr>
<div class="update">
<div class="date">2 Feb 2026</div>
<h3 class="title">Website redesign!</h3>
<p class="content">I decided to give this website a whole new appeareance,
the previous design was pretty barebones so I hope y'all like it!
(Mobile optimized :D) If you wanna know more:
<a href="pages/articles/en_website-redesign.html">
Website Redesign</a> <img src="img/minis/cat-star.gif">
<a href="archive/ver_1-until2feb2026/en_home.html">Archived version</a>
</p>
</div>
<hr>
<div class="update">
<div class="date">17 Jan 2026</div>
<h3 class="title">New website!</h3>
<p class="content">New website! I hope you find these new changes favorable,
it's been a while since I wanted to make my own website from scratch,
I spent some hours re-learning html css. I honestly prefer a bloat-less
internet, therefore there won't be any javascript (unless specified) </p>
</div>
<hr>

View File

@@ -1,6 +0,0 @@
<div class="clip-box">
<div class="auto-scroll">
<div class="scroll_one"><p>hello earthlings, this message if for you all that are wondering whether extra-terrestial life exists or you humans are alone. I guess you will never know... hello earthlings, this message if for you all that are wondering whether extra-terrestial life exists or you humans are alone. I guess you will never know...</p></div>
<div class="scroll_two"><p>hello earthlings, this message if for you all that are wondering whether extra-terrestial life exists or you humans are alone. I guess you will never know... hello earthlings, this message if for you all that are wondering whether extra-terrestial life exists or you humans are alone. I guess you will never know...</p></div>
</div>
</div>

View File

@@ -1,64 +0,0 @@
<div class="clip-box">
<div class="auto-scroll">
<div class="scroll_one">
<div class="noaiwebring">
<a href="https://baccyflap.com/noai" target="_blank" alt="no ai webring" title="no ai webring"><div class="home"></div></a>
<a href="https://baccyflap.com/noai/?prv&amp;s=msv" target="_top" alt="previous" title="previous"><div class="prv"></div></a>
<a href="https://baccyflap.com/noai/?rnd" target="_top" alt="random" title="random"><div class="rnd"></div></a>
<a href="https://baccyflap.com/noai/?nxt&amp;s=msv" target="_top" alt="next" title="next"><div class="nxt"></div></a>
<img src="img/webrings/miniwidget5.gif" alt="the top of a fuzzy,
black sphere with two arrows rising from it, one curving to the left, one to the right. across the bulk of the sphere it reads NO AI / WEBRING in squiggly,
uneven letters and next to those words is a small question mark">
</div>
<div class="noaiwebring">
<a href="https://baccyflap.com/noai" target="_blank" alt="no ai webring" title="no ai webring"><div class="home"></div></a>
<a href="https://baccyflap.com/noai/?prv&amp;s=msv" target="_top" alt="previous" title="previous"><div class="prv"></div></a>
<a href="https://baccyflap.com/noai/?rnd" target="_top" alt="random" title="random"><div class="rnd"></div></a>
<a href="https://baccyflap.com/noai/?nxt&amp;s=msv" target="_top" alt="next" title="next"><div class="nxt"></div></a>
<img src="img/webrings/miniwidget5.gif" alt="the top of a fuzzy,
black sphere with two arrows rising from it, one curving to the left, one to the right. across the bulk of the sphere it reads NO AI / WEBRING in squiggly,
uneven letters and next to those words is a small question mark">
</div>
<div class="noaiwebring">
<a href="https://baccyflap.com/noai" target="_blank" alt="no ai webring" title="no ai webring"><div class="home"></div></a>
<a href="https://baccyflap.com/noai/?prv&amp;s=msv" target="_top" alt="previous" title="previous"><div class="prv"></div></a>
<a href="https://baccyflap.com/noai/?rnd" target="_top" alt="random" title="random"><div class="rnd"></div></a>
<a href="https://baccyflap.com/noai/?nxt&amp;s=msv" target="_top" alt="next" title="next"><div class="nxt"></div></a>
<img src="img/webrings/miniwidget5.gif" alt="the top of a fuzzy,
black sphere with two arrows rising from it, one curving to the left, one to the right. across the bulk of the sphere it reads NO AI / WEBRING in squiggly,
uneven letters and next to those words is a small question mark">
</div>
<div class="spacer"></div>
</div>
<div class="scroll_two">
<div class="noaiwebring">
<a href="https://baccyflap.com/noai" target="_blank" alt="no ai webring" title="no ai webring"><div class="home"></div></a>
<a href="https://baccyflap.com/noai/?prv&amp;s=msv" target="_top" alt="previous" title="previous"><div class="prv"></div></a>
<a href="https://baccyflap.com/noai/?rnd" target="_top" alt="random" title="random"><div class="rnd"></div></a>
<a href="https://baccyflap.com/noai/?nxt&amp;s=msv" target="_top" alt="next" title="next"><div class="nxt"></div></a>
<img src="img/webrings/miniwidget5.gif" alt="the top of a fuzzy,
black sphere with two arrows rising from it, one curving to the left, one to the right. across the bulk of the sphere it reads NO AI / WEBRING in squiggly,
uneven letters and next to those words is a small question mark">
</div>
<div class="noaiwebring">
<a href="https://baccyflap.com/noai" target="_blank" alt="no ai webring" title="no ai webring"><div class="home"></div></a>
<a href="https://baccyflap.com/noai/?prv&amp;s=msv" target="_top" alt="previous" title="previous"><div class="prv"></div></a>
<a href="https://baccyflap.com/noai/?rnd" target="_top" alt="random" title="random"><div class="rnd"></div></a>
<a href="https://baccyflap.com/noai/?nxt&amp;s=msv" target="_top" alt="next" title="next"><div class="nxt"></div></a>
<img src="img/webrings/miniwidget5.gif" alt="the top of a fuzzy,
black sphere with two arrows rising from it, one curving to the left, one to the right. across the bulk of the sphere it reads NO AI / WEBRING in squiggly,
uneven letters and next to those words is a small question mark">
</div>
<div class="noaiwebring">
<a href="https://baccyflap.com/noai" target="_blank" alt="no ai webring" title="no ai webring"><div class="home"></div></a>
<a href="https://baccyflap.com/noai/?prv&amp;s=msv" target="_top" alt="previous" title="previous"><div class="prv"></div></a>
<a href="https://baccyflap.com/noai/?rnd" target="_top" alt="random" title="random"><div class="rnd"></div></a>
<a href="https://baccyflap.com/noai/?nxt&amp;s=msv" target="_top" alt="next" title="next"><div class="nxt"></div></a>
<img src="img/webrings/miniwidget5.gif" alt="the top of a fuzzy,
black sphere with two arrows rising from it, one curving to the left, one to the right. across the bulk of the sphere it reads NO AI / WEBRING in squiggly,
uneven letters and next to those words is a small question mark">
</div>
<div class="spacer"></div>
</div>
</div>
</div>

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -31,30 +31,28 @@ body {
display: flex;
flex-direction: row;
height: 100%;
overflow: hidden;
}
overflow: hidden;}
.navbar {
position: fixed;
z-index: 999;
display: flex;
gap: var(--gap);
padding: var(--gap);
}
.navbar.blank {
position: relative;
flex-shrink: 0;
opacity: 0;}
padding: calc(var(--gap) / 2);}
.navbar.top {
flex-direction: column;
justify-content: space-around;
align-items: center;
width: var(--side-bar-width);
height: 100%;
--max-width: var(--max-percentage-width-navar);
}
height: calc(100% - 20px);
--max-width: var(--max-percentage-width-navar);}
.navbar.blank {
position: relative;
flex-shrink: 0;
opacity: 0;
height: calc(100% - (10px * 2) - 5px);}
.links {
flex-grow: 1;
@@ -102,6 +100,10 @@ body {
@media only all and (max-width:700px) {
/* -- Display -- */
.navbar.bot > .about, .navbar.bot > .logo, .navbar.bot > .lang-picker { display: none; }
/* -- Ordering -- */
.about { order: 1; }
.logo { order: 2; }
@@ -123,13 +125,19 @@ body {
overflow: auto;
position: relative;}
.navbar.bot.blank, .navbar.top.blank { height: calc(var(--mobile-topnavbar-height) - 5px); } /* Adjustment, shrink divs for main navbar to overlay*/
.navbar.top, .navbar.bot {
width: calc(100% - (10px * 2));
padding-top: 0px;
padding-bottom: 0px;}
.navbar.top {
flex-direction: row;
justify-content: space-around;
align-items: center;
height: var(--mobile-topnavbar-height);
gap: var(--gap);
width: 100%;
--max-width: 80%;}
.navbar.top > .links { display: none; }
@@ -147,8 +155,7 @@ body {
height: var(--mobile-botnavbar-height);
flex-direction: column;
justify-content: center;
align-content: center;
width: 100%;}
align-content: center;}
.navbar.bot > div { flex-direction: row; }
@@ -162,7 +169,7 @@ body {
/* Ordering */
justify-content: flex-start;
clip-path: content-box;
align-items: flex-start;
align-items: center;
flex-direction: column;}
.links .last { margin-right: 20%; } /* Complementing visual trick by allow extra scrolling to hide previous visual trick, 100% - 80% */

View File

@@ -15,7 +15,7 @@ html {
--input-background-hover: rgb(216, 222, 227);
--input-highlight: rgb(86, 176, 255);
--navvar-background: rgb(179, 200, 218);
--navbar-buttons-bg: var(--accent-color-light);
--navbar-buttons-bg: white;
--navbar-buttons-hover: var(--input-background-hover);
--input-border-radius: var(--border-radius);
--link-color: var(--accent-color-dark);
@@ -58,25 +58,30 @@ img { image-rendering: pixelated;}
font-weight: normal;
font-style: normal;}
@font-face {
font-family: 'basiic';
src: url('../fonts/basiic.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'molecule31';
src: url('../fonts/molecule31_font.ttf') format('truetype');
font-weight: normal;
font-style: normal;}
@font-face {
font-family: 'beefont';
src: url('../fonts/beefont.ttf') format('truetype');
font-family: 'ms pgothic';
src: url('../fonts/ms_pgothic.ttf') format('truetype');
font-weight: normal;
font-style: normal;}
* { text-align: center; }
body { font-family: 'special elite', honyaji, basiic, monospace, serif, sans-serif; }
body { font-family: 'special elite', monospace, serif, sans-serif; }
/* ----------------- Color -------------------- */
.navbar { background-color: var(--navvar-background); }
.panel {
position: relative;
@@ -99,12 +104,19 @@ body { font-family: 'special elite', honyaji, basiic, monospace, serif, sans-ser
/* ------------- Navbars stiling ------------------- */
.about, .links > div, .lang-picker {
border: 5px groove rgb(214, 236, 255);
background: var(--navbar-buttons-bg);}
background-color: var(--navbar-buttons-bg);}
.about:hover, .links > div:hover, .lang-picker:hover {
background-color: var(--navbar-buttons-hover);
transition: background-color 0.1s;}
.navbar {
border-style: solid;
border-width: 20px;
border-image: url('../../../img/ui/border-1.png') 9 10 fill round;
margin: 10px;
image-rendering: pixelated;}
/* ------------- Inputs & links ----------------- */
button, .button {
font-family: 'special elite';
@@ -124,7 +136,7 @@ button:hover, .button:hover {
transition: padding-bottom 0.15s;
transition: padding-top 0.15s;}
input[type=text] {
input[type=text], input[type=password] {
font-family: 'special elite';
border: 0;
border-radius: var(--input-border-radius);
@@ -132,9 +144,9 @@ input[type=text] {
transition: background-color 0.1s;
transition: border-bottom 0.1s;}
input[type=text]:focus { outline: 0; }
input[type=text]:focus, input[type=password]:focus { outline: 0; }
input[type=text]:hover {
input[type=text]:hover, input[type=password]:hover {
border-bottom: 2px solid var(--input-highlight);
background-color: var(--input-background-hover);
transition: background-color 0.1s;}
@@ -172,3 +184,8 @@ a:hover {
color: white;
text-decoration: none;
}
@media only all and (max-width:700px) {
.navbar.bot { margin-top: 0px; }
.navbar.top { margin-bottom: 0px; }
}

View File

@@ -1,6 +1,6 @@
/* RESPONSIVE DESIGN, LAPTOP SLIM */
@media only all and (max-width:1175px){
@media only all and (max-width:1225px){
/* ------------- Order ------------- */
.blinkies.one { order: 1; }
.articles { order: 4; }

View File

@@ -13,8 +13,6 @@
.verticalscroll { display: flex; }
.scroll_below-clip-box { display: block; }
.navbar.bot > .about, .navbar.bot > .logo, .navbar.bot > .lang-picker { display: none; }
/* Decoration */
#try_hovering--blinkie { display: none; }
@@ -41,7 +39,7 @@
right: 0; /* There is a slight inconsistency with this, as scrollbar width isn't considered with fixed, but the blank version does contemplate, creating a gap wider than expected */
margin: var(--gap);
justify-content: center;
height: calc(100% - var(--mobile-botnavbar-height) - var(--mobile-topnavbar-height) - var(--gap) * 2);
height: calc(100% - (var(--mobile-botnavbar-height) + 5px) - (var(--mobile-topnavbar-height) + 5px) - var(--gap) * 2);
width: var(--scrolls-height);
overflow: hidden;}
@@ -83,15 +81,24 @@
align-content: center;}
.webrings .auto-scroll {
height: 65%;
width: fit-content;
flex-direction: row;
animation-name: scroll-webring-mobile;}
.webrings .scroll_one, .webrings .scroll_two {
gap: 2em;
flex-direction: row;}
.webrings .scroll_one > div , .webrings .scroll_two > div {
flex-shrink: 0;
height: 100%;
width: fit-content;
}
.webrings .auto-scroll > * > div img {
height: 60px;
width: auto;}
height: 100%;
width: auto;}
.scroll_below-clip-box {
position: absolute;
@@ -129,6 +136,10 @@
from {transform: translateX(calc(-50%));}
to {transform: translateX(0%);}}
.webrings .auto-scroll {
animation-duration: 25s;
}
/* Vertical scroll text */
.verticalscroll .auto-scroll {
animation-name: scroll-vertical;

BIN
img/ui/border-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 285 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 875 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 946 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 906 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 919 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 863 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 636 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 610 B

View File

@@ -3,7 +3,7 @@
declare(strict_types=1);
function retrieve_chat_history(object $pdo){
$query = "SELECT username, content, date_sent FROM comments;";
$query = "SELECT username, content, date_sent FROM comments WHERE visible=true;";
$stmt = $pdo->prepare($query);
$stmt->execute();

View File

@@ -2,6 +2,7 @@ CREATE TABLE comments (
id INT(11) NOT NULL AUTO_INCREMENT,
username VARCHAR(255) NOT NULL,
content TEXT NOT NULL,
visible BOOLEAN DEFAULT 1,
date_sent DATETIME DEFAULT CURRENT_TIME,
users_id INT(11) NOT NULL,
PRIMARY KEY (id),

View File

@@ -0,0 +1,45 @@
<?php
// Gets a file given an array with sources
function getFile(array $source){
$selected_source = $source["sources"][$source["selected_source"]];
if ($selected_source["source"] === "local") {
$file = file_get_contents(__DIR__ . $selected_source["url"]);
} else if ($selected_source["source"] === "internet") {
$curl = curl_init($selected_source["url"]);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$file = curl_exec($curl);
if ($file === false) {
echo "Error: " . curl_error($curl);
exit;
}
curl_close($curl);
}
unset($selected_source,$curl);
return $file;
}
// Returns the given sub-string given a initial search pattern, and a final end pattern.
function extractString(string $string,string $start_pattern, string $end_pattern) {
$start_pos = strpos($string,$start_pattern,strlen($start_pattern));
$end_pos = strpos($string,$end_pattern, $start_pos);
$extracted_string = substr($string, $start_pos, $end_pos - $start_pos);
unset($start_pos,$end_pos);
return $extracted_string;
}
// Self-explanatory
function scrapeWebsiteSites(array $source,string $start_pattern, string $end_pattern) {
$script = getFile($source);
$websites = extractString($script,$start_pattern,$end_pattern);
unset($script);
return $websites;
}

View File

@@ -2,12 +2,14 @@
declare(strict_types=1);
require_once "var_loading.inc.php";
ini_set('session.use_only_cookies' , 1);
ini_set('session.use_strict_mode' , 1);
session_set_cookie_params([
'lifetime' => 1800,
'domain' => 'ethernal.win',
'domain' => $_ENV["COOKIES_SITE"],
'path' => '/',
'secure' => true,
'httponly' => true
@@ -29,3 +31,10 @@ function session_regen() {
session_regenerate_id();
$_SESSION["last_regen"] = time();
}
# Default language
if (!isset($_SESSION["lang"])) {
$_SESSION["lang"] = "es";
}
$lang = $_SESSION["lang"];

383
includes/lang.inc.php Normal file
View File

@@ -0,0 +1,383 @@
<?php
// This file contains every text line, and translation across languages, search using || for different pages,
// I'm considering doing all of this with a database, but I'm not sure yet.
declare(strict_types=1);
function langChange() {
if (isset($_GET['langchange'])){
($_SESSION["lang"] == "es") ? $_SESSION["lang"] = "en" : $_SESSION["lang"] = "es";
$redirect_url = strtok($_SERVER["REQUEST_URI"], '?');
header("Location: " . $redirect_url);
}
}
# System for changing langauges
langChange();
/* -------------------------------------------- Main -------------------------------------------- */
$tr["en"]["main.chatTitle"] = "chat";
$tr["es"]["main.chatTitle"] = "chat";
$tr["en"]["main.servicesTitle"] = "services";
$tr["es"]["main.servicesTitle"] = "servicios";
$tr["en"]["main.articlesTitle"] = "articles";
$tr["es"]["main.articlesTitle"] = "artículos";
$tr["en"]["main.updatesTitle"] = "updates!";
$tr["es"]["main.updatesTitle"] = "actualizaciones!";
$tr["en"]["main.invitationDisclaimer"] = "Some may require an account! Invitation only.";
$tr["es"]["main.invitationDisclaimer"] = "Algunos requieren una cuenta, sólo por invitación!";
$tr["en"]["main.services_Masivana"] = "masivana";
$tr["es"]["main.services_Masivana"] = "masivana";
$tr["en"]["main.servicesMovies"] = "Movies";
$tr["es"]["main.servicesMovies"] = "Peliculas";
$tr["en"]["main.servicesRequests"] = "Request";
$tr["es"]["main.servicesRequests"] = "Peticiones";
$tr["en"]["main.servicesBooks"] = "Books";
$tr["es"]["main.servicesBooks"] = "Libros";
$tr["en"]["main.servicesVideos"] = "Videos";
$tr["es"]["main.servicesVideos"] = "Videos";
$tr["en"]["main.services_Clouds"] = "cloud(s)";
$tr["es"]["main.services_Clouds"] = "nube(s)";
$tr["en"]["main.servicesCloud"] = "Cloud";
$tr["es"]["main.servicesCloud"] = "Nube";
$tr["en"]["main.servicesPhotos"] = "Photos";
$tr["es"]["main.servicesPhotos"] = "Fotos";
$tr["en"]["main.services_Misc"] = "misc.";
$tr["es"]["main.services_Misc"] = "demás";
$tr["en"]["main.servicesFileConverter"] = "File Converter";
$tr["es"]["main.servicesFileConverter"] = "Conversor";
$tr["en"]["main.servicesPdfTool"] = "Pdf. Tools";
$tr["es"]["main.servicesPdfTool"] = "Herr. pdfs";
$tr["en"]["main.servicesVidDown"] = "Vid. Downloader";
$tr["es"]["main.servicesVidDown"] = "Desc. Videos";
$tr["en"]["main.servicesChatStats"] = "Chat Stats";
$tr["es"]["main.servicesChatStats"] = "Estad. Chats";
$tr["en"]["main.servicesWhiteboard"] = "Whiteboard";
$tr["es"]["main.servicesWhiteboard"] = "Pizarra";
$tr["en"]["main.servicesGamePanel"] = "Game panel";
$tr["es"]["main.servicesGamePanel"] = "Pan. Juegos";
$tr["en"]["main.updatesOneTitle"] = "New website!";
$tr["es"]["main.updatesOneTitle"] = "Nuevo sitio web!";
$tr["en"]["main.updatesOne"] = "New website! I hope you find these new changes favorable, it's been a while since I wanted to make my own website from scratch, I spent some hours re-learning html css. I honestly prefer a bloat-less internet, therefore there won't be any javascript (unless specified)";
$tr["es"]["main.updatesOne"] = "Nuevo sitio web! Espero les guste, desde ya hacía tiempo que quería tener mi propio sitio web, pero programado desde cero, estuve unas horitas re-aprendiendo html y css, sinceramente prefiero un internet sin bloat, por lo que a-priori no habrá javascript en este sitio. ";
$tr["en"]["main.updatesOneDate"] = "17 Jan 2026";
$tr["es"]["main.updatesOneDate"] = "17 Ene 2026";
$tr["en"]["main.updatesTwoTitle"] = "Website redesign!";
$tr["es"]["main.updatesTwoTitle"] = "Rediseño del sitio!";
$tr["en"]["main.updatesTwo"] = "I decided to give this website a whole new appeareance, the previous design was pretty barebones so I hope y'all like it! (Mobile optimized :D) If you wanna know more:";
$tr["es"]["main.updatesTwo"] = "Después de un tiempo decidí darle una nueva cara al sitio ya que el diseño anterior dejaba bastante que desear, espero que sea de su agrado!(Optimizado para todo tipo de dispositivos) Para más información ";
$tr["en"]["main.updatesTwo.1"] = "Website Redesign";
$tr["es"]["main.updatesTwo.1"] = "Rediseño de la página";
$tr["en"]["main.updatesTwo.2"] = "Archived version";
$tr["es"]["main.updatesTwo.2"] = "Versión archivada";
$tr["en"]["main.updatesTwoDate"] = "2 Feb 2026";
$tr["es"]["main.updatesTwoDate"] = "2 Feb 2026";
$tr["en"]["main.updatesThreeTitle"] = "Under the hood changes";
$tr["es"]["main.updatesThreeTitle"] = "Cambios técnicos";
$tr["en"]["main.updatesThree"] = "After some trial and error, I set-up this site using a selfhosted git server, implementing and pushing some changes I'm working on like php code to improve website structure and maintenance, you can test the chat right now, or you can visit";
$tr["es"]["main.updatesThree"] = "Estuve probando, y tras configurar lo necesario, configuré mi propio servidor git, y de allí un workflow para que se publique automaticamente, también estoy empezando a implementar php, por el momento solo estoy probando pero se puede testear en el chat, o viendo el código fuente en ";
$tr["en"]["main.updatesThree.1"] = "https://git.ethernal.win/masiv/website";
$tr["es"]["main.updatesThree.1"] = "https://git.ethernal.win/masiv/website";
$tr["en"]["main.updatesThree.2"] = " to see the source code.";
$tr["es"]["main.updatesThree.2"] = "";
$tr["en"]["main.updatesThree.3"] = "This is my first time using git, php, and more, don't expect best practices on the first try, rest assured I will keep improving :p";
$tr["es"]["main.updatesThree.3"] = "Es mi primera vez usando git, php, y todo, así que probablemente no esté siguiendo todas las buenas prácticas, pero iré aprendiendo :p";
$tr["en"]["main.updatesThreeDate"] = "4 Feb 2026";
$tr["es"]["main.updatesThreeDate"] = "4 Feb 2026";
$tr["en"]["main.articlesOne"] = "About this hosting";
$tr["es"]["main.articlesOne"] = "Acerca del host";
$tr["en"]["main.articlesTwo"] = "DIY Calculator";
$tr["es"]["main.articlesTwo"] = "Calculadora DIY";
$tr["en"]["main.articlesThree"] = "Website redesign";
$tr["es"]["main.articlesThree"] = "Rediseño de la página";
$tr["en"]["main.articlesFour"] = "CSS Shenaningans";
$tr["es"]["main.articlesFour"] = "Cositas del CSS";
$tr["en"]["main.chatLoginText"] = "Login";
$tr["es"]["main.chatLoginText"] = "Ingreso";
$tr["en"]["main.chatRegisterText"] = "Register";
$tr["es"]["main.chatRegisterText"] = "Registro";
$tr["en"]["main.chatUserPlaceholder"] = "User";
$tr["es"]["main.chatUserPlaceholder"] = "Usuarix";
$tr["en"]["main.chatPasswordPlaceholder"] = "Password";
$tr["es"]["main.chatPasswordPlaceholder"] = "Contraseña";
$tr["en"]["main.chatSendPlaceholder"] = "Press enter to send!";
$tr["es"]["main.chatSendPlaceholder"] = "Enter para enviar!";
$tr["en"]["main.about"] = "About me";
$tr["es"]["main.about"] = "Sobre mí";
$tr["en"]["main.lang"] = "Español";
$tr["es"]["main.lang"] = "English";
$tr["en"]["main.verticalScroll"] = "hello earthlings, this message if for you all that are wondering whether extra-terrestial life exists or you humans are alone. I guess you will never know... ";
$tr["es"]["main.verticalScroll"] = "hola terrícolas, esta transmisión es para todxs aquellxs que se preguntan si acaso existe la vida extraterrestre, o en caso contrario ustedes humanos están solxs. Supongo nunca lo sabrán... ";
$tr["en"]["main.altWebring"] = "the top of a fuzzy, black sphere with two arrows rising from it, one curving to the left, one to the right. across the bulk of the sphere it reads NO AI / WEBRING in squiggly, uneven letters and next to those words is a small question mark";
$tr["es"]["main.altWebring"] = "la ciima de una difusa bola negra con dos flechas saliendo de la missma, una hacia la derecha y la otra hacia la izquierda. Se puede leer en el cuerpo de la esfera NO AI / WEBRING con letras medio temblorosas, y al lado un signo de interrogación";
$tr["en"]["main.try_hoveringPath"] = "img/decorations/try_hovering_en.png";
$tr["es"]["main.try_hoveringPath"] = "img/decorations/try_hovering_es.png";
$tr["en"]["main.try_hoveringAlt"] = "try hovering!";
$tr["es"]["main.try_hoveringAlt"] = "apoya el cursor!";
$tr["en"]["main.try_tappingPath"] = "img/decorations/try_tapping_en.png";
$tr["es"]["main.try_tappingPath"] = "img/decorations/try_tapping_es.png";
$tr["en"]["main.try_tappingAlt"] = "try tapping!";
$tr["es"]["main.try_tappingAlt"] = "mantén presionado!";
$tr["en"]["main.try_SlidingPath"] = "img/decorations/try_sliding_down_en.png";
$tr["es"]["main.try_SlidingPath"] = "img/decorations/try_sliding_down_es.png";
$tr["en"]["main.try_SlidingAlt"] = "try sliding down!";
$tr["es"]["main.try_SlidingAlt"] = "prueba seguir deslizando!";
/* -------------------------------------------- Navbar -------------------------------------------- */
$tr["en"]["navbar.about"] = "About me!";
$tr["es"]["navbar.about"] = "Sobre mí!";
$tr["en"]["navbar.langPicker"] = "Español";
$tr["es"]["navbar.langPicker"] = "English";
/* -------------------------------------------- About -------------------------------------------- */
$tr["en"]["about.construction"] = "Still under construction, come back later!";
$tr["es"]["about.construction"] = "Todavía en construcción, vuelve más tarde!";
/* -------------------------------------------- Calc -------------------------------------------- */
$tr["en"]["calc.title"] = "Calculator";
$tr["es"]["calc.title"] = "Calculadora";
$tr["en"]["calc.h1"] = "About this project";
$tr["es"]["calc.h1"] = "Sobre este projecto";
$tr["en"]["calc.p1"] = "It has certainly been a while since I've touched Javascript,
and I wanted to regain some of the know-how I had about it,
that's why decided to code this calculator from scratch
without using any external libraries, nor chatbots, only
wikis like w3 school about the language itself even if
that required more time.";
$tr["es"]["calc.p1"] = "Hace tiempo que no programaba en Javascript, y quería
nuevamente agarrarle la mano, por lo que decidí hacer esta
calculadora sin hacer uso de absolutamente nada más que
w3 school y algunas búsquedas sobre javascript, nada de
preguntar mis dudas a ninguna IA (aunque sea más lento).";
$tr["en"]["calc.p2"] = "So it began my learning journey, coding this entire calculator
has been quite a joy I must say, and even if the final product
is lacking some funcionality like parenthesis parsing it still
works completely fine for most things, as it process inputs using
PEMDAS.";
$tr["es"]["calc.p2"] = "Así que me puse manos a la obra re-aprendiendo algunas cosas,
he de decir que fue un ejercicio divertido, y aunque el
resultado carece de algunas características (cómo el uso
de paréntesis), sigue el orden de las operaciones, y eso
es bastante.";
$tr["en"]["calc.p3"] = "Were I to make it all over again, I would probably go about
things differently, researching about more efficient algorithms
and methods and not reinventing the wheel, but the thing is,
that's the entire point of this excersice, wasn't for that
self-impossed limitation, I could make use of tons of more
efficient libraries.";
$tr["es"]["calc.p3"] = "En un futuro si la hiciese nuevamente, podría implementar
algoritmos más eficientes, puesto que realmente lo hice de
la manera que se me fue ocurriendo, y realmente debe ser muy
ineficiente, si quisiese eficiencia tendría mil maneras y
librerías, pero el objetivo de este ejercicio es aprender.";
$tr["en"]["calc.p4"] = "Now about the inner workings of the script, I implemented a
simple array that stores every character typed, and once the
equal key is pressed, it sends the array to be processed in
the following steps:";
$tr["es"]["calc.p4"] = "Yendo un poco más a lo técnico, mi idea principal fue almacenar
cada caracter escrito en un array, y luego procesarlo de la
siguiente manera:";
$tr["en"]["calc.p4l1"] = "Concatenate the digits, from [1,1,'+',2,3] to [11,'+',23].";
$tr["es"]["calc.p4l1"] = "Unir los números, de [1,1,'+',2,3] a [11,'+',23]";
$tr["en"]["calc.p4l2"] = "Search for term separators, and create multidimensional arrays with
each level representing one type of operation.";
$tr["es"]["calc.p4l2"] = "Buscar dónde están los separa términos, e ir creando arrays
multidimensionales, cada nivel tiene un tipo de operación (on orden).";
$tr["en"]["calc.p4l3"] = "Undo all this array but backwards, processing the output as it goes.";
$tr["es"]["calc.p4l3"] = "Deshacer ese array multidimensional, e ir procesando
todas las operaciones.";
$tr["en"]["calc.p5"] = "It looks easy on paper, but I spent an entire day and a half coding and dealing with
each aspect of programming, things I didn't quite remember, others I didn't know from
the get-go, etc. (I must add a personal rant about how difficult is dealing with
multidimensional arrays, it's not a trivial task for sure).";
$tr["es"]["calc.p5"] = "Dicho así parece sencillo, pero esutve un día y medio programando y lidiando
con cosas que, o no sabía, o no recordaba. (He de decir que trabajar con tanta iteración
en los arrays multidimensionales es un trabajo no trivial).";
$tr["en"]["calc.p6"] = "Update 23/01/2026 ";
$tr["es"]["calc.p6"] = "Actualización 23/01/2026 ";
$tr["en"]["calc.p7"] = "I showed my calculator to a friend of mine and they
pointed out I was lacking a 0 button, how could I miss
that, seriously XD.";
$tr["es"]["calc.p7"] = "Le mostré la calcualdora a unx amigx, y me hizo darme
cuenta de que no había implementado el botón del 0,
la verdad no tengo ni idea cómo no me di cuenta XD.";
/* -------------------------------------------- About host -------------------------------------------- */
$tr["en"]["about-host.title"] = "About this hosting";
$tr["es"]["about-host.title"] = "Acerca de este hosting";
$tr["en"]["about-host.content"] = "
<p>
Hello, <br><br>
You clicking this article means you have an interest on how this
website is structured, and what infrastructure it runs in.
I've gotta say this will probably change over time, but there is one
aspect I will adhere to, mantaining custody over my own data, in practice
that means everything I host will be hosted on-site on my own infrastructure,
just below a little about the <i>homelab's</i> history and some details.<br>
</p>
<h3>Specs</h3>
<div class='specs panel'>
<p>
CPU: AMD Ryzen 5 4600G <br>
RAM: 32GB DDR4 3200MHZ <br>
Motherboard: ASRock A320M-HDV 4.0 <br>
PSU: EVGA 450W 80plus <br>
Storage: <br>
<ul>x1 1TB SSD NVME Samsung 970 Plus</ul>
<ul>x2 3TB HDD WD Green (RAID 1)</ul>
Case: No-name brand,
quite square-ish.<br>
</p>
</div>
<h3>History</h3>
<p>
Each one of the components has a different origin, the case, psu and motherboard
have always been the same since the begining, part of the original PC I got as
a birthday present a while back, it was equiped with 8gb of ram, a modest HDD,
together with an AMD Ryzen 3 3200G, it was enough back then, but just as it came,
I got myself a brand new laptop, somewhat comparable (or even better) to the pc,
I ended up using it way more, thanks to it being portable.
</p>
<p>
After some time, can't quite remember the reason, I took the decision to move it to its
current location, a secure place with a good broadband connection, this was all the way
back at the start of 2022, when I installed Ubuntu Server 22.04 LTS.
</p>
<p>
I graudually updated it, I got the current proccesor over on amazon, then the ram
(attempted to purchase it from Aliexpress, but once it arrived I discovered it
wasn't compatible, had to re-sell it, and buy my current 2x16gb kit), and last but
not least, two 3tb disks which I thought was plenty for my usecase (foreshadowing).
</p>
<p>
I currently still have the same Ubuntu Server install on bare hardware, and almost
every single service I host is using a docker container, managed using Portainer.
</p>
<h3>Networking</h3>
<h4>Domain name</h4>
<p>
I've used several domain names over time, starting with No-IP to ssh remotely, rapidely migrating
to DuckDNS, that setup endured quite a while but after having some problems with DNS resolution, and
limitations on their DNS capabilities (they used AWS) thanks to my sub-domain repertoire I
decided to finally make the leap and purchase my own domain on some of the internet's registrars,
ended up with this domain on Porkbun, for a measly 5 dollars and a half, a lot /s.
</p>
<h4>Proxy &amp; DDNS</h4>
<p>
I use NginxProxyManager to manage all my domains and redirects, I don't plan on migrating to
Traefik for now because NPM does the job, and increasing my infrastructure's complexity isn't my
number one priority, maybe in the future. For Dynamic DNS I use DDClient, my ISP (Antel) doesn't
provide static IPs to residential addresses, so I'm stuck having to update my registers once or
twice a day in-leiu of having a fixed one.
</p>";
$tr["es"]["about-host.content"] = "
<p>
Buenas, <br><br>
Si estás leyendo esto es que te interesa saber un poco sobre la estructura
en la que están hosteados mis servicios, y esta página.
He de decir que esto irá cambiando, pero si hay algo que no creo cambie
será el hecho de que quiero mantener la custodia de mis datos, por lo que
todos lo que hostee será hosteado en mi propio <i>homelab</i>, debajo detalles e historia.<br>
</p>
<h3>Especificaciones</h3>
<div class='specs panel'>
<p>
Procesador: AMD Ryzen 5 4600G <br>
RAM: 32GB DDR4 3200MHZ <br>
Placa: ASRock A320M-HDV 4.0 <br>
PSU: EVGA 450W 80plus <br>
Almacenamiento: <br>
<ul>x1 1TB SSD NVME Samsung 970 Plus</ul>
<ul>x2 3TB HDD WD Green (RAID 1)</ul>
Gabinete: Marca genérica, <br>
es bastante cuadrado.
</p>
</div>
<h3>Historia</h3>
<p>
Cada componente tiene una historia un poquito diferente, el gabinete,
fuente y placa madre han sido la misma, y fueron un regalo de cumpleaños
de hace tiempo, en su momento con 8gb de ram, un disco HDD modesto, y
un AMD Ryzen 3 3200G, en su momento era algo, mas justo coincidió que
en esa ocasión, había recibido una laptop, a la cual le terminé dando
muchísimo más uso que a la torre, sumado al hecho de poderla transportarla
que personalmente me fue un gran plus.
</p>
<p>
Tiempo después, ya no recuerdo bien en qué contexto, decido llevarla al
lugar dónde ahora se encuentra, dónde estaba segura y con una buena conexión
de fibra óptica, esto fue por 2022, cuándo le instalé Ubuntu Server 22.04 LTS.
</p>
<p>
Gradualmente la fui mejorando, le compré su procesador actual por internet, luego
la memoria ram (intenté comprarla por Aliexpress, pero resultaba era incompatible,
por lo que tuve que revenderla, y comprarme los dos sticks de 16gb que tengo ahora),
y por último la decisión de comprar dos discos de 3tb para tener almacenamiento de
sobra (que resulta no lo fue) para lo que quisiese.
</p>
<p>
Actualmente sigo teniendo instalado el Ubuntu directo sobre el hardware, y casi todo
lo que tengo instalado allí lo manejo usando Docker a través de Portainer.
</p>
<h3>Red</h3>
<h4>Dominio</h4>
<p>
He usado varios dominios, al principio llegué a usar No-IP para conectarme remotamente,
para luego rápidamente migrar a DuckDNS, que me supo proveer de dominios gratuitos por varios años,
sin embargo, luego de toparme con las limitaciones de su servicio (por la cantidad de sub-dominios,
y debido a su dependendencia en servidores de no tan buena calidad de AWS) decidí invertir y
comprarme el dominio que estoy usando actualmente, con el registrante de Porkbun, que
debo decir fue muy económico, actualmente pago unos 5 dólares y medios al año, básicamente nada.
</p>
<h4>Proxy y DDNS</h4>
<p>
Para manejar los dominios y redirecciones he usado y seguiré usando NginxProxyManager, por ahora
no tengo planeado migrar a Traefik puesto que no está dentro de mis prioridades añadir
esa complejidad a mi setup (aunque quizás en un futuro lo haga). Uso DDClient para el DNS dinámico
puesto que mi ISP (Antel) no provee IP fijas a planes residenciales, y necesito actualizar los
registros con mi IP cada vez que esta cambia.
</p>";

View File

@@ -0,0 +1,9 @@
<?php
declare(strict_types=1);
require_once("common_webrings.inc.php");
require_once('transfemwebring_contr.inc.php');
require_once('transfemwebring_view.inc.php');
FEMRINGrender();

View File

@@ -0,0 +1,73 @@
// based again off https://transring.neocities.org/ring.js :)
// which is based off https://juneish.neocities.org/resources/webstring/
{
const VALID_WIDGET_TYPES = ["transgender", "nonbinary"]
let transfemring = {
// sitelist (oldest to newest)
// strip the protocol off
sites: [{"id":1,"description":"You're here!","site_link":"fem.nz","author":"me","in_the_ring":true,"notes":"","created_at":"2025-10-07T08:10:09.659Z","updated_at":"2025-10-07T08:10:09.659Z"},{"id":2,"description":"transfem webdev :p","site_link":"skyler.lol","author":"Skyler!","in_the_ring":false,"notes":"","created_at":"2025-10-07T08:10:35.275Z","updated_at":"2025-10-07T08:10:35.275Z"},{"id":3,"description":"just a personal site for music, musings, and blog posts! ran by a transfem enby :)","site_link":"transferns.neocities.org","author":"Andie/Fern","in_the_ring":true,"notes":"","created_at":"2025-10-07T08:10:57.429Z","updated_at":"2025-12-11T02:14:39.833Z"},{"id":4,"description":"the most evil and repulsive website on planet earth","site_link":"cresentri.com","author":"cresentri","in_the_ring":true,"notes":"","created_at":"2025-10-07T08:11:30.742Z","updated_at":"2025-10-07T08:11:30.883Z"},{"id":5,"description":"i'm messing around with trying to learn how to use html for somewhat interesting things i guess","site_link":"iseel.neocities.org","author":"IseeL","in_the_ring":true,"notes":"","created_at":"2025-10-07T08:12:18.126Z","updated_at":"2025-10-07T08:29:03.148Z"},{"id":6,"description":"Just a place for me to share info about my projects and talk about things i enjoy \u003c3","site_link":"vivslakes.moe","author":"Viv","in_the_ring":true,"notes":"","created_at":"2025-10-07T08:13:05.476Z","updated_at":"2025-10-07T08:13:05.567Z"},{"id":7,"description":"all kinds of things!","site_link":"fionaruthbo.neocities.org","author":"Fiona Ruthbo","in_the_ring":true,"notes":"","created_at":"2025-10-07T08:14:16.412Z","updated_at":"2025-10-07T08:14:16.428Z"},{"id":8,"description":"Poetry, halftones, and Twitchy.","site_link":"klara.nz","author":"me!","in_the_ring":true,"notes":"","created_at":"2025-10-07T08:39:07.132Z","updated_at":"2025-10-07T08:57:26.399Z"},{"id":9,"description":"a little birdie on the internet :)","site_link":"kestrel.pet","author":"Kestrel","in_the_ring":true,"notes":"","created_at":"2025-11-15T06:57:16.625Z","updated_at":"2025-11-15T06:57:26.268Z"},{"id":10,"description":"autistic artist musician webdev dragon(girl?)thing; very gay; rawr","site_link":"ytd.wtf","author":"Yuri the Dragon","in_the_ring":true,"notes":"","created_at":"2025-12-30T09:57:00.232Z","updated_at":"2025-12-30T11:19:58.022Z"},{"id":11,"description":"This website runs on my living room heater","site_link":"izzy.kiwi","author":"Just Izzy","in_the_ring":false,"notes":"","created_at":"2025-12-30T11:19:12.953Z","updated_at":"2026-01-01T02:54:57.059Z"},{"id":12,"description":"a dump for all of my projects and adhd thoughts","site_link":"ikelene.dev","author":"Ikelene","in_the_ring":true,"notes":"","created_at":"2026-01-23T01:52:44.443Z","updated_at":"2026-01-23T01:52:44.463Z"},{"id":13,"description":"contains my mind space, which includes gaming, references, easter eggs, art, programming, etc!","site_link":"theabsoluterealm.com","author":"ezra","in_the_ring":true,"notes":"","created_at":"2026-01-23T01:54:27.672Z","updated_at":"2026-01-23T01:56:27.520Z"},{"id":14,"description":"Just a trans girl that likes radios, computers, creative freedom, art, etc not much more to it!","site_link":"cafepots.neocities.org","author":"Cafe_Pots","in_the_ring":true,"notes":"","created_at":"2026-01-30T08:36:39.133Z","updated_at":"2026-01-30T08:36:51.946Z"},{"id":15,"description":"Extension of my cute, sparkley, sprinkle filled transfem brain! ദ്ദി◝ ⩊ ◜)","site_link":"winzpir.neocities.org","author":"Winzpir/Angel","in_the_ring":true,"notes":"","created_at":"2026-02-20T01:31:47.843Z","updated_at":"2026-02-20T01:31:47.843Z"}],
root: "https://fem.nz"
}
console.log(transfemring)
transfemring.index = location.href.startsWith("file://") ? 0 : transfemring.sites.findIndex((entry) => location.href.includes("://" + entry.site_link));
let widget = document.currentScript.dataset.widget ?? "transgender";
function urlWithWidget(path) {
return `${transfemring.root}/ring/${widget}/${path}`
}
if (!VALID_WIDGET_TYPES.includes(widget)) {
console.log("To web admin: transfem webring widget should have data-widget set to one of the following if configured (attribute will default to 'transgender'):", VALID_WIDGET_TYPES)
console.log(`data-widget currently set to: ${widget}`)
widget = "transgender"
}
if (transfemring.index === -1) {
document.currentScript.outerHTML = `
<div>
<div class="transfem-ring" style="display: flex; justify-content: center; align-items: center; gap: 3.278%; max-width: 244px; image-rendering: pixelated">
<a href="${transfemring.root}" target="_top"><img width="168" height="61" src="${urlWithWidget("banner.png")}"></a>
</div>
(not yet, but maybe soon!)
</div>
`;
} else {
function nextActive() {
let currentIndex = transfemring.index + 1
while (!location.href.includes(transfemring.sites[currentIndex % transfemring.sites.length].site_link)) {
if (transfemring.sites[currentIndex % transfemring.sites.length].in_the_ring) {
return transfemring.sites[currentIndex % transfemring.sites.length]
}
currentIndex++
}
return transfemring.sites[currentIndex % transfemring.sites.length]
}
function previousActive() {
let currentIndex = transfemring.index - 1
while (!location.href.includes(transfemring.sites.at(currentIndex).site_link)) {
if (transfemring.sites.at(currentIndex).in_the_ring) {
return transfemring.sites.at(currentIndex)
}
currentIndex--
}
return transfemring.sites[currentIndex % transfemring.sites.length]
}
let next = "https://" + nextActive().site_link
let prev = "https://" + previousActive().site_link;
document.currentScript.outerHTML = `
<div class="transfem-ring" style="display: flex; justify-content: center; align-items: center; gap: 3.278%; max-width: 244px; image-rendering: pixelated">
<a href="${prev}" target="_top" style="width: 12.295%">
<img width="30" height="32" src="${urlWithWidget("arrow.png")}" alt="previous site">
</a>
<a href="${transfemring.root}" target="_top" style="width: 68.852%">
<img width="168" height="61" src="${urlWithWidget("banner.png")}" alt="transfem webring">
</a>
<a href="${next}" target="_top" style="width: 12.295%">
<img width="30" height="32" src="${urlWithWidget("arrow.png")}" alt="next site" style="transform: scaleX(-1);">
</a>
</div>
`;
}
}

View File

@@ -0,0 +1,117 @@
<?php
declare(strict_types=1);
// File sources, images & scripts
$TRANSFEMRING_FILES = [
"nonbinary" => [
"arrow_path" => "../../../img/webrings/transfem_enby_arrow.png",
"banner_path" => "../../../img/webrings/transfem_enby_banner.png"
],
"transgender" => [
"arrow_path" => "../../../img/webrings/transfem_trans_arrow.png",
"banner_path" => "../../../img/webrings/transfem_trans_banner.png"
]
];
$TRANSFEMRING_SCRIPT_SOURCE = [
"selected_source" => 1,
"sources" =>
[["url" => "https://fem.nz/ring/transfemring.js",
"source" => "internet"],
["url" => "/transfemwebring.js",
"source" => "local"]]
];
// Specific variables for script
$TRANSFEMRING_ROOT = "https://fem.nz";
$TRANSFEMRING_VALID_WIDGET_TYPES = ["transgender", "nonbinary"];
// Personal identifiers/choices
$TRANSFEMRING_WIDGET_TYPE = $TRANSFEMRING_VALID_WIDGET_TYPES[1];
$TRANSFEMRING_ID = 8;
// Functions
function primarySplit(string $array) {
$i = 0;
while (strlen($array) !== 0) {
// Strip coma if found
if (str_starts_with($array,',')) {
$array = substr($array,1);
}
// Get substring position and length
$start_pos = 1;
$end_pos = strpos($array,"}",1);
$item_len = $end_pos - $start_pos;
// Save website into array, and strip array
$return_array[$i] = substr($array,$start_pos,$item_len);
$array = substr($array,$item_len+2); // +2 from { and }
$i++;
}
unset($array,$start_pos,$end_pos,$item_len,$array);
return $return_array;
}
function secondarySplit(string $sub_array) {
while (strlen($sub_array) !== 0){
if (str_starts_with($sub_array,',')) {
$sub_array = substr($sub_array,1);
}
$key_start_pos = 1;
$key_end_pos = strpos($sub_array,"\"",1);
$key_len = $key_end_pos - $key_start_pos;
$key = substr($sub_array,$key_start_pos,$key_len);
$value_start_pos = $key_len + 3; // +3 from " , " and :
// Check if key is quoted
if (strpos($sub_array,"\"",$value_start_pos) != $value_start_pos) {
$keyhasQuotes = FALSE;
$value_end_pos = strpos($sub_array,",");
} else {
$value_start_pos++; // +1 from "
$value_end_pos = strpos($sub_array,"\"",$value_start_pos);
$keyhasQuotes = TRUE;
}
$value_len = $value_end_pos - $value_start_pos;
$value = substr($sub_array,$value_start_pos,$value_len);
$return_sub_array[$key] = $value;
$sub_sub_array_len = $key_len + $value_len + 3; // +3 from " , " and :
if ($keyhasQuotes) {
$sub_sub_array_len = $sub_sub_array_len + 2; // +2 from " and "
}
$sub_array = substr($sub_array,$sub_sub_array_len);
}
unset($sub_array, $value, $value_len, $value_start_pos, $value_end_pos, $key, $key_len, $key_start_pos, $key_end_pos, $keyhasQuotes, $sub_sub_array_len);
return $return_sub_array;
}
$transfemring_sites = scrapeWebsiteSites($TRANSFEMRING_SCRIPT_SOURCE,'sites: [',']');
$transfemring_sites = primarySplit($transfemring_sites);
for ($i = 0; $i < sizeof($transfemring_sites); $i++) {
$depured_transfemring_sites[$i] = secondarySplit($transfemring_sites[$i]);
}
$transfemring_sites = $depured_transfemring_sites;
unset($depured_transfemring_sites);
for ($i = 1; $i < count($transfemring_sites); $i++){
if ($transfemring_sites[$i]['id'] == $TRANSFEMRING_ID) {
$transfem_prev = 'https://' . $transfemring_sites[($i-1)]["site_link"];
$transfem_current = 'https://' . $transfemring_sites[($i)]["site_link"];
$transfem_next = 'https://' . $transfemring_sites[($i+1)]["site_link"];
$found = TRUE;
}
}
if (!isset($found)) {
echo ("ERROR ID NOT FOUND");
}

View File

@@ -0,0 +1,20 @@
<?php
declare(strict_types=1);
function FEMRINGrender(){
global $TRANSFEMRING_ROOT, $TRANSFEMRING_FILES, $TRANSFEMRING_WIDGET_TYPE, $transfem_prev, $transfem_next;
?>
<div class="transfem-ring" style="display: flex; justify-content: center; align-items: center; image-rendering: pixelated;">
<a href="<?php echo $transfem_prev ?>" target="_top" style="height: 100%; width: 15.574%;">
<img src="<?php echo $TRANSFEMRING_FILES[$TRANSFEMRING_WIDGET_TYPE]["arrow_path"]; ?>" alt="previous site" style="vertical-align: middle; height: 100%;">
</a>
<a href="<?php echo $TRANSFEMRING_ROOT ?>" target="_top" style="height: 100%; width: 68.852%;">
<img src="<?php echo $TRANSFEMRING_FILES[$TRANSFEMRING_WIDGET_TYPE]["banner_path"]; ?>" alt="transfem webring" style="vertical-align: middle; height: 100%;">
</a>
<a href="<?php echo $transfem_next ?>" target="_top" style="height: 100%; width: 15.574%;">
<img src="<?php echo $TRANSFEMRING_FILES[$TRANSFEMRING_WIDGET_TYPE]["arrow_path"]; ?>" alt="next site" style="transform: scaleX(-1); vertical-align: middle; height: 100%;">
</a>
</div>
<?php
}

View File

@@ -0,0 +1,9 @@
<?php
declare(strict_types=1);
require_once("common_webrings.inc.php");
require_once('transingtheinternet_contr.inc.php');
require_once('transingtheinternet_view.inc.php');
TRANSINGrender();

View File

@@ -0,0 +1,926 @@
// webstring by june @ juneish.neocities.org
{
let webring = {
// sites in the ring
// remove the https://
sites: [
//"elijahposttrash.neocities.org",
"napkinonline.nekoweb.org",
"cossechan.nekoweb.org",
"rainfrog.nekoweb.org",
"lotusmoonstart.neocities.org",
"foxlore.neocities.org",
"butterfly3000.neocities.org",
"zimawtf.neocities.org",
"princesschainsaw.neocities.org",
"homopile.neocities.org",
"ruitherga.neocities.org",
"tudorcottage.neocities.org",
"jorse.neocities.org",
"the-ivesofmarch.neocities.org",
"pombogay.neocities.org",
"ries.neocities.org",
"coffeeplant.neocities.org",
"eviltmasccatboypili.neocities.org",
"kiwiandoesthings.place",
"liquid-sunshine.neocities.org",
"winchuckster.neocities.org",
"marlena.app",
"clare.nekoweb.org",
"lexthesilly.neocities.org",
"giantmolecular.cloud",
"caterpillarangel.neocities.org",
"quinnbozon.nekoweb.org",
"endy-boi.neocities.org",
"thelostsignal.neocities.org",
"tesseractcube.neocities.org",
"americanachronism.neocities.org",
"attissillies.neocities.org",
"chirpylaura.neocities.org",
"xenon-starz.neocities.org",
"yoyle.city",
"julians-art.neocities.org",
"djsng.neocities.org",
"maehat.neocities.org",
"plaguecore.neocities.org",
"enteragoodnamehere.neocities.org",
"brooklynights.nekoweb.org",
"5k1n3473r.neocities.org",
"loserlost.neocities.org",
"knife-in-the-coffee.neocities.org",
"wheel-of-fortune.neocities.org",
"starboystation.neocities.org",
"lemonsprout.neocities.org",
"bloodbathspite.neocities.org",
"stargazing.nekoweb.org",
"b1temark.neocities.org",
"vinventolin.neocities.org",
"mfdook.neocities.org",
"conners1corner.neocities.org",
"backtick.nekoweb.org",
"odriscoll.neocities.org",
"fireye.coffee",
"iso-bel.computer",
"xpvm.net",
"jaennymorton.neocities.org",
"flimsknoght.neocities.org",
"www.honeyteaaa.art",
"androbohij.cc",
"nickyturner.neocities.org",
"colgator.neocities.org",
"vabu.nekoweb.org",
"the-disorganized-mind-palace.neocities.org",
"clementinesyumehaven.neocities.org",
"shittymeat999.neocities.org",
"starfield.nekoweb.org",
"weban3e1.neocities.org",
"kaidoesartzz.nekoweb.org",
"natsfixations.neocities.org",
"bensect.space",
"wackysworld.neocities.org",
"webgutter.neocities.org",
"iseel.neocities.org",
"samsolarsystem.neocities.org",
"thestrangeemporium.neocities.org",
"chromix.nekoweb.org",
"eonsadrift.nekoweb.org",
"juliesqueaks.neocities.org",
"danzig.nekoweb.org",
"barkode.neocities.org",
"mustymixtape.neocities.org",
"charmiesworld.neocities.org",
"kadyjerry.neocities.org",
"notes-from-michaels-desk.neocities.org",
"sleeping-satan.neocities.org",
"integratedvoices.neocities.org",
"ephesusmoon.neocities.org",
"aglovale.nekoweb.org",
"friendshapedplant.neocities.org",
"animalgirlssanctuary.neocities.org",
"cynderthekitsune.nekoweb.org",
"spaceblog.neocities.org",
"skyllrk.neocities.org",
"femtanyl03.neocities.org",
"jennie-archives.neocities.org",
"mcdougmuffin.neocities.org",
"bunnyboyblog.neocities.org",
"wizardhell.neocities.org",
"mightbemod.neocities.org",
"esiacannotforget.neocities.org",
"skyler.lol",
"pokeymanatee4.xyz",
"hereafterlaughter.neocities.org",
"fresh1219.neocities.org",
"letsgoleelee.neocities.org",
"rue04.neocities.org",
"cubething.dev",
"mostsilliest.nekoweb.org",
"mavisdeluna.art",
"somebit.neocities.org",
"themarshe.neocities.org",
"cryotato.github.io",
"girlboybird.hotglue.me",
"crowguinisonline.neocities.org",
"daisybells.neocities.org",
"crypticamanita.neocities.org",
"orbitt.sbs",
"0ldw3bl0v3r.neocities.org",
"socsie.space",
"exclave.city",
"michoislost.nekoweb.org",
"kero.net",
"musicalmatchalatte.gay",
"somewhere-city.neocities.org",
"bellpepperfan.neocities.org",
"ancientangel333.neocities.org",
"thealleyway.neocities.org",
"maycithegal.nekoweb.org",
"ikelene.nekoweb.org",
"jackpurrin.me",
"angelnetcast.com",
"ourfriendsplace.neocities.org",
"ceefax.nekoweb.org",
"mrwrzr.neocities.org",
"darxori.neocities.org",
"sugarsamu.neocities.org",
"leonie.lgbt",
"april.nekoweb.org",
"computersoda.neocities.org",
"neonspiral.neocities.org",
"werewiire.neocities.org",
"ollie-okay.neocities.org",
"csarhere.nekoweb.org",
"mezbezls.neocities.org",
"playoffs-nem.neocities.org",
"peppers-wasteland.neocities.org",
"wlodekm.nekoweb.org",
"barkingdead.neocities.org",
"myepicsite424.neocities.org",
"ridvenge.neocities.org",
"digitaldoggi.com",
"goodgirl.dev",
"mossyscorner.neocities.org",
"dospuntostr.es",
"rakii0zuu.neocities.org",
"the-icarus-archive.neocities.org",
"kaiswonderland.nekoweb.org",
"crowpunk.co",
"gl1tz1.monster",
"itztheo.neocities.org",
"deadvenge.neocities.org",
"thoushallkill.neocities.org",
"gwurb.neocities.org",
"starsforthelivinganddead.neocities.org",
"livvy94.neocities.org",
"mocha8686.neocities.org",
"ancientcrypt.neocities.org",
"jaspertheepic.neocities.org",
"crazed4sallymanders.neocities.org",
"summer-slushpups-hut.neocities.org",
"applejuicey.neocities.org",
"guzu2squared.neocities.org",
"martin-is-a-real-person.neocities.org",
"cosm-os.neocities.org",
"decomdiatom.neocities.org",
"mistakemp4.neocities.org",
"pogmom.me",
"masterluuc.neocities.org",
"cyntheticgal.neocities.org",
"moths-clubhouse.neocities.org",
"smoothscallywag.neocities.org",
"cwd.moe",
"korumeow.dev",
"cascaria.neocities.org",
"roguepebble.neocities.org",
"lizzardencounter.neocities.org",
"jamie.monster",
"natthecat.net",
"laprogrammatriceverde.crabdance.com",
"nathanntan.neocities.org",
"softfuzzycedar.neocities.org",
"didelphidae.neocities.org",
"darkxwolf17.nekoweb.org",
"wateringfruits.neocities.org",
"boredhobo.neocities.org",
"furbycoven.neocities.org",
"darkmomokocore.neocities.org",
"lilys-place.nekoweb.org",
"calzonie.neocities.org",
"jesterknight.neocities.org",
"lorekeeping.neocities.org",
"yokosplace.xyz",
"kris-scapes.neocities.org",
"digitalvenus.neocities.org",
"mewardgay.neocities.org",
"candyteeth.neocities.org",
"futch.nekoweb.org",
"okaynana.neocities.org",
"artielas.neocities.org",
"pucha1985.neocities.org",
"alienspaceinvader.neocities.org",
"smugwolf.neocities.org",
"nilistisk.neocities.org",
"dyingsignals.love",
"bananasplit.nekoweb.org",
"twinkpad.neocities.org",
"deadon.rip",
"icarusdean.neocities.org",
"estivalbloom.neocities.org",
"nightmarefish.neocities.org",
"planthouse.neocities.org",
"emo-mruczek.pet",
"mechagic.party",
"yuros-nest.neocities.org",
"carrick-pre.github.io",
"orlandoscoffee.neocities.org",
"bonesdale.neocities.org",
"elu-isa.neocities.org",
"cult.ist",
"killanova.neocities.org",
"usahanaa.neocities.org",
"necrodancing.neocities.org",
"enderwebs.neocities.org",
"p1xieparadis3.neocities.org",
"wyrppad.neocities.org",
"sluglife.neocities.org",
"elixirical.nekoweb.org",
"ghostingpen.neocities.org",
"cindyblossom.neocities.org",
"www.bearadactyl.net",
"lerariemann.nekoweb.org",
"mayonmnnaise.nekoweb.org",
"defoko-mp3.neocities.org",
"dipschitt.neocities.org",
"wanwanworld.neocities.org",
"chrysallis.neocities.org",
"plushcowz.neocities.org",
"sugarangel.neocities.org",
"toonilumi.neocities.org",
"tohellwithit.nekoweb.org",
"paulsworld.neocities.org",
"teddys-grove.neocities.org",
"simplyjason.neocities.org",
"cadapra.neocities.org",
"avaforward.neocities.org",
"toribytez.neocities.org",
"sudo.pink",
"jello01000101.neocities.org",
"rollergirlz.nekoweb.org",
"voidway.nekoweb.org",
"vanillachai42.neocities.org",
"snailburger.neocities.org",
"angelchime.neocities.org",
"verzephobe.neocities.org",
"happigreencactus.neocities.org",
"kaijukity.moe",
"dexterdaybreaker.neocities.org",
"celest3.neocities.org",
"branchlines.neocities.org",
"musubi.nekoweb.org",
"cutsfrombrokenglass.neocities.org",
"cherryangel.neocities.org",
"kid-koda.neocities.org",
"basophie.neocities.org",
"maddisonstoff.neocities.org",
"justpattie.neocities.org",
"toothspit.neocities.org",
"winteryear.neocities.org",
"neurasun.neocities.org",
"https://jackpurrin.me/",
"victrix.neocities.org",
"autostereogrammusic.com",
"ananotsocute.neocities.org",
"honeyedcharlatan.neocities.org",
"fleasonrats.neocities.org",
"oozy.neocities.org",
"dustbunnybedroom.neocities.org",
"siffarooni.neocities.org",
"blanche.nekoweb.org",
"follyfox.neocities.org",
"mothpup.pet",
"thicccatz.neocities.org",
"lucky-goose.neocities.org",
"betty-plays-bass.neocities.org",
"karchah.neocities.org",
"psyclone.nekoweb.org",
"gojidragon.com",
"atomicgothic.neocities.org",
"morocerasus.neocities.org",
"otto-the-coolest.neocities.org",
"citadark.neocities.org",
"fish.golf",
"glyph555.neocities.org",
"cmbcoldspot.neocities.org",
"feelingmachine.moe",
"dollblooms.neocities.org",
"max-iwtaco.neocities.org",
"roxsquires.gay",
"natural-stupidity.neocities.org",
"mothinary.neocities.org",
"invadergvim.neocities.org",
"pastel-skies.nekoweb.org",
"zaytnzcity.neocities.org",
"aria.coffee",
"melody-is.gay",
"gatorboi.neocities.org",
"disctwo.net",
"xduskashesreal.neocities.org",
"toasty.place",
"loserr-blog.neocities.org",
"puka-muriska.neocities.org",
"dynazenta.neocities.org",
"sea-angel-blu.neocities.org",
"form-and-thearchive.neocities.org",
"ann-html.neocities.org",
"lamebrain.neocities.org",
"calicocamcorders.neocities.org",
"mammifereaile.nekoweb.org",
"deyx.neocities.org",
"witchesbrew.nekoweb.org",
"possiblyaxolotl.com",
"onemoredoughnut.neocities.org",
"pudo.neocities.org",
"wizardzz.neocities.org",
"parkerspixels.neocities.org",
"coffeeknife.nekoweb.org",
"bearsjunkjournal.neocities.org",
"benitengu.neocities.org",
"mjdxp.neocities.org",
"floraltriptych.nekoweb.org",
"upsidedownhourglass.neocities.org",
"hello-m00n.github.io/personal_website",
"chanteryuutai.neocities.org",
"blobii.neocities.org",
"sillygirlclub.neocities.org",
"heyitsrksmith.com",
"skyla.moe",
"l0bst3rf4c3.neocities.org",
"flowergarden-cafe.neocities.org",
"byteemily.nekoweb.org",
"chrysalis.nehulus-vagus.com",
"ruby-makes-bad-games.neocities.org",
"dreamvalley.nekoweb.org",
"axelotl3001.neocities.org",
"www.callistoashley.dev",
"minonii.neocities.org",
"elfwyn.neocities.org",
"jessieisironicallym3.neocities.org",
"quaggos.neocities.org",
"centipederot.neocities.org",
"blinkie-net.neocities.org",
"rainbowgirl.neocities.org",
"skelenby.neocities.org",
"crowycawcaw.neocities.org",
"marcypink.neocities.org",
"kickaha.neocities.org",
"cyberfangz.site",
"deadraccoon.neocities.org",
"auroradynia.com",
"rubisdubis.nekoweb.org",
"moonflyxspace.neocities.org",
"luka-the-normal-boy.neocities.org",
"cobwebears.neocities.org",
"sophiebites.me",
"kimn.neocities.org",
"jupy.wtf",
"nerdforeternity.neocities.org",
"liliancipher.neocities.org",
"luvrksknskyejourney.org",
"starry622.neocities.org",
"sapphic-cafe.net",
"orcassiea.nekoweb.org",
"possumlark.org",
"captainicarus.neocities.org",
"mossmurder.neocities.org",
"dreamsofvinushka.neocities.org",
"r1xstixx420.neocities.org",
"aevuslabyrinth.neocities.org",
"smyrlok.neocities.org",
"thejay-ester.neocities.org",
"femboy.art",
"computerguts.gay",
"hench4life.neocities.org",
"hexate.neocities.org",
"oyasumihologram.nekoweb.org",
"voltdrake.neocities.org",
"insqueeration.neocities.org",
"stylrtechnologies.com",
"fruitycircus.com",
"nepetaquest.nekoweb.org",
"adilene.net",
"ivycryptid.nekoweb.org",
"bride2be.neocities.org",
"e10.neocities.org",
"alcatrazisland.neocities.org",
"aetherie-99.neocities.org",
"eringrimalkin.neocities.org",
"mortland.neocities.org",
"mintchipdotcom.neocities.org",
"cake.moe",
"sillyhearts.neocities.org",
"bscit.dev",
"ultrakill.nekoweb.org",
"chimerathing.neocities.org",
"catatonia.neocities.org",
"b1ttersw33t.neocities.org",
"stars-sys.neocities.org",
"remnantmaru.neocities.org",
"rainmirage.art",
"mettatons-fan-corner.neocities.org",
"postalbutch.neocities.org",
"illomen.neocities.org",
"rainparade.nekoweb.org",
"bramblingaround.neocities.org",
"columbiasthoughts.neocities.org",
"sunnishinez.neocities.org",
"alyxia.dev",
"sugrstrz.com",
"acidicalchemist.nekoweb.org",
"weatherchannel.neocities.org",
"electro-magnets.neocities.org",
"leamsiwl.nekoweb.org",
"asterhalloween.neocities.org",
"analoguecatalogue.neocities.org",
"sorrowshowers.neocities.org",
"stelfield.neocities.org",
"sepharia.neocities.org",
"sleepycircus.neocities.org",
"aestuarium.me",
"asmodeusvulcan.neocities.org",
"ender-the-phantom.neocities.org",
"multicolor-anarchist.neocities.org",
"beaus-silly-folder.nekoweb.org",
"ivyswell-tavern.neocities.org",
"tilde-os.neocities.org",
"din0r4wr.neocities.org",
"astracelestine.nekoweb.org",
"rockseize.neocities.org",
"breaker-one.neocities.org",
"oceansandy02.nekoweb.org",
"rawrware.neocities.org",
"octopen.neocities.org",
"lupinus.neocities.org",
"terrorbabs.neocities.org",
"zenithtrajectory.neocities.org",
"usprisoner.neocities.org",
"pentumbra.neocities.org",
"twitch.cymru",
"scenemime.neocities.org",
"chromaeleon.neocities.org",
"mossypawprints.neocities.org",
"columbidaes.neocities.org",
"hammerheader.neocities.org",
"simpolomeo.neocities.org",
"p1n4.neocities.org",
"felixtheghost.neocities.org",
"bushdoctor.neocities.org",
"cresentri.com",
"wallgof.neocities.org",
"kitnomaly.neocities.org",
"sunkissed-feathers.neocities.org",
"t-hates-you.neocities.org",
"iodatalog.neocities.org",
"disasterpiece.neocities.org",
"therianava.li",
"dragonworld.neocities.org",
"cosyivy.xyz",
"traversetown.neocities.org",
"wriorango.neocities.org",
"gh0sted.neocities.org",
"dqs114.neocities.org",
"serasworld.neocities.org",
"starhaven.neocities.org",
"nickolox.com",
"fawn.nekoweb.org",
"liondrakes.neocities.org",
"crowsite.neocities.org",
"euclids-exception.neocities.org",
"wrldrevolving.neocities.org",
"strawberryysnow.neocities.org",
"thecatingrey.neocities.org",
"novaverie.nekoweb.org",
"june-is-scared.nekoweb.org",
"skyedarkclaw.neocities.org",
"toriii.neocities.org",
"ephemeralstar.neocities.org",
"cybr.gay",
"ghostsalt.neocities.org",
"thievery.neocities.org",
"kasperspace.nekoweb.org",
"pastaaa1.neocities.org",
"kaymartz.neocities.org",
"mothwiingz.neocities.org",
"v1v1sect1on.nekoweb.org",
"amethystweb.nekoweb.org",
"rachelowens.co.uk",
"cicadastatic.neocities.org",
"pysgodyn3.neocities.org",
"ques-nook.neocities.org",
"vampfag.top",
"candybaroque.neocities.org",
"quesadillawizard.neocities.org",
"silas-hw.github.io",
"firefairy.neocities.org",
"noisecorvid.neocities.org",
"digitaldaydreams.neocities.org",
"cassiecandles.net",
"mxbo.neocities.org",
"virtually-isolated.neocities.org",
"anomalous.monster",
"bonbon-ufo.neocities.org",
"ibbofazblog.neocities.org",
"miniwildpanda.neocities.org",
"tvkid.online",
"koyanthrope.neocities.org",
"livormortis.neocities.org",
"zelltronic.neocities.org",
"goosetank.neocities.org",
"butchboothill.neocities.org",
"lopster.neocities.org",
"angelwood.xyz",
"spycicl.neocities.org",
"shuriee.neocities.org",
"sticktrix.neocities.org",
"mannequin.fun",
"blue-miaou.neocities.org",
"transferns.neocities.org",
"germpills.neocities.org",
"atarax.neocities.org",
"lifelesscold.neocities.org",
"raum.neocities.org",
"goleihm.neocities.org",
"fuzzybabycrow.neocities.org",
"kidwiththechemicalz.neocities.org",
"testtubesterone.nekoweb.org",
"cayway.neocities.org",
"www.fluffpumpkin.net",
"westwinddogs.cc",
"ikuda.eu",
"home.illuc.xyz",
"kakotheris.nekoweb.org",
"shadowfae.neocities.org",
"starlitseas.neocities.org",
"wolfdeer.neocities.org",
"fromthebog.neocities.org",
"bohwoah.neocities.org",
"pixelatedpeachjuice.neocities.org",
"atomixe.neocities.org",
"slushiecafe.neocities.org",
"sea-of-colors.neocities.org",
"cyrussoleil.neocities.org",
"zombi.neocities.org",
"confetticake.neocities.org",
"falin.moe",
"onetimeoccam.com",
"anon1mity.neocities.org",
"lesrallizes.neocities.org",
"robynnesnest.click",
"freakygabry.neocities.org",
"alphacentauri.neocities.org",
"haetae.pages.gay",
"mooface.nekoweb.org",
"msx.gay",
"draggianuniverse.neocities.org",
"sepulchredsacrament.neocities.org",
"spacemadness.neocities.org",
"datoxicwaltz.neocities.org",
"canine-anarchy.neocities.org",
"cannibalpilled.neocities.org",
"bloodthirstymasquerade.neocities.org",
"pawpyrus.nekoweb.org",
"muffinzhouze.neocities.org",
"realismomagico.nekoweb.org",
"themightyloser.nekoweb.org",
"sealzie.neocities.org",
"sillywilly22.neocities.org",
"basi.nya.pub",
"daisywhisp.neocities.org",
"ray0fsunsh1ne.neocities.org",
"st4rguy.neocities.org",
"subterraneanhomesickalien.neocities.org",
"sunny-cities.neocities.org",
"suprsaturatd.neocities.org",
"lucienzeal.neocities.org",
"interstellarsystem.neocities.org",
"sociallyhazardous.neocities.org",
"lunya.nekoweb.org",
"thespaceshanty.neocities.org",
"mermora.neocities.org",
"leyy.neocities.org",
"disuko.neocities.org",
"whit.moe",
"im-disco-baby.neocities.org",
"digital-goddess.nekoweb.org",
"raven-files.neocities.org",
"bugkisser.neocities.org",
"chimeramanticore.neocities.org",
"mism4tchedsocks.neocities.org",
"jackandthearics.neocities.org",
"kepler-16b.neocities.org",
"treefungusxx.neocities.org",
"prunusavium.neocities.org",
"selkiehimbo.neocities.org",
"norisowl.neocities.org",
"mametzwood.neocities.org",
"dupersuperholly.neocities.org",
"ashtonsivibing.neocities.org",
"turbuggy.neocities.org",
"magicaldoll.neocities.org",
"boatemhq.neocities.org",
"olliveen.neocities.org",
"glamourbeast.neocities.org",
"digitalcat.neocities.org",
"caesthoffe.neocities.org",
"deletys.neocities.org",
"unsungstorywiki.neocities.org",
"granolaria.neocities.org",
"wumsley.neocities.org",
"madeinv.love",
"moonlightmyopia.neocities.org",
"gammagoop.neocities.org",
"koy.fish",
"halcybutton.neocities.org",
"betazz.neocities.org",
"infinitebearr.neocities.org",
"all-seeing-bunny.neocities.org",
"halcantdothat.neocities.org",
"zoneoffun.neocities.org",
"melancholic-entrails.neocities.org",
"lilithdev.neocities.org",
"wolfsite.neocities.org",
"alienyuri.neocities.org",
"unit00.neocities.org",
"voxel.gay",
"catgirlcassie.neocities.org",
"atari404.neocities.org",
"rosrets.neocities.org",
"miastonished.github.io",
"lilly.nekoweb.org",
"cupcakesthebulldog.neocities.org",
"joolianjay.neocities.org",
"clowdywings.neocities.org",
"muttthecowcat.neocities.org",
"xxfizzybloodxx.neocities.org",
"slysable.neocities.org",
"theevergreengardens.neocities.org",
// "achromatic-azurevizor.neocities.org",
"syrupnx.space",
"revived.neocities.org",
"sammylux.neocities.org",
"lambbones.neocities.org",
"hymnforascarecrow.neocities.org",
"fem.nz",
"subspaceember.neocities.org",
"shattered-glass.neocities.org",
"sugarfantasies.neocities.org",
"melxncholyman.neocities.org",
"pastellerie.neocities.org",
"magooka.neocities.org",
"celli.neocities.org",
"squidcrusher.neocities.org",
"sabrin.party",
"priro.pro",
"1dkreally.neocities.org",
"oliscrabwife.neocities.org",
"harvest-home.neocities.org",
"droptherapy.neocities.org",
"spiderlily.neocities.org",
"fukounaglr.neocities.org",
"coffinthusiast.neocities.org",
"riddler.nekoweb.org",
"www.cryptie.dev",
"thekirbysphere.neocities.org",
"leskowitz.neocities.org",
"milkyway.moe",
"zj.neocities.org",
"tehuan.neocities.org",
"murderscene.neocities.org",
"prophetesque.gay",
"kyoofyardale.neocities.org",
"bundleofstyx.neocities.org",
"lavender-cowboy.neocities.org",
"dog-brain.neocities.org",
"pixelglade.net.au",
"jettsecret.neocities.org",
"caitsith.neocities.org",
"moonsidedreams.neocities.org",
"mspaintdemon.neocities.org",
"codecreature.neocities.org",
"thesomnus.neocities.org",
// "funnyorangecat-dotcom.neocities.org",
"girlfailure.neocities.org",
"sunmiflowers.com",
"trashcannt.neocities.org",
"themby.neocities.org",
"garudyne.neocities.org",
"doumeli.neocities.org",
"siph.neocities.org",
"bubshub.neocities.org",
"quinnnnn.neocities.org",
"phoebe.digital",
"ciliaris.neocities.org",
"gaycomputerdog.neocities.org",
"frognet.neocities.org",
// "nonkiru.art",
"finn-all-uh.org",
"florpzgalaxy.neocities.org",
"wonderscape.neocities.org",
"www.lexiqqq.com",
"dulcesilly.neocities.org",
"chocolaterevel.neocities.org",
"savior-god.neocities.org",
"infini.neocities.org",
"manyface.neocities.org",
"plourples.com",
"this.squirrel.rocks",
"lucard.neocities.org",
"s1nez.nekoweb.org",
"monsterboy.neocities.org",
// "sizztuna.neocities.org",
"aceynk.neocities.org",
"mordecaialba.com",
"canadiancoded.neocities.org",
"morethanyoubelieve.neocities.org",
"foggybear42.neocities.org",
"117.zone",
"scottisite.neocities.org",
"minozomi.neocities.org",
"digibun.neocities.org",
"butch-barks.neocities.org",
"nerucom.neocities.org",
"smellybead.neocities.org",
"preservedfigs.uk",
"anchorgutz.neocities.org",
"foxthing.neocities.org",
"klomfel.neocities.org",
"wrender.neocities.org",
// "milosinternetdiary.neocities.org",
"cherylcherylcheryl.neocities.org",
"shenaniganery.neocities.org",
"jens-world-of-hyperfixation.neocities.org",
"aribluejeans.neocities.org",
"www.write-on.org",
"asralore.neocities.org",
"snowyfin.neocities.org",
"tertiaryapocalypse.neocities.org",
"killing-machine.neocities.org",
"spacemonkeyz.neocities.org",
"freaksaint.neocities.org",
"ghost-game.neocities.org",
"colortraks.net",
"screamingegg.neocities.org",
"jayspace.neocities.org",
"phantomrats.neocities.org",
"mercydreams.neocities.org",
"sech1p.ovh",
"wappydog.neocities.org",
"leizy8499.neocities.org",
"fearofmusic.neocities.org",
"serenegecko.neocities.org",
"slasherboy.neocities.org",
"bisexualmale04.net",
"f3r4l-c4tg1rl.neocities.org",
"asteromorph.neocities.org",
"realgaudin.uk",
// "s1llyguy.neocities.org",
"itpuddle.com",
// "neotrinity.xyz",
// "zonks27.neocities.org",
"cadeion.neocities.org",
"corvidae.digital",
"catboo.neocities.org",
"ttaxyy.neocities.org",
// "gyrobreaka.neocities.org",
"zinesbylennon.neocities.org",
"poetofu.neocities.org",
"ilovebeingtrans.neocities.org",
"spettri.neocities.org",
"whirlwind.neocities.org",
"stric9l0l.neocities.org",
"swiftyshq.neocities.org",
"crystal.tilde.institute",
"isactuallyabear.neocities.org",
"statusq.cc",
"astralvrz.github.io",
"dogspit.nekoweb.org",
"flower-killer.neocities.org",
"phrogee.neocities.org",
"burialcloth.neocities.org",
"maxxywaxxy.neocities.org",
"orion-overdrive.neocities.org",
"fangzzz.neocities.org",
"aryllsappreciations.neocities.org",
"twansgendew.net",
"jubiland.neocities.org",
"cyberdemon.neocities.org",
"space-bar.neocities.org",
// "bunnieforie.neocities.org",
// "hadalzone.neocities.org",
"pinkvampyr.leprd.space",
"thecorvidking.neocities.org",
"confettiguts.gay",
"callmecannibal.neocities.org",
// "nasunikki.neocities.org",
"shinyexe.neocities.org",
"smokoswebzone.gay",
"kelpeater.neocities.org",
"deviltown.neocities.org",
"r-temisia.neocities.org",
"crashtestdummy.neocities.org",
"punkwasp.leprd.space",
"nyacat.moe",
"theabsoluterealm.com",
// "layercake.neocities.org",
// "juicemachine.neocities.org",
"predictable1993.neocities.org",
"item64.neocities.org",
"cvnnbl.neocities.org",
// "squeezeoats.neocities.org",
"icosahedr.online",
"theaio.neocities.org",
"qso404.neocities.org",
"nimravidae.neocities.org",
"mizuki.world",
// "milestailsprower.neocities.org",
"foolsparadise.neocities.org",
"redrevelry.neocities.org",
"drakonic.zone",
"onlywonder.net",
// "heck.computer",
// "diluculo.neocities.org",
"glassyhouse.neocities.org",
"purplehello98.neocities.org",
"causeistayedaway.neocities.org",
// "rockinroller.neocities.org",
// "cranknet.com",
"p3p.neocities.org",
"hunipyon.neocities.org",
"beebfreeb.neocities.org",
"laikacore.neocities.org",
"the-bat-house.neocities.org",
// "least-mouse.github.io",
"faeriebottled97.neocities.org",
"worldsaddress.neocities.org",
"thoughts-and-collections.neocities.org",
"shiroganes.neocities.org",
"out.neocities.org",
"mysweetpiano.neocities.org",
"mikaorangeart.neocities.org",
"galactixstar.neocities.org",
"cyberneticdryad.neocities.org",
// "bajablasphemy.neocities.org",
"blagi.neocities.org",
"sanguinariacanadensis.neocities.org",
// "mincerafter42.github.io",
"transrats.neocities.org",
"friday-girl.neocities.org",
"flutteristhebest.neocities.org",
"sunnyday.neocities.org",
"sleepy-sage.neocities.org",
"wolf-on-the-web.neocities.org",
"alan460.is-hella.gay",
"therift.neocities.org",
// "keysklubhouse.com",
"ballonlea.net",
"compulsivecomputer.net",
"scourgescloset.neocities.org",
"lambchapel.neocities.org",
"troy-sucks.neocities.org",
"transring.neocities.org",
],
// widget html
// PREV and NEXT are replaced with neighbors' urls
widgets: {
default: `
<div id="transring" style="display: flex; align-items: center; gap: 3.278%; max-width: 244px; image-rendering: pixelated">
<a href="PREV" target="_top" style="width: 12.295%"><img width="100%" src="https://transring.neocities.org/widget/trans/left.png" alt="previous site"></a>
<a href="https://transring.neocities.org" target="_top" style="width: 68.852%"><img width="100%" src="https://transring.neocities.org/widget/trans/button.png" alt="transing the internet"></a>
<a href="NEXT" target="_top" style="width: 12.295%"><img width="100%" src="https://transring.neocities.org/widget/trans/right.png" alt="next site"></a>
</div>
`,
nb: `
<div id="transring" style="display: flex; align-items: center; gap: 3.278%; max-width: 244px; image-rendering: pixelated">
<a href="PREV" target="_top" style="width: 12.295%"><img width="100%" src="https://transring.neocities.org/widget/nb/left.png" alt="previous site"></a>
<a href="https://transring.neocities.org" target="_top" style="width: 68.852%"><img width="100%" src="https://transring.neocities.org/widget/nb/button.png" alt="transing the internet"></a>
<a href="NEXT" target="_top" style="width: 12.295%"><img width="100%" src="https://transring.neocities.org/widget/nb/right.png" alt="next site"></a>
</div>
`,
cloud: `<div id="transring" style="display: flex; justify-content: center; align-items: center; gap: 4px; image-rendering: pixelated">
<a href="PREV" target="_top"><img src="https://transring.neocities.org/widget/cloud/left.png" alt="previous site"></a>
<a href="https://transring.neocities.org" target="_top"><img src="https://transring.neocities.org/widget/cloud/button.png" alt="transing the internet"></a>
<a href="NEXT" target="_top"><img src="https://transring.neocities.org/widget/cloud/right.png" alt="next site"></a>
</div>`,
error: `<div>
<a href="https://transring.neocities.org" target="_top"><img src="https://transring.neocities.org/widget/trans/button.png"></a>
<div style="font-size: 0.75em; text-align: center">(this site isn't part of the webring... yet!)</div>
</div>`,
},
};
// code
webring.idx = webring.sites.findIndex(site => location.href.startsWith(site, 8));
document.currentScript.outerHTML = webring.idx === -1 ? webring.widgets.error :
(webring.widgets[document.currentScript.dataset.widget] ?? webring.widgets.default)
.replace("PREV", "https://" + webring.sites.at(webring.idx - 1))
.replace("NEXT", "https://" + webring.sites[(webring.idx + 1) % webring.sites.length]);
}

View File

@@ -0,0 +1,107 @@
<?php
declare(strict_types=1);
// File sources, images & scripts
$TRANSING_FILES = [
"enby" => [
"left_arrow" => "../../../img/webrings/transfem_enby_left_arrow.png",
"button" => "../../../img/webrings/transfem_enby_button.png",
"right_arrow" => "../../../img/webrings/transfem_enby_right_arrow.png"
],
"trans" => [
"left_arrow" => "../../../img/webrings/transfem_trans_left_arrow.png",
"button" => "../../../img/webrings/transfem_trans_button.png",
"right_arrow" => "../../../img/webrings/transfem_trans_right_arrow.png"
],
"cloud" => [
"left_arrow" => "../../../img/webrings/transfem_cloud_left_arrow.png",
"button" => "../../../img/webrings/transfem_cloud_button.png",
"right_arrow" => "../../../img/webrings/transfem_cloud_right_arrow.png"
]
];
$TRANSING_SCRIPT_SOURCE = [
"selected_source" => 1,
"sources" =>
[["url" => "https://transring.neocities.org/ring.js",
"source" => "internet"],
["url" => "/transingtheinternet.js",
"source" => "local"]]
];
// Specific variables for script
$TRANSING_ROOT = "https://transring.neocities.org";
$TRANSING_VALID_WIDGET_TYPES = ["cloud", "enby", "trans","error"];
// Personal identifiers/choices
$TRANSING_WIDGET_TYPE = $TRANSING_VALID_WIDGET_TYPES[1];
$TRANSING_ID = 1;
// Functions
function transingSplit(string $array) {
$array = preg_replace('/\s+/', '', $array);
$i = 0;
while (strlen($array) !== 0) {
// Strip coma if found
if (str_starts_with($array,',')) {
$array = substr($array,1);
}
if (str_starts_with(strrev($array),',')) {
$array = substr($array,0,-1);
}
if (strpos($array,'/',1) > 1 or strpos($array,'/',1) == FALSE) {
$commented=FALSE;
} else {
$commented=TRUE;
}
if (str_starts_with($array,',')) {
$array = substr($array,1);
}
// Get substring position and length
$commented ? $start_pos=3 : $start_pos=1;
$end_pos = strpos($array,"\"",$start_pos);
$item_len = $end_pos - $start_pos;
if (!$commented){
$return_array[$i] = substr($array,$start_pos,$item_len);
} else {
$return_array[$i] = '';
}
// Save website into array, and strip array
if (!$commented) {
$item_len = $item_len +2; // +2 from " and "
} else {
$item_len = $item_len +4; // +4 from ", ", / and /
}
$array = substr($array,$item_len);
$i++;
}
unset($array, $commented, $start_pos, $end_pos, $item_len);
return $return_array;
}
$transing_sites = scrapeWebsiteSites($TRANSING_SCRIPT_SOURCE,'sites :[',']');
$transing_sites = transingSplit($transing_sites);
for ($i = 0; $i < count($transing_sites); $i++){
if ($i == $TRANSING_ID) {
$transing_prev = 'https://' . $transing_sites[($i-1)];
$transing_current = 'https://' . $transing_sites[($i)];
$transing_next = 'https://' . $transing_sites[($i+1)];
$found = TRUE;
}
}
if (!isset($found)) {
echo ("ERROR ID NOT FOUND");
}

View File

@@ -0,0 +1,24 @@
<?php
declare(strict_types=1);
function TRANSINGrender(){
global $TRANSING_ROOT, $TRANSING_FILES, $TRANSING_WIDGET_TYPE, $transing_prev, $transing_next;
$TRANSING_FILES["selected"] = $TRANSING_FILES[$TRANSING_WIDGET_TYPE];
if ($TRANSING_WIDGET_TYPE === 'error') {
?>
<a href="<?php echo($TRANSING_ROOT); ?>" target="_top" style="width: 68.852%"><img src="<?php echo($TRANSING_FILES["selected"]["button"]); ?>" alt="transing the internet"></a>
<div style="font-size: 0.75em; text-align: center">(this site isn't part of the webring... yet!)</div>
<?php
} else {
?>
<div id="transring" style="display: flex; justify-content: center; align-items: center; image-rendering: pixelated; height:100%;">
<a href="<?php echo($transing_prev); ?>" target="_top" style="width: 15.574%; height:100%;"><img src="<?php echo($TRANSING_FILES["selected"]["left_arrow"]); ?>" alt="previous site"></a>
<a href="<?php echo($TRANSING_ROOT); ?>" target="_top" style="width: 68.852%; height:100%;"><img src="<?php echo($TRANSING_FILES["selected"]["button"]); ?>" alt="transing the internet"></a>
<a href="<?php echo($transing_next); ?>" target="_top" style="width: 15.574%; height:100%;"><img src="<?php echo($TRANSING_FILES["selected"]["right_arrow"]); ?>" alt="next site"></a>
</div>
<?php
}
}

195
main.php Normal file
View File

@@ -0,0 +1,195 @@
<?php
require_once "includes/config_session.inc.php";
require_once "includes/lang.inc.php";
?>
<!DOCTYPE html>
<html lang="<?php echo $lang?>">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=0.75">
<title>masiv's lair</title>
<link rel="stylesheet" href="css/main/main.css">
<link rel="icon" href="img/favicon/favicon-lair.png">
</head>
<body>
<div class="navbar top blank"></div>
<div class="navbar top">
<?php include "components/global/navbar.php"?>
</div>
<div class="wrapper">
<div class="primary">
<div class="blinkies one panel">
<img id="try_hovering--blinkie" src="<?php echo $tr[$lang]["main.try_hoveringPath"]; ?>" alt="<?php echo $tr[$lang]["main.try_hoveringAlt"]; ?>">
<img id="try_tapping--blinkie" src="<?php echo $tr[$lang]["main.try_tappingPath"]; ?>" alt="<?php echo $tr[$lang]["main.try_tappingAlt"]; ?>">
<?php include "components/main/blinkies.php"?>
</div>
<div class="articles panel">
<div class="header">
<?php echo $tr[$lang]["main.articlesTitle"]; ?>
</div>
<div class="content">
<a href="pages/articles/about-host.php"><?php echo $tr[$lang]["main.articlesOne"]; ?></a>
<a href="pages/articles/diy-calculator.php"><?php echo $tr[$lang]["main.articlesTwo"]; ?></a>
<a ><?php echo $tr[$lang]["main.articlesThree"]; ?></a> <!-- href="pages/articles/website-redesign.php" -->
<a ><?php echo $tr[$lang]["main.articlesFour"]; ?></a> <!-- href="pages/articles/css-shenanigans.php" -->
</div>
</div>
<div class="main">
<div class="provided panel">
<div class="header">
<?php echo $tr[$lang]["main.servicesTitle"]; ?>
</div>
<div class="content">
<div class="services-hint">
<img src="img/utilities/exclamation-mark.gif">
<p><?php echo $tr[$lang]["main.invitationDisclaimer"]; ?></p>
</div>
<div class="services">
<div>
<b><?php echo $tr[$lang]["main.services_Masivana"]; ?></b>
<a class="button" href="https://movies.media.ethernal.win" target="_blank"><?php echo $tr[$lang]["main.servicesMovies"]; ?></a>
<a class="button" href="https://request.media.ethernal.win" target="_blank"><?php echo $tr[$lang]["main.servicesRequests"]; ?></a>
<a class="button" href="https://books.media.ethernal.win" target="_blank"><?php echo $tr[$lang]["main.servicesBooks"]; ?></a>
<a class="button" href="https://tube.media.ethernal.win" target="_blank"><?php echo $tr[$lang]["main.servicesVideos"]; ?></a>
</div>
<div>
<b><?php echo $tr[$lang]["main.services_Clouds"]; ?></b>
<a class="button" href="https://photos.ethernal.win" target="_blank"><?php echo $tr[$lang]["main.servicesPhotos"]; ?></a>
<a class="button" href="https://cloud2.ethernal.win" target="_blank"><?php echo $tr[$lang]["main.servicesCloud"]; ?></a>
</div>
<div>
<b><?php echo $tr[$lang]["main.services_Misc"]; ?></b>
<a class="button" href="https://convert.ethernal.win" target="_blank"><?php echo $tr[$lang]["main.servicesFileConverter"]; ?></a>
<a class="button" href="https://pdf.ethernal.win" target="_blank"><?php echo $tr[$lang]["main.servicesPdfTool"]; ?></a>
<a class="button" href="https://dl.ethernal.win" target="_blank"><?php echo $tr[$lang]["main.servicesVidDown"]; ?></a>
<a class="button" href="https://analysis.ethernal.win" target="_blank"><?php echo $tr[$lang]["main.servicesChatStats"]; ?></a>
<a class="button" href="https://draw.ethernal.win" target="_blank"><?php echo $tr[$lang]["main.servicesWhiteboard"]; ?></a>
<a class="button" href="https://gspanel.ethernal.win" target="_blank"><?php echo $tr[$lang]["main.servicesGamePanel"]; ?></a>
</div>
</div>
</div>
</div>
<div class="updates panel">
<div class="header">
<?php echo $tr[$lang]["main.updatesTitle"]; ?>&nbsp;<img src="img/minis/totoro-smile.gif">
</div>
<div class="content">
<hr>
<div class="update">
<div class="date"><?php echo $tr[$lang]["main.updatesThreeDate"]; ?></div>
<h3 class="title"><?php echo $tr[$lang]["main.updatesThreeTitle"]; ?></h3>
<p class="content"><?php echo $tr[$lang]["main.updatesThree"]; ?>
<a href="https://git.ethernal.win/masiv/website"><?php echo $tr[$lang]["main.updatesThree.1"]; ?></a>
<?php echo $tr[$lang]["main.updatesThree.2"]; ?>
<img src="img/minis/pompompurin-heart.gif"> <?php echo $tr[$lang]["main.updatesThree.3"]; ?></p>
</div>
<hr>
<div class="update">
<div class="date"><?php echo $tr[$lang]["main.updatesTwoDate"]; ?></div>
<h3 class="title"><?php echo $tr[$lang]["main.updatesTwoTitle"]; ?></h3>
<p class="content"><?php echo $tr[$lang]["main.updatesTwo"]; ?>
<a href="pages/articles/en_website-redesign.html">
<?php echo $tr[$lang]["main.updatesTwo.1"]; ?>
</a> <img src="img/minis/cat-star.gif">
<a href="archive/ver_1-until2feb2026/en_home.html"><?php echo $tr[$lang]["main.updatesTwo.2"]; ?></a>
</p>
</div>
<hr>
<div class="update">
<div class="date"><?php echo $tr[$lang]["main.updatesOneDate"]; ?></div>
<h3 class="title"<?php echo $tr[$lang]["main.updatesOneTitle"]; ?>></h3>
<p class="content"><?php echo $tr[$lang]["main.updatesOne"]; ?></p>
</div>
<hr>
</div>
</div>
</div>
<div class="chat-webrings">
<div class="chat panel">
<div class="header">
<?php echo $tr[$lang]["main.chatTitle"]; ?>
</div>
<div class="content">
<?php if (!isset($_SESSION["username"])){ ?>
<form class="chat-account" action="" method="post">
<div class="chat-account-inputs">
<input required type="text" id="username" name="username" placeholder="<?php echo $tr[$lang]["main.chatUserPlaceholder"]; ?>">
<input required type="password" id="password" name="pwd" placeholder="<?php echo $tr[$lang]["main.chatPasswordPlaceholder"]; ?>">
</div>
<div class="chat-account-buttons">
<button formaction="includes/login.inc.php" method="POST"><?php echo $tr[$lang]["main.chatLoginText"]; ?></button>
<button formaction="includes/register.inc.php" method="POST"><?php echo $tr[$lang]["main.chatRegisterText"]; ?></button>
</div>
<div class="chat-account-errors">
<?php include "includes/error_handling.inc.php"?>
</div>
</form>
<?php } ?>
<div class="chat-history">
<?php include "includes/chat_reading.inc.php";?>
</div>
<?php if (isset($_SESSION["username"])){ ?>
<form action="includes/chat_send.inc.php" method="POST">
<input type="text" id="message_content" name="message_content" placeholder="<?php echo $tr[$lang]["main.chatSendPlaceholder"]; ?>">
<form class="chat-input" action="" method="post">
<?php } ?>
</div>
</div>
<div class="webrings panel">
<div class="clip-box">
<div class="auto-scroll">
<!-- Have to replace this logic, maybe by having another way to modify behaviour of marquee -->
<?php for ($k = 0; $k <= 1; $k++) {
if ($k === 0) {
?><div class="scroll_one"><?php
} else if ($k === 1) {
?><div class="scroll_two"><?php
}
?>
<?php for ($l = 0; $l <= 2; $l++) {?>
<?php include "includes/transingtheinternet.inc.php";?>
<?php include "includes/transfemwebring.inc.php";?>
<div class="noaiwebring">
<a href="https://baccyflap.com/noai" target="_blank" alt="no ai webring" title="no ai webring"><div class="home"></div></a>
<a href="https://baccyflap.com/noai/?prv&amp;s=msv" target="_top" alt="previous" title="previous"><div class="prv"></div></a>
<a href="https://baccyflap.com/noai/?rnd" target="_top" alt="random" title="random"><div class="rnd"></div></a>
<a href="https://baccyflap.com/noai/?nxt&amp;s=msv" target="_top" alt="next" title="next"><div class="nxt"></div></a>
<img src="img/webrings/miniwidget5.gif" alt="<?php echo $tr[$lang]["main.altWebring"]; ?>">
</div>
<?php } ?>
<div class="spacer"></div>
</div>
<?php } ?>
</div>
</div>
</div>
</div>
<div class="blinkies two panel">
<?php include "components/main/blinkies.php"?>
</div>
</div>
<div class="verticalscroll panel blank"></div>
<div class="verticalscroll panel">
<div class="vertical-scroll-wrapper">
<div class="clip-box">
<div class="auto-scroll">
<div class="scroll_one"><p><?php echo $tr[$lang]["main.verticalScroll"]; ?></p></div>
<div class="scroll_two"><p><?php echo $tr[$lang]["main.chatPasswordPlaceholder"]; ?></p></div>
</div>
</div>
</div>
</div>
<div class="scroll_below-clip-box">
<div class="scroll_below">
<img id="try_sliding_down" src="<?php echo $tr[$lang]["main.try_SlidingPath"]; ?>" alt="<?php echo $tr[$lang]["main.try_SlidingAlt"]; ?>">
</div>
</div>
</div>
</div>
<div class="navbar bot blank"></div>
<div class="navbar bot">
<?php include "components/global/navbar.php"?>
</div>
</body>
</html>

View File

@@ -1,128 +0,0 @@
<?php require_once "includes/config_session.inc.php"?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=0.75">
<title>masiv's lair</title>
<link rel="stylesheet" href="css/main/main.css">
<link rel="icon" href="img/favicon/favicon-lair.png">
</head>
<body>
<div class="navbar top blank"></div>
<div class="navbar top">
<?php include "components/main/navbar.php"?>
</div>
<div class="wrapper">
<div class="primary">
<div class="blinkies one panel">
<img id="try_hovering--blinkie" src="img/decorations/try_hovering_en.png" alt="try hovering!">
<img id="try_tapping--blinkie" src="img/decorations/try_tapping_en.png" alt="try tapping!">
<?php include "components/main/blinkies.php"?>
</div>
<div class="articles panel">
<?php include "components/main/articles.php"?>
</div>
<div class="main">
<div class="provided panel">
<div class="header">
services
</div>
<div class="content">
<div class="services-hint">
<img src="img/utilities/exclamation-mark.gif">
<p>Some may require an account! Invitation only.</p>
</div>
<div class="services">
<div>
<b>masivana</b>
<a class="button" href="https://movies.media.ethernal.win" target="_blank">Movies</a>
<a class="button" href="https://request.media.ethernal.win" target="_blank">Requests</a>
<a class="button" href="https://books.media.ethernal.win" target="_blank">Books</a>
<a class="button" href="https://tube.media.ethernal.win" target="_blank">Videos</a>
</div>
<div>
<b>cloud(s)</b>
<a class="button" href="https://photos.ethernal.win" target="_blank">Photos</a>
<a class="button" href="https://cloud2.ethernal.win" target="_blank">Cloud</a>
</div>
<div>
<b>misc.</b>
<a class="button" href="https://convert.ethernal.win" target="_blank">Converter</a>
<a class="button" href="https://pdf.ethernal.win" target="_blank">Pdf tools</a>
<a class="button" href="https://dl.ethernal.win" target="_blank">Vid. downloader</a>
<a class="button" href="https://analysis.ethernal.win" target="_blank">Chat stats</a>
<a class="button" href="https://draw.ethernal.win" target="_blank">Whiteboard</a>
<a class="button" href="https://gspanel.ethernal.win" target="_blank">Game panel</a>
</div>
</div>
</div>
</div>
<div class="updates panel">
<div class="header">
updates!&nbsp;<img src="img/minis/totoro-smile.gif">
</div>
<div class="content">
<?php include "components/main/updates.php"?>
</div>
</div>
</div>
<div class="chat-webrings">
<div class="chat panel">
<div class="header">
chat
</div>
<div class="content">
<?php if (!isset($_SESSION["username"])){ ?>
<form class="chat-account" action="" method="post">
<div class="chat-account-inputs">
<input type="text" id="username" name="username" placeholder="User">
<input type="text" id="password" name="pwd" placeholder="Password">
</div>
<div class="chat-account-buttons">
<button formaction="includes/register.inc.php" method="POST">Register</button>
<button formaction="includes/login.inc.php" method="POST">Login</button>
</div>
<div class="chat-account-errors">
<?php include "includes/error_handling.inc.php"?>
</div>
</form>
<?php } ?>
<div class="chat-history">
<?php include "includes/chat_reading.inc.php"; ?>
</div>
<?php if (isset($_SESSION["username"])){ ?>
<form action="includes/chat_send.inc.php" method="POST">
<input type="text" id="message_content" name="message_content" placeholder="Press enter to send!">
<form class="chat-input" action="" method="post">
<?php } ?>
</div>
</div>
<div class="webrings panel">
<?php include "components/main/webrings.php"?>
</div>
</div>
<div class="blinkies two panel">
<?php include "components/main/blinkies.php"?>
</div>
</div>
<div class="verticalscroll panel blank"></div>
<div class="verticalscroll panel">
<div class="vertical-scroll-wrapper">
<?php include "components/main/verticalscroll.php"?>
</div>
</div>
<div class="scroll_below-clip-box">
<div class="scroll_below">
<img id="try_sliding_down" src="img/decorations/try_sliding_down_en.png" alt="try sliding down!">
</div>
</div>
</div>
</div>
<div class="navbar bot blank"></div>
<div class="navbar bot">
<?php include "components/main/navbar.php"?>
</div>
</body>
</html>

View File

@@ -1,373 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=0.75">
<title>masiv's lair</title>
<link rel="stylesheet" href="css/main/main.css">
<link rel="icon" href="img/favicon/favicon-lair.png">
</head>
<body>
<div class="navbar top blank"></div>
<div class="navbar top">
<div class="logo">
<img src="img/logo/logo_smth.png" alt="">
<a href="main_es.html" class="logo-text">masiv's lair</a>
</div>
<div class="about panel">
<b><a href="pages/articles/about_es.html">Sobre mí</a></b>
</div>
<div class="links">
<div class="social-media github">
<img src="img/icons/github.png" alt="">
<a href="https://github.com/masiv1001" target="_blank">masiv1001</a>
</div>
<div class="social-media instagram">
<img src="img/icons/instagram.png" alt="">
<a href="https://instagram.com/sietezip/" target="_blank">sietezip</a>
</div>
<div class="social-media pixelfed">
<img src="img/icons/pixelfed.png" alt="">
<a href="https://pixelfed.social/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media twitter">
<img src="img/icons/twitter.png" alt="">
<a href="https://twitter.com/_visam/" target="_blank">_visam</a>
</div>
<div class="social-media reddit">
<img src="img/icons/reddit.png" alt="">
<a href="https://www.reddit.com/user/masiv_o/" target="_blank">masiv_o</a>
</div>
<div class="social-media steam">
<img src="img/icons/steam.png" alt="">
<a href="https://steamcommunity.com/id/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media osu">
<img src="img/icons/osu.png" alt="">
<a href="https://osu.ppy.sh/users/19273464/" target="_blank">masiv_</a>
</div>
<div class="social-media mail">
<img src="img/icons/mail.png" alt="">
<a href="mailto:masiv_@ethernal.win" target="_blank">masiv_ @ethernal.win</a>
</div>
</div>
<div class="lang-picker panel">
<b><a href="main_en.php">English</a></b>
</div>
</div>
<div class="wrapper">
<div class="primary">
<div class="blinkies one panel">
<img id="try_hovering--blinkie" src="img/decorations/try_hovering_es.png" alt="apoya el cursor!">
<img id="try_tapping--blinkie" src="img/decorations/try_tapping_es.png" alt="mantén presionado!">
<div class="clip-box">
<div class="auto-scroll">
<div class="scroll_one">
<img src="img/blinkies/0206-nyancat.gif" alt="">
<img src="img/blinkies/bantimetravel_stamp.jpeg" alt="">
<img src="img/blinkies/blinkiesCafe-cats.gif" alt="">
<img src="img/blinkies/blinkiesCafe-nonbinary.gif" alt="">
<img src="img/blinkies/blinkiesCafe-sudormrf.gif" alt="">
<img src="img/blinkies/deletetiktok_pink_blinkie.webp" alt="">
<img src="img/blinkies/dontfeedtheai.gif" alt="">
<img src="img/blinkies/firefox_user.gif" alt="">
<img src="img/blinkies/firefoxget.gif" alt="">
<img src="img/blinkies/htmljunkie.gif" alt="">
<div class="spacer"></div>
</div>
<div class="scroll_two">
<img src="img/blinkies/0206-nyancat.gif" alt="">
<img src="img/blinkies/bantimetravel_stamp.jpeg" alt="">
<img src="img/blinkies/blinkiesCafe-cats.gif" alt="">
<img src="img/blinkies/blinkiesCafe-nonbinary.gif" alt="">
<img src="img/blinkies/blinkiesCafe-sudormrf.gif" alt="">
<img src="img/blinkies/deletetiktok_pink_blinkie.webp" alt="">
<img src="img/blinkies/dontfeedtheai.gif" alt="">
<img src="img/blinkies/firefox_user.gif" alt="">
<img src="img/blinkies/firefoxget.gif" alt="">
<img src="img/blinkies/htmljunkie.gif" alt="">
<div class="spacer"></div>
</div>
</div>
</div>
</div>
<div class="articles panel">
<div class="header">
artículos
</div>
<div class="content">
<a href="pages/articles/about-host_es.html">Acerca del host</a>
<a href="pages/articles/diy-calculator_es.html">Calculadora DIY</a>
<a >Rediseño de la página</a> <!-- href="pages/articles/website-redesign_es.html" -->
<a >Cositas del CSS</a> <!-- href="pages/articles/css-shenanigans_es.html" -->
</div>
</div>
<div class="main">
<div class="provided panel">
<div class="hint">
</div>
<div class="header">
servicios
</div>
<div class="content">
<div class="services-hint">
<img src="img/utilities/exclamation-mark.gif">
<p>Algunos requieren una cuenta, sólo por invitación!</p>
</div>
<div class="services">
<div>
<b>masivana</b>
<a class="button" href="https://movies.media.ethernal.win" target="_blank">Peliculas</a>
<a class="button" href="https://request.media.ethernal.win" target="_blank">Peticiones</a>
<a class="button" href="https://books.media.ethernal.win" target="_blank">Libros</a>
<a class="button" href="https://tube.media.ethernal.win" target="_blank">Videos</a>
</div>
<div>
<b>nube(s)</b>
<a class="button" href="https://photos.ethernal.win" target="_blank">Fotos</a>
<a class="button" href="https://cloud2.ethernal.win" target="_blank">Nube</a>
</div>
<div>
<b>misc.</b>
<a class="button" href="https://convert.ethernal.win" target="_blank">Conversor</a>
<a class="button" href="https://pdf.ethernal.win" target="_blank">Herr. pdfs</a>
<a class="button" href="https://dl.ethernal.win" target="_blank">Desc. videos</a>
<a class="button" href="https://analysis.ethernal.win" target="_blank">Estad. Chats</a>
<a class="button" href="https://draw.ethernal.win" target="_blank">Pizarra</a>
<a class="button" href="https://gspanel.ethernal.win" target="_blank">Pan. Juegos</a>
</div>
</div>
</div>
</div>
<div class="updates panel">
<div class="header">
actualizaciones!&nbsp;<img src="img/minis/totoro-smile.gif">
</div>
<div class="content">
<hr>
<div class="update">
<div class="date">4 Feb 2026</div>
<h3 class="title">Cambios técnicos</h3>
<p class="content">Estuve probando, y tras configurar
lo necesario, configuré mi propio servidor git, y de
allí un workflow para que se publique automaticamente,
también estoy empezando a implementar php, por el momento
solo estoy probando pero se puede testear en el chat, o
viendo el código fuente en
<a href="https://git.ethernal.win/masiv/website">https://git.ethernal.win/masiv/website</a>.
<img src="img/minis/pompompurin-heart.gif"> Es mi primera
vez usando git, php, y todo, así que probablemente no esté
siguiendo todas las buenas prácticas, pero iré aprendiendo :p
</p>
</div>
<hr>
<div class="update">
<div class="date">2 Feb 2026</div>
<h3 class="title">Rediseño del sitio!</h3>
<p class="content">Después de un tiempo decidí darle una
nueva cara al sitio ya que el diseño anterior dejaba
bastante que desear, espero que sea de su agrado!
(Optimizado para todo tipo de dispositivos) Para más
información <a href="pages/articles/website-redesign_es.html">
Rediseño de la página</a> <img src="img/minis/cat-star.gif">
<a href="archive/ver_1-until2feb2026/es_home.html">Archived version</a>
</p>
</div>
<hr>
<div class="update">
<div class="date">17 Ene 2026</div>
<h3 class="title">Nuevo sitio web!</h3>
<p class="content">Nuevo sitio web! Espero les guste, desde ya hacía
tiempo que quería tener mi propio sitio web, pero programado desde
cero, estuve unas horitas re-aprendiendo html y css, sinceramente
prefiero un internet sin bloat, por lo que a-priori no habrá javascript
en este sitio. </p>
</div>
<hr>
</div>
</div>
</div>
<div class="chat-webrings">
<div class="chat panel">
<div class="header">
chat
</div>
<div class="content">
<form class="chat-account" action="" method="post">
<div class="chat-account-inputs">
<input type="text" placeholder="Usuario">
<input type="text" placeholder="Contraseña">
</div>
<div class="chat-account-buttons">
<button>Registrar</button>
<button>Ingresar</button>
</div>
<div class="chat-account-errors">
</div>
</form>
<div class="chat-history" style="align-self: center;">
todavía no hay chats!
</div>
<form class="chat-input" action="" method="post">
<input type="text" placeholder="Presiona Enter!">
</form>
</div>
</div>
<div class="webrings panel">
<div class="clip-box">
<div class="auto-scroll">
<div class="scroll_one">
<div class="noaiwebring">
<a href="https://baccyflap.com/noai" target="_blank" alt="no ai webring" title="no ai webring"><div class="home"></div></a>
<a href="https://baccyflap.com/noai/?prv&amp;s=msv" target="_top" alt="previous" title="previous"><div class="prv"></div></a>
<a href="https://baccyflap.com/noai/?rnd" target="_top" alt="random" title="random"><div class="rnd"></div></a>
<a href="https://baccyflap.com/noai/?nxt&amp;s=msv" target="_top" alt="next" title="next"><div class="nxt"></div></a>
<img src="img/webrings/miniwidget5.gif" alt="the top of a fuzzy,
black sphere with two arrows rising from it, one curving to the left, one to the right. across the bulk of the sphere it reads NO AI / WEBRING in squiggly,
uneven letters and next to those words is a small question mark">
</div>
<div class="noaiwebring">
<a href="https://baccyflap.com/noai" target="_blank" alt="no ai webring" title="no ai webring"><div class="home"></div></a>
<a href="https://baccyflap.com/noai/?prv&amp;s=msv" target="_top" alt="previous" title="previous"><div class="prv"></div></a>
<a href="https://baccyflap.com/noai/?rnd" target="_top" alt="random" title="random"><div class="rnd"></div></a>
<a href="https://baccyflap.com/noai/?nxt&amp;s=msv" target="_top" alt="next" title="next"><div class="nxt"></div></a>
<img src="img/webrings/miniwidget5.gif" alt="the top of a fuzzy,
black sphere with two arrows rising from it, one curving to the left, one to the right. across the bulk of the sphere it reads NO AI / WEBRING in squiggly,
uneven letters and next to those words is a small question mark">
</div>
<div class="noaiwebring">
<a href="https://baccyflap.com/noai" target="_blank" alt="no ai webring" title="no ai webring"><div class="home"></div></a>
<a href="https://baccyflap.com/noai/?prv&amp;s=msv" target="_top" alt="previous" title="previous"><div class="prv"></div></a>
<a href="https://baccyflap.com/noai/?rnd" target="_top" alt="random" title="random"><div class="rnd"></div></a>
<a href="https://baccyflap.com/noai/?nxt&amp;s=msv" target="_top" alt="next" title="next"><div class="nxt"></div></a>
<img src="img/webrings/miniwidget5.gif" alt="the top of a fuzzy,
black sphere with two arrows rising from it, one curving to the left, one to the right. across the bulk of the sphere it reads NO AI / WEBRING in squiggly,
uneven letters and next to those words is a small question mark">
</div>
<div class="spacer"></div>
</div>
<div class="scroll_two">
<div class="noaiwebring">
<a href="https://baccyflap.com/noai" target="_blank" alt="no ai webring" title="no ai webring"><div class="home"></div></a>
<a href="https://baccyflap.com/noai/?prv&amp;s=msv" target="_top" alt="previous" title="previous"><div class="prv"></div></a>
<a href="https://baccyflap.com/noai/?rnd" target="_top" alt="random" title="random"><div class="rnd"></div></a>
<a href="https://baccyflap.com/noai/?nxt&amp;s=msv" target="_top" alt="next" title="next"><div class="nxt"></div></a>
<img src="img/webrings/miniwidget5.gif" alt="the top of a fuzzy,
black sphere with two arrows rising from it, one curving to the left, one to the right. across the bulk of the sphere it reads NO AI / WEBRING in squiggly,
uneven letters and next to those words is a small question mark">
</div>
<div class="noaiwebring">
<a href="https://baccyflap.com/noai" target="_blank" alt="no ai webring" title="no ai webring"><div class="home"></div></a>
<a href="https://baccyflap.com/noai/?prv&amp;s=msv" target="_top" alt="previous" title="previous"><div class="prv"></div></a>
<a href="https://baccyflap.com/noai/?rnd" target="_top" alt="random" title="random"><div class="rnd"></div></a>
<a href="https://baccyflap.com/noai/?nxt&amp;s=msv" target="_top" alt="next" title="next"><div class="nxt"></div></a>
<img src="img/webrings/miniwidget5.gif" alt="the top of a fuzzy,
black sphere with two arrows rising from it, one curving to the left, one to the right. across the bulk of the sphere it reads NO AI / WEBRING in squiggly,
uneven letters and next to those words is a small question mark">
</div>
<div class="noaiwebring">
<a href="https://baccyflap.com/noai" target="_blank" alt="no ai webring" title="no ai webring"><div class="home"></div></a>
<a href="https://baccyflap.com/noai/?prv&amp;s=msv" target="_top" alt="previous" title="previous"><div class="prv"></div></a>
<a href="https://baccyflap.com/noai/?rnd" target="_top" alt="random" title="random"><div class="rnd"></div></a>
<a href="https://baccyflap.com/noai/?nxt&amp;s=msv" target="_top" alt="next" title="next"><div class="nxt"></div></a>
<img src="img/webrings/miniwidget5.gif" alt="the top of a fuzzy,
black sphere with two arrows rising from it, one curving to the left, one to the right. across the bulk of the sphere it reads NO AI / WEBRING in squiggly,
uneven letters and next to those words is a small question mark">
</div>
<div class="spacer"></div>
</div>
</div>
</div>
</div>
</div>
<div class="blinkies two panel">
<div class="clip-box">
<div class="auto-scroll">
<div class="scroll_one">
<img src="img/blinkies/0206-nyancat.gif" alt="">
<img src="img/blinkies/bantimetravel_stamp.jpeg" alt="">
<img src="img/blinkies/blinkiesCafe-cats.gif" alt="">
<img src="img/blinkies/blinkiesCafe-nonbinary.gif" alt="">
<img src="img/blinkies/blinkiesCafe-sudormrf.gif" alt="">
<img src="img/blinkies/deletetiktok_pink_blinkie.webp" alt="">
<img src="img/blinkies/dontfeedtheai.gif" alt="">
<img src="img/blinkies/firefox_user.gif" alt="">
<img src="img/blinkies/firefoxget.gif" alt="">
<img src="img/blinkies/htmljunkie.gif" alt="">
<div class="spacer"></div>
</div>
<div class="scroll_two">
<img src="img/blinkies/0206-nyancat.gif" alt="">
<img src="img/blinkies/bantimetravel_stamp.jpeg" alt="">
<img src="img/blinkies/blinkiesCafe-cats.gif" alt="">
<img src="img/blinkies/blinkiesCafe-nonbinary.gif" alt="">
<img src="img/blinkies/blinkiesCafe-sudormrf.gif" alt="">
<img src="img/blinkies/deletetiktok_pink_blinkie.webp" alt="">
<img src="img/blinkies/dontfeedtheai.gif" alt="">
<img src="img/blinkies/firefox_user.gif" alt="">
<img src="img/blinkies/firefoxget.gif" alt="">
<img src="img/blinkies/htmljunkie.gif" alt="">
<div class="spacer"></div>
</div>
</div>
</div>
</div>
</div>
<div class="verticalscroll panel blank"></div>
<div class="verticalscroll panel">
<div class="vertical-scroll-wrapper">
<div class="clip-box">
<div class="auto-scroll">
<div class="scroll_one"><p>hola terrícolas, este es un mensaje para todxs aquellxs que pasan el día preguntándose si existe la vida extra-terrestre, o si por el contrario ustedes están solxs. Supongo que nunca lo sabrán... </p></div>
<div class="scroll_two"><p>hola terrícolas, este es un mensaje para todxs aquellxs que pasan el día preguntándose si existe la vida extra-terrestre, o si por el contrario ustedes están solxs. Supongo que nunca lo sabrán... </p></div>
</div>
</div>
</div>
</div>
<div class="scroll_below-clip-box">
<div class="scroll_below">
<img id="try_sliding_down" src="img/decorations/try_sliding_down_es.png" alt="try sliding down!">
</div>
</div>
</div>
</div>
<div class="navbar bot blank"></div>
<div class="navbar bot">
<div class="links">
<div class="social-media github">
<img src="img/icons/github.png" alt="">
<a href="https://github.com/masiv1001" target="_blank">masiv1001</a>
</div>
<div class="social-media instagram">
<img src="img/icons/instagram.png" alt="">
<a href="https://instagram.com/sietezip/" target="_blank">sietezip</a>
</div>
<div class="social-media pixelfed">
<img src="img/icons/pixelfed.png" alt="">
<a href="https://pixelfed.social/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media twitter">
<img src="img/icons/twitter.png" alt="">
<a href="https://twitter.com/_visam/" target="_blank">_visam</a>
</div>
<div class="social-media reddit">
<img src="img/icons/reddit.png" alt="">
<a href="https://www.reddit.com/user/masiv_o/" target="_blank">masiv_o</a>
</div>
<div class="social-media steam">
<img src="img/icons/steam.png" alt="">
<a href="https://steamcommunity.com/id/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media osu">
<img src="img/icons/osu.png" alt="">
<a href="https://osu.ppy.sh/users/19273464/" target="_blank">masiv_</a>
</div>
<div class="social-media mail last">
<img src="img/icons/mail.png" alt="">
<a href="mailto:masiv_@ethernal.win" target="_blank">masiv_ @ethernal.win</a>
</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,33 @@
<?php
require_once "../../includes/config_session.inc.php";
require_once "../../includes/lang.inc.php";
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=0.75">
<title>masiv's lair | <?php echo $tr[$lang]["about-host.title"]; ?></title>
<link rel="stylesheet" href="../../css/articles/about-host/about-host.css">
<link rel="icon" href="../../img/favicon/favicon-lair.png">
</head>
<body>
<div class="navbar top blank"></div>
<div class="navbar top">
<?php include "../../components/global/navbar.php"?>
</div>
<div class="wrapper">
<div class="primary">
<div class="panel">
<?php echo $tr[$lang]["about-host.content"]; ?>
</div>
</div>
</div>
<div class="navbar bot blank"></div>
<div class="navbar bot">
<?php include "../../components/global/navbar.php"?>
</div>
</body>
</html>

View File

@@ -1,168 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=0.75">
<title>masiv's lair | About this hosting</title>
<link rel="stylesheet" href="../../css/articles/about-host/about-host.css">
<link rel="icon" href="../../img/favicon/favicon-lair.png">
</head>
<body>
<div class="navbar top blank"></div>
<div class="navbar top">
<div class="logo">
<img src="../../img/logo/logo_smth.png" alt="">
<a href="../../main_en.html" class="logo-text">masiv's lair</a>
</div>
<div class="about panel">
<b><a href="../articles/about_en.html">About me</a></b>
</div>
<div class="links">
<div class="social-media github">
<img src="../../img/icons/github.png" alt="">
<a href="https://github.com/masiv1001" target="_blank">masiv1001</a>
</div>
<div class="social-media instagram">
<img src="../../img/icons/instagram.png" alt="">
<a href="https://instagram.com/sietezip/" target="_blank">sietezip</a>
</div>
<div class="social-media pixelfed">
<img src="../../img/icons/pixelfed.png" alt="">
<a href="https://pixelfed.social/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media twitter">
<img src="../../img/icons/twitter.png" alt="">
<a href="https://twitter.com/_visam/" target="_blank">_visam</a>
</div>
<div class="social-media reddit">
<img src="../../img/icons/reddit.png" alt="">
<a href="https://www.reddit.com/user/masiv_o/" target="_blank">masiv_o</a>
</div>
<div class="social-media steam">
<img src="../../img/icons/steam.png" alt="">
<a href="https://steamcommunity.com/id/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media osu">
<img src="../../img/icons/osu.png" alt="">
<a href="https://osu.ppy.sh/users/19273464/" target="_blank">masiv_</a>
</div>
<div class="social-media mail">
<img src="../../img/icons/mail.png" alt="">
<a href="mailto:masiv_@ethernal.win" target="_blank">masiv_ @ethernal.win</a>
</div>
</div>
<div class="lang-picker panel">
<b><a href="../articles/about-host_es.html">Español</a></b>
</div>
</div>
<div class="wrapper">
<div class="primary">
<div class="panel">
<p>
Hello, <br><br>
You clicking this article means you have an interest on how this
website is structured, and what infrastructure it runs in.
I've gotta say this will probably change over time, but there is one
aspect I will adhere to, mantaining custody over my own data, in practice
that means everything I host will be hosted on-site on my own infrastructure,
just below a little about the <i>homelab's</i> history and some details.<br>
</p>
<h3>Specs</h3>
<div class="specs panel">
<p>
CPU: AMD Ryzen 5 4600G <br>
RAM: 32GB DDR4 3200MHZ <br>
Motherboard: ASRock A320M-HDV 4.0 <br>
PSU: EVGA 450W 80plus <br>
Storage: <br>
<span class="li">x1 1TB SSD NVME Samsung 970 Plus</span>
<span class="li">x2 3TB HDD WD Green (RAID 1)</span>
Case: No-name brand,
quite square-ish.<br>
</p>
</div>
<h3>History</h3>
<p>
Each one of the components has a different origin, the case, psu and motherboard
have always been the same since the begining, part of the original PC I got as
a birthday present a while back, it was equiped with 8gb of ram, a modest HDD,
together with an AMD Ryzen 3 3200G, it was enough back then, but just as it came,
I got myself a brand new laptop, somewhat comparable (or even better) to the pc,
I ended up using it way more, thanks to it being portable.
</p>
<p>
After some time, can't quite remember the reason, I took the decision to move it to its
current location, a secure place with a good broadband connection, this was all the way
back at the start of 2022, when I installed Ubuntu Server 22.04 LTS.
</p>
<p>
I graudually updated it, I got the current proccesor over on amazon, then the ram
(attempted to purchase it from Aliexpress, but once it arrived I discovered it
wasn't compatible, had to re-sell it, and buy my current 2x16gb kit), and last but
not least, two 3tb disks which I thought was plenty for my usecase (foreshadowing).
</p>
<p>
I currently still have the same Ubuntu Server install on bare hardware, and almost
every single service I host is using a docker container, managed using Portainer.
</p>
<h3>Networking</h3>
<h4>Domain name</h4>
<p>
I've used several domain names over time, starting with No-IP to ssh remotely, rapidely migrating
to DuckDNS, that setup endured quite a while but after having some problems with DNS resolution, and
limitations on their DNS capabilities (they used AWS) thanks to my sub-domain repertoire I
decided to finally make the leap and purchase my own domain on some of the internet's registrars,
ended up with this domain on Porkbun, for a measly 5 dollars and a half, a lot /s.
</p>
<h4>Proxy &amp; DDNS</h4>
<p>
I use NginxProxyManager to manage all my domains and redirects, I don't plan on migrating to
Traefik for now because NPM does the job, and increasing my infrastructure's complexity isn't my
number one priority, maybe in the future. For Dynamic DNS I use DDClient, my ISP (Antel) doesn't
provide static IPs to residential addresses, so I'm stuck having to update my registers once or
twice a day in-leiu of having a fixed one.
</p>
</div>
</div>
</div>
<div class="navbar bot blank"></div>
<div class="navbar bot">
<div class="links">
<div class="social-media github">
<img src="../../img/icons/github.png" alt="">
<a href="https://github.com/masiv1001" target="_blank">masiv1001</a>
</div>
<div class="social-media instagram">
<img src="../../img/icons/instagram.png" alt="">
<a href="https://instagram.com/sietezip/" target="_blank">sietezip</a>
</div>
<div class="social-media pixelfed">
<img src="../../img/icons/pixelfed.png" alt="">
<a href="https://pixelfed.social/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media twitter">
<img src="../../img/icons/twitter.png" alt="">
<a href="https://twitter.com/_visam/" target="_blank">_visam</a>
</div>
<div class="social-media reddit">
<img src="../../img/icons/reddit.png" alt="">
<a href="https://www.reddit.com/user/masiv_o/" target="_blank">masiv_o</a>
</div>
<div class="social-media steam">
<img src="../../img/icons/steam.png" alt="">
<a href="https://steamcommunity.com/id/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media osu">
<img src="../../img/icons/osu.png" alt="">
<a href="https://osu.ppy.sh/users/19273464/" target="_blank">masiv_</a>
</div>
<div class="social-media mail last">
<img src="../../img/icons/mail.png" alt="">
<a href="mailto:masiv_@ethernal.win" target="_blank">masiv_ @ethernal.win</a>
</div>
</div>
</div>
</body>
</html>

View File

@@ -1,172 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=0.75">
<title>masiv's lair | About this hosting</title>
<link rel="stylesheet" href="../../css/articles/about-host/about-host.css">
<link rel="icon" href="../../img/favicon/favicon-lair.png">
</head>
<body>
<div class="navbar top blank"></div>
<div class="navbar top">
<div class="logo">
<img src="../../img/logo/logo_smth.png" alt="">
<a href="../../main_es.html" class="logo-text">masiv's lair</a>
</div>
<div class="about panel">
<b><a href="../articles/about_es.html">Sobre mí</a></b>
</div>
<div class="links">
<div class="social-media github">
<img src="../../img/icons/github.png" alt="">
<a href="https://github.com/masiv1001" target="_blank">masiv1001</a>
</div>
<div class="social-media instagram">
<img src="../../img/icons/instagram.png" alt="">
<a href="https://instagram.com/sietezip/" target="_blank">sietezip</a>
</div>
<div class="social-media pixelfed">
<img src="../../img/icons/pixelfed.png" alt="">
<a href="https://pixelfed.social/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media twitter">
<img src="../../img/icons/twitter.png" alt="">
<a href="https://twitter.com/_visam/" target="_blank">_visam</a>
</div>
<div class="social-media reddit">
<img src="../../img/icons/reddit.png" alt="">
<a href="https://www.reddit.com/user/masiv_o/" target="_blank">masiv_o</a>
</div>
<div class="social-media steam">
<img src="../../img/icons/steam.png" alt="">
<a href="https://steamcommunity.com/id/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media osu">
<img src="../../img/icons/osu.png" alt="">
<a href="https://osu.ppy.sh/users/19273464/" target="_blank">masiv_</a>
</div>
<div class="social-media mail">
<img src="../../img/icons/mail.png" alt="">
<a href="mailto:masiv_@ethernal.win" target="_blank">masiv_ @ethernal.win</a>
</div>
</div>
<div class="lang-picker panel">
<b><a href="../articles/about-host_en.html">English</a></b>
</div>
</div>
<div class="wrapper">
<div class="primary">
<div class="panel">
<p>
Buenas, <br><br>
Si estás leyendo esto es que te interesa saber un poco sobre la estructura
en la que están hosteados mis servicios, y esta página.
He de decir que esto irá cambiando, pero si hay algo que no creo cambie
será el hecho de que quiero mantener la custodia de mis datos, por lo que
todos lo que hostee será hosteado en mi propio <i>homelab</i>, debajo detalles e historia.<br>
</p>
<h3>Especificaciones</h3>
<div class="specs panel">
<p>
Procesador: AMD Ryzen 5 4600G <br>
RAM: 32GB DDR4 3200MHZ <br>
Placa: ASRock A320M-HDV 4.0 <br>
PSU: EVGA 450W 80plus <br>
Almacenamiento: <br>
<span class="li">x1 1TB SSD NVME Samsung 970 Plus</span>
<span class="li">x2 3TB HDD WD Green (RAID 1)</span>
Gabinete: Marca genérica, <br>
es bastante cuadrado.
</p>
</div>
<h3>Historia</h3>
<p>
Cada componente tiene una historia un poquito diferente, el gabinete,
fuente y placa madre han sido la misma, y fueron un regalo de cumpleaños
de hace tiempo, en su momento con 8gb de ram, un disco HDD modesto, y
un AMD Ryzen 3 3200G, en su momento era algo, mas justo coincidió que
en esa ocasión, había recibido una laptop, a la cual le terminé dando
muchísimo más uso que a la torre, sumado al hecho de poderla transportarla
que personalmente me fue un gran plus.
</p>
<p>
Tiempo después, ya no recuerdo bien en qué contexto, decido llevarla al
lugar dónde ahora se encuentra, dónde estaba segura y con una buena conexión
de fibra óptica, esto fue por 2022, cuándo le instalé Ubuntu Server 22.04 LTS.
</p>
<p>
Gradualmente la fui mejorando, le compré su procesador actual por internet, luego
la memoria ram (intenté comprarla por Aliexpress, pero resultaba era incompatible,
por lo que tuve que revenderla, y comprarme los dos sticks de 16gb que tengo ahora),
y por último la decisión de comprar dos discos de 3tb para tener almacenamiento de
sobra (que resulta no lo fue) para lo que quisiese.
</p>
<p>
Actualmente sigo teniendo instalado el Ubuntu directo sobre el hardware, y casi todo
lo que tengo instalado allí lo manejo usando Docker a través de Portainer.
</p>
<h3>Red</h3>
<h4>Dominio</h4>
<p>
He usado varios dominios, al principio llegué a usar No-IP para conectarme remotamente,
para luego rápidamente migrar a DuckDNS, que me supo proveer de dominios gratuitos por varios años,
sin embargo, luego de toparme con las limitaciones de su servicio (por la cantidad de sub-dominios,
y debido a su dependendencia en servidores de no tan buena calidad de AWS) decidí invertir y
comprarme el dominio que estoy usando actualmente, con el registrante de Porkbun, que
debo decir fue muy económico, actualmente pago unos 5 dólares y medios al año, básicamente nada.
</p>
<h4>Proxy y DDNS</h4>
<p>
Para manejar los dominios y redirecciones he usado y seguiré usando NginxProxyManager, por ahora
no tengo planeado migrar a Traefik puesto que no está dentro de mis prioridades añadir
esa complejidad a mi setup (aunque quizás en un futuro lo haga). Uso DDClient para el DNS dinámico
puesto que mi ISP (Antel) no provee IP fijas a planes residenciales, y necesito actualizar los
registros con mi IP cada vez que esta cambia.
</p>
</div>
</div>
</div>
<div class="navbar bot blank"></div>
<div class="navbar bot">
<div class="links">
<div class="social-media github">
<img src="../../img/icons/github.png" alt="">
<a href="https://github.com/masiv1001" target="_blank">masiv1001</a>
</div>
<div class="social-media instagram">
<img src="../../img/icons/instagram.png" alt="">
<a href="https://instagram.com/sietezip/" target="_blank">sietezip</a>
</div>
<div class="social-media pixelfed">
<img src="../../img/icons/pixelfed.png" alt="">
<a href="https://pixelfed.social/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media twitter">
<img src="../../img/icons/twitter.png" alt="">
<a href="https://twitter.com/_visam/" target="_blank">_visam</a>
</div>
<div class="social-media reddit">
<img src="../../img/icons/reddit.png" alt="">
<a href="https://www.reddit.com/user/masiv_o/" target="_blank">masiv_o</a>
</div>
<div class="social-media steam">
<img src="../../img/icons/steam.png" alt="">
<a href="https://steamcommunity.com/id/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media osu">
<img src="../../img/icons/osu.png" alt="">
<a href="https://osu.ppy.sh/users/19273464/" target="_blank">masiv_</a>
</div>
<div class="social-media mail last">
<img src="../../img/icons/mail.png" alt="">
<a href="mailto:masiv_@ethernal.win" target="_blank">masiv_ @ethernal.win</a>
</div>
</div>
</div>
</body>
</html>

33
pages/articles/about.php Normal file
View File

@@ -0,0 +1,33 @@
<?php
require_once "../../includes/config_session.inc.php";
require_once "../../includes/lang.inc.php";
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=0.75">
<title>masiv's lair | About me</title>
<link rel="stylesheet" href="../../css/articles/about/about.css">
<link rel="icon" href="../../img/favicon/favicon-lair.png">
</head>
<body>
<div class="navbar top blank"></div>
<div class="navbar top">
<?php include "../../components/global/navbar.php"?>
</div>
<div class="wrapper">
<div class="primary">
<div class="panel">
<?php echo $tr[$lang]["about.construction"]; ?>
</div>
</div>
</div>
<div class="navbar bot blank"></div>
<div class="navbar bot">
<?php include "../../components/global/navbar.php"?>
</div>
</body>
</html>

View File

@@ -1,104 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=0.75">
<title>masiv's lair | About me</title>
<link rel="stylesheet" href="../../css/articles/about/about.css">
<link rel="icon" href="../../img/favicon/favicon-lair.png">
</head>
<body>
<div class="navbar top blank"></div>
<div class="navbar top">
<div class="logo">
<img src="../../img/logo/logo_smth.png" alt="">
<a href="../../main_en.html" class="logo-text">masiv's lair</a>
</div>
<div class="about panel">
<b><a href="../articles/about_en.html">About me</a></b>
</div>
<div class="links">
<div class="social-media github">
<img src="../../img/icons/github.png" alt="">
<a href="https://github.com/masiv1001" target="_blank">masiv1001</a>
</div>
<div class="social-media instagram">
<img src="../../img/icons/instagram.png" alt="">
<a href="https://instagram.com/sietezip/" target="_blank">sietezip</a>
</div>
<div class="social-media pixelfed">
<img src="../../img/icons/pixelfed.png" alt="">
<a href="https://pixelfed.social/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media twitter">
<img src="../../img/icons/twitter.png" alt="">
<a href="https://twitter.com/_visam/" target="_blank">_visam</a>
</div>
<div class="social-media reddit">
<img src="../../img/icons/reddit.png" alt="">
<a href="https://www.reddit.com/user/masiv_o/" target="_blank">masiv_o</a>
</div>
<div class="social-media steam">
<img src="../../img/icons/steam.png" alt="">
<a href="https://steamcommunity.com/id/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media osu">
<img src="../../img/icons/osu.png" alt="">
<a href="https://osu.ppy.sh/users/19273464/" target="_blank">masiv_</a>
</div>
<div class="social-media mail">
<img src="../../img/icons/mail.png" alt="">
<a href="mailto:masiv_@ethernal.win" target="_blank">masiv_ @ethernal.win</a>
</div>
</div>
<div class="lang-picker panel">
<b><a href="../articles/about_es.html">Español</a></b>
</div>
</div>
<div class="wrapper">
<div class="primary">
<div class="panel">
Still under construction.
</div>
</div>
</div>
<div class="navbar bot blank"></div>
<div class="navbar bot">
<div class="links">
<div class="social-media github">
<img src="../../img/icons/github.png" alt="">
<a href="https://github.com/masiv1001" target="_blank">masiv1001</a>
</div>
<div class="social-media instagram">
<img src="../../img/icons/instagram.png" alt="">
<a href="https://instagram.com/sietezip/" target="_blank">sietezip</a>
</div>
<div class="social-media pixelfed">
<img src="../../img/icons/pixelfed.png" alt="">
<a href="https://pixelfed.social/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media twitter">
<img src="../../img/icons/twitter.png" alt="">
<a href="https://twitter.com/_visam/" target="_blank">_visam</a>
</div>
<div class="social-media reddit">
<img src="../../img/icons/reddit.png" alt="">
<a href="https://www.reddit.com/user/masiv_o/" target="_blank">masiv_o</a>
</div>
<div class="social-media steam">
<img src="../../img/icons/steam.png" alt="">
<a href="https://steamcommunity.com/id/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media osu">
<img src="../../img/icons/osu.png" alt="">
<a href="https://osu.ppy.sh/users/19273464/" target="_blank">masiv_</a>
</div>
<div class="social-media mail last">
<img src="../../img/icons/mail.png" alt="">
<a href="mailto:masiv_@ethernal.win" target="_blank">masiv_ @ethernal.win</a>
</div>
</div>
</div>
</body>
</html>

View File

@@ -1,104 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=0.75">
<title>masiv's lair | Sobre mí</title>
<link rel="stylesheet" href="../../css/articles/about/about.css">
<link rel="icon" href="../../img/favicon/favicon-lair.png">
</head>
<body>
<div class="navbar top blank"></div>
<div class="navbar top">
<div class="logo">
<img src="../../img/logo/logo_smth.png" alt="">
<a href="../../main_es.html" class="logo-text">masiv's lair</a>
</div>
<div class="about panel">
<b><a href="../articles/about_es.html">Sobre mí</a></b>
</div>
<div class="links">
<div class="social-media github">
<img src="../../img/icons/github.png" alt="">
<a href="https://github.com/masiv1001" target="_blank">masiv1001</a>
</div>
<div class="social-media instagram">
<img src="../../img/icons/instagram.png" alt="">
<a href="https://instagram.com/sietezip/" target="_blank">sietezip</a>
</div>
<div class="social-media pixelfed">
<img src="../../img/icons/pixelfed.png" alt="">
<a href="https://pixelfed.social/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media twitter">
<img src="../../img/icons/twitter.png" alt="">
<a href="https://twitter.com/_visam/" target="_blank">_visam</a>
</div>
<div class="social-media reddit">
<img src="../../img/icons/reddit.png" alt="">
<a href="https://www.reddit.com/user/masiv_o/" target="_blank">masiv_o</a>
</div>
<div class="social-media steam">
<img src="../../img/icons/steam.png" alt="">
<a href="https://steamcommunity.com/id/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media osu">
<img src="../../img/icons/osu.png" alt="">
<a href="https://osu.ppy.sh/users/19273464/" target="_blank">masiv_</a>
</div>
<div class="social-media mail">
<img src="../../img/icons/mail.png" alt="">
<a href="mailto:masiv_@ethernal.win" target="_blank">masiv_ @ethernal.win</a>
</div>
</div>
<div class="lang-picker panel">
<b><a href="../articles/about_en.html">English</a></b>
</div>
</div>
<div class="wrapper">
<div class="primary">
<div class="panel">
Todavía en progreso.
</div>
</div>
</div>
<div class="navbar bot blank"></div>
<div class="navbar bot">
<div class="links">
<div class="social-media github">
<img src="../../img/icons/github.png" alt="">
<a href="https://github.com/masiv1001" target="_blank">masiv1001</a>
</div>
<div class="social-media instagram">
<img src="../../img/icons/instagram.png" alt="">
<a href="https://instagram.com/sietezip/" target="_blank">sietezip</a>
</div>
<div class="social-media pixelfed">
<img src="../../img/icons/pixelfed.png" alt="">
<a href="https://pixelfed.social/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media twitter">
<img src="../../img/icons/twitter.png" alt="">
<a href="https://twitter.com/_visam/" target="_blank">_visam</a>
</div>
<div class="social-media reddit">
<img src="../../img/icons/reddit.png" alt="">
<a href="https://www.reddit.com/user/masiv_o/" target="_blank">masiv_o</a>
</div>
<div class="social-media steam">
<img src="../../img/icons/steam.png" alt="">
<a href="https://steamcommunity.com/id/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media osu">
<img src="../../img/icons/osu.png" alt="">
<a href="https://osu.ppy.sh/users/19273464/" target="_blank">masiv_</a>
</div>
<div class="social-media mail last">
<img src="../../img/icons/mail.png" alt="">
<a href="mailto:masiv_@ethernal.win" target="_blank">masiv_ @ethernal.win</a>
</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,33 @@
<?php
require_once "includes/config_session.inc.php";
require_once "includes/lang.inc.php";
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=0.75">
<title>masiv's lair | [REPLACE]</title>
<link rel="stylesheet" href="../../css/articles/[REPLACE]/[REPLACE].css">
<link rel="icon" href="../../img/favicon/favicon-lair.png">
</head>
<body>
<div class="navbar top blank"></div>
<div class="navbar top">
<?php include "../../components/global/navbar.php"?>
</div>
<div class="wrapper">
<div class="primary">
<div class="panel">
</div>
</div>
</div>
<div class="navbar bot blank"></div>
<div class="navbar bot">
<?php include "../../components/global/navbar.php"?>
</div>
</body>
</html>

View File

@@ -1,169 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=0.75">
<title>masiv's lair | [REPLACE]</title>
<link rel="stylesheet" href="../../css/articles/[REPLACE]/[REPLACE].css">
<link rel="icon" href="../../img/favicon/favicon-lair.png">
</head>
<body>
<div class="navbar top blank"></div>
<div class="navbar top">
<div class="logo">
<img src="../../img/logo/logo_smth.png" alt="">
<a href="../../main_en.html" class="logo-text">masiv's lair</a>
</div>
<div class="about panel">
<b><a href="../articles/about_en.html">About me</a></b>
</div>
<div class="links">
<div class="social-media github">
<img src="../../img/icons/github.png" alt="">
<a href="https://github.com/masiv1001" target="_blank">masiv1001</a>
</div>
<div class="social-media instagram">
<img src="../../img/icons/instagram.png" alt="">
<a href="https://instagram.com/sietezip/" target="_blank">sietezip</a>
</div>
<div class="social-media pixelfed">
<img src="../../img/icons/pixelfed.png" alt="">
<a href="https://pixelfed.social/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media twitter">
<img src="../../img/icons/twitter.png" alt="">
<a href="https://twitter.com/_visam/" target="_blank">_visam</a>
</div>
<div class="social-media reddit">
<img src="../../img/icons/reddit.png" alt="">
<a href="https://www.reddit.com/user/masiv_o/" target="_blank">masiv_o</a>
</div>
<div class="social-media steam">
<img src="../../img/icons/steam.png" alt="">
<a href="https://steamcommunity.com/id/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media osu">
<img src="../../img/icons/osu.png" alt="">
<a href="https://osu.ppy.sh/users/19273464/" target="_blank">masiv_</a>
</div>
<div class="social-media mail">
<img src="../../img/icons/mail.png" alt="">
<a href="mailto:masiv_@ethernal.win" target="_blank">masiv_ @ethernal.win</a>
</div>
</div>
<div class="lang-picker panel">
<b><a href="../articles/article-blank_es.html">Español</a></b>
</div>
</div>
<div class="wrapper">
<div class="primary">
<div class="panel">
<p>
Hello, <br><br>
You clicking this article means you have an interest on how this
website is structured, and what infrastructure it runs in.
I've gotta say this will probably change over time, but there is one
aspect I will adhere to, mantaining custody over my own data, in practice
that means everything I host will be hosted on-site on my own infrastructure,
just below a little about the <i>homelab's</i> history and some details.<br>
</p>
<h3>Specs</h3>
<div class="specs panel">
<p>
CPU: AMD Ryzen 5 4600G <br>
RAM: 32GB DDR4 3200MHZ <br>
Motherboard: ASRock A320M-HDV 4.0 <br>
PSU: EVGA 450W 80plus <br>
Storage: <br>
<span class="li">x1 1TB SSD NVME Samsung 970 Plus</span>
<span class="li">x2 3TB HDD WD Green (RAID 1)</span>
Case: No-name brand,
quite square-ish.<br>
</p>
</div>
<h3>History</h3>
<p>
Each one of the components has a different origin, the case, psu and motherboard
have always been the same since the begining, part of the original PC I got as
a birthday present a while back, it was equiped with 8gb of ram, a modest HDD,
together with an AMD Ryzen 3 3200G, it was enough back then, but just as it came,
I got myself a brand new laptop, somewhat comparable (or even better) to the pc,
I ended up using it way more, thanks to it being portable.
</p>
<p>
After some time, can't quite remember the reason, I took the decision to move it to its
current location, a secure place with a good broadband connection, this was all the way
back at the start of 2022, when I installed Ubuntu Server 22.04 LTS.
</p>
<p>
I graudually updated it, I got the current proccesor over on amazon, then the ram
(attempted to purchase it from Aliexpress, but once it arrived I discovered it
wasn't compatible, had to re-sell it, and buy my current 2x16gb kit), and last but
not least, two 3tb disks which I thought was plenty for my usecase (foreshadowing).
</p>
<p>
I currently still have the same Ubuntu Server install on bare hardware, and almost
every single service I host is using a docker container, managed using Portainer.
</p>
<h3>Networking</h3>
<h4>Domain name</h4>
<p>
I've used several domain names over time, starting with No-IP to ssh remotely, rapidely migrating
to DuckDNS, that setup endured quite a while but after having some problems with DNS resolution, and
limitations on their DNS capabilities (they used AWS) thanks to my sub-domain repertoire I
decided to finally make the leap and purchase my own domain on some of the internet's registrars,
ended up with this domain on Porkbun, for a measly 5 dollars and a half, a lot /s.
</p>
<h4>Proxy &amp; DDNS</h4>
<p>
I use NginxProxyManager to manage all my domains and redirects, I don't plan on migrating to
Traefik for now because NPM does the job, and increasing my infrastructure's complexity isn't my
number one priority, maybe in the future. For Dynamic DNS I use DDClient, my ISP (Antel) doesn't
provide static IPs to residential addresses, so I'm stuck having to update my registers once or
twice a day in-leiu of having a fixed one.
</p>
</div>
</div>
</div>
<div class="navbar bot blank"></div>
<div class="navbar bot">
<div class="links">
<div class="social-media github">
<img src="../../img/icons/github.png" alt="">
<a href="https://github.com/masiv1001" target="_blank">masiv1001</a>
</div>
<div class="social-media instagram">
<img src="../../img/icons/instagram.png" alt="">
<a href="https://instagram.com/sietezip/" target="_blank">sietezip</a>
</div>
<div class="social-media pixelfed">
<img src="../../img/icons/pixelfed.png" alt="">
<a href="https://pixelfed.social/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media twitter">
<img src="../../img/icons/twitter.png" alt="">
<a href="https://twitter.com/_visam/" target="_blank">_visam</a>
</div>
<div class="social-media reddit">
<img src="../../img/icons/reddit.png" alt="">
<a href="https://www.reddit.com/user/masiv_o/" target="_blank">masiv_o</a>
</div>
<div class="social-media steam">
<img src="../../img/icons/steam.png" alt="">
<a href="https://steamcommunity.com/id/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media osu">
<img src="../../img/icons/osu.png" alt="">
<a href="https://osu.ppy.sh/users/19273464/" target="_blank">masiv_</a>
</div>
<div class="social-media mail last">
<img src="../../img/icons/mail.png" alt="">
<a href="mailto:masiv_@ethernal.win" target="_blank">masiv_ @ethernal.win</a>
</div>
</div>
</div>
</body>
</html>

View File

@@ -1,104 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=0.75">
<title>masiv's lair | [REPLACE]</title>
<link rel="stylesheet" href="../../css/articles/[REPLACE]/[REPLACE].css">
<link rel="icon" href="../../img/favicon/favicon-lair.png">
</head>
<body>
<div class="navbar top blank"></div>
<div class="navbar top">
<div class="logo">
<img src="../../img/logo/logo_smth.png" alt="">
<a href="../../main_es.html" class="logo-text">masiv's lair</a>
</div>
<div class="about panel">
<b><a href="../articles/about_es.html">About me</a></b>
</div>
<div class="links">
<div class="social-media github">
<img src="../../img/icons/github.png" alt="">
<a href="https://github.com/masiv1001" target="_blank">masiv1001</a>
</div>
<div class="social-media instagram">
<img src="../../img/icons/instagram.png" alt="">
<a href="https://instagram.com/sietezip/" target="_blank">sietezip</a>
</div>
<div class="social-media pixelfed">
<img src="../../img/icons/pixelfed.png" alt="">
<a href="https://pixelfed.social/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media twitter">
<img src="../../img/icons/twitter.png" alt="">
<a href="https://twitter.com/_visam/" target="_blank">_visam</a>
</div>
<div class="social-media reddit">
<img src="../../img/icons/reddit.png" alt="">
<a href="https://www.reddit.com/user/masiv_o/" target="_blank">masiv_o</a>
</div>
<div class="social-media steam">
<img src="../../img/icons/steam.png" alt="">
<a href="https://steamcommunity.com/id/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media osu">
<img src="../../img/icons/osu.png" alt="">
<a href="https://osu.ppy.sh/users/19273464/" target="_blank">masiv_</a>
</div>
<div class="social-media mail">
<img src="../../img/icons/mail.png" alt="">
<a href="mailto:masiv_@ethernal.win" target="_blank">masiv_ @ethernal.win</a>
</div>
</div>
<div class="lang-picker panel">
<b><a href="../articles/article-blank_en.html">English</a></b>
</div>
</div>
<div class="wrapper">
<div class="primary">
<div class="panel">
</div>
</div>
</div>
<div class="navbar bot blank"></div>
<div class="navbar bot">
<div class="links">
<div class="social-media github">
<img src="../../img/icons/github.png" alt="">
<a href="https://github.com/masiv1001" target="_blank">masiv1001</a>
</div>
<div class="social-media instagram">
<img src="../../img/icons/instagram.png" alt="">
<a href="https://instagram.com/sietezip/" target="_blank">sietezip</a>
</div>
<div class="social-media pixelfed">
<img src="../../img/icons/pixelfed.png" alt="">
<a href="https://pixelfed.social/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media twitter">
<img src="../../img/icons/twitter.png" alt="">
<a href="https://twitter.com/_visam/" target="_blank">_visam</a>
</div>
<div class="social-media reddit">
<img src="../../img/icons/reddit.png" alt="">
<a href="https://www.reddit.com/user/masiv_o/" target="_blank">masiv_o</a>
</div>
<div class="social-media steam">
<img src="../../img/icons/steam.png" alt="">
<a href="https://steamcommunity.com/id/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media osu">
<img src="../../img/icons/osu.png" alt="">
<a href="https://osu.ppy.sh/users/19273464/" target="_blank">masiv_</a>
</div>
<div class="social-media mail last">
<img src="../../img/icons/mail.png" alt="">
<a href="mailto:masiv_@ethernal.win" target="_blank">masiv_ @ethernal.win</a>
</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,82 @@
<?php
require_once "../../includes/config_session.inc.php";
require_once "../../includes/lang.inc.php";
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=0.75">
<title>masiv's lair | Calculadora</title>
<link rel="stylesheet" href="../../css/articles/diy-calculator/diy-calculator.css">
<link rel="icon" href="../../img/favicon/favicon-lair.png">
<script src="../../js/articles/diy-calculator/calc.js"></script>
</head>
<body>
<div class="navbar top blank"></div>
<div class="navbar top">
<?php include "../../components/global/navbar.php"?>
</div>
<div class="wrapper">
<div class="primary">
<div>
<div class="calc panel">
<h1><?php echo $tr[$lang]["calc.title"]; ?></h1>
<div class="viewing panel">
<span id="output"></span>
</div>
<div class="buttons">
<button onclick="q_manage('add',1)">1</button>
<button onclick="q_manage('add',2)">2</button>
<button onclick="q_manage('add',3)">3</button>
<button onclick="q_manage('add','+')">+</button>
<button onclick="q_manage('add',4)">4</button>
<button onclick="q_manage('add',5)">5</button>
<button onclick="q_manage('add',6)">6</button>
<button onclick="q_manage('add','-')">-</button>
<button onclick="q_manage('add',7)">7</button>
<button onclick="q_manage('add',8)">8</button>
<button onclick="q_manage('add',9)">9</button>
<button onclick="q_manage('add','*')">*</button>
<button onclick="">(</button>
<button onclick="q_manage('add',0)">0</button>
<button onclick="">)</button>
<button onclick="q_manage('add','/')">/</button>
<button onclick="q_manage('remove')">&lt;</button>
<button onclick="q_manage('add','^')">^</button>
<button onclick="q_execute('add','=')" id="equal">=</button>
</div>
</div>
<div class="info panel">
<h1><?php echo $tr[$lang]["calc.h1"]; ?></h1>
<p>
<?php echo $tr[$lang]["calc.p1"]; ?>
</p>
<p>
<?php echo $tr[$lang]["calc.p2"]; ?>
</p>
<p>
<?php echo $tr[$lang]["calc.p3"]; ?>
</p>
<p>
<?php echo $tr[$lang]["calc.p4"]; ?>
<span class="li"><?php echo $tr[$lang]["calc.p4l1"]; ?></span>
<span class="li"><?php echo $tr[$lang]["calc.p4l2"]; ?></span>
<span class="li"><?php echo $tr[$lang]["calc.p4l3"]; ?></span>
<?php echo $tr[$lang]["calc.p5"]; ?>
</p>
<p>
<?php echo $tr[$lang]["calc.p6"]; ?><br>
<?php echo $tr[$lang]["calc.p7"]; ?>
</p>
</div>
</div>
</div>
</div>
<div class="navbar bot blank"></div>
<div class="navbar bot">
<?php include "../../components/global/navbar.php"?>
</div>
</body>
</html>

View File

@@ -1,178 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=0.75">
<title>masiv's lair | Calculator</title>
<link rel="stylesheet" href="../../css/articles/diy-calculator/diy-calculator.css">
<link rel="icon" href="../../img/favicon/favicon-lair.png">
<script src="../../js/articles/diy-calculator/calc.js"></script>
</head>
<body>
<div class="navbar top blank"></div>
<div class="navbar top">
<div class="logo">
<img src="../../img/logo/logo_smth.png" alt="">
<a href="../../main_en.html" class="logo-text">masiv's lair</a>
</div>
<div class="about panel">
<b><a href="../articles/about_en.html">About me</a></b>
</div>
<div class="links">
<div class="social-media github">
<img src="../../img/icons/github.png" alt="">
<a href="https://github.com/masiv1001" target="_blank">masiv1001</a>
</div>
<div class="social-media instagram">
<img src="../../img/icons/instagram.png" alt="">
<a href="https://instagram.com/sietezip/" target="_blank">sietezip</a>
</div>
<div class="social-media pixelfed">
<img src="../../img/icons/pixelfed.png" alt="">
<a href="https://pixelfed.social/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media twitter">
<img src="../../img/icons/twitter.png" alt="">
<a href="https://twitter.com/_visam/" target="_blank">_visam</a>
</div>
<div class="social-media reddit">
<img src="../../img/icons/reddit.png" alt="">
<a href="https://www.reddit.com/user/masiv_o/" target="_blank">masiv_o</a>
</div>
<div class="social-media steam">
<img src="../../img/icons/steam.png" alt="">
<a href="https://steamcommunity.com/id/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media osu">
<img src="../../img/icons/osu.png" alt="">
<a href="https://osu.ppy.sh/users/19273464/" target="_blank">masiv_</a>
</div>
<div class="social-media mail">
<img src="../../img/icons/mail.png" alt="">
<a href="mailto:masiv_@ethernal.win" target="_blank">masiv_ @ethernal.win</a>
</div>
</div>
<div class="lang-picker panel">
<b><a href="../articles/diy-calculator_es.html">Español</a></b>
</div>
</div>
<div class="wrapper">
<div class="primary">
<div>
<div class="calc panel">
<h1>Calculator</h1>
<div class="viewing panel">
<span id="output"></span>
</div>
<div class="buttons">
<button onclick="q_manage('add',1)">1</button>
<button onclick="q_manage('add',2)">2</button>
<button onclick="q_manage('add',3)">3</button>
<button onclick="q_manage('add','+')">+</button>
<button onclick="q_manage('add',4)">4</button>
<button onclick="q_manage('add',5)">5</button>
<button onclick="q_manage('add',6)">6</button>
<button onclick="q_manage('add','-')">-</button>
<button onclick="q_manage('add',7)">7</button>
<button onclick="q_manage('add',8)">8</button>
<button onclick="q_manage('add',9)">9</button>
<button onclick="q_manage('add','*')">*</button>
<button onclick="">(</button>
<button onclick="q_manage('add',0)">0</button>
<button onclick="">)</button>
<button onclick="q_manage('add','/')">/</button>
<button onclick="q_manage('remove')">&lt;</button>
<button onclick="q_manage('add','^')">^</button>
<button onclick="q_execute('add','=')" id="equal">=</button>
</div>
</div>
<div class="info panel">
<h1>About this project</h1>
<p>
It has certainly been a while since I've touched Javascript,
and I wanted to regain some of the know-how I had about it,
that's why decided to code this calculator from scratch
without using any external libraries, nor chatbots, only
wikis like w3 school about the language itself even if
that required more time.
</p>
<p>
So it began my learning journey, coding this entire calculator
has been quite a joy I must say, and even if the final product
is lacking some funcionality like parenthesis parsing it still
works completely fine for most things, as it process inputs using
PEMDAS.
</p>
<p>
Were I to make it all over again, I would probably go about
things differently, researching about more efficient algorithms
and methods and not reinventing the wheel, but the thing is,
that's the entire point of this excersice, wasn't for that
self-impossed limitation, I could make use of tons of more
efficient libraries.
</p>
<p>
Now about the inner workings of the script, I implemented a
simple array that stores every character typed, and once the
equal key is pressed, it sends the array to be processed in
the following steps:
<span class="li">Concatenate the digits, from [1,1,'+',2,3] to [11,'+',23].</span>
<span class="li">Search for term separators, and create multidimensional arrays with
each level representing one type of operation.
</span>
<span class="li">Undo all this array but backwards, processing the output as it goes.
</span>
It looks easy on paper, but I spent an entire day and a half coding and dealing with
each aspect of programming, things I didn't quite remember, others I didn't know from
the get-go, etc. (I must add a personal rant about how difficult is dealing with
multidimensional arrays, it's not a trivial task for sure).
</p>
<p>
Update 23/01/2026 <br>
I showed my calculator to a friend of mine and they
pointed out I was lacking a 0 button, how could I miss
that, seriously XD.
</p>
</div>
</div>
</div>
</div>
<div class="navbar bot blank"></div>
<div class="navbar bot">
<div class="links">
<div class="social-media github">
<img src="../../img/icons/github.png" alt="">
<a href="https://github.com/masiv1001" target="_blank">masiv1001</a>
</div>
<div class="social-media instagram">
<img src="../../img/icons/instagram.png" alt="">
<a href="https://instagram.com/sietezip/" target="_blank">sietezip</a>
</div>
<div class="social-media pixelfed">
<img src="../../img/icons/pixelfed.png" alt="">
<a href="https://pixelfed.social/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media twitter">
<img src="../../img/icons/twitter.png" alt="">
<a href="https://twitter.com/_visam/" target="_blank">_visam</a>
</div>
<div class="social-media reddit">
<img src="../../img/icons/reddit.png" alt="">
<a href="https://www.reddit.com/user/masiv_o/" target="_blank">masiv_o</a>
</div>
<div class="social-media steam">
<img src="../../img/icons/steam.png" alt="">
<a href="https://steamcommunity.com/id/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media osu">
<img src="../../img/icons/osu.png" alt="">
<a href="https://osu.ppy.sh/users/19273464/" target="_blank">masiv_</a>
</div>
<div class="social-media mail last">
<img src="../../img/icons/mail.png" alt="">
<a href="mailto:masiv_@ethernal.win" target="_blank">masiv_ @ethernal.win</a>
</div>
</div>
</div>
</body>
</html>

View File

@@ -1,175 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=0.75">
<title>masiv's lair | Calculadora</title>
<link rel="stylesheet" href="../../css/articles/diy-calculator/diy-calculator.css">
<link rel="icon" href="../../img/favicon/favicon-lair.png">
<script src="../../js/articles/diy-calculator/calc.js"></script>
</head>
<body>
<div class="navbar top blank"></div>
<div class="navbar top">
<div class="logo">
<img src="../../img/logo/logo_smth.png" alt="">
<a href="../../main_es.html" class="logo-text">masiv's lair</a>
</div>
<div class="about panel">
<b><a href="../articles/about_es.html">Sobre mí</a></b>
</div>
<div class="links">
<div class="social-media github">
<img src="../../img/icons/github.png" alt="">
<a href="https://github.com/masiv1001" target="_blank">masiv1001</a>
</div>
<div class="social-media instagram">
<img src="../../img/icons/instagram.png" alt="">
<a href="https://instagram.com/sietezip/" target="_blank">sietezip</a>
</div>
<div class="social-media pixelfed">
<img src="../../img/icons/pixelfed.png" alt="">
<a href="https://pixelfed.social/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media twitter">
<img src="../../img/icons/twitter.png" alt="">
<a href="https://twitter.com/_visam/" target="_blank">_visam</a>
</div>
<div class="social-media reddit">
<img src="../../img/icons/reddit.png" alt="">
<a href="https://www.reddit.com/user/masiv_o/" target="_blank">masiv_o</a>
</div>
<div class="social-media steam">
<img src="../../img/icons/steam.png" alt="">
<a href="https://steamcommunity.com/id/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media osu">
<img src="../../img/icons/osu.png" alt="">
<a href="https://osu.ppy.sh/users/19273464/" target="_blank">masiv_</a>
</div>
<div class="social-media mail">
<img src="../../img/icons/mail.png" alt="">
<a href="mailto:masiv_@ethernal.win" target="_blank">masiv_ @ethernal.win</a>
</div>
</div>
<div class="lang-picker panel">
<b><a href="../articles/diy-calculator_es.html">Español</a></b>
</div>
</div>
<div class="wrapper">
<div class="primary">
<div>
<div class="calc panel">
<h1>Calculadora</h1>
<div class="viewing panel">
<span id="output"></span>
</div>
<div class="buttons">
<button onclick="q_manage('add',1)">1</button>
<button onclick="q_manage('add',2)">2</button>
<button onclick="q_manage('add',3)">3</button>
<button onclick="q_manage('add','+')">+</button>
<button onclick="q_manage('add',4)">4</button>
<button onclick="q_manage('add',5)">5</button>
<button onclick="q_manage('add',6)">6</button>
<button onclick="q_manage('add','-')">-</button>
<button onclick="q_manage('add',7)">7</button>
<button onclick="q_manage('add',8)">8</button>
<button onclick="q_manage('add',9)">9</button>
<button onclick="q_manage('add','*')">*</button>
<button onclick="">(</button>
<button onclick="q_manage('add',0)">0</button>
<button onclick="">)</button>
<button onclick="q_manage('add','/')">/</button>
<button onclick="q_manage('remove')">&lt;</button>
<button onclick="q_manage('add','^')">^</button>
<button onclick="q_execute('add','=')" id="equal">=</button>
</div>
</div>
<div class="info panel">
<h1>Sobre este projecto</h1>
<p>
Hace tiempo que no programaba en Javascript, y quería
nuevamente agarrarle la mano, por lo que decidí hacer esta
calculadora sin hacer uso de absolutamente nada más que
w3 school y algunas búsquedas sobre javascript, nada de
preguntar mis dudas a ninguna IA (aunque sea más lento).
</p>
<p>
Así que me puse manos a la obra re-aprendiendo algunas cosas,
he de decir que fue un ejercicio divertido, y aunque el
resultado carece de algunas características (cómo el uso
de paréntesis), sigue el orden de las operaciones, y eso
es bastante.
</p>
<p>
En un futuro si la hiciese nuevamente, podría implementar
algoritmos más eficientes, puesto que realmente lo hice de
la manera que se me fue ocurriendo, y realmente debe ser muy
ineficiente, si quisiese eficiencia tendría mil maneras y
librerías, pero el objetivo de este ejercicio es aprender.
</p>
<p>
Yendo un poco más a lo técnico, mi idea principal fue almacenar
cada caracter escrito en un array, y luego procesarlo de la
siguiente manera:
<span class="li">Unir los números, de [1,1,'+',2,3] a [11,'+',23].</span>
<span class="li">Buscar dónde están los separa términos, e ir creando arrays
multidimensionales, cada nivel tiene un tipo de operación (on orden).
</span>
<span class="li">Deshacer ese array multidimensional, e ir procesando
todas las operaciones.
</span>
Dicho así parece sencillo, pero esutve un día y medio programando y lidiando
con cosas que, o no sabía, o no recordaba. (He de decir que trabajar con tanta iteración
en los arrays multidimensionales es un trabajo no trivial).
</p>
<p>
Actualización 23/01/2026 <br>
Le mostré la calcualdora a unx amigx, y me hizo darme
cuenta de que no había implementado el botón del 0,
la verdad no tengo ni idea cómo no me di cuenta XD.
</p>
</div>
</div>
</div>
</div>
<div class="navbar bot blank"></div>
<div class="navbar bot">
<div class="links">
<div class="social-media github">
<img src="../../img/icons/github.png" alt="">
<a href="https://github.com/masiv1001" target="_blank">masiv1001</a>
</div>
<div class="social-media instagram">
<img src="../../img/icons/instagram.png" alt="">
<a href="https://instagram.com/sietezip/" target="_blank">sietezip</a>
</div>
<div class="social-media pixelfed">
<img src="../../img/icons/pixelfed.png" alt="">
<a href="https://pixelfed.social/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media twitter">
<img src="../../img/icons/twitter.png" alt="">
<a href="https://twitter.com/_visam/" target="_blank">_visam</a>
</div>
<div class="social-media reddit">
<img src="../../img/icons/reddit.png" alt="">
<a href="https://www.reddit.com/user/masiv_o/" target="_blank">masiv_o</a>
</div>
<div class="social-media steam">
<img src="../../img/icons/steam.png" alt="">
<a href="https://steamcommunity.com/id/masiv1001/" target="_blank">masiv1001</a>
</div>
<div class="social-media osu">
<img src="../../img/icons/osu.png" alt="">
<a href="https://osu.ppy.sh/users/19273464/" target="_blank">masiv_</a>
</div>
<div class="social-media mail last">
<img src="../../img/icons/mail.png" alt="">
<a href="mailto:masiv_@ethernal.win" target="_blank">masiv_ @ethernal.win</a>
</div>
</div>
</div>
</body>
</html>

315
robots.txt Normal file
View File

@@ -0,0 +1,315 @@
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