19 Commits

Author SHA1 Message Date
af5116d931 update idk
All checks were successful
Deploy website / deploy (push) Successful in 2m1s
2026-03-29 15:50:47 +01:00
8dae4c1b5d ring fix
All checks were successful
Deploy website / deploy (push) Successful in 1m8s
2026-03-08 23:27:30 +00:00
8e67e714d0 news post and "ads" XD
All checks were successful
Deploy website / deploy (push) Successful in 56s
2026-03-05 00:23:01 +00:00
7c9aaa04ba volume and icon
All checks were successful
Deploy website / deploy (push) Successful in 54s
2026-03-04 22:07:03 +00:00
93ecd4999f deploy fix
All checks were successful
Deploy website / deploy (push) Successful in 1m19s
2026-03-04 21:58:57 +00:00
0d367e43a6 audio "fix"
All checks were successful
Deploy website / deploy (push) Successful in 26s
2026-03-04 21:54:21 +00:00
3afab4c7fa smileos
All checks were successful
Deploy website / deploy (push) Successful in 39s
2026-03-04 21:32:30 +00:00
885d2559af webrings and buttons
All checks were successful
Deploy website / deploy (push) Successful in 26s
2026-03-03 18:01:44 +00:00
8f1e4e60e1 more logs
All checks were successful
Deploy website / deploy (push) Successful in 35s
2026-03-03 15:13:51 +00:00
a47c2a3886 f*ck
All checks were successful
Deploy website / deploy (push) Successful in 22s
2026-03-03 15:06:57 +00:00
11d8621f9b pls work :3
Some checks failed
Deploy website / deploy (push) Failing after 23s
2026-03-03 15:05:38 +00:00
b683a2721a fix
Some checks failed
Deploy website / deploy (push) Failing after 11s
2026-03-03 15:03:40 +00:00
7a60ca468d deploy script
Some checks failed
Deploy website / deploy (push) Failing after 1m46s
2026-03-03 15:00:11 +00:00
1a5380e17e major update 2026-03-03 14:11:55 +00:00
6e92e40f1c markdown support
All checks were successful
Build and push container image / build-and-push-image (push) Successful in 5m35s
2026-02-26 23:14:36 +00:00
b4e6b4c296 scratch
All checks were successful
Build and push container image / build-and-push-image (push) Successful in 6m3s
2026-02-09 13:34:47 +00:00
9700a5dc7f music update
All checks were successful
Build and push container image / build-and-push-image (push) Successful in 4m39s
2026-02-02 01:24:14 +00:00
067f0e189d toaster button
All checks were successful
Build and push container image / build-and-push-image (push) Successful in 4m7s
2026-01-29 01:24:53 +00:00
639a8e2fb0 Merge pull request 'major update :O' (#2) from major-redesign into main
All checks were successful
Build and push container image / build-and-push-image (push) Successful in 5m57s
Reviewed-on: #2
2026-01-18 23:25:17 +00:00
72 changed files with 962 additions and 652 deletions

View File

@@ -1,33 +1,65 @@
name: Build and push container image
run-name: ${{ gitea.actor }} is building and pushing container image
name: Deploy website
run-name: ${{ gitea.actor }} is deploying update
on:
push:
branches:
- main
env:
GITEA_DOMAIN: git.alfieking.dev
GITEA_REGISTRY_USER: acetheking987
RESULT_IMAGE_NAME: acetheking987/alfieking.dev
jobs:
build-and-push-image:
deploy:
runs-on: ubuntu-latest
container:
image: catthehacker/ubuntu:act-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to registry
uses: docker/login-action@v3
with:
registry: ${{ env.GITEA_DOMAIN }}
username: ${{ env.GITEA_REGISTRY_USER }}
password: ${{ secrets.CONTAINER_REGISTRY_TOKEN }}
- name: Build and push image
uses: docker/build-push-action@v6
with:
push: true
tags: ${{ env.GITEA_DOMAIN }}/${{ env.RESULT_IMAGE_NAME }}:latest
- name: Setup SSH
run: |
mkdir -p ~/.ssh
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan ${{ secrets.SSH_HOST }} >> ~/.ssh/known_hosts
- name: Deploy
run: |
ssh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'EOF'
set -e
APP_DIR=/var/www/alfieking.dev
RELEASES_DIR=$APP_DIR/releases
TIMESTAMP=$(date +%Y%m%d%H%M%S)
NEW_RELEASE=$RELEASES_DIR/$TIMESTAMP
KEEP_RELEASES=5
echo "Creating release directory..."
mkdir -p $NEW_RELEASE
echo "Cloning public repository..."
git clone --depth 1 -b main \
https://git.alfieking.dev/acetheking987/alfieking.dev.git \
$NEW_RELEASE
echo "Installing dependencies..."
source $APP_DIR/venv/bin/activate
pip install -r $NEW_RELEASE/requirements.txt
echo "Switching symlink..."
ln -sfn $NEW_RELEASE $APP_DIR/current
echo "Changing ownership..."
chown -R www-data:www-data /var/www/alfieking.dev/releases/$TIMESTAMP
chown -R www-data:www-data /var/www/alfieking.dev/current
echo "Restarting Gunicorn (downtime incomming XD)..."
systemctl restart alfieking.dev.service
echo "Cleaning old releases..."
CURRENT_TARGET=$(readlink -f $APP_DIR/current)
cd $RELEASES_DIR
for dir in $(ls -dt */ | tail -n +$((KEEP_RELEASES+1))); do
FULL_PATH="$RELEASES_DIR/${dir%/}"
if [ "$FULL_PATH" != "$CURRENT_TARGET" ]; then
rm -rf "$FULL_PATH"
fi
done
echo "Deployment successful."
EOF

5
.gitignore vendored
View File

@@ -1,6 +1,3 @@
.venv
.env
flask_session
__pycache__
.vscode
db
.venv

382
app.log
View File

@@ -1,382 +0,0 @@
2026-01-18 22:25:14,613 - root - INFO - Logging initialized
2026-01-18 22:25:14,634 - werkzeug - WARNING - * Debugger is active!
2026-01-18 22:25:14,636 - werkzeug - INFO - * Debugger PIN: 133-323-371
2026-01-18 22:25:31,678 - werkzeug - INFO - * Detected change in '/home/alfie/Documents/programming-projects/websites/alfieking.dev/src/wsgi.py', reloading
2026-01-18 22:25:31,918 - root - INFO - Logging initialized
2026-01-18 22:25:31,942 - werkzeug - WARNING - * Debugger is active!
2026-01-18 22:25:31,944 - werkzeug - INFO - * Debugger PIN: 133-323-371
2026-01-18 22:25:44,977 - werkzeug - INFO - * Detected change in '/home/alfie/Documents/programming-projects/websites/alfieking.dev/src/wsgi.py', reloading
2026-01-18 22:25:45,205 - root - INFO - Logging initialized
2026-01-18 22:25:45,233 - werkzeug - WARNING - * Debugger is active!
2026-01-18 22:25:45,236 - werkzeug - INFO - * Debugger PIN: 133-323-371
2026-01-18 22:25:46,245 - werkzeug - INFO - * Detected change in '/home/alfie/Documents/programming-projects/websites/alfieking.dev/src/wsgi.py', reloading
2026-01-18 22:25:46,445 - root - INFO - Logging initialized
2026-01-18 22:25:46,466 - werkzeug - WARNING - * Debugger is active!
2026-01-18 22:25:46,469 - werkzeug - INFO - * Debugger PIN: 133-323-371
2026-01-18 22:25:47,478 - werkzeug - INFO - * Detected change in '/home/alfie/Documents/programming-projects/websites/alfieking.dev/src/wsgi.py', reloading
2026-01-18 22:25:47,700 - root - INFO - Logging initialized
2026-01-18 22:25:47,719 - werkzeug - WARNING - * Debugger is active!
2026-01-18 22:25:47,721 - werkzeug - INFO - * Debugger PIN: 133-323-371
2026-01-18 22:25:51,738 - werkzeug - INFO - * Detected change in '/home/alfie/Documents/programming-projects/websites/alfieking.dev/src/routes/error_handlers.py', reloading
2026-01-18 22:25:51,952 - root - INFO - Logging initialized
2026-01-18 22:25:51,973 - werkzeug - WARNING - * Debugger is active!
2026-01-18 22:25:51,976 - werkzeug - INFO - * Debugger PIN: 133-323-371
2026-01-18 22:25:52,986 - werkzeug - INFO - * Detected change in '/home/alfie/Documents/programming-projects/websites/alfieking.dev/src/routes/error_handlers.py', reloading
2026-01-18 22:25:53,233 - root - INFO - Logging initialized
2026-01-18 22:25:53,255 - werkzeug - WARNING - * Debugger is active!
2026-01-18 22:25:53,258 - werkzeug - INFO - * Debugger PIN: 133-323-371
2026-01-18 22:25:56,271 - werkzeug - INFO - * Detected change in '/home/alfie/Documents/programming-projects/websites/alfieking.dev/src/routes/error_handlers.py', reloading
2026-01-18 22:25:56,458 - root - INFO - Logging initialized
2026-01-18 22:25:56,480 - werkzeug - WARNING - * Debugger is active!
2026-01-18 22:25:56,482 - werkzeug - INFO - * Debugger PIN: 133-323-371
2026-01-18 22:26:01,503 - werkzeug - INFO - * Detected change in '/home/alfie/Documents/programming-projects/websites/alfieking.dev/src/routes/dynamic_routes.py', reloading
2026-01-18 22:26:01,709 - root - INFO - Logging initialized
2026-01-18 22:26:01,732 - werkzeug - WARNING - * Debugger is active!
2026-01-18 22:26:01,735 - werkzeug - INFO - * Debugger PIN: 133-323-371
2026-01-18 22:29:26,972 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:26] "GET /toaster HTTP/1.1" 200 -
2026-01-18 22:29:27,165 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "GET /static/css/bases/base.css HTTP/1.1" 304 -
2026-01-18 22:29:27,170 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "GET /static/css/toaster.css HTTP/1.1" 304 -
2026-01-18 22:29:27,175 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "GET /static/content/buttons/ne0nbandit.png HTTP/1.1" 304 -
2026-01-18 22:29:27,177 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "GET /static/content/buttons/thnlqd.png HTTP/1.1" 304 -
2026-01-18 22:29:27,179 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "GET /static/content/buttons/nekoweb.gif HTTP/1.1" 304 -
2026-01-18 22:29:27,177 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "GET /static/js/base.js HTTP/1.1" 304 -
2026-01-18 22:29:27,182 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "GET /static/content/buttons/s1nez.gif HTTP/1.1" 304 -
2026-01-18 22:29:27,187 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "GET /static/content/buttons/beeps.gif HTTP/1.1" 304 -
2026-01-18 22:29:27,189 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "GET /static/content/buttons/insia.gif HTTP/1.1" 304 -
2026-01-18 22:29:27,192 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "GET /static/content/buttons/blinkiescafe.gif HTTP/1.1" 304 -
2026-01-18 22:29:27,193 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "GET /static/content/toaster/Toaster_v1.0_Dark.png HTTP/1.1" 304 -
2026-01-18 22:29:27,194 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "GET /static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_155134418.jpg HTTP/1.1" 304 -
2026-01-18 22:29:27,195 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "GET /static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_152110445.jpg HTTP/1.1" 304 -
2026-01-18 22:29:27,198 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "GET /static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_155226274.jpg HTTP/1.1" 304 -
2026-01-18 22:29:27,199 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "GET /static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_155434701.jpg HTTP/1.1" 304 -
2026-01-18 22:29:27,201 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "GET /static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_141943558.jpg HTTP/1.1" 304 -
2026-01-18 22:29:27,201 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "GET /static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_150138054.jpg HTTP/1.1" 304 -
2026-01-18 22:29:27,204 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "GET /static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_150249916.jpg HTTP/1.1" 304 -
2026-01-18 22:29:27,205 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "GET /static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_183614897.jpg HTTP/1.1" 304 -
2026-01-18 22:29:27,207 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "GET /static/content/buttons/neocities.gif HTTP/1.1" 304 -
2026-01-18 22:29:27,208 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "GET /static/content/buttons/tuxedodragon.gif HTTP/1.1" 304 -
2026-01-18 22:29:27,208 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "GET /static/content/buttons/8831.png HTTP/1.1" 304 -
2026-01-18 22:29:27,211 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "GET /static/content/buttons/emmixis.gif HTTP/1.1" 304 -
2026-01-18 22:29:27,212 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "GET /static/content/general_images/icon.webp HTTP/1.1" 304 -
2026-01-18 22:29:27,213 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "GET /static/content/general_images/haj.gif HTTP/1.1" 304 -
2026-01-18 22:29:36,379 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:36] "GET /favicon.ico HTTP/1.1" 200 -
2026-01-18 22:30:27,601 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "GET / HTTP/1.1" 200 -
2026-01-18 22:30:27,788 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "GET /static/css/bases/base.css HTTP/1.1" 304 -
2026-01-18 22:30:27,790 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "GET /static/css/index.css HTTP/1.1" 304 -
2026-01-18 22:30:27,790 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "GET /static/js/base.js HTTP/1.1" 304 -
2026-01-18 22:30:27,799 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "GET /static/content/general_images/icon.webp HTTP/1.1" 304 -
2026-01-18 22:30:27,802 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "GET /static/content/buttons/thnlqd.png HTTP/1.1" 304 -
2026-01-18 22:30:27,803 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "GET /static/content/buttons/ne0nbandit.png HTTP/1.1" 304 -
2026-01-18 22:30:27,804 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "GET /static/content/buttons/nekoweb.gif HTTP/1.1" 304 -
2026-01-18 22:30:27,805 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "GET /static/content/buttons/s1nez.gif HTTP/1.1" 304 -
2026-01-18 22:30:27,803 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "GET /static/content/buttons/emmixis.gif HTTP/1.1" 304 -
2026-01-18 22:30:27,806 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "GET /static/content/buttons/beeps.gif HTTP/1.1" 304 -
2026-01-18 22:30:27,808 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "GET /static/content/buttons/blinkiescafe.gif HTTP/1.1" 304 -
2026-01-18 22:30:27,808 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "GET /static/content/buttons/insia.gif HTTP/1.1" 304 -
2026-01-18 22:30:27,810 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "GET /static/content/buttons/8831.png HTTP/1.1" 304 -
2026-01-18 22:30:27,811 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "GET /static/content/buttons/neocities.gif HTTP/1.1" 304 -
2026-01-18 22:30:27,812 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "GET /static/content/buttons/tuxedodragon.gif HTTP/1.1" 304 -
2026-01-18 22:30:27,813 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "GET /static/content/general_images/haj.gif HTTP/1.1" 304 -
2026-01-18 22:30:27,834 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "GET /static/content/other/buttons.txt HTTP/1.1" 304 -
2026-01-18 22:34:02,552 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "GET / HTTP/1.1" 200 -
2026-01-18 22:34:02,721 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "GET /static/css/bases/base.css HTTP/1.1" 304 -
2026-01-18 22:34:02,723 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "GET /static/css/index.css HTTP/1.1" 304 -
2026-01-18 22:34:02,723 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "GET /static/js/base.js HTTP/1.1" 304 -
2026-01-18 22:34:02,735 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "GET /static/content/buttons/emmixis.gif HTTP/1.1" 304 -
2026-01-18 22:34:02,737 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "GET /static/content/buttons/ne0nbandit.png HTTP/1.1" 304 -
2026-01-18 22:34:02,738 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "GET /static/content/buttons/thnlqd.png HTTP/1.1" 304 -
2026-01-18 22:34:02,740 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "GET /static/content/buttons/s1nez.gif HTTP/1.1" 304 -
2026-01-18 22:34:02,740 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "GET /static/content/buttons/nekoweb.gif HTTP/1.1" 304 -
2026-01-18 22:34:02,741 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "GET /static/content/buttons/beeps.gif HTTP/1.1" 304 -
2026-01-18 22:34:02,742 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "GET /static/content/buttons/insia.gif HTTP/1.1" 304 -
2026-01-18 22:34:02,744 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "GET /static/content/buttons/8831.png HTTP/1.1" 304 -
2026-01-18 22:34:02,747 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "GET /static/content/buttons/blinkiescafe.gif HTTP/1.1" 304 -
2026-01-18 22:34:02,748 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "GET /static/content/buttons/neocities.gif HTTP/1.1" 304 -
2026-01-18 22:34:02,750 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "GET /static/content/general_images/haj.gif HTTP/1.1" 304 -
2026-01-18 22:34:02,751 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "GET /static/content/buttons/tuxedodragon.gif HTTP/1.1" 304 -
2026-01-18 22:34:02,752 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "GET /static/content/general_images/icon.webp HTTP/1.1" 304 -
2026-01-18 22:34:02,763 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "GET /static/content/other/buttons.txt HTTP/1.1" 304 -
2026-01-18 22:34:12,375 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "GET / HTTP/1.1" 200 -
2026-01-18 22:34:12,515 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "GET /static/css/bases/base.css HTTP/1.1" 304 -
2026-01-18 22:34:12,517 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "GET /static/css/index.css HTTP/1.1" 304 -
2026-01-18 22:34:12,517 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "GET /static/js/base.js HTTP/1.1" 304 -
2026-01-18 22:34:12,520 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "GET /static/content/buttons/emmixis.gif HTTP/1.1" 304 -
2026-01-18 22:34:12,523 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "GET /static/content/buttons/ne0nbandit.png HTTP/1.1" 304 -
2026-01-18 22:34:12,525 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "GET /static/content/buttons/thnlqd.png HTTP/1.1" 304 -
2026-01-18 22:34:12,527 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "GET /static/content/buttons/beeps.gif HTTP/1.1" 304 -
2026-01-18 22:34:12,528 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "GET /static/content/buttons/nekoweb.gif HTTP/1.1" 304 -
2026-01-18 22:34:12,531 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "GET /static/content/buttons/insia.gif HTTP/1.1" 304 -
2026-01-18 22:34:12,531 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "GET /static/content/buttons/s1nez.gif HTTP/1.1" 304 -
2026-01-18 22:34:12,534 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "GET /static/content/buttons/8831.png HTTP/1.1" 304 -
2026-01-18 22:34:12,535 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "GET /static/content/buttons/neocities.gif HTTP/1.1" 304 -
2026-01-18 22:34:12,536 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "GET /static/content/buttons/blinkiescafe.gif HTTP/1.1" 304 -
2026-01-18 22:34:12,538 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "GET /static/content/buttons/tuxedodragon.gif HTTP/1.1" 304 -
2026-01-18 22:34:12,541 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "GET /static/content/general_images/haj.gif HTTP/1.1" 304 -
2026-01-18 22:34:12,543 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "GET /static/content/general_images/icon.webp HTTP/1.1" 304 -
2026-01-18 22:34:12,586 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "GET /static/content/other/buttons.txt HTTP/1.1" 304 -
2026-01-18 22:34:17,701 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "GET / HTTP/1.1" 200 -
2026-01-18 22:34:17,811 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "GET /static/css/index.css HTTP/1.1" 304 -
2026-01-18 22:34:17,812 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "GET /static/css/bases/base.css HTTP/1.1" 304 -
2026-01-18 22:34:17,812 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "GET /static/js/base.js HTTP/1.1" 304 -
2026-01-18 22:34:17,818 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "GET /static/content/buttons/emmixis.gif HTTP/1.1" 304 -
2026-01-18 22:34:17,819 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "GET /static/content/buttons/ne0nbandit.png HTTP/1.1" 304 -
2026-01-18 22:34:17,820 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "GET /static/content/buttons/thnlqd.png HTTP/1.1" 304 -
2026-01-18 22:34:17,821 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "GET /static/content/buttons/nekoweb.gif HTTP/1.1" 304 -
2026-01-18 22:34:17,822 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "GET /static/content/buttons/s1nez.gif HTTP/1.1" 304 -
2026-01-18 22:34:17,825 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "GET /static/content/buttons/beeps.gif HTTP/1.1" 304 -
2026-01-18 22:34:17,825 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "GET /static/content/buttons/insia.gif HTTP/1.1" 304 -
2026-01-18 22:34:17,827 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "GET /static/content/buttons/8831.png HTTP/1.1" 304 -
2026-01-18 22:34:17,829 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "GET /static/content/buttons/neocities.gif HTTP/1.1" 304 -
2026-01-18 22:34:17,831 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "GET /static/content/buttons/tuxedodragon.gif HTTP/1.1" 304 -
2026-01-18 22:34:17,830 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "GET /static/content/buttons/blinkiescafe.gif HTTP/1.1" 304 -
2026-01-18 22:34:17,833 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "GET /static/content/general_images/icon.webp HTTP/1.1" 304 -
2026-01-18 22:34:17,832 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "GET /static/content/general_images/haj.gif HTTP/1.1" 304 -
2026-01-18 22:34:17,857 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "GET /static/content/other/buttons.txt HTTP/1.1" 304 -
2026-01-18 22:40:44,310 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "GET / HTTP/1.1" 200 -
2026-01-18 22:40:44,451 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "GET /static/css/bases/base.css HTTP/1.1" 304 -
2026-01-18 22:40:44,451 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "GET /static/css/index.css HTTP/1.1" 304 -
2026-01-18 22:40:44,453 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "GET /static/js/base.js HTTP/1.1" 304 -
2026-01-18 22:40:44,464 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "GET /static/content/buttons/emmixis.gif HTTP/1.1" 304 -
2026-01-18 22:40:44,465 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "GET /static/content/buttons/ne0nbandit.png HTTP/1.1" 304 -
2026-01-18 22:40:44,466 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "GET /static/content/buttons/thnlqd.png HTTP/1.1" 304 -
2026-01-18 22:40:44,467 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "GET /static/content/buttons/nekoweb.gif HTTP/1.1" 304 -
2026-01-18 22:40:44,468 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "GET /static/content/buttons/s1nez.gif HTTP/1.1" 304 -
2026-01-18 22:40:44,468 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "GET /static/content/buttons/beeps.gif HTTP/1.1" 304 -
2026-01-18 22:40:44,469 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "GET /static/content/buttons/insia.gif HTTP/1.1" 304 -
2026-01-18 22:40:44,471 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "GET /static/content/buttons/tuxedodragon.gif HTTP/1.1" 304 -
2026-01-18 22:40:44,473 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "GET /static/content/buttons/neocities.gif HTTP/1.1" 304 -
2026-01-18 22:40:44,474 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "GET /static/content/buttons/8831.png HTTP/1.1" 304 -
2026-01-18 22:40:44,475 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "GET /static/content/buttons/blinkiescafe.gif HTTP/1.1" 304 -
2026-01-18 22:40:44,554 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "GET /static/content/general_images/icon.webp HTTP/1.1" 304 -
2026-01-18 22:40:44,555 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "GET /static/content/general_images/haj.gif HTTP/1.1" 304 -
2026-01-18 22:40:44,555 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "GET /static/content/other/buttons.txt HTTP/1.1" 304 -
2026-01-18 22:40:59,771 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "GET /toaster HTTP/1.1" 200 -
2026-01-18 22:40:59,918 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "GET /static/css/bases/base.css HTTP/1.1" 304 -
2026-01-18 22:40:59,918 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "GET /static/js/base.js HTTP/1.1" 304 -
2026-01-18 22:40:59,919 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "GET /static/css/toaster.css HTTP/1.1" 304 -
2026-01-18 22:40:59,924 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "GET /static/content/buttons/emmixis.gif HTTP/1.1" 304 -
2026-01-18 22:40:59,925 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "GET /static/content/buttons/ne0nbandit.png HTTP/1.1" 304 -
2026-01-18 22:40:59,926 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "GET /static/content/buttons/thnlqd.png HTTP/1.1" 304 -
2026-01-18 22:40:59,928 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "GET /static/content/buttons/nekoweb.gif HTTP/1.1" 304 -
2026-01-18 22:40:59,929 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "GET /static/content/buttons/insia.gif HTTP/1.1" 304 -
2026-01-18 22:40:59,929 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "GET /static/content/buttons/s1nez.gif HTTP/1.1" 304 -
2026-01-18 22:40:59,930 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "GET /static/content/buttons/beeps.gif HTTP/1.1" 304 -
2026-01-18 22:40:59,932 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "GET /static/content/buttons/blinkiescafe.gif HTTP/1.1" 304 -
2026-01-18 22:40:59,933 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "GET /static/content/buttons/8831.png HTTP/1.1" 304 -
2026-01-18 22:40:59,934 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "GET /static/content/buttons/neocities.gif HTTP/1.1" 304 -
2026-01-18 22:40:59,935 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "GET /static/content/buttons/tuxedodragon.gif HTTP/1.1" 304 -
2026-01-18 22:40:59,948 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "GET /static/content/general_images/haj.gif HTTP/1.1" 304 -
2026-01-18 22:40:59,949 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "GET /static/content/general_images/icon.webp HTTP/1.1" 304 -
2026-01-18 22:40:59,950 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "GET /static/content/toaster/Toaster_v1.0_Dark.png HTTP/1.1" 304 -
2026-01-18 22:40:59,952 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "GET /static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_152110445.jpg HTTP/1.1" 304 -
2026-01-18 22:40:59,954 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "GET /static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_155434701.jpg HTTP/1.1" 304 -
2026-01-18 22:40:59,953 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "GET /static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_155134418.jpg HTTP/1.1" 304 -
2026-01-18 22:40:59,955 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "GET /static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_155226274.jpg HTTP/1.1" 304 -
2026-01-18 22:40:59,956 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "GET /static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_141943558.jpg HTTP/1.1" 304 -
2026-01-18 22:40:59,958 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "GET /static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_150249916.jpg HTTP/1.1" 304 -
2026-01-18 22:40:59,958 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "GET /static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_150138054.jpg HTTP/1.1" 304 -
2026-01-18 22:40:59,960 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "GET /static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_183614897.jpg HTTP/1.1" 304 -
2026-01-18 22:41:12,308 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "GET /toaster HTTP/1.1" 200 -
2026-01-18 22:41:12,502 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "GET /static/css/bases/base.css HTTP/1.1" 304 -
2026-01-18 22:41:12,503 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "GET /static/css/toaster.css HTTP/1.1" 304 -
2026-01-18 22:41:12,503 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "GET /static/js/base.js HTTP/1.1" 304 -
2026-01-18 22:41:12,517 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "GET /static/content/buttons/emmixis.gif HTTP/1.1" 304 -
2026-01-18 22:41:12,519 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "GET /static/content/buttons/ne0nbandit.png HTTP/1.1" 304 -
2026-01-18 22:41:12,520 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "GET /static/content/buttons/thnlqd.png HTTP/1.1" 304 -
2026-01-18 22:41:12,521 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "GET /static/content/buttons/nekoweb.gif HTTP/1.1" 304 -
2026-01-18 22:41:12,522 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "GET /static/content/buttons/s1nez.gif HTTP/1.1" 304 -
2026-01-18 22:41:12,523 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "GET /static/content/buttons/beeps.gif HTTP/1.1" 304 -
2026-01-18 22:41:12,524 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "GET /static/content/buttons/blinkiescafe.gif HTTP/1.1" 304 -
2026-01-18 22:41:12,525 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "GET /static/content/buttons/insia.gif HTTP/1.1" 304 -
2026-01-18 22:41:12,526 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "GET /static/content/buttons/8831.png HTTP/1.1" 304 -
2026-01-18 22:41:12,528 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "GET /static/content/buttons/neocities.gif HTTP/1.1" 304 -
2026-01-18 22:41:12,529 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "GET /static/content/buttons/tuxedodragon.gif HTTP/1.1" 304 -
2026-01-18 22:41:12,564 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "GET /static/content/general_images/icon.webp HTTP/1.1" 304 -
2026-01-18 22:41:12,566 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "GET /static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_152110445.jpg HTTP/1.1" 304 -
2026-01-18 22:41:12,568 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "GET /static/content/general_images/haj.gif HTTP/1.1" 304 -
2026-01-18 22:41:12,569 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "GET /static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_155134418.jpg HTTP/1.1" 304 -
2026-01-18 22:41:12,568 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "GET /static/content/toaster/Toaster_v1.0_Dark.png HTTP/1.1" 304 -
2026-01-18 22:41:12,572 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "GET /static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_155226274.jpg HTTP/1.1" 304 -
2026-01-18 22:41:12,573 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "GET /static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_155434701.jpg HTTP/1.1" 304 -
2026-01-18 22:41:12,576 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "GET /static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_141943558.jpg HTTP/1.1" 304 -
2026-01-18 22:41:12,577 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "GET /static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_150138054.jpg HTTP/1.1" 304 -
2026-01-18 22:41:12,578 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "GET /static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_150249916.jpg HTTP/1.1" 304 -
2026-01-18 22:41:12,579 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "GET /static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_183614897.jpg HTTP/1.1" 304 -
2026-01-18 22:41:55,101 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "GET / HTTP/1.1" 200 -
2026-01-18 22:41:55,212 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "GET /static/css/bases/base.css HTTP/1.1" 304 -
2026-01-18 22:41:55,212 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "GET /static/css/index.css HTTP/1.1" 304 -
2026-01-18 22:41:55,214 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "GET /static/js/base.js HTTP/1.1" 304 -
2026-01-18 22:41:55,222 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "GET /static/content/buttons/emmixis.gif HTTP/1.1" 304 -
2026-01-18 22:41:55,226 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "GET /static/content/buttons/ne0nbandit.png HTTP/1.1" 304 -
2026-01-18 22:41:55,226 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "GET /static/content/buttons/nekoweb.gif HTTP/1.1" 304 -
2026-01-18 22:41:55,227 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "GET /static/content/buttons/beeps.gif HTTP/1.1" 304 -
2026-01-18 22:41:55,228 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "GET /static/content/buttons/thnlqd.png HTTP/1.1" 304 -
2026-01-18 22:41:55,229 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "GET /static/content/buttons/s1nez.gif HTTP/1.1" 304 -
2026-01-18 22:41:55,230 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "GET /static/content/buttons/insia.gif HTTP/1.1" 304 -
2026-01-18 22:41:55,232 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "GET /static/content/buttons/blinkiescafe.gif HTTP/1.1" 304 -
2026-01-18 22:41:55,233 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "GET /static/content/buttons/neocities.gif HTTP/1.1" 304 -
2026-01-18 22:41:55,232 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "GET /static/content/buttons/8831.png HTTP/1.1" 304 -
2026-01-18 22:41:55,234 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "GET /static/content/buttons/tuxedodragon.gif HTTP/1.1" 304 -
2026-01-18 22:41:55,272 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "GET /static/content/general_images/haj.gif HTTP/1.1" 304 -
2026-01-18 22:41:55,272 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "GET /static/content/general_images/icon.webp HTTP/1.1" 304 -
2026-01-18 22:41:55,273 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "GET /static/content/other/buttons.txt HTTP/1.1" 304 -
2026-01-18 22:42:08,053 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "GET / HTTP/1.1" 200 -
2026-01-18 22:42:08,145 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "GET /static/css/index.css HTTP/1.1" 304 -
2026-01-18 22:42:08,145 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "GET /static/css/bases/base.css HTTP/1.1" 304 -
2026-01-18 22:42:08,146 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "GET /static/js/base.js HTTP/1.1" 304 -
2026-01-18 22:42:08,149 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "GET /static/content/buttons/emmixis.gif HTTP/1.1" 304 -
2026-01-18 22:42:08,149 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "GET /static/content/buttons/ne0nbandit.png HTTP/1.1" 304 -
2026-01-18 22:42:08,151 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "GET /static/content/buttons/nekoweb.gif HTTP/1.1" 304 -
2026-01-18 22:42:08,152 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "GET /static/content/buttons/beeps.gif HTTP/1.1" 304 -
2026-01-18 22:42:08,153 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "GET /static/content/buttons/thnlqd.png HTTP/1.1" 304 -
2026-01-18 22:42:08,154 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "GET /static/content/buttons/blinkiescafe.gif HTTP/1.1" 304 -
2026-01-18 22:42:08,155 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "GET /static/content/buttons/s1nez.gif HTTP/1.1" 304 -
2026-01-18 22:42:08,153 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "GET /static/content/buttons/insia.gif HTTP/1.1" 304 -
2026-01-18 22:42:08,156 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "GET /static/content/buttons/8831.png HTTP/1.1" 304 -
2026-01-18 22:42:08,159 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "GET /static/content/buttons/tuxedodragon.gif HTTP/1.1" 304 -
2026-01-18 22:42:08,160 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "GET /static/content/buttons/neocities.gif HTTP/1.1" 304 -
2026-01-18 22:42:08,171 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "GET /static/content/general_images/icon.webp HTTP/1.1" 304 -
2026-01-18 22:42:08,171 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "GET /static/content/general_images/haj.gif HTTP/1.1" 304 -
2026-01-18 22:42:08,182 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "GET /static/content/other/buttons.txt HTTP/1.1" 304 -
2026-01-18 22:46:31,733 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "GET / HTTP/1.1" 200 -
2026-01-18 22:46:31,838 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "GET /static/css/bases/base.css HTTP/1.1" 304 -
2026-01-18 22:46:31,839 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "GET /static/js/base.js HTTP/1.1" 304 -
2026-01-18 22:46:31,840 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "GET /static/css/index.css HTTP/1.1" 304 -
2026-01-18 22:46:31,863 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "GET /static/content/buttons/emmixis.gif HTTP/1.1" 304 -
2026-01-18 22:46:31,864 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "GET /static/content/buttons/ne0nbandit.png HTTP/1.1" 304 -
2026-01-18 22:46:31,864 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "GET /static/content/buttons/thnlqd.png HTTP/1.1" 304 -
2026-01-18 22:46:31,866 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "GET /static/content/buttons/nekoweb.gif HTTP/1.1" 304 -
2026-01-18 22:46:31,867 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "GET /static/content/buttons/s1nez.gif HTTP/1.1" 304 -
2026-01-18 22:46:31,868 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "GET /static/content/buttons/beeps.gif HTTP/1.1" 304 -
2026-01-18 22:46:31,870 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "GET /static/content/buttons/blinkiescafe.gif HTTP/1.1" 304 -
2026-01-18 22:46:31,871 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "GET /static/content/buttons/8831.png HTTP/1.1" 304 -
2026-01-18 22:46:31,872 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "GET /static/content/buttons/insia.gif HTTP/1.1" 304 -
2026-01-18 22:46:31,873 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "GET /static/content/buttons/neocities.gif HTTP/1.1" 304 -
2026-01-18 22:46:31,873 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "GET /static/content/buttons/tuxedodragon.gif HTTP/1.1" 304 -
2026-01-18 22:46:31,893 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "GET /static/content/general_images/haj.gif HTTP/1.1" 304 -
2026-01-18 22:46:31,894 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "GET /static/content/other/buttons.txt HTTP/1.1" 304 -
2026-01-18 22:46:31,893 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "GET /static/content/general_images/icon.webp HTTP/1.1" 304 -
2026-01-18 22:46:47,977 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:47] "GET / HTTP/1.1" 200 -
2026-01-18 22:46:48,077 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "GET /static/css/bases/base.css HTTP/1.1" 304 -
2026-01-18 22:46:48,078 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "GET /static/css/index.css HTTP/1.1" 304 -
2026-01-18 22:46:48,079 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "GET /static/js/base.js HTTP/1.1" 304 -
2026-01-18 22:46:48,083 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "GET /static/content/buttons/emmixis.gif HTTP/1.1" 304 -
2026-01-18 22:46:48,084 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "GET /static/content/buttons/ne0nbandit.png HTTP/1.1" 304 -
2026-01-18 22:46:48,085 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "GET /static/content/buttons/thnlqd.png HTTP/1.1" 304 -
2026-01-18 22:46:48,086 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "GET /static/content/buttons/nekoweb.gif HTTP/1.1" 304 -
2026-01-18 22:46:48,088 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "GET /static/content/buttons/tuxedodragon.gif HTTP/1.1" 304 -
2026-01-18 22:46:48,088 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "GET /static/content/buttons/insia.gif HTTP/1.1" 304 -
2026-01-18 22:46:48,087 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "GET /static/content/buttons/s1nez.gif HTTP/1.1" 304 -
2026-01-18 22:46:48,088 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "GET /static/content/buttons/beeps.gif HTTP/1.1" 304 -
2026-01-18 22:46:48,091 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "GET /static/content/buttons/blinkiescafe.gif HTTP/1.1" 304 -
2026-01-18 22:46:48,092 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "GET /static/content/buttons/neocities.gif HTTP/1.1" 304 -
2026-01-18 22:46:48,092 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "GET /static/content/buttons/8831.png HTTP/1.1" 304 -
2026-01-18 22:46:48,101 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "GET /static/content/general_images/haj.gif HTTP/1.1" 304 -
2026-01-18 22:46:48,102 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "GET /static/content/general_images/icon.webp HTTP/1.1" 304 -
2026-01-18 22:46:48,106 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "GET /static/content/other/buttons.txt HTTP/1.1" 304 -
2026-01-18 22:49:58,019 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:49:58] "GET / HTTP/1.1" 200 -
2026-01-18 22:49:58,211 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:49:58] "GET /static/css/bases/base.css HTTP/1.1" 304 -
2026-01-18 22:49:58,211 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:49:58] "GET /static/css/index.css HTTP/1.1" 304 -
2026-01-18 22:49:58,220 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:49:58] "GET /static/js/base.js HTTP/1.1" 200 -
2026-01-18 22:49:58,261 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:49:58] "GET /static/content/buttons/emmixis.gif HTTP/1.1" 304 -
2026-01-18 22:49:58,263 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:49:58] "GET /static/content/buttons/nekoweb.gif HTTP/1.1" 304 -
2026-01-18 22:49:58,265 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:49:58] "GET /static/content/buttons/ne0nbandit.png HTTP/1.1" 304 -
2026-01-18 22:49:58,264 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:49:58] "GET /static/content/buttons/thnlqd.png HTTP/1.1" 304 -
2026-01-18 22:49:58,264 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:49:58] "GET /static/content/buttons/s1nez.gif HTTP/1.1" 304 -
2026-01-18 22:49:58,266 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:49:58] "GET /static/content/buttons/beeps.gif HTTP/1.1" 304 -
2026-01-18 22:49:58,267 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:49:58] "GET /static/content/buttons/insia.gif HTTP/1.1" 304 -
2026-01-18 22:49:58,269 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:49:58] "GET /static/content/buttons/neocities.gif HTTP/1.1" 304 -
2026-01-18 22:49:58,270 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:49:58] "GET /static/content/buttons/8831.png HTTP/1.1" 304 -
2026-01-18 22:49:58,270 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:49:58] "GET /static/content/buttons/blinkiescafe.gif HTTP/1.1" 304 -
2026-01-18 22:49:58,271 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:49:58] "GET /static/content/buttons/tuxedodragon.gif HTTP/1.1" 304 -
2026-01-18 22:49:58,322 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:49:58] "GET /static/content/general_images/haj.gif HTTP/1.1" 304 -
2026-01-18 22:49:58,324 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:49:58] "GET /static/content/general_images/icon.webp HTTP/1.1" 304 -
2026-01-18 22:49:58,356 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:49:58] "GET /static/content/buttons/non_link_buttons.txt HTTP/1.1" 200 -
2026-01-18 22:54:40,587 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "GET / HTTP/1.1" 200 -
2026-01-18 22:54:40,771 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "GET /static/css/bases/base.css HTTP/1.1" 304 -
2026-01-18 22:54:40,771 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "GET /static/css/index.css HTTP/1.1" 304 -
2026-01-18 22:54:40,774 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "GET /static/js/base.js HTTP/1.1" 304 -
2026-01-18 22:54:40,784 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "GET /static/content/buttons/hijpixel.gif HTTP/1.1" 200 -
2026-01-18 22:54:40,786 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "GET /static/content/buttons/lensdeer.gif HTTP/1.1" 200 -
2026-01-18 22:54:40,791 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "GET /static/content/buttons/emmixis.gif HTTP/1.1" 304 -
2026-01-18 22:54:40,793 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "GET /static/content/buttons/ne0nbandit.png HTTP/1.1" 304 -
2026-01-18 22:54:40,793 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "GET /static/content/buttons/thnlqd.png HTTP/1.1" 304 -
2026-01-18 22:54:40,795 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "GET /static/content/buttons/s1nez.gif HTTP/1.1" 304 -
2026-01-18 22:54:40,796 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "GET /static/content/buttons/nekoweb.gif HTTP/1.1" 304 -
2026-01-18 22:54:40,799 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "GET /static/content/buttons/beeps.gif HTTP/1.1" 304 -
2026-01-18 22:54:40,800 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "GET /static/content/buttons/blinkiescafe.gif HTTP/1.1" 304 -
2026-01-18 22:54:40,801 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "GET /static/content/buttons/8831.png HTTP/1.1" 304 -
2026-01-18 22:54:40,802 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "GET /static/content/buttons/insia.gif HTTP/1.1" 304 -
2026-01-18 22:54:40,803 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "GET /static/content/buttons/tuxedodragon.gif HTTP/1.1" 304 -
2026-01-18 22:54:40,803 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "GET /static/content/buttons/neocities.gif HTTP/1.1" 304 -
2026-01-18 22:54:40,826 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "GET /static/content/general_images/haj.gif HTTP/1.1" 304 -
2026-01-18 22:54:40,828 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "GET /static/content/general_images/icon.webp HTTP/1.1" 304 -
2026-01-18 22:54:40,838 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "GET /static/content/buttons/non_link_buttons.txt HTTP/1.1" 200 -
2026-01-18 22:55:37,951 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:37] "GET /toaster HTTP/1.1" 200 -
2026-01-18 22:55:38,101 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "GET /static/css/bases/base.css HTTP/1.1" 304 -
2026-01-18 22:55:38,101 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "GET /static/css/toaster.css HTTP/1.1" 304 -
2026-01-18 22:55:38,102 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "GET /static/js/base.js HTTP/1.1" 304 -
2026-01-18 22:55:38,107 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "GET /static/content/buttons/hijpixel.gif HTTP/1.1" 304 -
2026-01-18 22:55:38,108 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "GET /static/content/buttons/lensdeer.gif HTTP/1.1" 304 -
2026-01-18 22:55:38,110 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "GET /static/content/buttons/emmixis.gif HTTP/1.1" 304 -
2026-01-18 22:55:38,111 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "GET /static/content/buttons/ne0nbandit.png HTTP/1.1" 304 -
2026-01-18 22:55:38,112 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "GET /static/content/buttons/thnlqd.png HTTP/1.1" 304 -
2026-01-18 22:55:38,112 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "GET /static/content/buttons/nekoweb.gif HTTP/1.1" 304 -
2026-01-18 22:55:38,114 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "GET /static/content/buttons/s1nez.gif HTTP/1.1" 304 -
2026-01-18 22:55:38,116 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "GET /static/content/buttons/beeps.gif HTTP/1.1" 304 -
2026-01-18 22:55:38,116 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "GET /static/content/buttons/insia.gif HTTP/1.1" 304 -
2026-01-18 22:55:38,117 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "GET /static/content/buttons/blinkiescafe.gif HTTP/1.1" 304 -
2026-01-18 22:55:38,119 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "GET /static/content/buttons/neocities.gif HTTP/1.1" 304 -
2026-01-18 22:55:38,119 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "GET /static/content/buttons/8831.png HTTP/1.1" 304 -
2026-01-18 22:55:38,121 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "GET /static/content/buttons/tuxedodragon.gif HTTP/1.1" 304 -
2026-01-18 22:55:38,143 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "GET /static/content/general_images/haj.gif HTTP/1.1" 304 -
2026-01-18 22:55:38,144 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "GET /static/content/general_images/icon.webp HTTP/1.1" 304 -
2026-01-18 22:55:38,145 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "GET /static/content/toaster/Toaster_v1.0_Dark.png HTTP/1.1" 304 -
2026-01-18 22:55:38,147 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "GET /static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_152110445.jpg HTTP/1.1" 304 -
2026-01-18 22:55:38,147 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "GET /static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_155134418.jpg HTTP/1.1" 304 -
2026-01-18 22:55:38,148 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "GET /static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_155226274.jpg HTTP/1.1" 304 -
2026-01-18 22:55:38,150 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "GET /static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_150138054.jpg HTTP/1.1" 304 -
2026-01-18 22:55:38,150 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "GET /static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_155434701.jpg HTTP/1.1" 304 -
2026-01-18 22:55:38,151 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "GET /static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_141943558.jpg HTTP/1.1" 304 -
2026-01-18 22:55:38,151 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "GET /static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_150249916.jpg HTTP/1.1" 304 -
2026-01-18 22:55:38,152 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "GET /static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_183614897.jpg HTTP/1.1" 304 -
2026-01-18 23:19:45,287 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "GET / HTTP/1.1" 200 -
2026-01-18 23:19:45,445 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "GET /static/css/bases/base.css HTTP/1.1" 304 -
2026-01-18 23:19:45,446 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "GET /static/css/index.css HTTP/1.1" 304 -
2026-01-18 23:19:45,447 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "GET /static/js/base.js HTTP/1.1" 304 -
2026-01-18 23:19:45,479 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "GET /static/content/buttons/hijpixel.gif HTTP/1.1" 304 -
2026-01-18 23:19:45,479 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "GET /static/content/buttons/lensdeer.gif HTTP/1.1" 304 -
2026-01-18 23:19:45,481 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "GET /static/content/buttons/emmixis.gif HTTP/1.1" 304 -
2026-01-18 23:19:45,482 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "GET /static/content/buttons/ne0nbandit.png HTTP/1.1" 304 -
2026-01-18 23:19:45,484 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "GET /static/content/buttons/nekoweb.gif HTTP/1.1" 304 -
2026-01-18 23:19:45,485 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "GET /static/content/buttons/thnlqd.png HTTP/1.1" 304 -
2026-01-18 23:19:45,485 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "GET /static/content/buttons/s1nez.gif HTTP/1.1" 304 -
2026-01-18 23:19:45,487 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "GET /static/content/buttons/beeps.gif HTTP/1.1" 304 -
2026-01-18 23:19:45,488 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "GET /static/content/buttons/insia.gif HTTP/1.1" 304 -
2026-01-18 23:19:45,489 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "GET /static/content/buttons/blinkiescafe.gif HTTP/1.1" 304 -
2026-01-18 23:19:45,491 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "GET /static/content/buttons/8831.png HTTP/1.1" 304 -
2026-01-18 23:19:45,491 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "GET /static/content/buttons/neocities.gif HTTP/1.1" 304 -
2026-01-18 23:19:45,492 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "GET /static/content/buttons/tuxedodragon.gif HTTP/1.1" 304 -
2026-01-18 23:19:45,535 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "GET /static/content/general_images/icon.webp HTTP/1.1" 304 -
2026-01-18 23:19:45,536 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "GET /static/content/general_images/haj.gif HTTP/1.1" 304 -
2026-01-18 23:19:45,537 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "GET /static/content/buttons/non_link_buttons.txt HTTP/1.1" 304 -
2026-01-18 23:21:27,084 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "GET / HTTP/1.1" 200 -
2026-01-18 23:21:27,215 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "GET /static/css/bases/base.css HTTP/1.1" 304 -
2026-01-18 23:21:27,216 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "GET /static/css/index.css HTTP/1.1" 304 -
2026-01-18 23:21:27,217 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "GET /static/js/base.js HTTP/1.1" 304 -
2026-01-18 23:21:27,226 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "GET /static/content/buttons/hijpixel.gif HTTP/1.1" 304 -
2026-01-18 23:21:27,227 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "GET /static/content/buttons/lensdeer.gif HTTP/1.1" 304 -
2026-01-18 23:21:27,228 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "GET /static/content/buttons/emmixis.gif HTTP/1.1" 304 -
2026-01-18 23:21:27,229 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "GET /static/content/buttons/ne0nbandit.png HTTP/1.1" 304 -
2026-01-18 23:21:27,231 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "GET /static/content/buttons/nekoweb.gif HTTP/1.1" 304 -
2026-01-18 23:21:27,232 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "GET /static/content/buttons/thnlqd.png HTTP/1.1" 304 -
2026-01-18 23:21:27,231 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "GET /static/content/buttons/s1nez.gif HTTP/1.1" 304 -
2026-01-18 23:21:27,234 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "GET /static/content/buttons/beeps.gif HTTP/1.1" 304 -
2026-01-18 23:21:27,235 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "GET /static/content/buttons/insia.gif HTTP/1.1" 304 -
2026-01-18 23:21:27,238 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "GET /static/content/buttons/blinkiescafe.gif HTTP/1.1" 304 -
2026-01-18 23:21:27,236 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "GET /static/content/buttons/8831.png HTTP/1.1" 304 -
2026-01-18 23:21:27,237 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "GET /static/content/buttons/neocities.gif HTTP/1.1" 304 -
2026-01-18 23:21:27,240 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "GET /static/content/buttons/tuxedodragon.gif HTTP/1.1" 304 -
2026-01-18 23:21:27,275 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "GET /static/content/general_images/haj.gif HTTP/1.1" 304 -
2026-01-18 23:21:27,276 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "GET /static/content/general_images/icon.webp HTTP/1.1" 304 -
2026-01-18 23:21:27,277 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "GET /static/content/buttons/non_link_buttons.txt HTTP/1.1" 304 -

