Compare commits

..

No commits in common. "rewrite" and "main" have entirely different histories.

73 changed files with 939 additions and 24593 deletions

23
.gitignore vendored
View file

@ -1,23 +0,0 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# production
/build
# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*

View file

@ -1,70 +0,0 @@
# Getting Started with Create React App
This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
## Available Scripts
In the project directory, you can run:
### `npm start`
Runs the app in the development mode.\
Open [http://localhost:3000](http://localhost:3000) to view it in your browser.
The page will reload when you make changes.\
You may also see any lint errors in the console.
### `npm test`
Launches the test runner in the interactive watch mode.\
See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
### `npm run build`
Builds the app for production to the `build` folder.\
It correctly bundles React in production mode and optimizes the build for the best performance.
The build is minified and the filenames include the hashes.\
Your app is ready to be deployed!
See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
### `npm run eject`
**Note: this is a one-way operation. Once you `eject`, you can't go back!**
If you aren't satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you're on your own.
You don't have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't customize it when you are ready for it.
## Learn More
You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
To learn React, check out the [React documentation](https://reactjs.org/).
### Code Splitting
This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting)
### Analyzing the Bundle Size
This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size)
### Making a Progressive Web App
This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app)
### Advanced Configuration
This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration)
### Deployment
This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment)
### `npm run build` fails to minify
This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify)

View file

@ -3,5 +3,6 @@
{
"path": "."
}
]
],
"settings": {}
}

BIN
bun.lockb

Binary file not shown.

52
css/about.css Normal file
View file

@ -0,0 +1,52 @@
@import url('https://fonts.googleapis.com/css2?family=Sarabun&display=swap');
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Sarabun', sans-serif;
font-weight: 400;
display: flex;
flex-direction: column;
align-items: center;
background-color: black;
color: lightpink;
padding-top: 6%;
padding-bottom: 3.5%;
}
/* Centered Content */
.headercontent {
text-align: center;
align-self: flex;
flex-grow: 1;
overflow-y: auto;
height: 100%;
width: 100%
}
.headercontent h1 {
padding-top: 10px;
font-size: 48px;
}
.headercontent h4 {
margin-bottom: 60px;
}
.headercontent p {
margin-bottom: 30px;
}
.TTClogo {
margin-top: 20px;
width: 250px;
margin-bottom: 10px;
}
.ShieldsDiscord {
margin-bottom: 20px;
}

20
css/rants.css Normal file
View file

@ -0,0 +1,20 @@
@import url('https://fonts.googleapis.com/css2?family=Sarabun&display=swap');
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Sarabun', sans-serif;
font-weight: 400;
display: flex;
flex-direction: column;
align-items: center;
background-color: black;
color: lightpink;
padding-top: 6%;
padding-bottom: 3.5%;
}

29
css/style.css Normal file
View file

@ -0,0 +1,29 @@
@import url('https://fonts.googleapis.com/css2?family=Sarabun&display=swap');
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Sarabun', sans-serif;
font-weight: 400;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
background-color: black;
color: lightpink;
overflow: hidden;
margin: 0;
}
/* Centered Content */
.centered-content {
text-align: center;
}
#blahaj {
opacity: 0;
}

249
css/styleHF.css Normal file
View file

@ -0,0 +1,249 @@
/* Header */
:root {
--background-color-dark: #111111;
--background-color-light: rgb(255, 224, 229);
--article-bg-dark: #161616;
--article-bg-light:#d3adb3;
--color-dark: lightpink;
--color-light: #111111;
--color-button-dark: rgb(160, 61, 76);
--color-buton-light: #333;
--color-button-hover-light: rgb(160, 61, 76);
--color-button-hover-dark: #333;
--color-bg-body-dark: black;
--color-bg-body-light: lightpink;
--color-body-light: lightpink;
--color-body-dark: black;
}
header {
background-color: var(--background-color-dark);
color: var(--color-light);
padding: 5px;
text-align: left;
position: fixed;
width: 100%;
top: 0;
left: 0;
}
/* Footer */
footer {
background-color: #111111;
color: lightpink;
padding: 5px;
text-align: center;
position: fixed;
width: 100%;
bottom: 0;
left: 0;
}
/* Add the following styles for the popup */
.image-popup {
position: relative;
display: inline-block;
max-width: 300px;
width: min-content;
}
.popup-content {
display: none;
position: absolute;
top: 100%;
left: 0;
width: min-content;
background-color: #1d1d1d;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
z-index: 1;
border-radius: 5px;
}
.image-popup:hover .popup-content {
display: flex;
}
.popup-content img {
width: 40px;
height: auto;
margin-right: 10px;
box-sizing: border-box;
transition: transform 0.1s ease-in-out;
}
.popup-content img:last-child {
margin-right: 0;
}
/* Add the following style to remove margin on the last child */
.popup-content > :last-child {
margin-right: 0;
}
.popup-content img:hover {
transform: scale(1.1); /* Add a slight scale effect on hover */
}
/* Navigation in Header*/
nav.top-nav ul {
list-style-type: none;
margin: 0;
padding: 0;
display: flex;
align-items: center; /* Align items vertically in the center */
}
nav.top-nav a {
text-decoration: none;
color: inherit;
padding: 10px 15px; /* Adjust padding for better spacing */
transition: color 0.3s; /* Add a smooth transition for color change */
}
nav.top-nav li {
margin: 0 15px;
border-right: 2px solid rgb(0, 0, 0); /* Add a right border to create a separator */
padding-right: 15px; /* Adjust padding for better spacing */
}
/* Style the last li to remove the border */
nav.top-nav li:last-child {
border-right: none;
}
/* Change text color on hover */
nav.top-nav a:hover {
color: rgb(255, 246, 247); /* Change to the desired hover color */
}
/* Navigation in Footer */
nav.bottom-nav ul {
list-style-type: none;
margin: 0;
padding: 0;
display: flex;
justify-content: center; /* Center the items horizontally */
align-items: center; /* Align items vertically in the center */
}
nav.bottom-nav li {
margin: 0 15px;
}
/* Navigation links in Footer */
nav.bottom-nav a {
text-decoration: none;
color: inherit;
padding: 10px 15px; /* Adjust padding for better spacing */
transition: color 0.3s; /* Add a smooth transition for color change */
}
/* Change text color on hover */
nav.bottom-nav a:hover {
color: inherit; /* Change to the desired hover color */
}
.toggle-button {
display: flex;
align-items: center;
justify-content: center;
background-color: #333;
color: inherit;
width: 40px;
height: 40px;
padding: 10px 20px;
border-color: #11111100;
border-radius: 5px;
cursor: pointer;
}
.toggle-button img {
transform: scale(.08);
}
input[type="checkbox"] {
display: none;
}
/*ARTICLES*/
#article-list {
flex-direction: column;
text-align: center;
position: fixed;
align-items: flex-start;
left: 0;
width: 20%;
height: 100vh;
background-color: var(--article-bg-dark);
color: var(--color-dark);
overflow-y: auto;
padding-top: 6%;
flex-grow: 1;
}
/* Style for the subtitles */
.article-subtitle {
bottom: 0;
left: 10%;
width: 80%;
padding: 5px;
text-align: center;
position: relative;
font-size: small;
}
/* Style for the container of the article content */
#article-container {
flex-grow: 1;
position: relative;
width: 85%; /* Adjusted width to accommodate the article list */
padding-left: 45%;
padding-right: 20%; /* Add some padding for spacing */
}
#article-container h1 {
text-align: center;
}
#article-container h3 {
text-align: left;
position: absolute;
left: 20%;
margin-top: 2%;
}
#article-container h6 {
text-align: left;
position: absolute;
left: 20%;
margin-top: 5%;
}
#article-container p {
text-align: left;
position: absolute;
left: 20%;
margin-top: 8%;
}
/* Responsive styles for smaller screens */
@media screen and (max-width: 768px) {
body {
padding-top: 10%; /* Adjust as needed */
}
#article-list {
width: 100%;
padding-top: 10%; /* Adjust as needed */
}
#article-container {
margin-left: 0;
width: 100%;
}
}

77
html/about.html Normal file
View file

