initial commit lol

This commit is contained in:
martyTF 2025-11-24 16:39:58 +01:00
commit 3037d7b4b1
6 changed files with 815 additions and 0 deletions

65
animations.css Normal file
View file

@ -0,0 +1,65 @@
@keyframes appearheader {
0% {
transform: translateY(-100vw);
}
50% {
transform: translateY(-100vw);
}
100% {
transform: translateY(0);
}
}
@keyframes appearlinksrow {
0% {
transform: translateX(-100vw);
}
50% {
transform: translateX(0);
}
100% {
transform: translateX(0);
}
}
@keyframes appearcontent {
0% {
transform: translateX(100vw);
}
50% {
transform: translateX(0);
}
100% {
transform: translateX(0);
}
}
@keyframes disappearcontent {
0% {
transform: translateX(0);
}
50% {
transform: translateX(-100vw);
}
100% {
transform: translateX(-100vw);
}
}
@keyframes appearfooter {
0% {
transform: translate(-100vw, 100vw);
}
50% {
transform: translate(0, 100vw);
}
100% {
transform: translate(0, 0);
}
}

17
base.css Normal file
View file

@ -0,0 +1,17 @@
@font-face {
font-family: "Mono Code";
src: url("src/FiraCodeNerdFont-Regular.ttf");
}
* {
font-family: "Mono Code";
color: var(--mtf-font-color);
}
body {
background-color: var(--mtf-background-color);
/* background-image: var(--mtf-background-image); */
background-repeat: no-repeat;
background-attachment: fixed;
background-size: cover;
}

246
boxes.css Normal file
View file

@ -0,0 +1,246 @@
.box {
color: var(--mtf-font-color);
text-align: center;
background-color: var(--mtf-background-2-color);
border-style: solid;
border-color: var(--mtf-accent-color);
border-radius: 5px;
padding: 20px;
margin: 20px;
flex-basis: 100%;
transition: background-color 0.5s ease, color 0.5s ease;
height: inherit;
}
.box a {
color: var(--mtf-font-color);
text-decoration: none;
display: inline-flex;
padding: 0.5% 0.5%;
border: solid;
border-radius: 10px;
border-color: #ffffff00;
transition: background-color 0.5s ease, color 0.5s ease;
}
.links a {
text-decoration: underline var(--mtf-accent-color) 2px;
}
.box a:visited {
color: var(--mtf-font-color);
}
.box a:hover {
background-color: var(--mtf-accent-color);
color: var(--mtf-background-color);
}
#header {
position: relative;
display: flex;
padding-bottom: 0px;
}
#linksrow {
position: relative;
padding-bottom: 0px;
}
.footnote {
position: relative;
margin-top: 1%;
padding-bottom: 0px;
}
#mainmain {
position: relative;
}
#main {
width: 100%;
position: relative;
}
.box-shower {
width: 100%;
height: 0px;
position: relative;
overflow: hidden;
transition: height 0.5s ease;
}
#lightdark {
align-self: right;
font-size: 40px;
border-color: #ffffff00;
}
#lightdark a:hover {
background-color: #ffffff00;
color: var(--mtf-font-color);
}
#darkmode
{
display:none;
}
#lightmode {
display:inline;
}
#service_icons {
margin-left: 25%;
width: 50%;
position: relative;
align-self: right;
margin-right: 25%;
}
a.service_icon {
color: var(--mtf-font-color);
font-size: 30px;
min-width: 30px;
min-height: 30px;
text-align: center;
text-justify: auto;
background-color: var(--mtf-background-2-color);
border-style: solid;
border-color: var(--mtf-accent-color);
border-radius: 5px;
padding: 20px;
margin: 20px;
transition: background-color 0.5s ease, color 0.5s ease;
}
#bookmarks {
left: 0;
right: 0;
top: -200px;
margin-left: auto;
margin-right: auto;
width: 60%;
height: calc(auto + 20%);
position: absolute;
display: none;
opacity: 0;
transition: opacity 1s ease;
z-index: 10000;
}
bookmarks_close {
left: 20px;
}
@media only screen and (max-width: 860px) {
.box-wrapper {
display: block;
}
.headersplit {
display: block;
}
#contact_logobox {
max-width: none;
}
.contact_logo {
min-width: 200px;
}
.dotfiles_image {
min-width: 200px;
}
a.bmks {
display: none;
}
#bmks_mtf,
#bmks_scl {
display: none;
}
#hdrbx2 {
border: none;
background: none;
}
#hdrbx1 {
display: none;
}
}
@media only screen and (min-width: 861px) {
body {
width: 89vw;
padding: 5vw;
}
.box-wrapper {
display: flex;
justify-content: space-evenly;
}
.headersplit {
display: none;
}
#contact_logobox {
max-width: 35%;
}
.contact_logo {
max-height: 100%;
min-width: 200px;
}
.dotfiles_image {
max-height: 100%;
max-width: 0.4vw;
min-width: 200px;
}
a.bmks {
display: block;
}
#hdrbx1,
#hdrbx2 {
border: none;
background: none;
}
}
.search-box input {
outline: none;
width: calc(100% - 150px);
height: 30px;
}
.search-box button {
height: 30px;
}
.contact_logo,
.dotfiles_image {
max-width: 100%;
background-color: var(--mtf-background-2-color);
border-style: solid;
border-color: var(--mtf-accent-color);
border-radius: 5px;
margin: 10px 0px 0px 0px;
}