View File

@@ -1,22 +0,0 @@
FROM python:alpine
# Set the working directory
WORKDIR /app
# Copy the requirements file into the container
COPY requirements.txt .
# Install the required packages
RUN pip install --no-cache-dir -r requirements.txt
RUN pip install gunicorn
# Copy the rest of the application code into the container
COPY src src
COPY templates templates
COPY static static
# Expose the port the app runs on
EXPOSE 5000
# run the application
ENTRYPOINT [ "gunicorn", "-b", ":5000", "--access-logfile", "-", "--error-logfile", "-", "src.wsgi:app" ]

View File

@@ -2,4 +2,6 @@ psycopg2-binary
python-dotenv
flask-session
requests
flask
flask
markdown
gunicorn

5
run.sh
View File

@@ -1,5 +0,0 @@
#!/bin/bash
[ ! -f .env ] || export $(grep -v '^#' .env | xargs)
flask --app src.wsgi.py --debug run

18
src/blog.py Normal file
View File

@@ -0,0 +1,18 @@
from os import getenv as env
import psycopg2, logging
log = logging.getLogger("blog")
log.info("connecting to database")
conn = psycopg2.connect(
host = env("PG_HOST"),
port = env("PG_PORT"),
dbname = env("PG_DBNAME"),
user= env("PG_USER"),
password = env("PG_PASSWORD")
)
cursor = conn.cursor()

