500&404 errors

This commit is contained in:
2025-06-20 09:48:20 +01:00
parent 30884ecaa4
commit f2cffc4400
25 changed files with 353 additions and 193 deletions

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 743 KiB

View File

@@ -0,0 +1,36 @@
https://cyber.dabamos.de/88x31/88x31.gif
https://cyber.dabamos.de/88x31/anythingbut.gif
https://cyber.dabamos.de/88x31/bestdesktop.gif
https://kopawz.neocities.org/buttonhoard/buttonsfldr2/diagnosedwithGAY.gif
https://kopawz.neocities.org/indexgraphics/buttondecor/ilikecomputer.png
https://identity-crisis.carrd.co/assets/images/gallery04/ad4f8d52.jpg?v=4e55d939
https://anlucas.neocities.org/best_viewed_with_eyes.gif
https://anlucas.neocities.org/html_learn_it_today.gif
https://highway.eightyeightthirty.one/badge/5d58a8f32b007d4897db6f862a895a81674fb35f5cc3947fc66595817ca174db
https://cyber.dabamos.de/88x31/keep.gif
https://cyber.dabamos.de/88x31/js-warning.gif
https://cyber.dabamos.de/88x31/linuxnow2.gif
https://cyber.dabamos.de/88x31/nano2.gif
https://cyber.dabamos.de/88x31/nocookie.gif
https://cyber.dabamos.de/88x31/nofuckingthanks.gif
https://cyber.dabamos.de/88x31/nyan.gif
https://cyber.dabamos.de/88x31/pgp-now.gif
https://cyber.dabamos.de/88x31/phonechump.gif
https://cyber.dabamos.de/88x31/pinguonline.gif
https://cyber.dabamos.de/88x31/piracy.gif
https://cyber.dabamos.de/88x31/proxmox.gif
https://cyber.dabamos.de/88x31/pride.gif
https://cyber.dabamos.de/88x31/relax-now.gif
https://cyber.dabamos.de/88x31/skirt.gif
https://cyber.dabamos.de/88x31/steam.gif
https://cyber.dabamos.de/88x31/svenbutton.gif
https://cyber.dabamos.de/88x31/tfnow.gif
https://cyber.dabamos.de/88x31/vscbutton.gif
https://cyber.dabamos.de/88x31/reddit.gif
https://cyber.dabamos.de/88x31/ralseismokingadart.gif
https://cyber.dabamos.de/88x31/blender.gif
https://cyber.dabamos.de/88x31/bob.gif
https://cyber.dabamos.de/88x31/censor_14c.gif
https://cyber.dabamos.de/88x31/chrmevil.gif
https://cyber.dabamos.de/88x31/dark-mode.gif
https://cyber.dabamos.de/88x31/firefox3.gif

BIN
static/content/haj.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

BIN
static/content/icon.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

113
static/css/404.css Normal file
View File

@@ -0,0 +1,113 @@
canvas#snakeCanvas {
margin: 15px;
box-sizing: border-box;
border: 2px solid var(--secondary-background-color);
border-radius: 10px;
}
form {
display: flex;
flex-direction: column;
width: min-content;
gap: 1rem;
padding: 15px;
}
form input[type="text"] {
padding: 10px;
box-sizing: border-box;
border: 1px solid var(--secondary-background-color);
border-radius: 6px;
background-color: var(--secondary-background-color-but-slightly-transparent);
color: var(--text-color);
}
form button[type="submit"] {
padding: 10px;
box-sizing: border-box;
border: 1px solid var(--secondary-background-color);
border-radius: 6px;
background-color: var(--secondary-background-color-but-slightly-transparent);
color: var(--text-color);
font-weight: bold;
cursor: pointer;
}
.flex-row {
display: flex;
flex-direction: row;
gap: 1rem;
}
.min-width {
width: min-content;
}
.max-width {
width: 100%;
}
#snakeLeaderboardSection {
display: flex;
flex-direction: column;
align-items: center;
padding: 0;
max-height: 272px ;
}
#snakeLeaderboard {
display: flex;
flex-direction: column;
list-style: none;
padding: 0;
margin: 0;
width: 100%;
overflow-y: scroll;
}
#snakeLeaderboard li {
padding: 5px 20px;
background-color: var(--secondary-background-color-but-slightly-transparent);
color: var(--text-color);
font-size: 1rem;
display: flex;
justify-content: space-between;
align-items: center;
}
#snakeLeaderboard li:nth-child(even) {
background-color: var(--secondary-background-color);
}
dialog {
width: 90%;
max-width: 500px;
padding: 20px;
background-color: var(--background-color);
color: var(--text-color);
border: 2px solid var(--secondary-background-color);
border-radius: 8px;
}
dialog button {
padding: 10px;
width: 100%;
box-sizing: border-box;
border: 2px solid var(--secondary-background-color);
border-radius: 6px;
background-color: var(--secondary-background-color-but-slightly-transparent);
color: var(--text-color);
font-weight: bold;
cursor: pointer;
margin-top: 10px;
}
dialog h2 {
margin: 0;
font-size: 1.5rem;
}
dialog p {
margin: 0;
font-size: 1rem;
}