269
index.html Normal file
View file

@ -0,0 +1,269 @@
<!DOCTYPE html>
<html lang="english">
<!-- Head -->
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta charset="UTF-8">
<title>Marty.TF</title>
<link rel="icon" href="src/marty_narklos.png">
<link rel="stylesheet" href="style.css">
<script src="script.js"></script>
</head>
<!-- Body -->
<body id="body" onload="startup()">
<!-- Header Bar -->
<div id="header" class="box">
<div class="box" id="hdrbx1">
</div>
<div class="box links" id="hdrbx2">
<h1>
<a class="link" href="/">Marty.TF</a>
</h1>
</div>
<div class="box" id="lightdark" style="background-color: #ffffff00">
<a class="link" href="#" id="lightmode" onclick="button_lightmode()">&nbsp;</a>
<a class="link" href="#" id="darkmode" onclick="button_darkmode()">&nbsp;</a>
</div>
</div>
<!-- Links Row -->
<div id="linksrow" class="box links">
<a class="link" href="javascript:void(0)" id="searchbutton" onclick="shiftcontent('search')">search</a>
<a class="link" href="javascript:void(0)" id="servicesbutton" onclick="shiftcontent('services')">services</a>
<a class="link" href="javascript:void(0)" id="aboutbutton" onclick="shiftcontent('about')">about</a>
<br class="headersplit">
<a class="link" href="javascript:void(0)" id="dotfilesbutton" onclick="shiftcontent('dotfiles')">dotfiles</a>
<!-- <a class="link" href="#" onclick="shiftcontent('server')">Server Setup</a> -->
<a class="link" href="javascript:void(0)" id="projectsbutton" onclick="shiftcontent('projects')">projects</a>
<a class="link" href="javascript:void(0)" id="contactbutton" onclick="shiftcontent('contact')">contact</a>
</div>
<!-- Content -->
<div id="mainmain">
<div id="main">
<div class="box-shower" id="search">
<div class="box-wrapper">
<div class="box">
<form id="search-box" action="https://search.marty.tf/search" method="get" class="search-box">
<input id="searchbox" class="box" type="text" name="q" placeholder="search the web" autocomplete="off">
<button form="search-box" type="submit" style="display:none">Go</button>
</form>
<p class="links">powered by <a class="link" href="https://github.com/searxng/searxng">SearXNG</a>, a self-hosted <a class="link" href="https://en.wikipedia.org/wiki/Metasearch_engine"> metasearch engine </a></p>
<!--
<div class="box-wrapper nolinks" id="service_icons">
<a class="service_icon bmks" href="https://watch.marty.tf"></a>
<a class="service_icon bmks" href="https://libreddit.marty.tf"></a>
<a class="service_icon bmks" href="https://cloud.marty.tf"></a>
<a class="service_icon bmks" href="https://elk.zone"></a>
<a class="service_icon" href="javascript:void(0)" onclick="bookmarks_open()"></a>
</div>
-->
</div>
</div>
</div>
<!--
<div class="box" id="bookmarks">
<div class="box links">
<h2> <a id="bookmarks_close" href="javascript:void(0)" onclick="bookmarks_close()"> close </a> </h2>
</div>
<div class="box-wrapper">
<div class="box links">
<h3> <a href="javascript:void(0)" onclick="bmks_exp('bmks_mtf')"> Marty.TF </a> </h3>
<div class="box-bmks" id="bmks_mtf">
hello
</div>
</div>
<div class="box links">
<h3> <a href="javasript:void(0)" onclick="bmks_exp('bmks_scl')"> Socials </a> </h3>
<div class="box-bmks" id="bmks_scl">
bye
</div>
</div>
</div>
</div>
-->
<div class="box-shower" id="services">
<div class="box-wrapper">
<div class="box links">
<h3>social media frontends</h3><br>
<a class="link" href="https://watch.marty.tf">invidious (youtube)</a> <br>
<a class="link" href="https://libreddit.marty.tf">redlib (reddit)</a> <br>
<a class="link" href="https://ig.marty.tf">proxigram (instagram)</a> <br>
<a class="link" href="https://sl.marty.tf">shoelace (threads)</a> <br>
<a class="link" href="https://proxitok.marty.tf">proxitok (tiktok)</a>
</div>
<div class="box links">
<h3>selfhosted services</h3><br>
<a class="link" href="https://share.marty.tf">fireshare (video clip sharing)</a> <br>
<a class="link" href="https://fedi.marty.tf">gotosocial (fediverse platform)</a> <br>
<a class="link" href="https://chat.marty.tf">matrix synapse (chat platform)</a>
</div>
</div>
</div>
<div class="box-shower" id="about">
<div class="box-wrapper">
<div class="box">
personal website and hosting platform of multiple instance based web services <br>
every line of code has been written by a human. no large machine learning models have been used to steal
copy-righted and unlicensed code
<br> <br>
as I am not a webdev, this will be very barebones, and will be an aesthetic disaster <br> <br>
enjoy
</div>
<div class="box links" style="text-align: left">
licenses:
<ul>
<li>font: <a href="https://github.com/Trzcin/Fira-Code-Nerd"> firacode nerd font </a>
</li>
</ul>
</div>
</div>
</div>
<div class="box-shower" id="dotfiles">
<div class="box-wrapper">
<div class="box links">
<h4> my dotfiles: </h4>
distro: arch linux <br>
window manager: hyprland <br>
terminal: kitty <br>
colour theme: catppuccin mocha (green) <br>
bar: waybar <br>
notifications: mako <br>
browser: firefox <br>
editor: emacs <br>
link to dotfiles: <a class="link" href="https://github.com/martyTF/dotfiles">github repo</a>
</div>
<div class="box">
<img class="dotfiles_image" src="src/dotfiles.png" alt="A screenshot of a monitor with 3 terminals, running asciiquarium, cava and nerdfetch, to display my dotfiles">
</div>
</div>
</div>
<div class="box-shower" id="server">
<div class="box-wrapper">
<div class="box links">
<h1>WIP</h1>
</div>
</div>
</div>
<div class="box-shower" id="projects">
<div class="box-wrapper">
<div class="box" id="projectbox">
<h2>School Projects</h2>
<div class="projects links">
<a class="link" href="javascript:void(0)" id="cybersec_glb11cbutton" onclick="shiftcontent('cybersec_glb11c')">Präsentation Cybersecurity</a>
<br>
<a class="link" href="/projects/pflanzenbuch/" style="display: none;">Pflanzenbuch</a>
</div>
</div>
</div>
</div>
<div class="box-shower" id="cybersec_glb11c">
<div class="box-wrapper">
<div class="box">
<h2>Links</h2>
</div>
</div>
<div class="box-wrapper">
<div class="box-wrapper cybersec">
<div class="box">
<h3>Privacy Tools</h3>
<a href="https://www.amiunique.org/fp">Ist dein Browser-Fingerprint einzigartig? Wenn ja, kann dich jede
Website identifizieren</a><br>
<a href="https://haveibeenpwned.com/">Email-Adressen nach Passwort-Leaks checken</a><br>
<a href="https://tosdr.org/">Zusammenfassungen vom "Kleingedruchten"</a><br>
<a href="https://vault.bitwarden.com/#/register">Bester Passwort-Manager</a><br>
</div>
<div class="box">
<h3>Social Media Frontends</h3>
<a href="https://nitter.net/">Nitter (Twitter)</a><br>
<a href="https://invidious.kavin.rocks">Invidious (YouTube)</a><br>
<a href="https://libreddit.marty.tf/">libReddit (Reddit)</a><br>
<a href="https://github.com/libredirect/libredirect#readme">App, welche automatisch zu diesen Diensten
weiterleitet</a><br>
<a
href="https://github.com/digitalblossom/alternative-frontends/blob/main/README.md#alternative-frontends">Volle
Liste aller Social Media Frontends</a><br>
</div>
<div class="box">
<h3>Fediverse</h3>
<a href="https://joinmastodon.org/">Homepage der größten Fediverse-Platform</a><br>
<a href="https://mastodon.social">Größter Mastodon Server; guter Startpunkt, um das Fediverse
kennenzulernen</a><br>
<a href="https://fedi.tips/">Benutzerfreundlicher Guide für das Fediverse</a><br>
</div>
</div>
</div>
</div>
<div class="box-shower" id="contact">
<div class="box-wrapper">
<div class="box" id="contact_logobox">
<img class="contact_logo" src="src/marty_narklos.png" alt="a drawing of me, by narklos">
<br> <br>
headshot drawn by <a class="link" href="https://linktr.ee/Narklos">narklos</a>
</div>
<div class="box links" id="contactbox">
<div class="box-wrapper">
<div class="box">
discord
</div>
<div class="box">
<a href="https://discordapp.com/channels/@me/166778675390447616">martytf</a>
</div>
</div>
<div class="box-wrapper">
<div class="box">
mail
</div>
<div class="box">
<a href="mailto:marty@marty.tf"> marty@marty.tf </a>
</div>
</div>
<div class="box-wrapper">
<div class="box">
matrix
</div>
<div class="box">
<a href="https://matrix.to/#/@marty:chat.marty.tf"> @marty:chat.marty.tf </a>
</div>
</div>
<div class="box-wrapper">
<div class="box">
fediverse
</div>
<div class="box">
<a rel="me" href="https://fedi.marty.tf/@marty"> @marty@fedi.marty.tf </a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="box footnote links" id="footer">
© 2023-2024 Marty.TF
|
<a class="link" href="https://github.com/martyTF/marty.tf-new">github repo</a>
|
<a class="link" href="https://martytf.github.io/marty.tf-new/">last stable version</a>
</div>
</body>
</html>