53
src/dynamic_routes.py Normal file
View File

@@ -0,0 +1,53 @@
# Imports
from flask import Blueprint, render_template, abort, request
import os, markdown
# Create blueprint
bp = Blueprint('dynamic_routes', __name__)
template_folder = "templates"
# helper func
def get_path(file) -> str:
return os.path.join(template_folder, "pages", file)
# Get all files in folder
def ListFiles(path):
path = get_path(path)
files = []
for root, dirs, files_in_dir in os.walk(path):
for file in files_in_dir:
files.append(os.path.relpath(os.path.join(root, file), path))
for dir in dirs:
files.append(os.path.relpath(os.path.join(root, dir), path) + '/')
return files
# Catch-all route for generic pages
@bp.route('/<path:filename>')
def catch_all(filename):
if os.path.exists(get_path(filename)):
if os.path.isdir(get_path(filename)):
return render_template(
'bases/directory.html',
directory=filename + "/" if not filename.endswith('/') else filename,
pages=ListFiles(filename)
)
return render_template(f'pages/{filename}')
elif os.path.exists(get_path(filename + '.html')):
return render_template(f'pages/{filename}.html')
elif os.path.exists(get_path(filename + '.md')):
output = markdown.markdown(open(get_path(filename + '.md'), "r").read())
return render_template(
f'bases/md.html',
title = filename.split("/")[-1],
markdown = output
)
else:
abort(404, f"'{filename}' not found")