8
static/css/500.css Normal file
View File

@@ -0,0 +1,8 @@
.bluescreen {
background-color: #0077D6;
color: #fff;
padding:40px;
display: flex;
flex-direction: column;
gap: 20px;
}

457
static/css/base.css Normal file
View File

@@ -0,0 +1,457 @@
@import url('https://fonts.googleapis.com/css2?family=Fredoka:wdth,wght@125,700&family=Space+Mono:ital,wght@0,400;0,700;1,400;1,700&display=swap');
@font-face {
font-family:"Irken";
src:url("/static/content/Irken-Like-AllCaps.woff") format("woff");
font-weight:normal;
font-style:normal;
}
:root {
--primary-color: #5cdd8b;
--primary-color-but-slightly-transparent: #5cdd8b44;
--text-color: #b1b8c0;
--background-color: #020205;
--secondary-background-color: #090914;
--secondary-background-color-but-slightly-transparent: #09091444;
--font-size: 0.5cm;
--font-family: "Space Mono", "serif";
--title-font: 'Roboto Mono', sans-serif;
--irken-font: 'Irken';
}
body {
background-color: var(--background-color);
background-image: url("https://blinkies.cafe/purple-stars-bg.gif");
color: var(--text-color);
font-size: var(--font-size);
font-family: var(--font-family);
display: grid;
grid-template-columns: auto auto;
grid-template-rows: 1fr;
grid-template-areas: "main sidebar";
margin: 7% auto 7% auto;
gap: 1rem;
justify-content: center;
width: 940px;
}
#sidebar {
grid-area: sidebar;
display: flex;
flex-direction: column;
gap: 1rem;
width: 174px;
}
#sidebar section {
backdrop-filter: blur(2px) brightness(0.6);
border: var(--secondary-background-color) 2px solid;
border-radius: 10px;
padding: 10px;
}
#sidebar ul {
list-style-type: none;
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
}
#sidebar ul li {
width: fit-content;
}
#sidebar ul li a {
color: var(--text-color);
text-decoration: none;
font-weight: 100;
transition: all 0.2s ease-in-out
}
#sidebar ul li a:hover {
color: var(--primary-color);
font-weight: 900;
}
#sidebar ul li img {
transition: all 0.2s ease-in-out;
}
#sidebar ul li img:hover {
transform: scale(1.1);
}
#sidebar h1 {
font-family: var(--title-font);
font-size: 1.5rem;
font-weight: 900;
margin: 0;
padding: 0;
}
#sidebar h6 {
font-weight: 100;
margin: 0;
padding: 0;
}
#buttons {
text-align: center;
}
#buttons h1 {
font-family: var(--title-font);
font-size: 1.3rem;
font-weight: 900;
margin: 0;
padding: 0;
text-shadow: var(--text-color) 1px 0 10px;
}
#buttons ul {
list-style-type: none;
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
margin-top: 5px;
align-items: center;
}
.vsmoltext {
font-size: 0.5rem;
}
main {
grid-area: main;
width: 761px;
height: 100%;
display: flex;
flex-direction: column;
gap: 1rem;
}
header {
backdrop-filter: blur(2px) brightness(0.6);
border: var(--secondary-background-color) 2px solid;
border-radius: 10px;
padding: 15px;
}
header div.row {
display: flex;
flex-direction: row;
margin: 0;
gap: 1.5rem;
}
header div.column {
display: flex;
flex-direction: column;
justify-content: center;
margin: 0;
}
header img {
width: 9rem;
height: 9rem;
}
header h1 {
font-family: var(--title-font);
font-size: 5rem;
font-weight: 900;
padding: 0;
margin: 0;
}
header h2 {
font-family: var(--title-font);
font-size: 1.75rem;
font-weight: 100;
padding: 0;
margin: 0;
position: relative;
top: -1rem;
}
main section {
backdrop-filter: blur(2px) brightness(0.6);
width: 100%;
display: flex;
flex-direction: column;
border: var(--secondary-background-color) 2px solid;
border-radius: 10px;
padding: 15px;
box-sizing: border-box;
}
main section h1 {
font-size: 3rem;
font-weight: 900;
margin: 0;
padding: 0;
}
main section h2 {
font-size: 1.5rem;
font-weight: 900;
margin: 0;
padding: 0;
}
main section h6 {
font-size: 0.7rem;
font-weight: 100;
margin: 0;
padding: 0;
}
main section p {
font-size: 1rem;
margin: 0;
padding: 0;
font-weight: 300;
}
main section a {
color: var(--primary-color);
text-decoration: none;
}
#furry {
position: fixed;
left: 0;
top: 0;
right: 0;
bottom: 0;
opacity: 0.1;
background-image: url('/static/content/background.png');
background-repeat: no-repeat;
background-position: 50% 0;
background-size: cover;
z-index: -1;
display: none;
}
.blinkies {
justify-content: center;
display: flex;
flex-direction: row;
flex-wrap: wrap;
}
.blinkies img {
width: 150px;
height: 20px;
transition: all 0.2s ease-in-out;
}
.blinkies img:hover {
transform: scale(1.1) rotate(5deg);
}
.blinkies img:nth-child(odd):hover {
transform: scale(1.1) rotate(-5deg);
}
section.rowsect {
width: 100%;
display: grid;
grid-template-columns: auto auto;
gap: 1rem;
backdrop-filter: none;
border: none;
padding: 0;
}
section.rowsect>div {
backdrop-filter: blur(2px) brightness(0.6);
border: var(--secondary-background-color) 2px solid;
border-radius: 10px;
}
.stamps {
display: flex;
flex-direction: row;
flex-wrap: wrap;
padding: 10px;
gap: 5px;
justify-content: center;
align-content: center;
}
.stamps img {
width: 99px;
height: 56px;
transition: all 0.2s ease-in-out;
}
.stamps img:hover {
transform: scale(1.1) rotate(5deg);
}
.stamps img:nth-child(odd):hover {
transform: scale(1.1) rotate(-5deg);
}
#spotify {
background-image: none;
backdrop-filter: blur(2px) brightness(0.6);
border: var(--secondary-background-color) 2px solid;
border-radius: 10px;
padding: 15px;
box-sizing: border-box;
background-repeat: no-repeat;
background-size: contain;
height: 300px;
width: 300px;
display: flex;
flex-direction: column;
}
#spotify-title {
font-size: 1.5rem;
font-weight: 900;
margin: 0;
padding: 0;
mix-blend-mode: difference;
color: white;
}
#spotify-artist {
color: white;
font-size: 1rem;
font-weight: 900;
margin: 0;
padding: 0;
mix-blend-mode: difference;
}
.haj {
width: 100%;
filter: drop-shadow(0 0 0.5rem rgb(88, 214, 245));
}
.irken {
font-family: var(--irken-font);
}
#button-collection {
display: flex;
flex-direction: row;
justify-content: center;
flex-wrap: wrap;
}
#button-collection img {
transition: all 0.2s ease-in-out;
}
#button-collection img:hover {
transform: scale(1.1) rotate(5deg);
}
#button-collection img:nth-child(odd):hover {
transform: scale(1.1) rotate(-5deg);
}
#alt-nav {
display: none;
backdrop-filter: blur(2px) brightness(0.6);
width: 100%;
border: var(--secondary-background-color) 2px solid;
border-radius: 10px;
padding: 15px;
box-sizing: border-box;
}
#alt-nav ul {
list-style-type: none;
margin: 0;
padding: 0;
display: flex;
flex-wrap: wrap;
flex-direction: row;
gap: 1.5rem;
justify-content: center;
}
#alt-nav ul li {
width: fit-content;
}
#alt-nav ul li a {
color: var(--text-color);
text-decoration: none;
font-weight: 100;
transition: all 0.2s ease-in-out
}
#alt-nav ul li a:hover {
color: var(--primary-color);
font-weight: 900;
}
@media screen and (max-width: 1000px) {
body {
background-color: var(--background-color);
background-image: url("https://blinkies.cafe/purple-stars-bg.gif");
color: var(--text-color);
font-size: var(--font-size);
font-family: var(--font-family);
display: grid;
grid-template-columns: auto;
grid-template-rows: 1fr;
grid-template-areas: "main";
margin: 7% 0 7% 0;
gap: 1rem;
justify-content: center;
width: 100%;
}
#sidebar {
display: none;
}
#alt-nav {
display: block;
}
main {
width: 100%;
box-sizing: border-box;
padding: 0 1rem 0 1rem;
}
}
@media screen and (max-width: 650px) {
header img {
display: none;
}
header div.row {
justify-content: center;
}
section.rowsect {
width: 100%;
display: flex;
flex-direction: column;
gap: 1rem;
backdrop-filter: none;
border: none;
padding: 0;
}
div#spotify {
box-sizing: border-box;
background-repeat: no-repeat;
background-size: contain;
height: 100%;
width: auto;
aspect-ratio: 1/1;
display: flex;
flex-direction: column;
}
}