215
script.js Normal file
View file

@ -0,0 +1,215 @@
function setCookie(cname, cvalue, exdays) {
const d = new Date();
d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
let expires = "expires=" + d.toUTCString();
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
};
function getCookie(cname) {
let name = cname + "=";
let decodedCookie = decodeURIComponent(document.cookie);
let ca = decodedCookie.split(';');
for (let i = 0; i < ca.length; i++) {
let c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
};
function show(content) {
var cont = document.getElementById(content);
cont.style.transition = "height 1s ease";
cont.style.height = "auto";
var contheight = cont.offsetHeight;
cont.style.height = "0px";
setTimeout(function () {
cont.style.height = contheight + "px";
cont.style.overflow = "none";
}, 1);
};
function showcontent(content) {
show(content);
var contbutton = document.getElementById(content + "button");
contbutton.style.background = "var(--mtf-accent-color)";
contbutton.style.color = "var(--mtf-background-color)";
};
function hidecontent(content) {
var cont = document.getElementById(content);
var contbutton = document.getElementById(content + "button");
cont.style.transition = "height 1s ease";
setTimeout(function () {
cont.style.height = "0px";
cont.style.overflow = "none";
}, 1);
contbutton.style.background = "var(--mtf-base-color)";
contbutton.style.color = "var(--mtf-font-color)";
};
function startup() {
// var srch = document.getElementById("search");
// srch.style.height = "auto";
// srch.style.overflow = "auto";
// var srchh = srch.offsetHeight;
// var srchh = srchh + "px";
// srch.style.height = srchh;
setTimeout(function () {
document.getElementById('searchbox').focus();
}, 200);
if (getCookie("contentlist") == "") {
setCookie("contentlist", "search", 10000);
}
var darklight = getCookie("darklightc");
if (darklight == 0) {
button_lightmode();
}
else if (darklight == 1) {
button_darkmode();
}
else {
return "";
};
var k = getCookie("contentlist").split(' ').length;
for (var l = 0; l < k; l++)
{
showcontent(getCookie("contentlist").split(' ')[l]);
};
show("header");
show("linksrow");
show("footer");
};
function shiftcontent(content) {
var contentlist = getCookie("contentlist");
let containcontent = contentlist.includes(content);
if (containcontent == false) {
newcontentlist = getCookie("contentlist") + " " + content;
setCookie("contentlist", newcontentlist, 10000);
showcontent(content);
var cont = document.getElementById(content);
var position = cont.getBoundingClientRect().top;
window.scrollTo({
top: position,
left: 0,
behavior: "smooth",
});
setTimeout(function () {
window.scrollTo({
top: position,
left: 0,
behavior: "smooth",
});
}, 300);
}
else if (containcontent == true) {
newcontentlist = getCookie("contentlist").replace(content,'');
setCookie("contentlist", newcontentlist, 10000);
hidecontent(content);
};
};
//function shiftcontent(content) {
// var x = document.getElementsByClassName("box-shower");
// var cont = document.getElementById(content);
// cont.style.height = "auto";
// var contheight = cont.offsetHeight;
// cont.style.height = "0px";
// for (var i = 0; i < x.length; i++)
// {
// x[i].style.height = "0px";
// x[i].style.overflow = "hidden";
// };
// setTimeout(function() {
// contheight = contheight + "px";
// cont.style.height = contheight;
// cont.style.overflow = "auto";
// }, 500);
// if (content == "search") {
// setTimeout(function ()
// {
// document.getElementById('searchbox').focus();
// }, 700);
// }
// else {
// return "";
// }
//};
function toggleld(ld) {
let clrs = document.body.style;
if (ld == light) {
document.getElementById("darkmode").style.display = "inline";
document.getElementById("lightmode").style.display = "none";
clrs.setProperty('--mtf-background-color', "#eff1f5");
clrs.setProperty('--mtf-font-color', "#4c4f69");
clrs.setProperty('--mtf-background-2-color', "#e6e9efdf");
clrs.setProperty('--mtf-accent-color', "#dc8a78");
clrs.setProperty('--mtf-background-image', "url('src/Clearnight.jpg')");
setCookie("darklightc", 0, 30);
}
else {
document.getElementById("darkmode").style.display = "none";
document.getElementById("lightmode").style.display = "inline";
clrs.setProperty('--mtf-background-color', "#1e1e2e");
clrs.setProperty('--mtf-font-color', "#cdd6f4");
clrs.setProperty('--mtf-background-2-color', "#181825df");
clrs.setProperty('--mtf-accent-color', "#f5e0dc");
clrs.setProperty('--mtf-background-image', "url('src/Clearday.jpg')");
setCookie("darklightc", 1, 30);
}
};
function button_lightmode() {
document.getElementById("darkmode").style.display = "inline";
document.getElementById("lightmode").style.display = "none";
document.body.style.setProperty('--mtf-background-color', "#eff1f5");
document.body.style.setProperty('--mtf-font-color', "#4c4f69");
document.body.style.setProperty('--mtf-background-2-color', "#e6e9efdf");
document.body.style.setProperty('--mtf-accent-color', "#dc8a78");
document.body.style.setProperty('--mtf-background-image', "url('src/Clearnight.jpg')");
setCookie("darklightc", 0, 30);
};
function button_darkmode() {
document.getElementById("darkmode").style.display = "none";
document.getElementById("lightmode").style.display = "inline";
document.body.style.setProperty('--mtf-background-color', "#1e1e2e");
document.body.style.setProperty('--mtf-font-color', "#cdd6f4");
document.body.style.setProperty('--mtf-background-2-color', "#181825df");
document.body.style.setProperty('--mtf-accent-color', "#f5e0dc");
document.body.style.setProperty('--mtf-background-image', "url('src/Clearday.jpg')");
setCookie("darklightc", 1, 30);
};
function bookmarks_open() {
let bmks = document.getElementById("bookmarks");
bmks.style.display = "block";
bmks.style.opacity = "1"
};
function bookmarks_close() {
let bmks = document.getElementById("bookmarks");
bmks.style.display = "none";
bmks.style.opacity = "0";
};
function bmks_exp(bmrk) {
var bmk = document.getElementById(bmrk);
var disp = window.getComputedStyle(bmk).display;
if (disp == "none") {
bmk.style.display = "block";
}
else {
bmk.style.display = "none";
}
}

3
style.css Normal file
View file

@ -0,0 +1,3 @@
@import "base.css";
@import "boxes.css";
@import "animations.css";