@ -0,0 +1,77 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="icon" type="image/png" sizes="48x48" href="/images/bunnie48px.png">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="color-scheme" content="dark light">
<title>Zoey's Bits - About</title>
<link rel="stylesheet" href="/css/about.css" type="text/css" media="all">
</head>
<body>
<div id="header-placeholder"></div>
<div class="headercontent">
<h1 id="title">About me!</h1>
<h4 id="subtitle">booba</h4>
<p>
I like bunnies, but don't own any.
</p>
<p>
Mostly a jack of all trades, master of none.
<br>
At least it makes for conversations that don't really die down.
</p>
<p>
Big proponent of Free and Open Source Software.
<br>
Self-hosting Gitea and Nextcloud servers.
<br>
Running Arch Linux (btw) since 2019.
<br>
My first Linux distro was Ubuntu 14.04 in, well.., 2014.
<br>
<p>
Aspiring game dev, doing everything from code,
<br>
through hosting services,
and creating all the 3D models, sprites and soon also sounds.
<br>
Yet to release a single project. ヽ(゚Д゚)ノ
</p>
<p>
Used to, and still do, have a relatively big K-On! oriented Discord server, <br>
like that's anything to brag about, <br>
but it's basically been on maintenance mode for maybe 2 years now. <br>
If you'd still like to join, knock yourself out. <br>
<a href="https://discord.gg/qpsYX58">
<img class="TTClogo" src="/images/TTClatestCircleCrop.png">
<br>
<img class="ShieldsDiscord" alt="Discord" src="https://img.shields.io/discord/625008568369938445?logo=discord">
</a>
<br>
<a href='https://mastodon.online/@sailorzoop'>
<img alt='Mastodon' src='https://img.shields.io/badge/| sailorzoop-darkblue?&logo=mastodon'>
</a>
<a href=''>
<img alt='Discord' src='https://img.shields.io/badge/| @sailorzoop-purple?&logo=discord'>
</a>
<a href='https://matrix.to/#/@sailorzoop:matrix.org'>
<img alt='Matrix' src='https://img.shields.io/badge/| @sailorzoop:matrix.org-darkgreen?&logo=matrix'>
</a>
</p>
</div>
<div id="footer-placeholder"></div>
<script src="/js/loadnavs.js" defer></script>
</body>
</html>

View file

@ -0,0 +1,8 @@
<footer>
<nav class="bottom-nav">
<ul>
<li>© LibreBun™ 2023</li>
</ul>
</nav>
</footer>

36
html/elements/header.html Normal file
View file

@ -0,0 +1,36 @@
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="/css/styleHF.css" type="text/css" media="all">
</head>
<body>
<header>
<nav class="top-nav">
<ul>
<li>
<div class="image-popup">
<a href="/index.html">
<img src="/images/bunnie48px.png"></a>
<div class="popup-content">
<a class="gt" href="https://librebun.ooguy.com/gt" target="_blank"><img src="/images/gt.png"></a>
<a class="nc" href="https://librebun.ooguy.com/nc" target="_blank"><img src="/images/nc.png"></a>
</div>
</div>
</li>
<li><a href="/html/projects.html">Projects</a></li>
<li><a href="/html/rants.html">Rants</a></li>
<li><a href="/html/about.html">About</a></li>
<li>
<label for="toggle-checkbox" class="toggle-label">
<button class="toggle-button" onclick="toggleHeaderColor()"><img src="/images/moon.svg"</button>
</label>
</li>
</ul>
</nav>
</header>
<script src="/js/loadnavs.js" defer></script>
</body>
</html>

24
html/projects.html Normal file
View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="icon" type="image/png" sizes="48x48" href="/images/bunnie48px.png">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Zoey's Bits - Projects</title>
<link rel="stylesheet" href="/css/style.css" type="text/css" media="all">
</head>
<body>
<div id="header-placeholder"></div>
<div class="centered-content">
<h1 id="title">Welcome to the projects section!</h1>
<h3 id="subtitle">WIP</h3>
</div>
<div id="footer-placeholder"></div>
<script src="/js/loadnavs.js" defer></script>
</body>
</html>

22
html/rants.html Normal file
View file

@ -0,0 +1,22 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="icon" type="image/png" sizes="48x48" href="/images/bunnie48px.png">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Zoey's Bits - Rants</title>
<script src="https://cdn.jsdelivr.net/npm/showdown/dist/showdown.min.js"></script>
<link rel="stylesheet" href="/css/rants.css" type="text/css" media="all">
</head>
<body>
<div id="article-container"></div>
<div id="article-list"></div>
<div id="header-placeholder"></div>
<div id="footer-placeholder"></div>
<script src="/js/loadnavs.js" defer></script>
<script src="/js/articleload.js" defer></script>
<script src="/js/rants.js" defer></script>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

View file

Before

Width:  |  Height:  |  Size: 703 B

After

Width:  |  Height:  |  Size: 703 B

BIN
images/gt.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

57
images/moon.svg Normal file
View file

@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="300"
height="300"
viewBox="0 0 79.374998 79.375"
version="1.1"
id="svg1"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
sodipodi:docname="moon.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:zoom="2.2022289"
inkscape:cx="128.27913"
inkscape:cy="149.84818"
inkscape:window-width="1916"
inkscape:window-height="1056"
inkscape:window-x="1920"
inkscape:window-y="20"
inkscape:window-maximized="1"
inkscape:current-layer="layer3" />
<defs
id="defs1" />
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Layer 2">
<circle
style="display:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:2.11667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
id="path4"
cx="39.6875"
cy="39.6875"
r="38.629166" />
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="Layer 3">
<path
id="circle1"
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:2.11667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
d="M 46.058114,4.3440906 A 39.6875,39.6875 0 0 0 18.710238,53.357241 39.6875,39.6875 0 0 0 36.600488,76.534986 37.765205,46.535679 29.487085 0 1 40.156987,32.694321 37.765205,46.535679 29.487085 0 1 74.832599,7.1323231 39.6875,39.6875 0 0 0 46.058114,4.3440906 Z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
images/nc.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

57
images/sun.svg Normal file
View file

@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="300"
height="300"
viewBox="0 0 79.374998 79.375"
version="1.1"
id="svg1"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
sodipodi:docname="sun.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:zoom="2.2022289"
inkscape:cx="128.27913"
inkscape:cy="149.84818"
inkscape:window-width="1916"
inkscape:window-height="1056"
inkscape:window-x="1920"
inkscape:window-y="20"
inkscape:window-maximized="1"
inkscape:current-layer="layer3" />
<defs
id="defs1" />
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Layer 2">
<circle
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:2.11667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
id="path4"
cx="39.6875"
cy="39.6875"
r="38.629166" />
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="Layer 3">
<path
id="circle1"
style="display:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:2.11667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
d="M 46.058114,4.3440906 A 39.6875,39.6875 0 0 0 18.710238,53.357241 39.6875,39.6875 0 0 0 36.600488,76.534986 37.765205,46.535679 29.487085 0 1 40.156987,32.694321 37.765205,46.535679 29.487085 0 1 74.832599,7.1323231 39.6875,39.6875 0 0 0 46.058114,4.3440906 Z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 494 KiB

27
index.html Normal file
View file

@ -0,0 +1,27 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="icon" type="image/png" sizes="48x48" href="/images/bunnie48px.png">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Zoey's Bits</title>
<link rel="stylesheet" href="/css/style.css" type="text/css" media="all">
<script src="/js/loadnavs.js" defer></script>
</head>
<body>
<div id="header-placeholder"></div>
<div class="centered-content">
<h1 id="title">Welcome to my Website!</h1>
<h3 id="subtitle">WIP</h3>
<img src="/images/under_construction.gif" alt="Under Construction">
<h3 id="blahaj">blahaj dance</h3>
</div>
<div id="footer-placeholder"></div>
</body>
</html>

23
js/articleload.js Normal file
View file

@ -0,0 +1,23 @@
// Function to convert Markdown to HTML
function convertMarkdownToHTML(markdownContent) {
// Simple Markdown to HTML conversion
// This is a basic example and may not cover all Markdown features
// You may need to enhance this function based on your requirements
return markdownContent
.replace(/\*\*(.*?)\*\*/g, '<strong>$1</strong>') // Bold
.replace(/\*(.*?)\*/g, '<em>$1</em>'); // Italics
}
// Function to fetch and display an article
function displayArticle(articlePath) {
fetch(articlePath)
.then(response => response.text())
.then(markdownContent => {
const htmlContent = convertMarkdownToHTML(markdownContent);
document.getElementById('article-container').innerHTML = htmlContent;
})
.catch(error => console.error('Error fetching article:', error));
}
// Call the function with the path to your Markdown file
displayArticle('/md/rants/test.md');

90
js/loadnavs.js Normal file
View file