38
src/errors.py Normal file
View File

@@ -0,0 +1,38 @@
from flask import Blueprint, render_template
from werkzeug.exceptions import HTTPException
bp = Blueprint("errors", __name__)
@bp.route('/500')
@bp.app_errorhandler(500)
def internal_server_error(error:HTTPException=None):
return render_template('errors/500.html', error=error), 500
@bp.route('/404')
@bp.app_errorhandler(404)
def not_found(error:HTTPException=None):
return render_template('errors/404.html', error=error), 404
@bp.route('/400')
@bp.app_errorhandler(400)
def bad_request(error:HTTPException=None):
return render_template('errors/400.html', error=error), 400
@bp.route('/idk')
@bp.app_errorhandler(Exception)
def idk(error:HTTPException=None):
if not isinstance(error, HTTPException):
error = HTTPException("I honestly dont know")
error.code = 418
return render_template(
'errors/error.html',
code = error.code,
description = error.description,
err_name = error.name,
), error.code

78
src/main.py Normal file
View File

@@ -0,0 +1,78 @@
# IMPORTS
from flask import Flask, render_template, request
from os import getenv as env
import logging
try:
import src.dynamic_routes as dynamic_routes
import src.errors as errors
import src.pg_log as pg_log
except ImportError:
import dynamic_routes, errors, pg_log
from dotenv import load_dotenv
load_dotenv()
# LOGGING
pg_log_handler = pg_log.PgLog(
host = env("PG_HOST"),
port = env("PG_PORT"),
dbname = env("PG_DBNAME"),
user= env("PG_USER"),
password = env("PG_PASSWORD")
)
pg_log_handler.setLevel(logging.DEBUG)
stream_log_handler = logging.StreamHandler()
stream_log_handler.setFormatter(
logging.Formatter("%(asctime)s - %(levelname)s: %(message)s")
)
stream_log_handler.setLevel(logging.INFO)
log = logging.getLogger(__name__)
log.setLevel(logging.DEBUG)
log.addHandler(stream_log_handler)
log.addHandler(pg_log_handler)
werkzeug_logger = logging.getLogger("werkzeug")
werkzeug_logger.setLevel(logging.DEBUG)
werkzeug_logger.addHandler(pg_log_handler)
werkzeug_logger.addHandler(stream_log_handler)
log.info("Logging initialized.")
# CREATE FLASK APP
app = Flask(
__name__,
template_folder="../templates",
static_folder="../static"
)
log.info("Flask initialized.")
# BLUEPRINTS
app.register_blueprint(errors.bp, url_prefix="/errors")
app.register_blueprint(dynamic_routes.bp, url_prefix="/")
log.info("Blueprints registered.")
# ROUTES
@app.route("/")
def index():
return render_template("index.html")
@app.route("/toaster")
def toaster():
return render_template("toaster.html")
@app.route("/terminal")
def terminal():
return render_template("terminal.html")
# DEBUG (DONT RUN LIKE THIS IN PROD)
if __name__ == "__main__":
log.warning(f"RUNNING IN DEBUG MODE DO NOT USE FOR PRODUCTION!")
app.run(debug=True)