21
static/css/cap.css Normal file
View File

@@ -0,0 +1,21 @@
cap-widget {
--cap-background: var(--secondary-background-color-but-slightly-transparent);
--cap-border-color: var(--secondary-background-color);
--cap-border-radius: 14px;
--cap-widget-height: 30px;
--cap-widget-width: 230px;
--cap-widget-padding: 14px;
--cap-gap: 15px;
--cap-color: var(--text-color);
--cap-checkbox-size: 25px;
--cap-checkbox-border: 1px solid var(--secondary-background-color);
--cap-checkbox-border-radius: 6px;
--cap-checkbox-background: none;
--cap-checkbox-margin: 2px;
--cap-font: "Space Mono", "serif";
--cap-spinner-color: var(--primary-color);
--cap-spinner-background-color: var(--secondary-background-color-but-slightly-transparent);
--cap-spinner-thickness: 5px;
--cap-credits-font-size: 12px;
--cap-opacity-hover: 0.8;
}

BIN
static/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 240 KiB

138
static/js/base.js Normal file
View File

@@ -0,0 +1,138 @@
const values = [
"Web developer",
"Pc games enjoyer",
"Server backend survivor",
"python programmer",
"Javascript disliker",
"I use Arch btw",
"Owo, what's this?",
"Ultimate procrastinator",
"Ultrakill gaming",
"00111010 00110011",
"fistful of dollar",
"Thy end is now!!!",
"Possibly a furry",
"Prepare thyself!!!",
"Spegatti code master",
"Ethernet cable untangler",
"Caffeine addict",
"I'm not a robot ☑",
"Loud Music enjoyer",
"part time femboy :<",
];
var direction = 1;
var text = "";
var speed = 100;
var selectedValue = 0;
var currentValueIndex = 0;
var pause = false;
function randomValue() {
selectedValue = Math.floor(Math.random() * values.length);
currentValueIndex = 0;
}
function type() {
if (direction == 1) {
if (currentValueIndex < values[selectedValue].length) {
text += values[selectedValue][currentValueIndex];
currentValueIndex++;
} else {
direction = -1;
pause = true;
}
} else {
if (currentValueIndex > 0) {
text = text.slice(0, -1);
currentValueIndex--;
} else {
direction = 1;
randomValue();
}
}
}
function typing() {
type();
document.getElementById("typing").innerHTML = "$ " + text;
if (direction == 1) {
speed = 80 + Math.random() * 100;
} else {
speed = 60 + (Math.random() * 100) / 2;
}
if (!pause) {
setTimeout(typing, speed);
} else {
setTimeout(typing, 500);
pause = false;
}
}
typing();
// HIDDEN STUFF (shh don't tell anyone >:3)
var last5Chars = "";
document.addEventListener('keydown', function(event) {
last5Chars += event.key;
if (last5Chars == "furry") {
console.log("owo, whats this?");
document.getElementById('furry').style.display = 'block';
}
if (last5Chars == "irken") {
console.log("doom doom doom!");
document.querySelector(":root").style.setProperty('--font-family', 'Irken');
document.querySelector(":root").style.setProperty('--title-font', '1.5em');
}
while (last5Chars.length >= 5) {
last5Chars = last5Chars.slice(1);
}
});
// Spotify API
function getSpotify() {
fetch('https://api.alfieking.dev/spotify/nowplaying/xz02oolstlvwxqu1pfcua9exz').then(response => {
return response.json();
}).then(data => {
if (data.item == null) {
document.getElementById('spotify').style.backgroundImage = "none";
document.getElementById('spotify-title').innerHTML = "Spotify is not playing anything";
document.getElementById('spotify-artist').innerHTML = ":(";
document.getElementById('spotify-link').href = "https://open.spotify.com/";
return;
}
document.getElementById('spotify').style.backgroundImage = "url(" + data.item.album.images[0].url + ")";
document.getElementById('spotify-title').innerHTML = data.item.name;
document.getElementById('spotify-artist').innerHTML = data.item.artists[0].name;
document.getElementById('spotify-link').href = data.item.external_urls.spotify;
});
}
if (document.getElementById('spotify')) {
getSpotify();
setInterval(getSpotify, 15000);
}
// load buttons
function loadButtons() {
fetch('/static/content/buttons.txt').then(response => {
return response.text();
}).then(data => {
container = document.getElementById('button-collection');
for (let line of data.split('\n')) {
if (line == "") {
continue;
}
let img = document.createElement('img');
img.src = line;
container.appendChild(img);
}
});
}
if (document.getElementById('button-collection')) {
loadButtons();
}

