personal-site/index.html
2024-10-22 14:59:53 +01:00

261 lines
7.3 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<link rel="preload" href="/icons.webp" as="image" type="image/webp"/>
<style>
@font-face {
font-family: 'jbm';
src: url("/jetbrainsmono-subset.woff2") format("woff2");
font-weight: normal;
font-style: normal;
font-display: block;
}
:root { font-family: 'jbm' }
body {
background-color: #181818;
color: white;
height: 100vh;
margin: 0;
}
h1, h2, h3, h4, h5 {
margin-top: 0;
}
.center-container {
display: flex;
width: 75%;
height: 100%;
padding-left: 12.5%;
padding-right: 12.5%;
}
.center-anchor {
margin: auto;
}
.text-start {
text-align: left;
}
.text-center {
text-align: center;
}
a {
color: white;
}
#buttonContainer {
user-select: none;
}
.rounded-button {
display: inline-block;
font-size: 18pt;
width: 2.5rem;
height: 2.5rem;
line-height: 2.5rem;
border-radius: 50%;
border: 2px solid white;
text-align: center;
vertical-align: middle;
filter: invert(0);
margin-left: 0.5rem;
cursor: pointer;
background-image: url("/icons.webp");
background-size: auto 44px;
background-repeat: no-repeat;
background-position: -2px -2px;
transition: background-color .1s linear, filter .1s linear, border .1s linear;
}
.rounded-button[data-id="discord"] {
background-position: -2px -2px;
}
.rounded-button[data-id="bsky"] {
background-position: -46px -2px;
}
.rounded-button[data-id="forgejo"] {
background-position: -90px -2px;
}
.rounded-button:first-child {
margin-left: 0!important;
}
.rounded-button:hover {
background-color: black;
border: 2px solid black;
filter: invert(1);
}
.top-left {
position: fixed;
left: 0px;
top: 0px;
padding: 2rem;
color: #535353;
}
.top-right {
position: fixed;
right: 0px;
top: 0px;
padding: 2rem;
color: #535353;
}
.nav * {
padding-left: .5rem;
}
.nav .link {
color: rgb(125, 125, 125);
cursor: pointer;
text-decoration: underline;
}
.click {
cursor: pointer;
text-decoration: underline;
}
#btnDesc {
transition: opacity .25s linear;
opacity: 1;
color: white;
padding-top: 1rem;
user-select: none;
}
.fade-out {
opacity: 0!important;
user-select: none;
}
.fade-in {
opacity: 1!important;
user-select: all!important;
}
</style>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>home | holly.lgbt</title>
</head>
<body>
<div class="top-left">
<b>last updated:</b> 2024/10/21 <font style="font-size:10pt">3:16am (utc+1 bst)</font>
</div>
<div class="top-right nav">
<a href="#home" onclick="event.preventDefault();return false;" data-id="#home-panel">home</a>
<a href="#about" onclick="event.preventDefault();return false;" data-id="#about_me-panel" class="link">about me</a>
</div>
<div id="home-panel" class="panel center-container">
<div class="center-anchor">
<div class="text-center w-100">
<h1>hey there, i'm holly</h1>
<h4>here's some places I do things</h4>
<div id="buttonContainer">
<a class="rounded-button" data-id="discord" href="#discord" onclick="event.preventDefault();alert('because discord doesn\'t have functionality for invite to chat (at least I think it doesn\'t) my username is: tgpholly');return false;"></a>
<a class="rounded-button" data-id="bsky" href="https://bsky.app/profile/holly.lgbt" target="_blank"></a>
<a class="rounded-button" data-id="forgejo" href="https://git.eusv.net/tgpholly" target="_blank"></a>
</div>
<h3 id="btnDesc">&nbsp;</h3>
</div>
</div>
</div>
<div id="about_me-panel" class="panel center-container" style="display:none">
<div class="center-anchor">
<div class="text-center w-100">
<h1>about me</h1>
<div class="text-start">
<p>hey there, i'm holly. my pronouns are <b>she/her</b> :3</p>
<p>i'm a silly girl that works mostly in ts/js doing wacky stuff with browsers like porting entire pc games to raw js by hand or do <a target="_blank" href="https://multiprobe.eusv.net">cursed userscript stuff to allow people to browse a site together</a></p>
<p>i can write code compitently in:</p>
<ul>
<li>typescript</li>
<li>javascript</li>
<li>c#</li>
<li>lua</li>
<li>gdscript</li>
<li>java</li>
</ul>
<p>and a lot more if needs be</p>
<p>i'm also making a game in <a href="https://godotengine.org/">godot</a>, it's a pretty cool engine!</p>
<p>these are (some) my current projects:</p>
<ul>
<li><a target="_blank" href="https://git.eusv.net/tgpholly/mc-beta-server">mc-beta-server</a> | an implementation of minecraft beta 1.7.3's server in typescript</li>
<li><a target="_blank" href="https://git.eusv.net/tgpholly/t00-multiuser">MultiProbe</a> &nbsp;&nbsp;&nbsp;&nbsp;| a userscript for exploring <a target="_blank" href="https://angusnicneven.com">angusnicneven.com</a> together</li>
<li><a target="_blank" href="https://git.eusv.net/tgpholly/Binato">Binato</a> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| an implementation of <a target="_blank" href="https://osu.ppy.sh">osu!</a>'s bancho server</li>
</ul>
<br>
<p>
if you'd like to contact me i can be reached on <a target="_blank" href="https://bsky.app/profile/holly.lgbt">bluesky</a> or <a href="#discord" onclick="event.preventDefault();document.querySelector(`.rounded-button[data-id='discord']`).click();return false;">discord</a>
<br>
or you can send and email to <b><a id="email"></a></b>
</p>
</div>
</div>
</div>
</div>
<script>
const email = document.querySelector("#email");
const decodedEmail = atob("aG9sbHlAZXVzdi5uZXQ");
email.href = `mailto:${decodedEmail}`;
email.innerText = decodedEmail;
const panels = document.querySelectorAll(".panel");
const navLinks = document.querySelectorAll(".nav a");
navLinks.forEach(navItem => {
navItem.addEventListener("click", _ => {
panels.forEach(panel => {
panel.style.display = "none";
});
navLinks.forEach(navLink => {
navLink.classList.add("link");
});
document.querySelector(navItem.dataset.id).style.display = "";
navItem.classList.remove("link");
document.title = `${navItem.dataset.id.split("-")[0].slice(1).replace("_", " ")} | holly.lgbt`;
});
});
const btnDesc = document.querySelector("#btnDesc");
function hoverEvent(id) {
switch (id) {
case "discord": btnDesc.innerHTML = "discord"; break;
case "bsky": btnDesc.innerHTML = "bluesky"; break;
case "forgejo": btnDesc.innerHTML = 'eus git'; break;
}
btnDesc.classList.remove("fade-out");
btnDesc.classList.add("fade-in");
};
const hoverLeaveEvent = (e) => {
btnDesc.classList.remove("fade-in");
btnDesc.classList.add("fade-out");
};
const buttons = document.querySelectorAll(".rounded-button").forEach(button => {
button.onmouseenter = () => hoverEvent(button.dataset.id);
button.onmouseleave = hoverLeaveEvent;
});
</script>
</body>
</html>