@ -0,0 +1,90 @@
document.addEventListener('DOMContentLoaded', function () {
console.log('DOMContentLoaded event fired');
// Wait for the DOM to load
// Load header and footer
loadContent('/html/elements/header.html', document.getElementById('header-placeholder'))
.then(() => {
toggleHeaderColor();
// After loading the header content, initialize toggle button and checkbox for header color
const toggleButton = document.querySelector('button.toggle-button');
});
loadContent('/html/elements/footer.html', document.getElementById('footer-placeholder'));
// Load external stylesheets
loadStylesheet('/css/style.css'); // Add more stylesheets if needed
loadStylesheet('/css/styleHF.css');
// Retrieve the header element
const header = document.querySelector('header');
// Check if the header element exists before initializing the toggle button
if (header) {
// Call the function once to set the initial header color based on checkbox state
toggleHeaderColor();
}
});
async function loadContent(url, container) {
try {
const response = await fetch(url);
const html = await response.text();
container.innerHTML = html;
// After loading the content, load any stylesheets within it
const stylesheets = container.querySelectorAll('link[rel="stylesheet"]');
stylesheets.forEach(stylesheet => {
const href = stylesheet.getAttribute('href');
loadStylesheet(href);
});
} catch (error) {
console.error('Error loading content:', error);
}
}
function loadStylesheet(href) {
const link = document.createElement('link');
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = href;
document.head.appendChild(link);
}
let isLightMode = true;
function toggleHeaderColor() {
const header = document.querySelector('header');
const togglebutton = document.querySelector('.toggle-button');
const body = document.querySelector('body');
const articlelist = document.querySelector('#article-list');
isLightMode = !isLightMode;
if (!isLightMode) {
header.style.backgroundColor = 'var(--background-color-dark)';
header.style.color = 'var(--color-dark)';
togglebutton.backgroundColor = 'var(--color-button-dark)';
togglebutton.classList.add('dark-mode');
togglebutton.classList.remove('light-mode');
body.style.backgroundColor = 'var(--color-bg-body-dark)';
body.style.color = 'var(--color-bg-body-light)';
articlelist.style.backgroundColor = 'var(--article-bg-dark)';
articlelist.style.color = 'var(--color-dark)';
} else {
header.style.backgroundColor = 'var(--background-color-light)';
header.style.color = 'var(--color-light)';
togglebutton.backgroundColor = 'var(--color-button-light)';
togglebutton.classList.add('light-mode');
togglebutton.classList.remove('dark-mode');
body.style.backgroundColor = 'var(--color-bg-body-light)';
body.style.color = 'var(--color-bg-body-dark)';
articlelist.style.backgroundColor = 'var(--article-bg-light)';
articlelist.style.color = 'var(--color-light)';
}
}

79
js/rants.js Normal file
View file