35
src/pg_log.py Normal file
View File

@@ -0,0 +1,35 @@
import psycopg2, logging
class PgLog(logging.StreamHandler):
def __init__(self, host, port, dbname, user, password):
super().__init__()
self.host = host
self.port = port
self.dbname = dbname
self.user = user
self.password = password
self.conn = psycopg2.connect(
database = dbname,
user = user,
password = password,
host = host,
port = port
)
self.cursor = self.conn.cursor()
def __del__(self):
self.cursor.close()
self.conn.close()
def emit(self, record):
self.cursor.execute(
f"INSERT INTO logs (level, message) VALUES (%s, %s)",
(
record.levelname,
record.getMessage(),
)
)
self.conn.commit()

View File

@@ -1,41 +0,0 @@
# Imports
from flask import Blueprint, render_template, request, abort
from os import getenv as env
import logging, os, re
# Create blueprint
bp = Blueprint(
'dynamic_routes',
__name__,
template_folder=env('TEMPLATE_FOLDER', default='../templates'),
static_folder=env('STATIC_FOLDER', default='../static')
)
# Create logger
log = logging.getLogger(__name__)
# Get all files in folder
def ListFiles(path):
files = []
for root, dirs, files_in_dir in os.walk(path):
for file in files_in_dir:
files.append(os.path.relpath(os.path.join(root, file), path))
for dir in dirs:
files.append(os.path.relpath(os.path.join(root, dir), path) + '/')
return files
# Catch-all route for generic pages
@bp.route('/<path:filename>')
def catch_all(filename):
try:
return render_template(f'pages/{filename if re.match(r'^.+\.[a-zA-Z0-9]+$', filename) else filename + '.html'}')
except Exception as e:
os_path = os.path.join(bp.template_folder, 'pages', filename)[3:]
print(os_path)
if os.path.isdir(os_path):
if not filename.endswith('/'): filename += '/'
return render_template('bases/directory.html', directory=filename, pages=ListFiles(os_path))
# If it is a file, return a 404 error
abort(404, f"Template '{filename}' not found: {e}")

View File

@@ -1,39 +0,0 @@
# Imports
from flask import Blueprint, render_template
from os import getenv as env
import logging
# Create blueprint
bp = Blueprint(
'error_handlers',
__name__,
template_folder=env('TEMPLATE_FOLDER', default='../templates'),
static_folder=env('STATIC_FOLDER', default='../static')
)
# Create logger
log = logging.getLogger(__name__)
# Route for 500 error
@bp.route('/500')
@bp.app_errorhandler(500)
def internal_server_error(error=None):
if error is not None:
log.error("Internal server error: %s", error)
return render_template('errors/500.html'), 500
# Route for 404 error
@bp.route('/404')
@bp.app_errorhandler(404)
def not_found(error=None):
if error is not None:
log.warning("Page not found: %s", error)
return render_template('errors/404.html'), 404 if error is not None else 200
# Route for 400 error
@bp.route('/400')
@bp.app_errorhandler(400)
def bad_request(error=None):
if error is not None:
log.warning("Bad request: %s", error)
return render_template('errors/400.html', error=error), 400

View File

@@ -1,64 +0,0 @@
# Imports
from flask import Flask, render_template, send_file
from flask_session import Session
from dotenv import load_dotenv
from os import getenv as env
import logging
import src.routes.error_handlers
import src.routes.dynamic_routes
# Load env
load_dotenv()
# Create logger
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'))
stream_handler.setLevel(logging.INFO)
file_handler = logging.FileHandler(filename='app.log')
file_handler.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'))
file_handler.setLevel(logging.DEBUG)
# Add handlers to the logger
log = logging.getLogger()
log.setLevel(logging.DEBUG)
log.addHandler(stream_handler)
log.addHandler(file_handler)
log.info("Logging initialized")
# Create flask app
app = Flask(
__name__,
template_folder=env('TEMPLATE_FOLDER', default='../templates'),
static_folder=env('STATIC_FOLDER', default='../static')
)
# Configure sessions
app.config["SESSION_PERMANENT"] = True
app.config["SESSION_TYPE"] = "filesystem"
Session(app)
# Load routes
app.register_blueprint(src.routes.error_handlers.bp, url_prefix='/error')
app.register_blueprint(src.routes.dynamic_routes.bp, url_prefix='/')
# Generic routes
@app.route('/')
def index():
return render_template('index.html')
@app.route('/favicon.ico')
def favicon():
return send_file('../static/content/other/favicon.ico')
@app.route('/robots.txt')
def robots():
return send_file('../static/content/other/robots.txt')
# Route for sitemap.xml
@app.route('/sitemap.xml')
def sitemap():
return send_file('../static/content/other/sitemap.xml')

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,8 +1,6 @@
User-agent: *
Allow: /
Disallow: /404
Disallow: /500
Disallow: /400
Disallow: /errors
Sitemap: https://alfieking.dev/sitemap.xml

View File

@@ -6,13 +6,4 @@
<url>
<loc>https://alfieking.dev/toaster</loc>
</url>
<url>
<loc>https://alfieking.dev/events</loc>
</url>
<url>
<loc>https://alfieking.dev/events/paws-n-pistons</loc>
</url>
<url>
<loc>https://alfieking.dev/events/crittersmk</loc>
</url>
</urlset>

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 710 B

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 830 KiB

View File

@@ -5,6 +5,24 @@
font-weight:normal;
font-style:normal;
}
@font-face {
font-family:"Scratch";
src:url("/static/content/fonts/avali-scratch.otf.woff2") format("woff2");
font-weight:normal;
font-style:normal;
}
@font-face {
font-family:"Ultrafont";
src:url("/static/content/fonts/ultrakill-font.woff2") format("woff2");
font-weight:normal;
font-style:normal;
}
@font-face {
font-family:"Ultrafont2";
src:url("/static/content/fonts/ultrakill-font-2.woff2") format("woff2");
font-weight:normal;
font-style:normal;
}
:root {
--primary-color: #5cdd8b;
@@ -17,6 +35,11 @@
--font-family: "Space Mono", "serif";
--title-font: 'Roboto Mono', sans-serif;
--irken-font: 'Irken';
--scratch-font: 'Scratch';
--ultrafont-font: 'Ultrafont';
--smileos2-box: url(/static/content/smileos/SmileOS_2_Box.webp) 17 3 3 fill / 51px 9px 9px;
--smileos2-font: 'Ultrafont2';
--smileos2-emphasis: #FF4343;
}
body {
@@ -220,6 +243,15 @@ main section a {
text-decoration: none;
}
.smileos {
border-image: var(--smileos2-box);
padding: 54px 15px 12px;
image-rendering: pixelated;
font-size: 1.25rem;
font-family: var(--smileos2-font);
color: #fff;
}
#furry {
position: fixed;
left: 0;
@@ -244,6 +276,14 @@ main section a {
font-family: var(--irken-font);
}
.scratch {
font-family: var(--scratch-font);
}
.ultrafont {
font-family: var(--ultrafont-font);
}
#alt-nav {
display: none;
backdrop-filter: blur(2px) brightness(0.6);
@@ -316,6 +356,33 @@ code {
color: var(--primary-color);
}
#toaster-wave {
position: absolute;
left: -145px;
top: 200px;
}
.webring {
text-align: center;
}
.webring a {
text-decoration: none;
color: var(--primary-color);
font-size: 1.2rem;
}
.webring a:hover {
font-weight: 900;
text-shadow: 0px 0px 10px var(--primary-color-but-slightly-transparent);
}
@media screen and (max-width: 1240px) {
#toaster-wave {
display: none;
}
}
@media screen and (max-width: 1000px) {
body {
background-color: var(--background-color);

View File

@@ -4,7 +4,7 @@
.gallery .gallery-images {
display: flex;
flex-direction: row;
flex-direction: column;
justify-content: space-between;
gap: 1rem;
overflow: hidden;

131
static/css/terminal.css Normal file
View File

@@ -0,0 +1,131 @@
@font-face {
font-family:"Ultrafont2";
src:url("/static/content/fonts/ultrakill-font-2.woff2") format("woff2");
font-weight:normal;
font-style:normal;
}
#terminal {
aspect-ratio: 4/3;
padding: 0;
font-family: "Ultrafont2";
font-size: 1.2rem;
color: #ffffff;
border: none;
}
.smileos-header {
height: 9%;
border-image: url(/static/content/smileos/SmileOS_2_Header.webp) 3 fill / 9px;
display: flex;
flex-direction: row;
align-items: center;
padding: 0;
font-size: 1.4rem;
font-weight: 900;
padding-left: 7px;
padding-right: 7px;
image-rendering: pixelated;
}
.smileos-header img {
height: 100%;
object-fit: contain;
}
#terminal-container {
border-image: url(/static/content/smileos/SmileOS_2_Content.webp) 1 3 3 fill / 3px 9px 9px;
height: 100%;
display: grid;
grid-template-areas:
"logo window"
"buttons window";
grid-template-columns: 40% 1fr;
grid-template-rows: 25% 1fr;
padding: 15px;
box-sizing: border-box;
image-rendering: pixelated;
}
#smileos-logo {
width: 250px;
grid-area: logo;
margin: auto;
image-rendering: pixelated;
}
#terminal-window {
height: 100%;
grid-area: window;
}
#window-container {
border-image: url(/static/content/smileos/SmileOS_2_Content.webp) 1 3 3 fill / 3px 9px 9px;
height: 91%;
padding: 35px;
box-sizing: border-box;
image-rendering: pixelated;
}
#window-content {
border-image: url(/static/content/smileos/SmileOS_2_inset_panel.webp) 1 fill / 3px;
height: 100%;
box-sizing: border-box;
padding: 15px;
display: flex;
justify-content: center;
align-items: center;
text-align: center;
image-rendering: pixelated;
}
.red {
color: #ff4343;
}
#terminal-buttons {
grid-area: buttons;
display: flex;
flex-direction: column;
align-items: center;
gap: 10px;
}
.terminal-button {
border-image: url(/static/content/smileos/SmileOS_2_Button_transparent.png) 2 / 9px;
background: url(/static/content/smileos/SmileOS_2_Button_Background.png);
background-repeat: repeat-x;
background-size: 100% 100%;
border-radius: 15px;
height: 75px;
width: 270px;
image-rendering: pixelated;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
font-family: "Ultrafont2";
font-size: 1.2rem;
color: #ffffff;
}
.terminal-button:hover {
filter: contrast(110%);
}
.terminal-button:active {
filter: contrast(125%);
}
#smileos-window-content img {
width: 100%;
}
#smileos-restart-music {
color: #FF4343;
cursor: pointer;
}
#smileos-restart-music:hover {
font-weight: 700;
}

View File

@@ -81,4 +81,8 @@ ul#toaster-specs li {
.flex-col {
flex-direction: column;
}
}
#toaster-wave {
display: none;
}

View File