174
static/js/snake.js Normal file
View File

@@ -0,0 +1,174 @@
const canvas = document.getElementById('snakeCanvas');
const ctx = canvas.getContext('2d');
const gridSize = 20;
const tileSize = 100;
const snakeSize = 60;
const foodSize = 80;
canvas.width = gridSize * tileSize;
canvas.height = gridSize * tileSize;
let snake = [{ x: 10, y: 10 }, { x: 10, y: 11 }, { x: 10, y: 12 }];
let direction = { x: 0, y: 0 };
let food = { x: Math.floor(Math.random() * gridSize), y: Math.floor(Math.random() * gridSize) };
let score = 0;
let gameOver = false;
function draw() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
// draw grid of checkerboard pattern
for (let x = 0; x < gridSize; x++) {
for (let y = 0; y < gridSize; y++) {
ctx.fillStyle = (x + y) % 2 === 0 ?
getComputedStyle(document.documentElement).getPropertyValue('--background-color') :
getComputedStyle(document.documentElement).getPropertyValue('--secondary-background-color');
ctx.fillRect(x * tileSize, y * tileSize, tileSize, tileSize);
}
}
// Draw snake
snake.forEach(segment => {
let nextVec = { x: 0, y: 0 };
// if there is a segment after the current segment
if (snake.indexOf(segment) < snake.length - 1) {
const nextSegment = snake[snake.indexOf(segment) + 1];
nextVec.x = nextSegment.x - segment.x;
nextVec.y = nextSegment.y - segment.y;
}
ctx.fillStyle = getComputedStyle(document.documentElement).getPropertyValue('--primary-color');
if (nextVec.x === 0 && nextVec.y === 0) {
ctx.fillRect(
segment.x * tileSize + (tileSize - snakeSize) / 2,
segment.y * tileSize + (tileSize - snakeSize) / 2,
snakeSize,
snakeSize
);
} else if (nextVec.x > 0 || nextVec.y > 0) {
ctx.fillRect(
segment.x * tileSize + (tileSize - snakeSize) / 2,
segment.y * tileSize + (tileSize - snakeSize) / 2,
snakeSize + nextVec.x * (tileSize - snakeSize),
snakeSize + nextVec.y * (tileSize - snakeSize)
);
} else {
ctx.fillRect(
segment.x * tileSize + (tileSize - snakeSize) / 2 + nextVec.x * (tileSize - snakeSize),
segment.y * tileSize + (tileSize - snakeSize) / 2 + nextVec.y * (tileSize - snakeSize),
snakeSize + Math.abs(nextVec.x) * (tileSize - snakeSize),
snakeSize + Math.abs(nextVec.y) * (tileSize - snakeSize)
);
}
});
// Draw food
ctx.fillStyle = '#ff4d4d';
ctx.fillRect(
food.x * tileSize + (tileSize - foodSize) / 2,
food.y * tileSize + (tileSize - foodSize) / 2,
foodSize,
foodSize
);
}
function update() {
if (gameOver) return;
// Move snake
const head = { x: snake[0].x + direction.x, y: snake[0].y + direction.y };
// Add new head
snake.unshift(head);
// Check for food collision
if (head.x === food.x && head.y === food.y) {
score += 10; // Increase score
placeFood();
} else {
snake.pop(); // Remove tail if no food eaten
}
// Check for wall collision
if (head.x < 0 || head.x >= gridSize || head.y < 0 || head.y >= gridSize) {
gameOver = true;
return;
}
// Check for self collision
for (let i = 1; i < snake.length; i++) {
if (head.x === snake[i].x && head.y === snake[i].y) {
gameOver = true;
return;
}
}
}
function placeFood() {
do {
food.x = Math.floor(Math.random() * gridSize);
food.y = Math.floor(Math.random() * gridSize);
} while (snake.some(segment => segment.x === food.x && segment.y === food.y));
}
function changeDirection(event) {
switch (event.key) {
case 'w':
if (direction.y === 0) direction = { x: 0, y: -1 };
break;
case 's':
if (direction.y === 0) direction = { x: 0, y: 1 };
break;
case 'a':
if (direction.x === 0) direction = { x: -1, y: 0 };
break;
case 'd':
if (direction.x === 0) direction = { x: 1, y: 0 };
break;
}
}
// Menu to start the game
function menu() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = getComputedStyle(document.documentElement).getPropertyValue('--background-color');
ctx.fillRect(0, 0, canvas.width, canvas.height);
ctx.textAlign = 'center';
ctx.fillStyle = getComputedStyle(document.documentElement).getPropertyValue('--text-color');
ctx.font = '200px Arial';
ctx.fillText('Snake Game', canvas.width / 2, canvas.height / 2);
ctx.font = '100px Arial';
ctx.fillText('Press W/A/S/D to move', canvas.width / 2, canvas.height / 2 + 100);
ctx.fillText('Click to start', canvas.width / 2, canvas.height / 2 + 200);
canvas.addEventListener('click', startGame);
}
function gameLoop() {
if (!gameOver) {
update();
draw();
setTimeout(gameLoop, 100);
} else {
document.removeEventListener('keydown', changeDirection);
document.getElementById('snake-score').value = score;
alert(`Game Over! Your score: ${score}`);
menu();
}
}
function startGame() {
snake = [{ x: 10, y: 10 }, { x: 10, y: 11 }, { x: 10, y: 12 }];
direction = { x: 1, y: 0 };
food = { x: Math.floor(Math.random() * gridSize), y: Math.floor(Math.random() * gridSize) };
score = 0;
gameOver = false;
canvas.removeEventListener('click', startGame);
document.addEventListener('keydown', changeDirection);
gameLoop();
}
menu();

7
static/robots.txt Normal file
View File

@@ -0,0 +1,7 @@
User-agent: *
Allow: /
Disallow: /404.html
Sitemap: https://alfieking.dev/sitemap.xml
# hewwo :3

6
static/sitemap.xml Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://www.example.com/index.html</loc>
</url>
</urlset>