@ -0,0 +1,79 @@
const articles = [
{ title: 'Electron', subtitle: '', path: '/md/rants/electron.md' },
{ title: 'Discord', subtitle: '', path: '/md/rants/discord.md' },
{ title: 'Wayland', subtitle: '', path: '/md/rants/wayland.md' },
];
const showdownConverter = new showdown.Converter();
function createArticleBox(article) {
const articleBox = document.createElement('div');
articleBox.className = 'article-box';
articleBox.setAttribute('data-path', article.path);
const titleElement = document.createElement('h3');
titleElement.textContent = article.title;
const subtitleElement = document.createElement('p');
subtitleElement.textContent = article.subtitle;
subtitleElement.className = 'article-subtitle';
articleBox.appendChild(titleElement);
articleBox.appendChild(subtitleElement);
articleBox.addEventListener('click', () => {
loadArticle(article.path);
updateArticleBoxContent(article.path, article.title, article.subtitle);
});
return articleBox;
}
function createArticleList() {
const articleListContainer = document.getElementById('article-list');
articles.forEach(article => {
const articleBox = createArticleBox(article);
articleListContainer.appendChild(articleBox);
});
}
function loadArticle(articlePath) {
fetch(articlePath)
.then(response => response.text())
.then(markdownContent => {
const { title, subtitle } = extractTitleAndSubtitle(markdownContent);
const htmlContent = showdownConverter.makeHtml(markdownContent);
document.getElementById('article-container').innerHTML = htmlContent;
updateArticleBoxContent(articlePath, title, subtitle);
})
.catch(error => console.error('Error fetching article:', error));
}
function extractTitleAndSubtitle(markdownContent) {
const lines = markdownContent.split('\n');
const title = lines[0] ? lines[0].replace(/^#+\s*/, '').trim() : 'Untitled';
const subtitle = lines[3] ? lines[3].replace(/^#+\s*/, '').trim() : '';
return { title, subtitle };
}
function updateArticleBoxContent(articlePath, title, subtitle) {
const articleBox = document.querySelector(`.article-box[data-path="${articlePath}"]`);
if (articleBox) {
articleBox.innerHTML = '';
const titleElement = document.createElement('h3');
titleElement.textContent = title;
const subtitleElement = document.createElement('p');
subtitleElement.textContent = subtitle;
subtitleElement.className = 'article-subtitle';
articleBox.appendChild(titleElement);
articleBox.appendChild(subtitleElement);
}
}
// Load the functions when the DOM is fully loaded
document.addEventListener('DOMContentLoaded', () => {
createArticleList();
if (articles.length > 0) {
loadArticle(articles[0].path);
}
});

43
js/script.js Normal file
View file

@ -0,0 +1,43 @@
document.addEventListener('DOMContentLoaded', function () {
const title = document.querySelector('#title');
const subtitle = document.querySelector('#subtitle');
const blahaj = document.querySelector('#blahaj');
function handleClick() {
// Move elements up and fade them out
title.animate(
[
{ transform: 'translateY(0)', opacity: 1 },
{ transform: 'translateY(-50px)', opacity: 0 }
],
{ duration: 1000, easing: 'ease-out', fill: 'forwards' }
);
subtitle.animate(
[
{ transform: 'translateY(0)', opacity: 1 },
{ transform: 'translateY(-50px)', opacity: 0 }
],
{ duration: 1000, easing: 'ease-out', fill: 'forwards', delay: 200 }
);
blahaj.animate(
[
{ transform: 'translateY(-50px)', opacity: 0 },
{ transform: 'translateY(-0px)', opacity: 1 }
],
{ duration: 500, easing: 'ease-out', fill: 'forwards', delay: 400 }
);
// Remove the event listener after it has been triggered
document.body.removeEventListener('click', handleClick);
title.addEventListener('animationend', function () {
title.remove();
});
subtitle.addEventListener('animationend', function () {
subtitle.remove();
});
}
});

3
json/status.json Normal file
View file

@ -0,0 +1,3 @@
{
"godotver": "4.2.1"
}

View file

10
md/rants/discord.md Normal file
View file

@ -0,0 +1,10 @@
# Discord
###### 20th December 2023 - Zoey
<br>
### Here's the reason I hate Discord.
<br>
lorem ipsum butts and cakes, you are now my favourite person who bakes
this is still the same paragraph
yeah
<br>
butts

6
md/rants/electron.md Normal file
View file

@ -0,0 +1,6 @@
# Electron
###### 21th December 2023 - Zoey
<br>
### Electron is awful and here's why.
<br>
Lorem ipsum motherfuckerssss

6
md/rants/wayland.md Normal file
View file

@ -0,0 +1,6 @@
# Wayland
######22th December 2023 - Zoey
<br>
### Insane defaults.
<br>
Lorem ipsum motherfuckerssss

15
not_found.html Normal file
View file

@ -0,0 +1,15 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Not Found</title>
<link href="/style.css" rel="stylesheet" type="text/css" media="all">
</head>
<body>
<div class="centered-content">
<h1>Page Not Found</h1>
<p>There's nobunny here.</p>
</div>
</body>
</html>

18324
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,44 +0,0 @@
{
"name": "zoeysbits",
"version": "0.1.0",
"private": true,
"dependencies": {
"@testing-library/jest-dom": "^5.17.0",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-player": "^2.16.0",
"react-router-dom": "^6.23.1",
"react-scripts": "5.0.1",
"web-vitals": "^2.1.4"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"tailwindcss": "^3.4.1",
"tailwindcss-image-rendering": "^1.0.2"
}
}

View file

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" id="main_outline" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 640 640" style="enable-background:new 0 0 640 640;" xml:space="preserve">
<g>
<path id="teabag" style="fill:#FFFFFF" d="M395.9,484.2l-126.9-61c-12.5-6-17.9-21.2-11.8-33.8l61-126.9c6-12.5,21.2-17.9,33.8-11.8 c17.2,8.3,27.1,13,27.1,13l-0.1-109.2l16.7-0.1l0.1,117.1c0,0,57.4,24.2,83.1,40.1c3.7,2.3,10.2,6.8,12.9,14.4 c2.1,6.1,2,13.1-1,19.3l-61,126.9C423.6,484.9,408.4,490.3,395.9,484.2z"/>
<g>
<g>
<path style="fill:#609926" d="M622.7,149.8c-4.1-4.1-9.6-4-9.6-4s-117.2,6.6-177.9,8c-13.3,0.3-26.5,0.6-39.6,0.7c0,39.1,0,78.2,0,117.2 c-5.5-2.6-11.1-5.3-16.6-7.9c0-36.4-0.1-109.2-0.1-109.2c-29,0.4-89.2-2.2-89.2-2.2s-141.4-7.1-156.8-8.5 c-9.8-0.6-22.5-2.1-39,1.5c-8.7,1.8-33.5,7.4-53.8,26.9C-4.9,212.4,6.6,276.2,8,285.8c1.7,11.7,6.9,44.2,31.7,72.5 c45.8,56.1,144.4,54.8,144.4,54.8s12.1,28.9,30.6,55.5c25,33.1,50.7,58.9,75.7,62c63,0,188.9-0.1,188.9-0.1s12,0.1,28.3-10.3 c14-8.5,26.5-23.4,26.5-23.4s12.9-13.8,30.9-45.3c5.5-9.7,10.1-19.1,14.1-28c0,0,55.2-117.1,55.2-231.1 C633.2,157.9,624.7,151.8,622.7,149.8z M125.6,353.9c-25.9-8.5-36.9-18.7-36.9-18.7S69.6,321.8,60,295.4 c-16.5-44.2-1.4-71.2-1.4-71.2s8.4-22.5,38.5-30c13.8-3.7,31-3.1,31-3.1s7.1,59.4,15.7,94.2c7.2,29.2,24.8,77.7,24.8,77.7 S142.5,359.9,125.6,353.9z M425.9,461.5c0,0-6.1,14.5-19.6,15.4c-5.8,0.4-10.3-1.2-10.3-1.2s-0.3-0.1-5.3-2.1l-112.9-55 c0,0-10.9-5.7-12.8-15.6c-2.2-8.1,2.7-18.1,2.7-18.1L322,273c0,0,4.8-9.7,12.2-13c0.6-0.3,2.3-1,4.5-1.5c8.1-2.1,18,2.8,18,2.8 l110.7,53.7c0,0,12.6,5.7,15.3,16.2c1.9,7.4-0.5,14-1.8,17.2C474.6,363.8,425.9,461.5,425.9,461.5z"/>
<path style="fill:#609926" d="M326.8,380.1c-8.2,0.1-15.4,5.8-17.3,13.8c-1.9,8,2,16.3,9.1,20c7.7,4,17.5,1.8,22.7-5.4 c5.1-7.1,4.3-16.9-1.8-23.1l24-49.1c1.5,0.1,3.7,0.2,6.2-0.5c4.1-0.9,7.1-3.6,7.1-3.6c4.2,1.8,8.6,3.8,13.2,6.1 c4.8,2.4,9.3,4.9,13.4,7.3c0.9,0.5,1.8,1.1,2.8,1.9c1.6,1.3,3.4,3.1,4.7,5.5c1.9,5.5-1.9,14.9-1.9,14.9 c-2.3,7.6-18.4,40.6-18.4,40.6c-8.1-0.2-15.3,5-17.7,12.5c-2.6,8.1,1.1,17.3,8.9,21.3c7.8,4,17.4,1.7,22.5-5.3 c5-6.8,4.6-16.3-1.1-22.6c1.9-3.7,3.7-7.4,5.6-11.3c5-10.4,13.5-30.4,13.5-30.4c0.9-1.7,5.7-10.3,2.7-21.3 c-2.5-11.4-12.6-16.7-12.6-16.7c-12.2-7.9-29.2-15.2-29.2-15.2s0-4.1-1.1-7.1c-1.1-3.1-2.8-5.1-3.9-6.3c4.7-9.7,9.4-19.3,14.1-29 c-4.1-2-8.1-4-12.2-6.1c-4.8,9.8-9.7,19.7-14.5,29.5c-6.7-0.1-12.9,3.5-16.1,9.4c-3.4,6.3-2.7,14.1,1.9,19.8 C343.2,346.5,335,363.3,326.8,380.1z"/>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.5 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 929 B

File diff suppressed because it is too large Load diff

Before

Width:  |  Height:  |  Size: 295 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 319 KiB

View file

@ -1,40 +0,0 @@
<svg viewBox="0 0 212 212" xmlns="http://www.w3.org/2000/svg">
<metadata
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
>
<rdf:RDF>
<cc:Work rdf:about="https://codeberg.org/forgejo/meta/src/branch/readme/branding#logo">
<dc:title>Forgejo logo</dc:title>
<cc:creator rdf:resource="https://caesarschinas.com/"><cc:attributionName>Caesar Schinas</cc:attributionName></cc:creator>
<cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
</cc:Work>
</rdf:RDF>
</metadata>
<style type="text/css">
circle {
fill: none;
stroke: #000;
stroke-width: 15;
}
path {
fill: none;
stroke: #000;
stroke-width: 25;
}
.orange {
stroke:#ff6600;
}
.red {
stroke:#d40000;
}
</style>
<g transform="translate(6,6)">
<path d="M58 168 v-98 a50 50 0 0 1 50-50 h20" class="orange" />
<path d="M58 168 v-30 a50 50 0 0 1 50-50 h20" class="red" />
<circle cx="142" cy="20" r="18" class="orange" />
<circle cx="142" cy="88" r="18" class="red" />
<circle cx="58" cy="180" r="18" class="red" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -1,85 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="700.000000pt" height="700.000000pt" viewBox="0 0 700.000000 700.000000"
preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,700.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M1935 6994 c-186 -39 -328 -137 -415 -287 -24 -39 -51 -84 -61 -99
-11 -15 -19 -29 -19 -31 0 -3 -39 -71 -86 -153 -47 -82 -160 -277 -251 -434
-90 -157 -169 -292 -174 -300 -5 -8 -55 -96 -112 -195 -113 -196 -393 -681
-408 -705 -5 -8 -41 -71 -80 -140 -40 -69 -85 -147 -101 -175 -73 -126 -100
-226 -97 -349 3 -109 33 -203 106 -329 69 -117 281 -485 310 -537 11 -19 111
-192 223 -385 111 -192 212 -366 222 -385 11 -19 37 -64 58 -100 21 -36 47
-81 58 -100 11 -19 59 -102 107 -185 48 -82 95 -163 104 -180 9 -16 49 -86 89
-155 40 -69 78 -134 85 -145 77 -134 155 -215 259 -268 145 -74 44 -69 1583
-69 1525 0 1434 -4 1570 63 l62 31 304 -217 c167 -120 360 -259 429 -308 69
-50 148 -106 175 -125 48 -34 130 -93 150 -110 6 -4 21 -16 35 -26 17 -12 19
-16 6 -12 -31 11 -209 55 -246 61 -19 3 -42 8 -50 10 -28 8 -184 26 -285 33
-203 13 -1356 5 -1760 -13 -44 -2 -161 -6 -260 -10 -99 -4 -209 -8 -245 -10
-36 -2 -121 -6 -190 -10 -191 -9 -276 -14 -380 -20 -90 -5 -125 -8 -315 -20
-44 -3 -114 -8 -155 -11 -198 -13 -326 -22 -405 -29 -27 -2 -81 -7 -120 -10
-38 -3 -88 -8 -110 -10 -22 -3 -62 -7 -90 -10 -27 -3 -66 -7 -85 -10 -19 -3
-55 -7 -80 -10 -25 -4 -64 -11 -88 -16 -23 -5 -59 -12 -80 -15 -74 -11 -307
-76 -381 -106 -42 -17 -91 -42 -109 -55 l-33 -25 38 -28 c47 -35 138 -66 218
-75 33 -4 71 -9 85 -11 27 -5 291 -11 860 -19 462 -7 617 -12 1355 -40 66 -3
181 -7 255 -10 74 -3 178 -7 230 -10 52 -3 142 -7 200 -10 232 -12 407 -28
575 -50 17 -2 56 -7 88 -10 32 -4 111 -12 175 -19 104 -12 493 -13 602 -2 19
1 78 6 130 11 52 4 102 9 112 10 9 2 48 7 85 10 37 4 75 8 83 10 8 2 35 7 60
10 84 11 172 25 205 31 11 2 34 7 50 10 141 25 376 82 477 115 204 67 307 135
359 237 20 40 24 61 24 142 0 83 -7 178 -20 301 -3 20 -7 65 -10 100 -3 35 -7
84 -10 109 -2 25 -7 73 -9 108 -12 137 -17 188 -21 212 -2 14 -6 61 -10 105
-5 74 -8 102 -20 225 -7 68 -15 158 -21 225 -3 33 -7 80 -10 105 -2 25 -6 71
-9 102 -2 31 -6 82 -9 112 -3 31 -8 81 -11 111 -3 30 -7 79 -10 108 -3 28 -7
79 -10 112 -3 33 -7 84 -10 113 -3 28 -7 76 -10 105 -2 28 -7 75 -9 102 -3 28
-8 82 -11 120 -3 39 -8 86 -10 105 -2 19 -7 67 -10 105 -3 39 -8 90 -10 115
-3 25 -7 74 -10 110 -3 36 -7 85 -10 110 -5 48 -11 105 -20 210 -3 36 -8 85
-10 110 -3 25 -7 74 -10 110 -5 69 -13 141 -21 202 -7 53 -46 144 -110 255
-32 54 -66 114 -77 133 -10 19 -61 107 -112 195 -51 88 -102 177 -114 199 -12
21 -78 135 -147 255 -68 119 -130 225 -136 236 -6 11 -74 127 -151 259 -76
131 -148 255 -159 275 -33 60 -288 501 -335 579 -23 40 -43 75 -43 78 0 10
-63 88 -100 122 -78 74 -174 125 -275 147 -48 11 -341 13 -1440 13 -759 0
-1389 -2 -1400 -4z m2666 -602 c87 -43 85 -39 309 -427 51 -88 104 -180 118
-205 14 -25 33 -58 43 -75 10 -16 32 -55 49 -85 17 -30 40 -71 51 -90 12 -19
134 -229 271 -467 l249 -432 -33 -37 c-18 -20 -42 -47 -53 -58 -58 -60 -211
-273 -280 -390 -10 -17 -56 -26 -205 -41 -36 -4 -78 -8 -95 -10 -113 -12 -153
-17 -175 -20 -14 -2 -56 -7 -95 -11 -38 -4 -81 -8 -95 -9 -14 -2 -34 -3 -45
-4 -15 -1 -47 -37 -105 -117 -47 -64 -90 -122 -95 -128 -6 -6 -22 -27 -35 -46
-13 -19 -68 -94 -121 -166 l-97 -131 -69 -2 c-145 -3 -301 -21 -457 -52 -94
-19 -99 -19 -112 -2 -7 10 -14 21 -14 25 0 3 -21 42 -46 85 -26 43 -57 96 -70
119 -13 23 -105 182 -205 355 -100 173 -192 332 -204 354 -13 22 -105 182
-205 355 -101 173 -194 335 -208 359 -47 84 -82 146 -92 161 -8 13 -160 278
-185 322 -5 10 -80 138 -165 285 -85 147 -167 288 -181 315 -14 26 -31 54 -38
62 -24 29 65 158 133 193 76 40 73 40 1310 39 l1201 -1 46 -23z m-2956 -912
c43 -74 86 -151 97 -170 11 -19 93 -161 182 -315 239 -412 431 -745 453 -785
11 -19 76 -132 145 -250 69 -118 137 -236 151 -262 15 -26 82 -143 150 -260
68 -117 195 -337 282 -488 87 -151 176 -303 198 -338 42 -66 56 -77 487 -385
74 -53 215 -154 313 -224 l179 -128 -1071 -3 c-1052 -2 -1071 -2 -1123 18 -59
23 -113 68 -144 120 -115 194 -164 279 -164 284 0 3 -15 29 -33 58 -19 29 -47
78 -64 108 -17 30 -54 96 -83 145 -29 50 -61 106 -72 125 -45 78 -322 559
-353 610 -18 30 -103 179 -190 330 -87 151 -170 295 -185 320 -48 81 -58 177
-26 253 13 32 221 398 353 622 7 11 38 65 70 120 32 55 64 112 73 126 8 14 47
81 85 148 39 67 75 130 80 139 6 9 37 63 69 120 32 56 60 101 61 100 1 -2 37
-64 80 -138z m4304 -1486 c1 -32 4 -61 6 -64 2 -3 7 -48 10 -100 3 -52 8 -97
10 -100 2 -3 6 -45 10 -95 4 -49 8 -101 10 -115 4 -26 8 -67 25 -240 17 -173
21 -214 25 -240 2 -14 6 -65 10 -115 3 -49 8 -97 10 -105 2 -8 7 -51 10 -94 4
-43 8 -86 10 -95 1 -9 6 -54 10 -101 4 -47 8 -98 10 -115 2 -16 7 -64 11 -105
3 -41 7 -82 9 -90 2 -8 6 -53 10 -100 4 -47 9 -88 11 -92 2 -3 2 -12 -1 -20
-4 -10 -20 -13 -53 -12 -71 4 -179 -22 -259 -61 -79 -39 -189 -139 -223 -203
-37 -71 -28 -72 -155 19 -64 46 -126 91 -138 99 -12 8 -83 59 -157 112 -74 53
-174 125 -223 160 -190 137 -212 153 -215 160 -2 5 -7 8 -12 8 -7 0 -188 126
-300 210 -14 10 -106 76 -205 147 -290 208 -315 226 -312 229 7 7 227 42 312
49 39 4 110 8 159 9 80 3 91 6 107 27 10 13 65 87 121 164 56 77 106 145 110
150 5 6 49 64 97 131 49 66 95 121 102 121 24 0 167 14 186 17 10 2 50 7 88
11 39 3 84 8 100 10 17 3 50 7 75 9 25 2 93 10 151 17 l106 12 38 64 c65 110
281 394 296 387 3 -2 7 -29 8 -60z"/>
<path d="M1314 4324 c-43 -14 -93 -67 -96 -99 -5 -66 5 -92 78 -218 78 -134
88 -152 153 -265 20 -35 41 -71 46 -80 13 -21 67 -116 93 -162 11 -19 83 -145
161 -278 77 -134 141 -248 141 -253 0 -5 5 -9 10 -9 6 0 10 -4 10 -10 0 -5 27
-55 60 -111 33 -55 60 -102 60 -104 0 -2 27 -49 60 -104 33 -56 60 -104 60
-107 0 -2 8 -17 18 -32 11 -15 40 -63 67 -108 50 -85 77 -108 136 -118 49 -7
116 28 141 74 37 68 11 140 -142 390 -28 47 -807 1395 -842 1460 -43 78 -66
108 -91 122 -40 21 -84 26 -123 12z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 5.8 KiB

View file

@ -1,25 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/bunnie48px.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta content="#763568" data-react-helmet="true" name="theme-color" />
<meta content="Zoey's Bits" property="og:title" />
<meta content="Somebunny's place." property="og:description" />
<meta content="https://bits.li-yo.ts.net/" property="og:url" />
<meta content="https://bits.li-yo.ts.net/bunnie96px.png" property="og:image" />
<meta
name="description"
content="Somebunny's place."
/>
<link rel="apple-touch-icon" href="%PUBLIC_URL%/bunnie48px.png" />
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<title>Zoey's Bits</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
</body>
</html>

View file

@ -1,24 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- ***** BEGIN LICENSE BLOCK *****
- Part of the Jellyfin project (https://jellyfin.media)
-
- All copyright belongs to the Jellyfin contributors; a full list can
- be found in the file CONTRIBUTORS.md
-
- This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License.
- To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/4.0/.
- ***** END LICENSE BLOCK ***** -->
<svg version="1.1" id="icon-transparent" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512">
<defs>
<linearGradient id="linear-gradient" gradientUnits="userSpaceOnUse" x1="110.25" y1="213.3" x2="496.14" y2="436.09">
<stop offset="0" style="stop-color:#AA5CC3"/>
<stop offset="1" style="stop-color:#00A4DC"/>
</linearGradient>
</defs>
<title>icon-transparent</title>
<g id="icon-transparent">
<path id="inner-shape" d="M256,201.6c-20.4,0-86.2,119.3-76.2,139.4s142.5,19.9,152.4,0S276.5,201.6,256,201.6z" fill="url(#linear-gradient)"/>
<path id="outer-shape" d="M256,23.3c-61.6,0-259.8,359.4-229.6,420.1s429.3,60,459.2,0S317.6,23.3,256,23.3z
M406.5,390.8c-19.6,39.3-281.1,39.8-300.9,0s110.1-275.3,150.4-275.3S426.1,351.4,406.5,390.8z" fill="url(#linear-gradient)"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -1,75 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="62.920513mm"
height="41.44083mm"
viewBox="0 0 951.2393 626.50705"
version="1.1"
id="svg8"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
inkscape:export-xdpi="300"
inkscape:export-ydpi="300"
enable-background="new">
<defs
id="defs2" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-36.380379,-256.78621)"
style="display:inline">
<path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:28;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 167.03908,270.78735 c -0.94784,-0.002 -1.8939,0.004 -2.83789,0.0215 -4.31538,0.0778 -8.58934,0.3593 -12.8125,0.8457 -33.78522,3.89116 -64.215716,21.86394 -82.871086,53.27344 -18.27982,30.77718 -22.77749,64.66635 -13.46094,96.06837 9.31655,31.40203 31.88488,59.93174 65.296886,82.5332 0.20163,0.13618 0.40678,0.26709 0.61523,0.39258 28.65434,17.27768 57.18167,28.93179 87.74218,34.95508 -0.74566,12.61339 -0.72532,25.5717 0.082,38.84375 2.43989,40.10943 16.60718,77.03742 38.0957,109.67187 l -77.00781,31.4375 c -8.30605,3.25932 -12.34178,12.68234 -8.96967,20.94324 3.37211,8.2609 12.84919,12.16798 21.06342,8.68371 l 84.69727,-34.57617 c 15.70675,18.72702 33.75346,35.68305 53.12109,50.57032 0.74013,0.56891 1.4904,1.12236 2.23437,1.68554 l -49.61132,65.69141 c -5.45446,7.0474 -4.10058,17.19288 3.01098,22.5634 7.11156,5.37052 17.24028,3.89649 22.52612,-3.27824 l 50.38672,-66.71876 c 27.68572,17.53469 57.07524,31.20388 86.07227,40.25196 14.88153,27.28008 43.96965,44.64648 77.58789,44.64648 33.93762,0 63.04252,-18.68693 77.80082,-45.4375 28.7072,-9.21295 57.7527,-22.93196 85.1484,-40.40234 l 51.0977,67.66016 c 5.2858,7.17473 15.4145,8.64876 22.5261,3.27824 7.1115,-5.37052 8.4654,-15.516 3.011,-22.5634 l -50.3614,-66.68555 c 0.334,-0.25394 0.6727,-0.50077 1.0059,-0.75586 19.1376,-14.64919 37.0259,-31.28581 52.7031,-49.63476 l 82.5625,33.70507 c 8.2143,3.48427 17.6913,-0.42281 21.0634,-8.68371 3.3722,-8.2609 -0.6636,-17.68392 -8.9696,-20.94324 l -74.5391,-30.42773 c 22.1722,-32.82971 37.0383,-70.03397 40.1426,-110.46094 1.0253,-13.35251 1.2292,-26.42535 0.6387,-39.17578 30.3557,-6.05408 58.7164,-17.66833 87.2011,-34.84375 0.2085,-0.12549 0.4136,-0.2564 0.6153,-0.39258 33.412,-22.60147 55.9803,-51.13117 65.2968,-82.5332 9.3166,-31.40202 4.8189,-65.29118 -13.4609,-96.06837 -18.6553,-31.40951 -49.0859,-49.38228 -82.8711,-53.27344 -4.2231,-0.4864 -8.4971,-0.76791 -12.8125,-0.8457 -30.2077,-0.54448 -62.4407,8.82427 -93.4316,26.71484 -22.7976,13.16063 -43.3521,33.31423 -59.4375,55.30469 -44.9968,-25.75094 -103.5444,-40.25065 -175.4785,-41.43945 -6.4522,-0.10663 -13.0125,-0.10696 -19.67974,0.002 -80.18875,1.30929 -144.38284,16.5086 -192.87109,43.9922 -0.11914,-0.19111 -0.24287,-0.37932 -0.37109,-0.56446 -16.29,-22.764 -37.41085,-43.73706 -60.89649,-57.29493 -30.02247,-17.33149 -61.21051,-26.66489 -90.59375,-26.73633 z"
id="path817-3"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccssccccccscccccscccscccscccccsccscccssccscscccscc"
inkscape:label="white-border"
sodipodi:insensitive="true" />
<path
id="path1087"
style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:28;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 716.85595,362.96478 c 15.29075,-21.36763 35.36198,-41.10921 56.50979,-53.31749 66.66377,-38.48393 137.02617,-33.22172 170.08018,22.43043 33.09493,55.72093 14.98656,117.48866 -47.64399,159.85496 -31.95554,19.26819 -62.93318,30.92309 -97.22892,35.54473 M 307.14407,362.96478 C 291.85332,341.59715 271.78209,321.85557 250.63429,309.64729 183.97051,271.16336 113.60811,276.42557 80.554051,332.07772 47.459131,387.79865 65.56752,449.56638 128.19809,491.93268 c 31.95554,19.26819 62.93319,30.92309 97.22893,35.54473"
inkscape:connector-curvature="0"
inkscape:label="ears"
sodipodi:insensitive="true" />
<path
style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:28;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 801.23205,576.8699 C 812.73478,427.06971 720.58431,321.98291 511.99999,325.38859 303.41568,328.79426 213.71393,428.0311 222.76794,576.8699 c 8.64289,142.08048 176.80223,246.40388 288.12038,246.40388 111.31815,0 279.45076,-104.5447 290.34373,-246.40388 z"
id="path969"
inkscape:connector-curvature="0"
sodipodi:nodetypes="szszs"
inkscape:label="head"
sodipodi:insensitive="true" />
<path
id="path1084"
style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 610.4991,644.28932 c 0,23.11198 18.70595,41.84795 41.78091,41.84795 23.07495,0 41.7809,-18.73597 41.7809,-41.84795 0,-23.112 -18.70594,-41.84796 -41.7809,-41.84796 -23.07496,0 -41.78091,18.73596 -41.78091,41.84796 z m -280.56002,0 c 0,23.32492 18.87829,42.23352 42.16586,42.23352 23.28755,0 42.16585,-18.9086 42.16585,-42.23352 0,-23.32494 -18.87829,-42.23353 -42.16585,-42.23353 -23.28757,0 -42.16586,18.90859 -42.16586,42.23353 z"
inkscape:connector-curvature="0"
inkscape:label="eyes"
sodipodi:nodetypes="ssssssssss"
sodipodi:insensitive="true" />
<path
id="path1008"
style="display:inline;opacity:1;fill:none;stroke:#000000;stroke-width:32;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 339.72919,769.2467 -54.54422,72.22481 m 399.08582,-72.22481 54.54423,72.22481 M 263.68341,697.82002 175.92752,733.64353 m 579.85765,-35.82351 87.7559,35.82351"
inkscape:connector-curvature="0"
inkscape:label="whiskers"
sodipodi:nodetypes="cccccccc"
sodipodi:insensitive="true" />
<path
style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:28;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 512.00082,713.08977 c -45.86417,0 -75.13006,31.84485 -74.14159,71.10084 1.07048,42.51275 32.46865,71.10323 74.14159,71.10323 41.67296,0 74.05118,-32.99608 74.14161,-71.10323 0.0932,-39.26839 -28.27742,-71.10084 -74.14161,-71.10084 z"
id="path1115"
inkscape:connector-curvature="0"
inkscape:label="nose"
sodipodi:nodetypes="zszsz"
sodipodi:insensitive="true" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 8 KiB

View file

@ -1,15 +0,0 @@
{
"short_name": "React App",
"name": "Create React App Sample",
"icons": [
{
"src": "bunnie48px.png",
"type": "image/png",
"sizes": "48x48"
}
],
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 349 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

View file

@ -1,3 +0,0 @@
# https://www.robotstxt.org/robotstxt.html
User-agent: *
Disallow:

View file

@ -1 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="64mm" height="64mm" viewBox="0 0 64 64" version="1.1" id="svg898"><defs id="defs892"/><metadata id="metadata895"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/><dc:title/></cc:Work></rdf:RDF></metadata><g id="layer1"><path id="cloud-upload" d="m 63.999948,34.285731 a 17.033293,17.033293 0 0 1 -4.406235,11.428568 14.856655,14.856655 0 0 1 -10.55805,4.571428 h -2.178561 v -6.857139 h 2.178561 A 8.0044292,8.0044292 0 0 0 54.504416,41.118327 10.183788,10.183788 0 0 0 57.14281,34.285731 11.442004,11.442004 0 0 0 45.714251,22.857173 c -0.37683,0 -2.312648,0.241803 -3.490288,0.393502 A 1.1359993,1.1359993 0 0 1 41.00286,22.487082 L 40.537483,21.129528 A 14.102711,14.102711 0 0 0 28.821257,11.497829 13.665957,13.665957 0 0 0 14.091416,28.276812 l 0.488099,2.087681 a 1.1428564,1.1428564 0 0 1 -0.782255,1.354176 l -2.053987,0.62062 a 6.7940986,6.7940986 0 0 0 -4.8860757,6.517846 4.6043628,4.6043628 0 0 0 0.9464197,2.808045 5.5388308,5.5388308 0 0 0 4.089282,1.763384 h 5.250006 v 6.857137 H 11.892899 A 12.235604,12.235604 0 0 1 2.2121047,45.633903 11.506439,11.506439 0 0 1 5.8514086e-5,38.857135 13.5727,13.5727 0 0 1 6.9442617,26.97321 C 6.8863778,26.359414 6.8571876,25.747771 6.8571876,25.142857 A 20.563484,20.563484 0 0 1 45.843766,16.000009 18.306983,18.306983 0 0 1 64,34.285707 Z M 32.923239,32.122512 a 1.1428564,1.1428564 0 0 0 -1.846543,0 l -8.591651,11.775239 a 1.1428564,1.1428564 0 0 0 0.923268,1.816548 h 5.163091 v 12.571418 a 1.1428564,1.1428564 0 0 0 1.14285,1.142858 h 4.571428 a 1.1428564,1.1428564 0 0 0 1.142859,-1.142858 V 45.714299 h 5.163084 a 1.1428564,1.1428564 0 0 0 0.923265,-1.816548 z" stroke-width="2.28572" fill="#45a1ff" fill-opacity="1"/></g></svg>

Before

Width:  |  Height:  |  Size: 2 KiB

View file

@ -1,25 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="454.27927"
height="129.77107"
viewBox="0 0 120.19472 34.335263"
version="1.1"
id="svg1"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1" />
<g
id="layer1">
<path
id="rect1"
style="display:none;fill:#ffffff;stroke-width:2.11667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0"
d="M -19.736644,-31.973684 H 297.23702 c 0,0 0,0 0,0 V -6.6239681e-7 c 0,3.6696783e-7 0,6.6239681e-7 0,6.6239681e-7 H -19.736644 c 0,0 -1e-6,-2.9542898e-7 -1e-6,-6.6239681e-7 V -31.973684 Z" />
<path
id="path3"
style="display:inline;fill:#111111;fill-opacity:1;stroke:none;stroke-width:2.11667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0"
d="m 0,0 v 33.88608 c 0,0 41.608442,4.922788 64.420873,-17.825377 C 80.526949,0 97.528814,1.2317739 120.19472,0 v 0 z" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1 KiB

View file

@ -1,25 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="454.27927"
height="129.77107"
viewBox="0 0 120.19472 34.335263"
version="1.1"
id="svg1"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1" />
<g
id="layer1">
<path
id="rect1"
style="display:none;fill:#ffffff;stroke-width:2.11667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0"
d="M -19.736644,-31.973684 H 297.23702 c 0,0 0,0 0,0 V -6.6239681e-7 c 0,3.6696783e-7 0,6.6239681e-7 0,6.6239681e-7 H -19.736644 c 0,0 -1e-6,-2.9542898e-7 -1e-6,-6.6239681e-7 V -31.973684 Z" />
<path
id="path3"
style="display:inline;fill:#ffffff;stroke:none;stroke-width:2.11667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0"
d="m 0,0 v 33.88608 c 0,0 41.608442,4.922788 64.420873,-17.825377 C 80.526949,0 97.528814,1.2317739 120.19472,0 v 0 z" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1 KiB

View file

@ -1,230 +0,0 @@
@import 'tailwindcss/base';
@import 'tailwindcss/components';
@import 'tailwindcss/utilities';
@media (prefers-reduced-motion: no-preference) {
.DarkModeButton {
animation: DarkModeButton-spin 2.5s ease-in-out infinite alternate;
}
}
.WelcomeText {
animation: Welcome-spin 10s infinite ease-in-out alternate;
}
.HeaderName {
font-size: x-large;
user-select: none;
}
.HeaderButt {
font-size: larger;
user-select: none;
}
.HeaderButt:hover {
transform:scale(1.1);
animation: LogoHoverAnime 0.1s ease-in-out;
text-shadow: black;
}
.StatusButt {
font-size: medium;
user-select: none;
}
.StatusButt:hover {
transform:scale(1.1);
animation: LogoHoverAnime 0.1s ease-in-out;
text-shadow: black;
}
.Logos {
width: 60px;
height: 60px;
user-select: none;
pointer-events: none;
}
.PubP {
font-size: larger;
user-select: none;
pointer-events: none;
}
.LogoBoxesPub {
height: 75px;
display: flex;
justify-content: center;
align-items: left;
margin-top: 10px;
}
.LogoBoxesPub {
transition: transform 0.25s ease;
}
.LogoBoxesPub:hover {
transform: scale(1.1) /*rotate(360deg)*/;
animation: LogoHoverAnim 0.1s ease-in-out;
}
.TextButt {
user-select: none;
object-position: center;
}
.BunnyLogo {
user-select: none;
cursor: pointer;
}
.BunnyLogo:hover {
transform:scale(0.56);
animation: LogoHoverAnime 0.1s ease-in-out;
}
.Teardrop {
user-select: none;
pointer-events: none;
object-position: center;
}
.ForgejoLogo,
.JellyfinLogo,
.GraphiteLogo {
height: 76px;
width: 76px;
user-select: none;
pointer-events: none;
object-position: center;
}
.UpdatesTitle {
font-size: x-large;
}
.UpdatesContent {
font-size: large;
}
.TailP {
color: #111111;
user-select: none;
pointer-events: none;
object-position: center;
}
.SubHeaders {
user-select: none;
pointer-events: none;
}
.LogoBoxesTail {
width: 100px;
height: 100px;
display: flex;
justify-content: center;
align-items: center;
}
.LogoBoxesTail {
transition: transform 0.25s ease;
}
.LogoBoxesTail:hover {
transform: scale(1.1) rotate(360deg);
animation: LogoHoverSpinAnim 1s ease-in-out;
}
.VersionBox {
display: flex;
justify-content: center;
overflow: hidden;
}
.Versions {
overflow:hidden;
border-right: .15em solid orange;
margin-right: auto;
text-wrap: auto;
animation: typing 1s steps(75, end),
blink-caret 1s step-end infinite;
}
@keyframes typing {
from {
width: 0;}
to {
width: 100%;
}
}
@keyframes blink-caret {
from, to {
border-color: transparent
}
50% {
border-color: orange;
}
}
.MainBG {
background: linear-gradient(
to right,
#69233b,
#61182a,
#520a22,
#312436
);
background-size: 600% 600%;
animation: Gradient 120s ease infinite;
}
@keyframes Gradient {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
@keyframes DarkModeButton-spin {
from {
transform: rotate(-10deg);
}
to {
transform: rotate(10deg);
}
}
@keyframes LogoHoverAnim {
from {
/*transform: rotate(0deg) scale(1);*/
transform: scale(1);
}
to {
/*transform: rotate(360deg) scale(1.1);*/
transform: scale(1.1);
}
}
@keyframes LogoHoverSpinAnim {
from {
transform: rotate(0deg) scale(1);
}
to {
transform: rotate(360deg) scale(1.1);
}
}
@keyframes Welcome-spin {
from {
transform: rotate(-2deg);
}
to {
transform: rotate(2deg);
}
}

View file

@ -1,17 +0,0 @@
import React, { Component } from 'react';
import './App.css';
import StreamEmbed from './components/Embed';
import Home from './components/Home';
function App() {
return (
<div className="body">
<Home/>
</div>
);
}
export default App;

View file

@ -1,8 +0,0 @@
import { render, screen } from '@testing-library/react';
import App from './App';
test('renders learn react link', () => {
render(<App />);
const linkElement = screen.getByText(/learn react/i);
expect(linkElement).toBeInTheDocument();
});

View file

@ -1,3 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
<path d="M50 0 A50 50 0 0 0 50 100 Z" fill="yellow" stroke="black"/>
</svg>

Before

Width:  |  Height:  |  Size: 140 B

View file

@ -1,21 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" width="200" height="200">
<!-- Bunny body -->
<ellipse cx="100" cy="150" rx="80" ry="100" fill="#f5c7a1"/>
<!-- Bunny head -->
<circle cx="100" cy="70" r="50" fill="#f5c7a1"/>
<!-- Bunny eyes -->
<circle cx="80" cy="60" r="5" fill="#000"/>
<circle cx="120" cy="60" r="5" fill="#000"/>
<!-- Bunny nose -->
<polygon points="100,70 95,80 105,80" fill="#000"/>
<!-- Bunny ears -->
<polygon points="50,30 80,10 90,30" fill="#f5c7a1"/>
<polygon points="110,30 140,10 150,30" fill="#f5c7a1"/>
<!-- Bunny mouth -->
<path d="M 90 80 Q 100 90 110 80" fill="transparent" stroke="#000" stroke-width="2"/>
</svg>

Before

Width:  |  Height:  |  Size: 742 B

View file

@ -1,12 +0,0 @@
import BottomBar from "./BottomBar";
import TopBar from "./TopBar";
const AboutPage = () => {
return(
<div className="flex justify-center items-center w-screen h-screen text-xl text-secondary MainBG">
<h1>WIP butt</h1>
</div>
);
}
export default AboutPage;

View file

@ -1,12 +0,0 @@
import BottomBar from "./BottomBar";
import TopBar from "./TopBar";
const BlogPage = () => {
return(
<div className="flex justify-center items-center w-screen h-screen text-xl text-secondary MainBG">
<h1>WIP blogpage</h1>
</div>
);
}
export default BlogPage;

View file

@ -1,11 +0,0 @@
const BottomBar = () => {
return (
<div className="fixed bottom-0 left-0 h-8 w-screen flex flex-row backdrop-brightness-50 text-secondary justify-center items-center">
<div className="fixed flex justify-center">
<p className="text-sm">&copy; LibreBun 2024</p>
</div>
</div>
);
};
export default BottomBar;

View file

@ -1,51 +0,0 @@
import React, { useState, useEffect } from 'react';
const StreamEmbed = () => {
const [isLive, setIsLive] = useState(false);
const checkStream = async () => {
const owncastURL = "https://cast.li-yo.ts.net";
const statusAPI = `${owncastURL}/api/status`;
try {
const response = await fetch(statusAPI);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
// Check if the stream is live
setIsLive(data.online);
} catch (error) {
console.error("Error checking stream status:", error);
}
};
useEffect(() => {
// Check the stream status when the component mounts
checkStream();
// Optionally, you can set an interval to check the stream status periodically
const intervalId = setInterval(checkStream, 60000); // Check every 60 seconds
// Cleanup interval on component unmount
return () => clearInterval(intervalId);
}, []);
return (
<>
{ (
<div className="fixed overflow-hidden bottom-0 right-0 mb-20 mr-16 rounded-md">
<iframe
className="overflow-hidden"
src="https://cast.li-yo.ts.net/embed/video?initiallyMuted=true"
title="Zoey's Emporium"
height="280"
width="384"
referrerPolicy="origin"
allowFullScreen
></iframe>
</div>
)}
</>
);
};
export default StreamEmbed;

View file

@ -1,10 +0,0 @@
import React from 'react';
function FilePage() {
return (
<div>
<h1>File Page</h1>
<p>This is the content of the new page.</p>
</div>
);
}

View file

@ -1,62 +0,0 @@
import { useEffect, useState } from 'react';
function Home() {
const [Versions, setVersions] = useState('');
useEffect(() => {
const fetchFiles = async () => {
try {
const Response = await fetch('versions.txt');
const Text = await Response.text();
setVersions(Text);
} catch (error) {
console.error('Error fetching file:', error);
}
};
fetchFiles();
}, []);
return (
<div className='flex flex-col justify-center items-center w-screen h-screen overflow-hidden MainBG'>
<div className='flex flex-col items-center'>
<p className='text-4xl mb-2 text-secondary'>Welcome to Zoey's Bits!</p>
<p className='text-xl mb-8 text-secondary'>The home of all my bits and pieces.</p>
</div>
<div className='flex'>
<div className='flex flex-col w-fit h-fit text-secondary rounded-md items-center'>
<p className='text-xl'>Feel free to use my public services.</p>
<div className='grid grid-cols-3 grid-rows-2 gap-4 mx-2 my-2'>
<a href='https://git.li-yo.ts.net/' target='_blank' rel='noopener noreferrer' className='backdrop-brightness-75 shadow-md rounded-md p-1 flex LogoBoxesPub'>
<img className='Logos' draggable='false' src={process.env.PUBLIC_URL + '/forgejologo.svg'} alt='Memos' />
<p className='self-center mx-2 PubP'>Forgejo</p>
</a>
<a href='https://lemmy.li-yo.ts.net/' target='_blank' rel='noopener noreferrer' className='backdrop-brightness-75 shadow-md rounded-md p-1 flex LogoBoxesPub'>
<img className='Logos' draggable='false' src={process.env.PUBLIC_URL + '/lemmylogo.svg'} alt='Lemmy' />
<p className='self-center mx-2 PubP'>Lemmy</p>
</a>
<a href='https://clips.li-yo.ts.net/' target='_blank' rel='noopener noreferrer' className='backdrop-brightness-75 shadow-md rounded-md p-1 flex LogoBoxesPub'>
<img className='Logos' draggable='false' src={process.env.PUBLIC_URL + '/firesharelogo.png'} alt='Fireshare' />
<p className='self-center mx-2 PubP'>Fireshare</p>
</a>
<a href='https://memos.li-yo.ts.net/' target='_blank' rel='noopener noreferrer' className='backdrop-brightness-75 shadow-md rounded-md p-1 flex LogoBoxesPub'>
<img className='Logos' draggable='false' src={process.env.PUBLIC_URL + '/memoslogo.png'} alt='Memos' />
<p className='self-center mx-2 PubP'>Memos</p>
</a>
<a href='https://send.li-yo.ts.net/' target='_blank' rel='noopener noreferrer' className='backdrop-brightness-75 shadow-md rounded-md p-1 flex LogoBoxesPub'>
<img className='Logos' draggable='false' src={process.env.PUBLIC_URL + '/sendlogo.svg'} alt='Send' />
<p className='self-center mx-2 PubP'>Send</p>
</a>
<a href='https://cast.li-yo.ts.net/' target='_blank' rel='noopener noreferrer' className='backdrop-brightness-75 shadow-md rounded-md p-1 flex LogoBoxesPub'>
<img className='Logos' draggable='false' src={process.env.PUBLIC_URL + '/owncastlogo.png'} alt='Owncast' />
<p className='self-center mx-2 PubP'>Owncast</p>
</a>
</div>
</div>
</div>
</div>
);
}
export default Home;

View file

@ -1,12 +0,0 @@
import BottomBar from "./BottomBar";
import TopBar from "./TopBar";
const ProjectsPage = () => {
return(
<div className="flex justify-center items-center w-screen h-screen text-xl text-secondary MainBG">
<h1>WIP projectspage</h1>
</div>
);
}
export default ProjectsPage;

View file

@ -1,12 +0,0 @@
import React from 'react'
import ReactPlayer from 'react-player'
// Lazy load the YouTube player
function RTMP() {
return (
<ReactPlayer url='rtmp://192.168.0.12:4036/live/umodaxcx!7cvuS!XrsHX&lh3PtqtVs' />
)
}
export default RTMP;

View file

@ -1,12 +0,0 @@
const SideBar = () => {
return (
<div className="fixed left-0 h-screen flex-shrink-0 w-24 flex flex-col bg-sidebar text-secondary shadow-sm justify-center items-center">
<div className="fixed flex flex-shrink-0">
<p className="text-sm">butts</p>
<p className="text-sm">butts2</p>
</div>
</div>
);
};
export default SideBar;

View file

@ -1,27 +0,0 @@
import BottomBar from "./BottomBar";
import TopBar from "./TopBar";
const StreamPage = () => {
return(
<div className="flex flex-col items-center justify-center w-screen h-screen text-xl text-secondary MainBG">
<div className="flex flex-row items-center justify-center w-screen h-5/6 mt-8 text-xl text-secondary">
<iframe
className="mt-5 overflow-hidden justify-left flex"
src="https://cast.li-yo.ts.net/embed/video"
title="Owncast"
height="100%" width="60%"
referrerpolicy="origin"
allowfullscreen>
</iframe>
<iframe
className="ml-5 mt-5 overflow-scroll"
src="https://cast.li-yo.ts.net/embed/chat/readwrite/"
height="100%" width="30%">
</iframe>
</div>
<a href="https://cast.li-yo.ts.net/" className="my-5">Join me on my actual Owncast site!</a>
</div>
);
}
export default StreamPage;

View file

@ -1,30 +0,0 @@
import React from "react";
import { useNavigate } from "react-router-dom";
const TopBar = () => {
const navigate = useNavigate();
return (
<div className="fixed top-0 left-0 h-16 w-screen flex flex-row backdrop-brightness-75 text-secondary items-center">
<div className="topbar-clickables">
<div className="flex flex-row">
<div className="scale-50 BunnyLogo">
<div className="">
<img onClick={() => navigate("/")} draggable="false" src={process.env.PUBLIC_URL + "/bunnie96px.svg"} alt="Bunnie"/>
</div>
</div>
<div className="flex space-x-3">
<button className="HeaderButt" onClick={() => navigate("/blog")}>Blog</button>
<button className="HeaderButt" onClick={() => navigate("/projects")}>Projects</button>
<button className="HeaderButt" onClick={() => navigate("/stream")}>Stream</button>
<button className="HeaderButt" onClick={() => navigate("/about")}>About</button>
</div>
<div className="fixed top-5 items-center justify-center right-0 mr-4 select-none StatusButt">
<a href='https://status.li-yo.ts.net/' target='_blank' rel='noopener noreferrer' className="">Status Page</a>
</div>
</div>
</div>
</div>
);
};
export default TopBar;

View file

@ -1,26 +0,0 @@
@import 'tailwindcss/base';
@import 'tailwindcss/components';
@import 'tailwindcss/utilities';
@import url(https://fonts.googleapis.com/css2?family=Sarabun);
@layer components {
.TopButton {
@apply hover:text-texthover cursor-pointer transition-colors duration-300;
}
.DarkModeButton {
@apply cursor-pointer text-secondary bg-violet-950
border-4 border-violet-950 rounded-md;
}
}
body {
margin: 0;
font-family: 'Sarabun', sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
code {
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
monospace;
}

View file

@ -1,74 +0,0 @@
import React, { StrictMode } from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import {createBrowserRouter,RouterProvider} from "react-router-dom";
import AboutPage from './components/About';
import StreamPage from './components/Stream';
import ProjectsPage from './components/Projects';
import BlogPage from './components/Blog';
import TopBar from './components/TopBar';
import BottomBar from './components/BottomBar';
const router = createBrowserRouter([
{
path: "/",
element: (
<>
<TopBar/>
<App/>
<BottomBar/>
</>
),
},
{
path: "/about",
element: (
<>
<AboutPage/>
<TopBar/>
<BottomBar/>
</>
),
},
{
path: "/stream",
element: (
<>
<StreamPage/>
<TopBar/>
<BottomBar/>
</>
),
},
{
path: "/projects",
element: (
<>
<ProjectsPage/>
<TopBar/>
<BottomBar/>
</>
),
},
{
path: "/blog",
element: (
<>
<BlogPage/>
<TopBar/>
<BottomBar/>
</>
),
}
]);
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<StrictMode>
<RouterProvider router={router} />
</StrictMode>
);
reportWebVitals();

View file

@ -1,13 +0,0 @@
const reportWebVitals = onPerfEntry => {
if (onPerfEntry && onPerfEntry instanceof Function) {
import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
getCLS(onPerfEntry);
getFID(onPerfEntry);
getFCP(onPerfEntry);
getLCP(onPerfEntry);
getTTFB(onPerfEntry);
});
}
};
export default reportWebVitals;

View file

@ -1,5 +0,0 @@
// jest-dom adds custom jest matchers for asserting on DOM nodes.
// allows you to do things like:
// expect(element).toHaveTextContent(/react/i)
// learn more: https://github.com/testing-library/jest-dom
import '@testing-library/jest-dom';

View file

@ -1,19 +0,0 @@
/** @type {import('tailwindcss').Config} */
module.exports = {
mode: 'jit',
content: ["./src/**/*.{html,js}"],
darkMode: false,
theme: {
extend: {
colors: {
primary: "#111111",
secondary: "#f9b6c1",
sidebar: "#161616",
texthover: "#eae8f0",
},
},
},
plugins: [
require('tailwindcss-image-rendering'),
],
}