@@ -72,25 +72,33 @@ typing();
// HIDDEN STUFF (shh don't tell anyone >:3)
let last5Chars = "";
let last15Chars = "";
document.addEventListener('keydown', function(event) {
last5Chars += event.key;
if (last5Chars == "furry") {
last15Chars += event.key;
if (last15Chars.includes("furry")) {
console.log("owo, whats this?");
document.getElementById('furry').style.display = 'block';
last15Chars = "";
}
if (last5Chars == "irken") {
if (last15Chars.includes("irken")) {
console.log("doom doom doom!");
document.querySelector(":root").style.setProperty('--font-family', 'Irken');
document.querySelector(":root").style.setProperty('--title-font', '1.5em');
last15Chars = "";
}
while (last5Chars.length >= 5) {
last5Chars = last5Chars.slice(1);
if (last15Chars.includes("scratch")) {
console.log("space chicken");
document.querySelector(":root").style.setProperty('--font-family', 'Scratch');
document.querySelector(":root").style.setProperty('--title-font', '1em');
last15Chars = "";
}
while (last15Chars.length >= 15) {
last15Chars = last15Chars.slice(1);
}
});
// Spotify API
// Spotify API (now lastfm)
function getSpotify() {
fetch('https://api.alfieking.dev/spotify/nowplaying/xz02oolstlvwxqu1pfcua9exz').then(response => {
@@ -115,6 +123,7 @@ if (document.getElementById('spotify')) {
setInterval(getSpotify, 15000);
}
// load buttons
function loadButtons() {

View File

@@ -0,0 +1,70 @@
// onionring.js is made up of four files - onionring-widget.js (this one!), onionring-index.js, onionring-variables.js and onionring.css
// it's licensed under the cooperative non-violent license (CNPL) v4+ (https://thufie.lain.haus/NPL.html)
// it was originally made by joey + mord of allium (蒜) house, last updated 2020-11-24
// === ONIONRING-WIDGET ===
//this file contains the code which builds the widget shown on each page in the ring. ctrl+f 'EDIT THIS' if you're looking to change the actual html of the widget
var tag = document.getElementById(ringID); //find the widget on the page
thisSite = window.location.href; //get the url of the site we're currently on
thisIndex = null;
// FIX
thisSite = thisSite.replace("alfieking.dev", "proot.uk"); // fix domain
thisSite = thisSite.replace("http:\/\/127.0.0.1:5000", "https:\/\/proot.uk"); // For debug purposes
// go through the site list to see if this site is on it and find its position
for (i = 0; i < sites.length; i++) {
if (thisSite.startsWith(sites[i])) { //we use startswith so this will match any subdirectory, users can put the widget on multiple pages
thisIndex = i;
break; //when we've found the site, we don't need to search any more, so stop the loop
}
}
function randomSite() {
otherSites = sites.slice(); //create a copy of the sites list
otherSites.splice(thisIndex, 1); //remove the current site so we don't just land on it again
randomIndex = Math.floor(Math.random() * otherSites.length);
location.href = otherSites[randomIndex];
}
//if we didn't find the site in the list, the widget displays a warning instead
if (thisIndex == null) {
tag.insertAdjacentHTML('afterbegin', `
<table>
<tr>
<td>This site isn't part of the ${ringName} webring yet 😿</td>
</tr>
</table>
`);
}
else {
//find the 'next' and 'previous' sites in the ring. this code looks complex
//because it's using a shorthand version of an if-else statement to make sure
//the first and last sites in the ring join together correctly
previousIndex = (thisIndex-1 < 0) ? sites.length-1 : thisIndex-1;
nextIndex = (thisIndex+1 >= sites.length) ? 0 : thisIndex+1;
indexText = ""
//if you've chosen to include an index, this builds the link to that
if (useIndex) {
indexText = `<a href='${indexPage}'>index</a> | `;
}
randomText = ""
//if you've chosen to include a random button, this builds the link that does that
if (useRandom) {
randomText = `<a href='javascript:void(0)' onclick='randomSite()'>random</a> | `;
}
tag.classList = "webring";
//this is the code that displays the widget - EDIT THIS if you want to change the structure
tag.insertAdjacentHTML('afterbegin', `
<a href='${indexPage}'>${ringName}</a><br>
<a href='${sites[previousIndex]}'><--</a>
<a href='${sites[nextIndex]}'>--></a>
`);
}

106
static/js/smileos.js Normal file
View File

@@ -0,0 +1,106 @@
const tips_of_the_day = [
`The Revolver deals <span style="color:var(--smileos2-emphasis)">locational damage</span>.<br>A <span style="color:var(--smileos2-emphasis)">headshot</span> deals <span style="color:var(--smileos2-emphasis)">2x</span> damage and a <span style="color:var(--smileos2-emphasis)">limbshot</span> deals <span style="color:var(--smileos2-emphasis)">1.5x</span> damage.`,
`<span style="color:var(--smileos2-emphasis)">Dash</span>: Fully invincible, costs stamina<br><span style="color:var(--smileos2-emphasis)">Slide</span>: Greater distance, no invincibility<br><span style="color:var(--smileos2-emphasis)">Jump</span>: Quickly out of melee range, less control`,
`<span style="color:var(--smileos2-emphasis)">Shotgun parries</span>: A <span style="color:var(--smileos2-emphasis)">point-blank</span> Shotgun shot to the torso right before an enemy attack lands will deal massive damage.`,
`<span style="color:var(--smileos2-emphasis)">Attack sound cues</span> allow you to keep track of enemies who are off screen.`,
`Some enemies make <span style="color:var(--smileos2-emphasis)">idle sounds</span> to make them easier to track.`,
`Use the <span style="color:cyan">ATTRACTOR NAILGUN</span>'s magnets to form concentrated <span style="color:var(--smileos2-emphasis)">orbs</span> of nails that can be <span style="color:var(--smileos2-emphasis)">moved</span> around using the pull force of <span style="color:var(--smileos2-emphasis)">other magnets</span>.`,
`Enemies <span style="color:var(--smileos2-emphasis)">can hurt</span> other enemy types. With quick thinking and positioning, powerful enemies can turn into powerful weapons.`,
`The <span style="color:cyan">ATTRACTOR NAILGUN</span>'s magnets can be attached to enemies to make mobile targets easy to hit with nails.`,
`Enemies <span style="color:var(--smileos2-emphasis)">scream</span> when falling from a <span style="color:var(--smileos2-emphasis)">fatal height</span>.`,
`<span style="color:var(--smileos2-emphasis)">SLAM BOUNCING</span>: Jump immediately after landing from a <span style="color:var(--smileos2-emphasis)">ground slam</span> to jump higher. The longer the ground slam fall, the higher the bounce.`,
`<span style="color:var(--smileos2-emphasis)">RAILCANNON</span> variations all share the same cooldown. Choose wisely which variation best fits the situation.`,
`<span style="color:var(--smileos2-emphasis)">SLIDING</span> will retain previous momentum for a short amount of time. Chaining quick <span style="color:var(--smileos2-emphasis)">SLIDE JUMPS</span> after a <span style="color:var(--smileos2-emphasis)">DASH JUMP</span> will give you incredible sustained speed.`,
`<span style="color:var(--smileos2-emphasis)">Environmental hazards</span> such as harmful liquids will hurt enemies as well.`,
`If you're having trouble keeping up with a tough enemy, <span style="color:var(--smileos2-emphasis)">stand back and observe</span>. Every enemy has its <span style="color:var(--smileos2-emphasis)">tells</span> and <span style="color:var(--smileos2-emphasis)">patterns</span> and learning those can be your key to victory.`,
`<span style="color:var(--smileos2-emphasis)">HITSCAN</span> weapons can be used to hit the shotgun's <span style="color:cyan">CORE EJECT</span> in mid-air to increase its damage and blast radius.`,
`<span style="color:var(--smileos2-emphasis)">POWER-UPS</span> can be stacked.`,
`Hitting an enemy with only the <span style="color:var(--smileos2-emphasis)">edge</span> of an <span style="color:var(--smileos2-emphasis)">explosion</span> will launch them without dealing much damage, making it a risky but effective tool against <span style="color:var(--smileos2-emphasis)">Stalkers</span>.`,
`Airborne <span style="color:var(--smileos2-emphasis)">coins</span> can be shot with any <span style="color:var(--smileos2-emphasis)">hitscan</span> weapon.`,
`Falling <span style="color:var(--smileos2-emphasis)">underwater</span> is slow, but a <span style="color:var(--smileos2-emphasis)">ground slam</span> allows for a quick return to the ground.`,
`<span style="color:var(--smileos2-emphasis)">Sliding</span> onto water will cause one to <span style="color:var(--smileos2-emphasis)">skip across</span> its surface.`,
`If an enemy is <span style="color:var(--smileos2-emphasis)">blessed</span> by an <span style="color:var(--smileos2-emphasis)">Idol</span>, a direct visible connection is formed between the two, allowing one to easily <span style="color:var(--smileos2-emphasis)">track down</span> and destroy the protector.`,
`<span style="color:var(--smileos2-emphasis)">Explosions</span> deflect <span style="color:var(--smileos2-emphasis)">projectiles</span>.<br><br>If an explosion is caused right from where an enemy shoots a projectile, it can <span style="color:var(--smileos2-emphasis)">backfire</span> and <span style="color:var(--smileos2-emphasis)">hit them</span> instead.`,
`The space of a <span style="color:var(--smileos2-emphasis)">large</span> arena can be used to one's advantage. Using the environment to <span style="color:var(--smileos2-emphasis)">break line-of-sight</span> with enemies allows for some breathing room and time to consider <span style="color:var(--smileos2-emphasis)">target prioritization</span>.`,
`<span style="color:var(--smileos2-emphasis)">DON'T</span> WASTE STAMINA! Dashing <span style="color:var(--smileos2-emphasis)">needlessly</span> while fighting very <span style="color:var(--smileos2-emphasis)">aggressive foes</span> will quickly cause one to have none left when it is most needed.`,
`<span style="color:var(--smileos2-emphasis)">Homing projectiles</span> may be more difficult to dodge, but their tracking and slower speed makes them much <span style="color:var(--smileos2-emphasis)">easier</span> to <span style="color:var(--smileos2-emphasis)">parry</span>.`,
`<span style="color:var(--smileos2-emphasis)">Mannequins</span> can be hard to hit due to their speed, but they lose air control when <span style="color:var(--smileos2-emphasis)">launched</span> or <span style="color:var(--smileos2-emphasis)">shot down</span> from a surface, making them <span style="color:var(--smileos2-emphasis)">unable to move</span> for a short moment.`,
`The <span style="color:red">Knuckleblaster</span>'s <span style="color:var(--smileos2-emphasis)">blast wave</span> is also capable of breaking a <span style="color:var(--smileos2-emphasis)">Gutterman's shield</span>, and is much easier to land in a chaotic scenario.`,
`A <span style="color:var(--smileos2-emphasis)">direct hit</span> from the <span style="color:red">Knuckleblaster</span> has extremely powerful <span style="color:var(--smileos2-emphasis)">knockback</span>, making it extremely powerful for launching enemies into <span style="color:var(--smileos2-emphasis)">pits</span> and other <span style="color:var(--smileos2-emphasis)">environmental hazards</span>.`,
`Didn't expect me, huh?`,
`<span style="color:#FF0078">Magenta</span> colored attacks can <span style="color:var(--smileos2-emphasis)">not</span> be dashed through and must be <span style="color:var(--smileos2-emphasis)">avoided entirely</span>.`,
`<span style="color:var(--smileos2-emphasis)">Blood Puppets</span> do not grant kills or style points, but their <span style="color:var(--smileos2-emphasis)">blood</span> can still <span style="color:var(--smileos2-emphasis)">heal</span>.`,
`When facing down <span style="color:var(--smileos2-emphasis)">a difficult foe</span>, it may be beneficial to first get rid of the <span style="color:var(--smileos2-emphasis)">fodder</span> to reduce distractions.`,
`Sometimes it may be more beneficial to <span style="color:var(--smileos2-emphasis)">stay at a distance</span> and wait for an opening <span style="color:var(--smileos2-emphasis)">before</span> getting close.`,
`If you're having <span style="color:var(--smileos2-emphasis)">trouble</span> with a specific encounter, take a moment to <span style="color:var(--smileos2-emphasis)">weigh your options</span>. <br> There may be some <span style="color:var(--smileos2-emphasis)">trick</span>, <span style="color:var(--smileos2-emphasis)">tool</span> or <span style="color:var(--smileos2-emphasis)">alternative prioritization</span> that will tip the scales in your favor.`,
`<span style="color:var(--smileos2-emphasis)">ENEMY STEP</span>: Jump while in mid-air <span style="color:var(--smileos2-emphasis)">near an enemy</span> to jump off the enemy. This resets the amount of available walljumps without needing to land.`,
`<span style="color:var(--smileos2-emphasis)">Parries</span> can be used as a powerful healing tool.<br><br>Parrying any enemy projectile or melee attack will <span style="color:red">fully replenish your health</span> up to the hard damage limit.`,
`H a v e &nbsp; f u n .`,
`If blown too far off the arena, <span style="color:lime">PUMP CHARGE</span>'s overcharge is a good way to get back.`,
`<span style="color:var(--smileos2-emphasis)">CHEATS</span> can be enabled in other levels by inputting <span style="color:var(--smileos2-emphasis)">🡡 🡡 🡣 🡣 🡠 🡢 🡠 🡢 B A</span> Enabling cheats will disable ranks`,
`You can pick up the cut weapons on the second floor.`
]
var click = new Audio('/static/content/smileos/SmileOS2Click.ogx');
document.getElementById("smileos-about").addEventListener("click", function() {
click.play();
document.getElementById("smileos-window-title").innerHTML = "About";
document.getElementById("smileos-window-content").innerHTML = `
<span class="red">SmileOS</span>: is the operating system found on most digital interfaces found throughout
<span class="red">Hell</span>. <span class="red">SmileOS 1.0</span> is employed on pannels despite its poor user and developer experience to conserve
blood after the war, while <span class="red">SmileOS 2.0</span> is used for terminals requireing higher blood consumption.
`;
});
document.getElementById("smileos-snake").addEventListener("click", function() {
click.play();
document.getElementById("smileos-window-title").innerHTML = "Snake";
document.getElementById("smileos-window-content").innerHTML = `
<img src="/static/content/smileos/KITR_Build.webp" alt="under construction">
`;
});
document.getElementById("smileos-leaderboard").addEventListener("click", function() {
click.play();
document.getElementById("smileos-window-title").innerHTML = "Leaderboard";
document.getElementById("smileos-window-content").innerHTML = `
<img src="/static/content/smileos/KITR_Build.webp" alt="under construction">
`;
});
document.getElementById("smileos-tip").addEventListener("click", function() {
click.play();
document.getElementById("smileos-window-title").innerHTML = "Tip of the Day";
document.getElementById("smileos-window-content").innerHTML = tips_of_the_day[Math.floor(Math.random() * tips_of_the_day.length)];
});
async function playAudio(url) {
return new Promise((resolve) => {
const audio = new Audio(url);
audio.addEventListener('ended', resolve); // Resolve the promise when audio ends
audio.volume = 0.4;
audio.play();
});
}
document.addEventListener("DOMContentLoaded", async function() {
document.getElementById("smileos-window-title").innerHTML = "Tip of the Day";
document.getElementById("smileos-window-content").innerHTML = tips_of_the_day[Math.floor(Math.random() * tips_of_the_day.length)];
await playAudio('/static/content/smileos/SmileOS2Startup.ogx');
var music = new Audio('/static/content/smileos/Shopmusic.ogx');
music.loop = true;
music.volume = 0.2;
music.play();
});
document.getElementById("smileos-restart-music").addEventListener("click", async function() {
await playAudio('/static/content/smileos/SmileOS2Startup.ogx');
var music = new Audio('/static/content/smileos/Shopmusic.ogx');
music.loop = true;
music.volume = 0.2;
music.play();
});

View File

@@ -0,0 +1,78 @@
//YELLOW TERMINAL
// onionring.js is made up of four files - onionring-widget.js (this one!), onionring-index.js, onionring-variables.js and onionring.css
// it's licensed under the cooperative non-violent license (CNPL) v4+ (https://thufie.lain.haus/NPL.html)
// it was originally made by joey + mord of allium (蒜) house, last updated 2020-11-24
// === ONIONRING-WIDGET ===
//this file contains the code which builds the widget shown on each page in the ring. ctrl+f 'EDIT THIS' if you're looking to change the actual html of the widget
var tag = document.getElementById(ringID); //find the widget on the page
thisSite = window.location.href; //get the url of the site we're currently on
thisIndex = null;
// FIX
thisSite = thisSite.replace("alfieking.dev", "proot.uk"); // fix domain
thisSite = thisSite.replace("http:\/\/127.0.0.1:5000", "https:\/\/proot.uk"); // For debug purposes
// go through the site list to see if this site is on it and find its position
for (i = 0; i < sites.length; i++) {
if (thisSite.startsWith(sites[i])) { //we use startswith so this will match any subdirectory, users can put the widget on multiple pages
thisIndex = i;
break; //when we've found the site, we don't need to search any more, so stop the loop
}
}
function randomUltraRingSite() {
otherSites = sites.slice(); //create a copy of the sites list
otherSites.splice(thisIndex, 1); //remove the current site so we don't just land on it again
randomIndex = Math.floor(Math.random() * otherSites.length);
location.href = otherSites[randomIndex];
}
//if we didn't find the site in the list, the widget displays a warning instead
if (thisIndex == null) {
tag.insertAdjacentHTML('afterbegin', `
<table>
<tr>
<td>This site isn't part of <a href="https://jack-dawlia.neocities.org/page/shrines/ultrakill/ULTRARING" target='_parent'>${ringName}</a> yet!</td>
</tr>
</table>
`);
}
else {
//find the 'next' and 'previous' sites in the ring. this code looks complex
//because it's using a shorthand version of an if-else statement to make sure
//the first and last sites in the ring join together correctly
previousIndex = (thisIndex-1 < 0) ? sites.length-1 : thisIndex-1;
nextIndex = (thisIndex+1 >= sites.length) ? 0 : thisIndex+1;
indexText = ""
//if you've chosen to include an index, this builds the link to that
if (useIndex) {
indexText = `<a href='${indexPage}' class="textshadow" target='_parent'>[INDEX]</a> | `;
}
randomText = ""
//if you've chosen to include a random button, this builds the link that does that
if (useRandom) {
randomText = `<a href='javascript:void(0)' onclick='randomUltraRingSite()' style="color: red;" class="textshadow" target='_parent'>[RANDOM]</a>`;
}
//this is the code that displays the widget - EDIT THIS if you want to change the structure
tag.insertAdjacentHTML('afterbegin', `
<table>
<tr>
<td class='webring-prev'><a href='${sites[previousIndex]}' style="color: red;" class="textshadow" title="[PREV]" target='_parent'><<</a></td>
<td class='webring-info'><a href="https://jack-dawlia.neocities.org/page/shrines/ultrakill/ULTRARING" style="color: red;" target='_parent'><img src="https://jack-dawlia.neocities.org/image/ultraring-yellow-terminal.png" alt="This site is part of ULTRARING" title="ULTRARING" style="max-width:100%"></a></br>
<span class='webring-links'>
${randomText}
${indexText}
<td class='webring-next'><a href='${sites[nextIndex]}' style="color: red;" title="[NEXT]" target='_parent'>>></a></td>
</tr>
</table>
`);
}

View File

@@ -3,19 +3,19 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}Alfie's basement{% endblock %}</title>
<link rel="icon" href="/static/content/general_images/icon.webp">
<title>{% block title %}Toasters's basement{% endblock %}</title>
<link rel="icon" href="toaster/Toaster_v1.0_sticker.png">
<link rel="stylesheet" href="/static/css/bases/base.css">
<meta name="description" content="{% block description %}server backend survivor{% endblock %}">
<meta name="keywords" content="{% block keywords %}Alfie King, Alfie, King, Alfieking, Alfieking.dev, dev, server, developer, backend, selfhost, homelab{% endblock %}">
<meta name="keywords" content="{% block keywords %}Alfie King, Alfie, King, Alfieking, Alfieking.dev, dev, server, developer, backend, selfhost, homelab, Toaster, Toastergen, proot.uk, protogen, furry, fursona{% endblock %}">
<meta name="author" content="Alfie King">
<meta name="robots" content="all">
<meta name="theme-color" content="#63de90" data-react-helmet="true">
<meta property="og:site_name" content="Alfieking.dev">
<meta property="og:url" content="https://alfieking.dev/">
<meta property="og:site_name" content="proot.uk">
<meta property="og:url" content="https://proot.uk/">
<meta property="og:title" content="{{ self.title() }}">
<meta property="og:description" content="{{ self.description() }}">
<meta property="og:image" content="{% block og_image %}/static/content/general_images/icon.webp{% endblock %}">
<meta property="og:image" content="toaster/Toaster_v1.0_sticker.png">
{% block head %}
{% endblock %}
</head>
@@ -28,6 +28,7 @@
<ul>
<li><a href="/">Home</a></li>
<li><a href="/toaster">Toaster</a></li>
<li><a href="/terminal" class="ultrafont">Terminal</a></li>
<li><a href="/events">Events</a></li>
<li><a href="https://git.alfieking.dev/acetheking987">Gitea</a></li>
<li><a href="https://www.last.fm/user/acetheking987">LastFm</a></li>
@@ -41,7 +42,7 @@
</section>
</nav>
<section>
<h6 class="irken">heya, try typing "furry" and "irken" into this page!</h6>
<h6 class="irken">heya, try typing "furry", "irken" or "<span class="scratch">scratch</span>" into this page!</h6>
</section>
<section id="buttons">
<h1>BUTTONS</h1>
@@ -60,14 +61,37 @@
<li><a href="https://eightyeightthirty.one"><img src="/static/content/buttons/8831.png" alt="88x31"></a></li>
<li><a href="https://neocities.org"><img src="/static/content/buttons/neocities.gif" alt="neocities"></a></li>
<li><a href="https://tuxedodragon.art"><img src="/static/content/buttons/tuxedodragon.gif" alt="tuxedodragon"></a></li>
<li><a href="https://beepi.ng"><img src="https://beepi.ng/88x31.png" width="88" height="31" alt="unnick"></a></li>
<li><a href="https://sneexy.synth.download"><img src="https://synth.download/assets/buttons/sneexy.svg" alt="Sneexy"></a></li>
<li><a href="https://kraafter.me/"><img src="https://kraafter.me/assets/img/button.png" alt="Kraafter.me button" title="kraaftersite"></a></li>
</ul>
</section>
<section>
<div id='furryring'>
<script type="text/javascript" src="https://furryring.neocities.org/onionring-variables.js"></script>
<script type="text/javascript" src="https://furryring.neocities.org/onionring-widget.js"></script>
<div id='furnix'>
<script type="text/javascript" src="https://tapeykatt.neocities.org/furnix/onionring-variables.js"></script>
<script type="text/javascript" src="/static/js/furnix_widget.js"></script>
</div>
</section>
<section class="webring">
<a href="https://stellophiliac.github.io/roboring">Roboring</a><br>
<a href="https://stellophiliac.github.io/roboring/Toaster/previous"><--</a>
<a href="https://stellophiliac.github.io/roboring/Toaster/next">--></a>
</section>
<section>
<div id='ultraring'>
<script type="text/javascript" src="https://jack-dawlia.neocities.org/page/shrines/ultrakill/ULTRARING/onionring-variables.js"></script>
<script type="text/javascript" src="/static/js/ultraring_widget.js"></script>
<noscript>
This site is part of <a href="https://jack-dawlia.neocities.org/page/shrines/ultrakill/ULTRARING">ULTRARING</a>!
</noscript>
</div>
</section>
<section class="webring">
<a href="https://keithhacks.cyou/furryring.php">Furryring</a><br>
<a href="https://keithhacks.cyou/furryring.php?prev=proot.uk"><--</a>
<a href="https://keithhacks.cyou/furryring.php?next=proot.uk">--></a>
</section>
<iframe width="150" height="450" style="border:none" src="https://dogspit.nekoweb.org/sidelink.html" name="sidelink"></iframe>
<section>
<pre class="vsmoltext"> |\ _,,,---,,_<br>ZZZzz /,`.-'`' -. ;-;;,_<br> |,4- ) )-,_. ,\ ( `'-'<br> '---''(_/--' `-'\_)</pre>
</section>
@@ -76,12 +100,15 @@
<main id="main">
<header id="home">
<div class="row">
<img src="/static/content/general_images/icon.webp">
<img src="/static/content/toaster/Toaster_v1.0_sticker.png">
<div>
<h1>Alfie King</h1>
<h1>Toaster</h1>
<h2 id="typing">server backend survivor</h2>
</div>
</div>
<a href="/toaster" id="toaster-wave">
<img src="/static/content/toaster/Toaster_v1.1.png" alt="toaster">
</a>
</header>
<nav id="alt-nav">
<ul>

View File

@@ -1,6 +1,6 @@
{% extends "bases/base.html" %}
{% block title %}/{{ directory }} - Alfie's basement{% endblock %}
{% block title %}/{{ directory }} - Toaster's basement{% endblock %}
{% block description %}server backend survivor{% endblock %}
{% block head %}

10
templates/bases/md.html Normal file
View File

@@ -0,0 +1,10 @@
{% extends "bases/base.html" %}
{% block title %}{{ title }} - Toaster's basement{% endblock %}
{% block description %}server backend survivor{% endblock %}
{% block content %}
<section>
{{ markdown|safe }}
</section>
{% endblock %}

View File

@@ -10,4 +10,10 @@
It seems like the thing you are looking for does not exist or <code>rm -rf</code> itself out of exsistance.
</p>
</section>
<section>
<h2>Actual error</h2>
<p>
{{ error }}
</p>
</section>
{% endblock %}

View File

@@ -14,4 +14,10 @@
Oopsie Woopsie! Uwu We made a fucky wucky!! A wittle fucko boingo! The code monkeys at our headquarters are working VEWY HAWD to fix this!
</p>
</section>
<section>
<h2>Actual error</h2>
<p>
{{ error }}
</p>
</section>
{% endblock %}

View File

@@ -0,0 +1,16 @@
{% extends "bases/base.html" %}
{% block title %}{{ code }} - {{ err_name }}{% endblock %}
{% block description %}The page you are looking for does not exist.{% endblock %}
{% block content %}
<section>
<img src="https://http.cat/images/{{ code }}.jpg" alt="">
</section>
<section>
<h2>Actual error</h2>
<p>
{{ description }}
</p>
</section>
{% endblock %}

View File

@@ -1,16 +1,17 @@
{% extends "bases/base.html" %}
{% block title %}Home - Alfie's basement{% endblock %}
{% block title %}Home - Toaster's basement{% endblock %}
{% block description %}server backend survivor{% endblock %}
{% block head %}
<link rel="stylesheet" href="/static/css/index.css">
{% endblock %}
{%block content %}
{% block content %}
<section>
<h1>A lil bit abt me</h1>
<p>
<span style="color: yellow; font-size: 0.8rem;">This is a "bit" out of date, will update soon ^^</span><br>
Im not good with writing so dont expect much here. I was a student learning c++ and python. I've Done a few projects that i think
are decent enough to show off, so I have put them on this website. I like to mess around with linux and have a few servers that I run. I've
been running a server for a few years now, and I have learned a lot from it. I have also switched to linux on my main computer, which has been
@@ -37,7 +38,7 @@
<img src="https://s1nez.nekoweb.org/img/7dcd20d4.gif" alt="">
</section>
<div class="flex-row">
<a href="" id="spotify-link">
<a href="https://www.last.fm/user/acetheking987" id="spotify-link">
<div id="spotify">
<h1 id="spotify-title"></h1>
<h2 id="spotify-artist"></h2>
@@ -62,12 +63,17 @@
<img src="https://adriansblinkiecollection.neocities.org/stamps/e43.gif" alt="">
</section>
</div>
<section class="smileos">
<span style="margin: auto;">
Try going to the <span style="color: var(--smileos2-emphasis);">Terminal</span> for more information
</span>
</section>
<section>
<h1>Projects & stuff</h1>
<p>just some projects ive worked on over time</p>
<ul>
<li>
<h2>alfieking.dev</h2>
<h2>alfieking.dev/proot.uk</h2>
<p>
This website is a project that I have been working on for a while now. I have made a few versions of it, but I have
never been happy with them. I am quite happy with this version atm since it is more organized and has a design that I
@@ -104,6 +110,23 @@
<h1>Some News</h1>
<h6>(dont expect this to be updated often tho :P)</h6>
<ul>
<li>
<h2>28-03-2026</h2>
<span style="color: gray; font-size: 0.8rem;">[insert a few hours later meme here]</span><br>
Ok so it has been a "while", I recently got the domain proot.uk, so if you are accessing this site from there then all of the content relating to my name and
the tv head guy is replaced with toaster. I was too indicisive on what to do with the domain since I wanted to keep the old one but the new domain is now the
"main site". <span style="color: gray; font-size: 0.8rem;">As I was typing this I realised that it would prob be better to just redirect the old domain to
the new one and remove the complicated name system, so I will do that. And yes im leaving this in, cus I find it funny.</span>
</li>
<li>
<h2>05-03-2026</h2>
<p>
This is a short post since i plan on reworking these in the next few days, but i had mad a lot of changes to the site. Some are visible and some are not;
the bigget change in the new terminal page that needs more features but that is a later me issue. I also redid the backend so making updates are much
easier now. I also need to update the main about me and projects sections since they are old and not very good. """hopefully""" i should make a new news post
soon when i have reworked the system.
</p>
</li>
<li>
<h2>18-01-2026</h2>
<p>
@@ -120,7 +143,7 @@
I didn't want to use a framework at first, mainly because I like the simplicity of a static site, but it allows me to use templatiing and makes
adding new features easier and more organized. The site is also more interacive now, with a few secrets on some of the pages. I still plan on adding
more secrets and features. I also plan on adding a blog section, that I will move this to, so that I can give updates on the site and other things
that I find interesting.
that I find interesting.
</p>
</li>
<li>
@@ -135,4 +158,5 @@
</li>
</ul>
</section>
<iframe src="https://john.citrons.xyz/embed?ref=alfieking.dev" style="margin-left:auto;display:block;margin-right:auto;max-width:732px;width:100%;height:94px;border:none;"></iframe>
{% endblock %}

View File

@@ -1,6 +1,6 @@
{% extends "bases/base.html" %}
{% block title %}Critters MK - Alfie's basement{% endblock %}
{% block title %}Critters MK - Toaster's basement{% endblock %}
{% block description %}furry corner{% endblock %}
{% block og_image %}/static/content/Toaster_v1.0_Dark.png{% endblock %}
{% block keywords %}
@@ -37,17 +37,19 @@ protogen v1.0, toaster v1.0
<div class="gallery">
<h2 class="gallery-date">26th July 2025</h2>
<div class="gallery-images">
<img src="/static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_152110445.jpg" alt="Critters MK">
<img src="/static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_155134418.jpg" alt="Critters MK">
<img src="/static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_155226274.jpg" alt="Critters MK">
<img src="/static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_155434701.jpg" alt="Critters MK">
<img src="/static/content/photos/fur_meets/26-07-2025_critters_mk/PXL_20250726_152110445.jpg" alt="Critters MK">
<img src="/static/content/photos/fur_meets/26-07-2025_critters_mk/PXL_20250726_155134418.jpg" alt="Critters MK">
<img src="/static/content/photos/fur_meets/26-07-2025_critters_mk/PXL_20250726_155226274.jpg" alt="Critters MK">
<img src="/static/content/photos/fur_meets/26-07-2025_critters_mk/PXL_20250726_155434701.jpg" alt="Critters MK">
</div>
</div>
<h2 class="gallery-date">23rd Aug 2025</h2>
<div class="gallery">
<img src="/static/content/fur_meets/23-08-2025_critters_mk/PXL_20250823_130640362.jpg" alt="Critters MK">
<img src="/static/content/fur_meets/23-08-2025_critters_mk/PXL_20250823_130648109.jpg" alt="Critters MK">
<img src="/static/content/fur_meets/23-08-2025_critters_mk/PXL_20250823_130659800.jpg" alt="Critters MK">
<h2 class="gallery-date">23rd Aug 2025</h2>
<div class="gallery-images">
<img src="/static/content/photos/fur_meets/23-08-2025_critters_mk/PXL_20250823_130640362.jpg" alt="Critters MK">
<img src="/static/content/photos/fur_meets/23-08-2025_critters_mk/PXL_20250823_130648109.jpg" alt="Critters MK">
<img src="/static/content/photos/fur_meets/23-08-2025_critters_mk/PXL_20250823_130659800.jpg" alt="Critters MK">
</div>
</div>
</section>
{% endblock %}

View File

@@ -1,6 +1,6 @@
{% extends "bases/base.html" %}
{% block title %}Paws'N'Pistons - Alfie's basement{% endblock %}
{% block title %}Paws'N'Pistons - Toaster's basement{% endblock %}
{% block description %}furry corner{% endblock %}
{% block og_image %}/static/content/Toaster_v1.0_Dark.png{% endblock %}
{% block keywords %}
@@ -42,23 +42,25 @@ protogen v1.0, toaster v1.0
ALSO, one of them offered to let me try their fursuit!!! Im now going to speedrun going broke trying to get a fursuit of my own cus of this :3 (I was
already planning on getting one, but this just made me want one more).
<br>
<img src="/static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_200906329.jpg" alt="me in a fursuit" id="woooooo">
<img src="/static/content/photos/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_200906329.jpg" alt="me in a fursuit" id="woooooo">
<br>
The fursuit belongs to <a href="https://www.tiktok.com/@trickythefox" target="_blank">Tricky the Fox</a>, they are a very chill person and I had a great time talking to them ^w^.
<h1>Photos :3</h1>
<p>
Here are some photos from the meets I have attended. I will add more as I attend more meets.
</p>
<h2 class="gallery-date">3rd Aug 2025</h2>
<div class="gallery">
<img src="/static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_141943558.jpg" alt="Paws'N'Pistons">
<img src="/static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_150138054.jpg" alt="Paws'N'Pistons">
<img src="/static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_150249916.jpg" alt="Paws'N'Pistons">
<img src="/static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_183614897.jpg" alt="Paws'N'Pistons">
<img src="/static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_140629639.jpg" alt="Paws'N'Pistons">
<img src="/static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_141242090.jpg" alt="Paws'N'Pistons">
<img src="/static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_182023562.jpg" alt="Paws'N'Pistons">
<img src="/static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_184321576.jpg" alt="Paws'N'Pistons">
<h2 class="gallery-date">3rd Aug 2025</h2>
<div class="gallery-images">
<img src="/static/content/photos/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_141943558.jpg" alt="Paws'N'Pistons">
<img src="/static/content/photos/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_150138054.jpg" alt="Paws'N'Pistons">
<img src="/static/content/photos/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_150249916.jpg" alt="Paws'N'Pistons">
<img src="/static/content/photos/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_183614897.jpg" alt="Paws'N'Pistons">
<img src="/static/content/photos/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_140629639.jpg" alt="Paws'N'Pistons">
<img src="/static/content/photos/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_141242090.jpg" alt="Paws'N'Pistons">
<img src="/static/content/photos/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_182023562.jpg" alt="Paws'N'Pistons">
<img src="/static/content/photos/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_184321576.jpg" alt="Paws'N'Pistons">
</div>
</div>
</section>
{% endblock %}

63
templates/terminal.html Normal file
View File

@@ -0,0 +1,63 @@
{% extends "bases/base.html" %}
{% block title %}SmileOS 2.0{% endblock %}
{% block description %}SmileOS 2.0{% endblock %}
{% block og_image %}static/content/smileos/SmileOS_2_icon_smile.webp{% endblock %}
{% block icon %}static/content/smileos/SmileOS_2_icon_smile.webp{% endblock %}
{% block head %}
<link rel="stylesheet" href="/static/css/terminal.css">
{% endblock %}
{% block content %}
<section id="terminal">
<div class="smileos-header">
<img src="/static/content/smileos/SmileOS_2_icon_smile.webp" alt="smile">
SmileOS 2.0
<img src="/static/content/smileos/SmileOS_2_top_button_5.png" alt="minimize" style="margin-left: auto;">
<img src="/static/content/smileos/SmileOS_2_top_button_4.png" alt="maximize">
<img src="/static/content/smileos/SmileOS_2_top_button_3.png" alt="close">
</div>
<div id="terminal-container">
<img src="/static/content/smileos/SmileOS2.webp" alt="logo" id="smileos-logo">
<div id="terminal-buttons">
<button class="terminal-button" id="smileos-tip">
Tip of the Day
</button>
<button class="terminal-button" id="smileos-snake">
Snake
</button>
<button class="terminal-button" id="smileos-leaderboard">
Leaderboard
</button>
<button class="terminal-button" id="smileos-about">
About
</button>
</div>
<div id="terminal-window">
<div class="smileos-header">
<img src="/static/content/smileos/SmileOS_2_icon_tip.webp" alt="tip">
<span id="smileos-window-title">Tip of the Day</span>
<img src="/static/content/smileos/SmileOS_2_top_button_5.png" alt="minimize" style="margin-left: auto;">
<img src="/static/content/smileos/SmileOS_2_top_button_4.png" alt="maximize">
<img src="/static/content/smileos/SmileOS_2_top_button_3.png" alt="close">
</div>
<div id="window-container">
<div id="window-content">
<span id="smileos-window-content"><span class="red">SLAM BOUNCING</span>: Jump immediately after landing from a <span class="red">ground slam</span> to jump higher. The longer the ground slam fall, the higher the bounce.</span>
</div>
</div>
</div>
</div>
</section>
<section>
<p>
Note: this page has background music, you may have to allow the music in the browser and refesh to let it play, or you can try
press <a id="smileos-restart-music">this</a> to restart it
</p>
</section>
{% endblock %}
{% block scripts %}
<script src="/static/js/smileos.js"></script>
{% endblock %}

View File

@@ -1,6 +1,6 @@
{% extends "bases/base.html" %}
{% block title %}Toaster - Alfie's basement{% endblock %}
{% block title %}Toaster - Toaster's basement{% endblock %}
{% block description %}furry corner{% endblock %}
{% block og_image %}/static/content/Toaster_v1.0_Dark.png{% endblock %}
{% block keywords %}
@@ -52,9 +52,9 @@ protogen v1.0, toaster v1.0
</section>
<div class="flex-col">
<img src="/static/content/toaster/Toaster_v1.0_Dark.png" alt="toaster" id="toaster-img">
<section class="fill-height">
<section class="fill-height smileos">
<p>
NEW AND IMPROVED! Toaster v1.0 is here!
<span style="color: var(--smileos2-emphasis);">NEW AND IMPROVED!</span> Toaster v1.0 is here!
<br><br>
Toaster v1.0 is the first version of Toaster that I have drawn that I am actually happy with.
Im still working on the design, so it may change in the future, but I think I like this enough to keep it for now.
@@ -86,19 +86,19 @@ protogen v1.0, toaster v1.0
<li>
<a href="/events/crittersmk"><b>Critters MK</b></a> - A furmeet in Milton Keynes.
<div class="fur-meet-gallery-small">
<img src="/static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_152110445.jpg" alt="Critters MK">
<img src="/static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_155134418.jpg" alt="Critters MK">
<img src="/static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_155226274.jpg" alt="Critters MK">
<img src="/static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_155434701.jpg" alt="Critters MK">
<img src="/static/content/photos/fur_meets/26-07-2025_critters_mk/PXL_20250726_152110445.jpg" alt="Critters MK">
<img src="/static/content/photos/fur_meets/26-07-2025_critters_mk/PXL_20250726_155134418.jpg" alt="Critters MK">
<img src="/static/content/photos/fur_meets/26-07-2025_critters_mk/PXL_20250726_155226274.jpg" alt="Critters MK">
<img src="/static/content/photos/fur_meets/26-07-2025_critters_mk/PXL_20250726_155434701.jpg" alt="Critters MK">
</div>
</li>
<li>
<a href="/events/paws-n-pistons"><b>Paws'N'Pistons</b></a> - A furry car meet around the UK.
<div class="fur-meet-gallery-small">
<img src="/static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_141943558.jpg" alt="Paws'N'Pistons">
<img src="/static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_150138054.jpg" alt="Paws'N'Pistons">
<img src="/static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_150249916.jpg" alt="Paws'N'Pistons">
<img src="/static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_183614897.jpg" alt="Paws'N'Pistons">
<img src="/static/content/photos/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_141943558.jpg" alt="Paws'N'Pistons">
<img src="/static/content/photos/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_150138054.jpg" alt="Paws'N'Pistons">
<img src="/static/content/photos/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_150249916.jpg" alt="Paws'N'Pistons">
<img src="/static/content/photos/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_183614897.jpg" alt="Paws'N'Pistons">
</div>
</li>
<p>Click on the links to view more photos from each event :3</p>