Compare commits
19 Commits
major-rede
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| af5116d931 | |||
| 8dae4c1b5d | |||
| 8e67e714d0 | |||
| 7c9aaa04ba | |||
| 93ecd4999f | |||
| 0d367e43a6 | |||
| 3afab4c7fa | |||
| 885d2559af | |||
| 8f1e4e60e1 | |||
| a47c2a3886 | |||
| 11d8621f9b | |||
| b683a2721a | |||
| 7a60ca468d | |||
| 1a5380e17e | |||
| 6e92e40f1c | |||
| b4e6b4c296 | |||
| 9700a5dc7f | |||
| 067f0e189d | |||
| 639a8e2fb0 |
@@ -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
@@ -1,6 +1,3 @@
|
||||
.venv
|
||||
.env
|
||||
flask_session
|
||||
__pycache__
|
||||
.vscode
|
||||
db
|
||||
.venv
|
||||
382
app.log
@@ -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] "[36mGET /static/css/bases/base.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:29:27,170 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "[36mGET /static/css/toaster.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:29:27,175 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "[36mGET /static/content/buttons/ne0nbandit.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:29:27,177 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "[36mGET /static/content/buttons/thnlqd.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:29:27,179 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "[36mGET /static/content/buttons/nekoweb.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:29:27,177 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "[36mGET /static/js/base.js HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:29:27,182 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "[36mGET /static/content/buttons/s1nez.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:29:27,187 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "[36mGET /static/content/buttons/beeps.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:29:27,189 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "[36mGET /static/content/buttons/insia.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:29:27,192 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "[36mGET /static/content/buttons/blinkiescafe.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:29:27,193 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "[36mGET /static/content/toaster/Toaster_v1.0_Dark.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:29:27,194 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "[36mGET /static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_155134418.jpg HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:29:27,195 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "[36mGET /static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_152110445.jpg HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:29:27,198 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "[36mGET /static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_155226274.jpg HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:29:27,199 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "[36mGET /static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_155434701.jpg HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:29:27,201 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "[36mGET /static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_141943558.jpg HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:29:27,201 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "[36mGET /static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_150138054.jpg HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:29:27,204 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "[36mGET /static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_150249916.jpg HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:29:27,205 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "[36mGET /static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_183614897.jpg HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:29:27,207 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "[36mGET /static/content/buttons/neocities.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:29:27,208 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "[36mGET /static/content/buttons/tuxedodragon.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:29:27,208 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "[36mGET /static/content/buttons/8831.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:29:27,211 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "[36mGET /static/content/buttons/emmixis.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:29:27,212 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "[36mGET /static/content/general_images/icon.webp HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:29:27,213 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:29:27] "[36mGET /static/content/general_images/haj.gif HTTP/1.1[0m" 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] "[36mGET /static/css/bases/base.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:30:27,790 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "[36mGET /static/css/index.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:30:27,790 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "[36mGET /static/js/base.js HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:30:27,799 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "[36mGET /static/content/general_images/icon.webp HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:30:27,802 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "[36mGET /static/content/buttons/thnlqd.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:30:27,803 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "[36mGET /static/content/buttons/ne0nbandit.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:30:27,804 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "[36mGET /static/content/buttons/nekoweb.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:30:27,805 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "[36mGET /static/content/buttons/s1nez.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:30:27,803 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "[36mGET /static/content/buttons/emmixis.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:30:27,806 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "[36mGET /static/content/buttons/beeps.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:30:27,808 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "[36mGET /static/content/buttons/blinkiescafe.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:30:27,808 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "[36mGET /static/content/buttons/insia.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:30:27,810 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "[36mGET /static/content/buttons/8831.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:30:27,811 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "[36mGET /static/content/buttons/neocities.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:30:27,812 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "[36mGET /static/content/buttons/tuxedodragon.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:30:27,813 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "[36mGET /static/content/general_images/haj.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:30:27,834 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:30:27] "[36mGET /static/content/other/buttons.txt HTTP/1.1[0m" 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] "[36mGET /static/css/bases/base.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:02,723 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "[36mGET /static/css/index.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:02,723 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "[36mGET /static/js/base.js HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:02,735 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "[36mGET /static/content/buttons/emmixis.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:02,737 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "[36mGET /static/content/buttons/ne0nbandit.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:02,738 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "[36mGET /static/content/buttons/thnlqd.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:02,740 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "[36mGET /static/content/buttons/s1nez.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:02,740 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "[36mGET /static/content/buttons/nekoweb.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:02,741 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "[36mGET /static/content/buttons/beeps.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:02,742 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "[36mGET /static/content/buttons/insia.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:02,744 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "[36mGET /static/content/buttons/8831.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:02,747 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "[36mGET /static/content/buttons/blinkiescafe.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:02,748 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "[36mGET /static/content/buttons/neocities.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:02,750 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "[36mGET /static/content/general_images/haj.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:02,751 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "[36mGET /static/content/buttons/tuxedodragon.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:02,752 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "[36mGET /static/content/general_images/icon.webp HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:02,763 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:02] "[36mGET /static/content/other/buttons.txt HTTP/1.1[0m" 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] "[36mGET /static/css/bases/base.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:12,517 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "[36mGET /static/css/index.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:12,517 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "[36mGET /static/js/base.js HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:12,520 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "[36mGET /static/content/buttons/emmixis.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:12,523 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "[36mGET /static/content/buttons/ne0nbandit.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:12,525 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "[36mGET /static/content/buttons/thnlqd.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:12,527 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "[36mGET /static/content/buttons/beeps.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:12,528 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "[36mGET /static/content/buttons/nekoweb.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:12,531 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "[36mGET /static/content/buttons/insia.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:12,531 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "[36mGET /static/content/buttons/s1nez.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:12,534 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "[36mGET /static/content/buttons/8831.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:12,535 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "[36mGET /static/content/buttons/neocities.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:12,536 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "[36mGET /static/content/buttons/blinkiescafe.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:12,538 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "[36mGET /static/content/buttons/tuxedodragon.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:12,541 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "[36mGET /static/content/general_images/haj.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:12,543 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "[36mGET /static/content/general_images/icon.webp HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:12,586 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:12] "[36mGET /static/content/other/buttons.txt HTTP/1.1[0m" 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] "[36mGET /static/css/index.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:17,812 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "[36mGET /static/css/bases/base.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:17,812 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "[36mGET /static/js/base.js HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:17,818 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "[36mGET /static/content/buttons/emmixis.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:17,819 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "[36mGET /static/content/buttons/ne0nbandit.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:17,820 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "[36mGET /static/content/buttons/thnlqd.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:17,821 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "[36mGET /static/content/buttons/nekoweb.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:17,822 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "[36mGET /static/content/buttons/s1nez.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:17,825 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "[36mGET /static/content/buttons/beeps.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:17,825 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "[36mGET /static/content/buttons/insia.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:17,827 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "[36mGET /static/content/buttons/8831.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:17,829 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "[36mGET /static/content/buttons/neocities.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:17,831 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "[36mGET /static/content/buttons/tuxedodragon.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:17,830 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "[36mGET /static/content/buttons/blinkiescafe.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:17,833 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "[36mGET /static/content/general_images/icon.webp HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:17,832 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "[36mGET /static/content/general_images/haj.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:34:17,857 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:34:17] "[36mGET /static/content/other/buttons.txt HTTP/1.1[0m" 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] "[36mGET /static/css/bases/base.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:44,451 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "[36mGET /static/css/index.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:44,453 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "[36mGET /static/js/base.js HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:44,464 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "[36mGET /static/content/buttons/emmixis.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:44,465 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "[36mGET /static/content/buttons/ne0nbandit.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:44,466 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "[36mGET /static/content/buttons/thnlqd.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:44,467 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "[36mGET /static/content/buttons/nekoweb.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:44,468 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "[36mGET /static/content/buttons/s1nez.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:44,468 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "[36mGET /static/content/buttons/beeps.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:44,469 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "[36mGET /static/content/buttons/insia.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:44,471 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "[36mGET /static/content/buttons/tuxedodragon.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:44,473 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "[36mGET /static/content/buttons/neocities.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:44,474 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "[36mGET /static/content/buttons/8831.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:44,475 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "[36mGET /static/content/buttons/blinkiescafe.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:44,554 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "[36mGET /static/content/general_images/icon.webp HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:44,555 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "[36mGET /static/content/general_images/haj.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:44,555 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:44] "[36mGET /static/content/other/buttons.txt HTTP/1.1[0m" 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] "[36mGET /static/css/bases/base.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:59,918 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "[36mGET /static/js/base.js HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:59,919 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "[36mGET /static/css/toaster.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:59,924 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "[36mGET /static/content/buttons/emmixis.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:59,925 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "[36mGET /static/content/buttons/ne0nbandit.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:59,926 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "[36mGET /static/content/buttons/thnlqd.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:59,928 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "[36mGET /static/content/buttons/nekoweb.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:59,929 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "[36mGET /static/content/buttons/insia.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:59,929 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "[36mGET /static/content/buttons/s1nez.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:59,930 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "[36mGET /static/content/buttons/beeps.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:59,932 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "[36mGET /static/content/buttons/blinkiescafe.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:59,933 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "[36mGET /static/content/buttons/8831.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:59,934 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "[36mGET /static/content/buttons/neocities.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:59,935 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "[36mGET /static/content/buttons/tuxedodragon.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:59,948 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "[36mGET /static/content/general_images/haj.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:59,949 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "[36mGET /static/content/general_images/icon.webp HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:59,950 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "[36mGET /static/content/toaster/Toaster_v1.0_Dark.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:59,952 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "[36mGET /static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_152110445.jpg HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:59,954 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "[36mGET /static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_155434701.jpg HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:59,953 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "[36mGET /static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_155134418.jpg HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:59,955 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "[36mGET /static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_155226274.jpg HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:59,956 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "[36mGET /static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_141943558.jpg HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:59,958 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "[36mGET /static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_150249916.jpg HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:59,958 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "[36mGET /static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_150138054.jpg HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:40:59,960 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:40:59] "[36mGET /static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_183614897.jpg HTTP/1.1[0m" 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] "[36mGET /static/css/bases/base.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:12,503 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "[36mGET /static/css/toaster.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:12,503 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "[36mGET /static/js/base.js HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:12,517 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "[36mGET /static/content/buttons/emmixis.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:12,519 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "[36mGET /static/content/buttons/ne0nbandit.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:12,520 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "[36mGET /static/content/buttons/thnlqd.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:12,521 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "[36mGET /static/content/buttons/nekoweb.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:12,522 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "[36mGET /static/content/buttons/s1nez.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:12,523 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "[36mGET /static/content/buttons/beeps.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:12,524 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "[36mGET /static/content/buttons/blinkiescafe.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:12,525 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "[36mGET /static/content/buttons/insia.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:12,526 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "[36mGET /static/content/buttons/8831.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:12,528 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "[36mGET /static/content/buttons/neocities.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:12,529 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "[36mGET /static/content/buttons/tuxedodragon.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:12,564 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "[36mGET /static/content/general_images/icon.webp HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:12,566 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "[36mGET /static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_152110445.jpg HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:12,568 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "[36mGET /static/content/general_images/haj.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:12,569 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "[36mGET /static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_155134418.jpg HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:12,568 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "[36mGET /static/content/toaster/Toaster_v1.0_Dark.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:12,572 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "[36mGET /static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_155226274.jpg HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:12,573 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "[36mGET /static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_155434701.jpg HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:12,576 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "[36mGET /static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_141943558.jpg HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:12,577 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "[36mGET /static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_150138054.jpg HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:12,578 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "[36mGET /static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_150249916.jpg HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:12,579 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:12] "[36mGET /static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_183614897.jpg HTTP/1.1[0m" 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] "[36mGET /static/css/bases/base.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:55,212 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "[36mGET /static/css/index.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:55,214 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "[36mGET /static/js/base.js HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:55,222 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "[36mGET /static/content/buttons/emmixis.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:55,226 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "[36mGET /static/content/buttons/ne0nbandit.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:55,226 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "[36mGET /static/content/buttons/nekoweb.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:55,227 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "[36mGET /static/content/buttons/beeps.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:55,228 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "[36mGET /static/content/buttons/thnlqd.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:55,229 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "[36mGET /static/content/buttons/s1nez.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:55,230 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "[36mGET /static/content/buttons/insia.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:55,232 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "[36mGET /static/content/buttons/blinkiescafe.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:55,233 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "[36mGET /static/content/buttons/neocities.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:55,232 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "[36mGET /static/content/buttons/8831.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:55,234 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "[36mGET /static/content/buttons/tuxedodragon.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:55,272 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "[36mGET /static/content/general_images/haj.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:55,272 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "[36mGET /static/content/general_images/icon.webp HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:41:55,273 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:41:55] "[36mGET /static/content/other/buttons.txt HTTP/1.1[0m" 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] "[36mGET /static/css/index.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:42:08,145 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "[36mGET /static/css/bases/base.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:42:08,146 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "[36mGET /static/js/base.js HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:42:08,149 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "[36mGET /static/content/buttons/emmixis.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:42:08,149 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "[36mGET /static/content/buttons/ne0nbandit.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:42:08,151 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "[36mGET /static/content/buttons/nekoweb.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:42:08,152 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "[36mGET /static/content/buttons/beeps.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:42:08,153 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "[36mGET /static/content/buttons/thnlqd.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:42:08,154 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "[36mGET /static/content/buttons/blinkiescafe.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:42:08,155 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "[36mGET /static/content/buttons/s1nez.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:42:08,153 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "[36mGET /static/content/buttons/insia.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:42:08,156 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "[36mGET /static/content/buttons/8831.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:42:08,159 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "[36mGET /static/content/buttons/tuxedodragon.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:42:08,160 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "[36mGET /static/content/buttons/neocities.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:42:08,171 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "[36mGET /static/content/general_images/icon.webp HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:42:08,171 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "[36mGET /static/content/general_images/haj.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:42:08,182 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:42:08] "[36mGET /static/content/other/buttons.txt HTTP/1.1[0m" 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] "[36mGET /static/css/bases/base.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:46:31,839 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "[36mGET /static/js/base.js HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:46:31,840 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "[36mGET /static/css/index.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:46:31,863 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "[36mGET /static/content/buttons/emmixis.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:46:31,864 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "[36mGET /static/content/buttons/ne0nbandit.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:46:31,864 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "[36mGET /static/content/buttons/thnlqd.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:46:31,866 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "[36mGET /static/content/buttons/nekoweb.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:46:31,867 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "[36mGET /static/content/buttons/s1nez.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:46:31,868 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "[36mGET /static/content/buttons/beeps.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:46:31,870 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "[36mGET /static/content/buttons/blinkiescafe.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:46:31,871 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "[36mGET /static/content/buttons/8831.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:46:31,872 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "[36mGET /static/content/buttons/insia.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:46:31,873 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "[36mGET /static/content/buttons/neocities.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:46:31,873 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "[36mGET /static/content/buttons/tuxedodragon.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:46:31,893 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "[36mGET /static/content/general_images/haj.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:46:31,894 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "[36mGET /static/content/other/buttons.txt HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:46:31,893 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:31] "[36mGET /static/content/general_images/icon.webp HTTP/1.1[0m" 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] "[36mGET /static/css/bases/base.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:46:48,078 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "[36mGET /static/css/index.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:46:48,079 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "[36mGET /static/js/base.js HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:46:48,083 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "[36mGET /static/content/buttons/emmixis.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:46:48,084 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "[36mGET /static/content/buttons/ne0nbandit.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:46:48,085 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "[36mGET /static/content/buttons/thnlqd.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:46:48,086 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "[36mGET /static/content/buttons/nekoweb.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:46:48,088 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "[36mGET /static/content/buttons/tuxedodragon.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:46:48,088 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "[36mGET /static/content/buttons/insia.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:46:48,087 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "[36mGET /static/content/buttons/s1nez.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:46:48,088 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "[36mGET /static/content/buttons/beeps.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:46:48,091 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "[36mGET /static/content/buttons/blinkiescafe.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:46:48,092 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "[36mGET /static/content/buttons/neocities.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:46:48,092 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "[36mGET /static/content/buttons/8831.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:46:48,101 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "[36mGET /static/content/general_images/haj.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:46:48,102 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "[36mGET /static/content/general_images/icon.webp HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:46:48,106 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:46:48] "[36mGET /static/content/other/buttons.txt HTTP/1.1[0m" 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] "[36mGET /static/css/bases/base.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:49:58,211 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:49:58] "[36mGET /static/css/index.css HTTP/1.1[0m" 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] "[36mGET /static/content/buttons/emmixis.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:49:58,263 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:49:58] "[36mGET /static/content/buttons/nekoweb.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:49:58,265 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:49:58] "[36mGET /static/content/buttons/ne0nbandit.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:49:58,264 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:49:58] "[36mGET /static/content/buttons/thnlqd.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:49:58,264 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:49:58] "[36mGET /static/content/buttons/s1nez.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:49:58,266 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:49:58] "[36mGET /static/content/buttons/beeps.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:49:58,267 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:49:58] "[36mGET /static/content/buttons/insia.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:49:58,269 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:49:58] "[36mGET /static/content/buttons/neocities.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:49:58,270 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:49:58] "[36mGET /static/content/buttons/8831.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:49:58,270 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:49:58] "[36mGET /static/content/buttons/blinkiescafe.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:49:58,271 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:49:58] "[36mGET /static/content/buttons/tuxedodragon.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:49:58,322 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:49:58] "[36mGET /static/content/general_images/haj.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:49:58,324 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:49:58] "[36mGET /static/content/general_images/icon.webp HTTP/1.1[0m" 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] "[36mGET /static/css/bases/base.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:54:40,771 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "[36mGET /static/css/index.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:54:40,774 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "[36mGET /static/js/base.js HTTP/1.1[0m" 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] "[36mGET /static/content/buttons/emmixis.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:54:40,793 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "[36mGET /static/content/buttons/ne0nbandit.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:54:40,793 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "[36mGET /static/content/buttons/thnlqd.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:54:40,795 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "[36mGET /static/content/buttons/s1nez.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:54:40,796 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "[36mGET /static/content/buttons/nekoweb.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:54:40,799 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "[36mGET /static/content/buttons/beeps.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:54:40,800 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "[36mGET /static/content/buttons/blinkiescafe.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:54:40,801 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "[36mGET /static/content/buttons/8831.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:54:40,802 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "[36mGET /static/content/buttons/insia.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:54:40,803 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "[36mGET /static/content/buttons/tuxedodragon.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:54:40,803 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "[36mGET /static/content/buttons/neocities.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:54:40,826 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "[36mGET /static/content/general_images/haj.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:54:40,828 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:54:40] "[36mGET /static/content/general_images/icon.webp HTTP/1.1[0m" 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] "[36mGET /static/css/bases/base.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:55:38,101 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "[36mGET /static/css/toaster.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:55:38,102 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "[36mGET /static/js/base.js HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:55:38,107 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "[36mGET /static/content/buttons/hijpixel.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:55:38,108 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "[36mGET /static/content/buttons/lensdeer.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:55:38,110 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "[36mGET /static/content/buttons/emmixis.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:55:38,111 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "[36mGET /static/content/buttons/ne0nbandit.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:55:38,112 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "[36mGET /static/content/buttons/thnlqd.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:55:38,112 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "[36mGET /static/content/buttons/nekoweb.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:55:38,114 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "[36mGET /static/content/buttons/s1nez.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:55:38,116 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "[36mGET /static/content/buttons/beeps.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:55:38,116 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "[36mGET /static/content/buttons/insia.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:55:38,117 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "[36mGET /static/content/buttons/blinkiescafe.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:55:38,119 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "[36mGET /static/content/buttons/neocities.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:55:38,119 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "[36mGET /static/content/buttons/8831.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:55:38,121 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "[36mGET /static/content/buttons/tuxedodragon.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:55:38,143 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "[36mGET /static/content/general_images/haj.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:55:38,144 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "[36mGET /static/content/general_images/icon.webp HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:55:38,145 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "[36mGET /static/content/toaster/Toaster_v1.0_Dark.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:55:38,147 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "[36mGET /static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_152110445.jpg HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:55:38,147 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "[36mGET /static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_155134418.jpg HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:55:38,148 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "[36mGET /static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_155226274.jpg HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:55:38,150 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "[36mGET /static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_150138054.jpg HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:55:38,150 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "[36mGET /static/content/fur_meets/26-07-2025_critters_mk/PXL_20250726_155434701.jpg HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:55:38,151 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "[36mGET /static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_141943558.jpg HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:55:38,151 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "[36mGET /static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_150249916.jpg HTTP/1.1[0m" 304 -
|
||||
2026-01-18 22:55:38,152 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 22:55:38] "[36mGET /static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_183614897.jpg HTTP/1.1[0m" 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] "[36mGET /static/css/bases/base.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:19:45,446 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "[36mGET /static/css/index.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:19:45,447 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "[36mGET /static/js/base.js HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:19:45,479 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "[36mGET /static/content/buttons/hijpixel.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:19:45,479 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "[36mGET /static/content/buttons/lensdeer.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:19:45,481 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "[36mGET /static/content/buttons/emmixis.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:19:45,482 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "[36mGET /static/content/buttons/ne0nbandit.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:19:45,484 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "[36mGET /static/content/buttons/nekoweb.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:19:45,485 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "[36mGET /static/content/buttons/thnlqd.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:19:45,485 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "[36mGET /static/content/buttons/s1nez.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:19:45,487 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "[36mGET /static/content/buttons/beeps.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:19:45,488 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "[36mGET /static/content/buttons/insia.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:19:45,489 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "[36mGET /static/content/buttons/blinkiescafe.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:19:45,491 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "[36mGET /static/content/buttons/8831.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:19:45,491 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "[36mGET /static/content/buttons/neocities.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:19:45,492 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "[36mGET /static/content/buttons/tuxedodragon.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:19:45,535 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "[36mGET /static/content/general_images/icon.webp HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:19:45,536 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "[36mGET /static/content/general_images/haj.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:19:45,537 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:19:45] "[36mGET /static/content/buttons/non_link_buttons.txt HTTP/1.1[0m" 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] "[36mGET /static/css/bases/base.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:21:27,216 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "[36mGET /static/css/index.css HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:21:27,217 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "[36mGET /static/js/base.js HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:21:27,226 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "[36mGET /static/content/buttons/hijpixel.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:21:27,227 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "[36mGET /static/content/buttons/lensdeer.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:21:27,228 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "[36mGET /static/content/buttons/emmixis.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:21:27,229 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "[36mGET /static/content/buttons/ne0nbandit.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:21:27,231 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "[36mGET /static/content/buttons/nekoweb.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:21:27,232 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "[36mGET /static/content/buttons/thnlqd.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:21:27,231 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "[36mGET /static/content/buttons/s1nez.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:21:27,234 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "[36mGET /static/content/buttons/beeps.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:21:27,235 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "[36mGET /static/content/buttons/insia.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:21:27,238 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "[36mGET /static/content/buttons/blinkiescafe.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:21:27,236 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "[36mGET /static/content/buttons/8831.png HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:21:27,237 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "[36mGET /static/content/buttons/neocities.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:21:27,240 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "[36mGET /static/content/buttons/tuxedodragon.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:21:27,275 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "[36mGET /static/content/general_images/haj.gif HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:21:27,276 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "[36mGET /static/content/general_images/icon.webp HTTP/1.1[0m" 304 -
|
||||
2026-01-18 23:21:27,277 - werkzeug - INFO - 127.0.0.1 - - [18/Jan/2026 23:21:27] "[36mGET /static/content/buttons/non_link_buttons.txt HTTP/1.1[0m" 304 -
|
||||
22
dockerfile
@@ -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" ]
|
||||
@@ -2,4 +2,6 @@ psycopg2-binary
|
||||
python-dotenv
|
||||
flask-session
|
||||
requests
|
||||
flask
|
||||
flask
|
||||
markdown
|
||||
gunicorn
|
||||
5
run.sh
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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()
|
||||
@@ -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}")
|
||||
@@ -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
|
||||
64
src/wsgi.py
@@ -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')
|
||||
BIN
static/content/fonts/avali-scratch.otf.woff2
Normal file
BIN
static/content/fonts/ultrakill-font-2.woff2
Normal file
BIN
static/content/fonts/ultrakill-font.woff2
Normal file
@@ -1,8 +1,6 @@
|
||||
User-agent: *
|
||||
Allow: /
|
||||
Disallow: /404
|
||||
Disallow: /500
|
||||
Disallow: /400
|
||||
Disallow: /errors
|
||||
|
||||
Sitemap: https://alfieking.dev/sitemap.xml
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
Before Width: | Height: | Size: 3.6 MiB After Width: | Height: | Size: 3.6 MiB |
|
Before Width: | Height: | Size: 4.6 MiB After Width: | Height: | Size: 4.6 MiB |
|
Before Width: | Height: | Size: 3.2 MiB After Width: | Height: | Size: 3.2 MiB |
|
Before Width: | Height: | Size: 2.0 MiB After Width: | Height: | Size: 2.0 MiB |
|
Before Width: | Height: | Size: 4.6 MiB After Width: | Height: | Size: 4.6 MiB |
|
Before Width: | Height: | Size: 3.3 MiB After Width: | Height: | Size: 3.3 MiB |
|
Before Width: | Height: | Size: 3.5 MiB After Width: | Height: | Size: 3.5 MiB |
|
Before Width: | Height: | Size: 2.7 MiB After Width: | Height: | Size: 2.7 MiB |
|
Before Width: | Height: | Size: 3.5 MiB After Width: | Height: | Size: 3.5 MiB |
|
Before Width: | Height: | Size: 4.4 MiB After Width: | Height: | Size: 4.4 MiB |
|
Before Width: | Height: | Size: 4.9 MiB After Width: | Height: | Size: 4.9 MiB |
|
Before Width: | Height: | Size: 5.1 MiB After Width: | Height: | Size: 5.1 MiB |
|
Before Width: | Height: | Size: 3.3 MiB After Width: | Height: | Size: 3.3 MiB |
|
Before Width: | Height: | Size: 4.0 MiB After Width: | Height: | Size: 4.0 MiB |
|
Before Width: | Height: | Size: 4.5 MiB After Width: | Height: | Size: 4.5 MiB |
|
Before Width: | Height: | Size: 4.7 MiB After Width: | Height: | Size: 4.7 MiB |
BIN
static/content/smileos/KITR_Build.webp
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
static/content/smileos/Shopmusic.ogx
Normal file
BIN
static/content/smileos/SmileOS2.webp
Normal file
|
After Width: | Height: | Size: 710 B |
BIN
static/content/smileos/SmileOS2Click.ogx
Normal file
BIN
static/content/smileos/SmileOS2Startup.ogx
Normal file
BIN
static/content/smileos/SmileOS_2_Box.webp
Normal file
|
After Width: | Height: | Size: 170 B |
BIN
static/content/smileos/SmileOS_2_Button_Background.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
static/content/smileos/SmileOS_2_Button_transparent.png
Normal file
|
After Width: | Height: | Size: 126 B |
BIN
static/content/smileos/SmileOS_2_Content.webp
Normal file
|
After Width: | Height: | Size: 86 B |
BIN
static/content/smileos/SmileOS_2_Header.webp
Normal file
|
After Width: | Height: | Size: 170 B |
BIN
static/content/smileos/SmileOS_2_icon_smile.webp
Normal file
|
After Width: | Height: | Size: 88 B |
BIN
static/content/smileos/SmileOS_2_icon_tip.webp
Normal file
|
After Width: | Height: | Size: 82 B |
BIN
static/content/smileos/SmileOS_2_inset_panel.webp
Normal file
|
After Width: | Height: | Size: 68 B |
BIN
static/content/smileos/SmileOS_2_top_button_3.png
Normal file
|
After Width: | Height: | Size: 134 B |
BIN
static/content/smileos/SmileOS_2_top_button_4.png
Normal file
|
After Width: | Height: | Size: 122 B |
BIN
static/content/smileos/SmileOS_2_top_button_5.png
Normal file
|
After Width: | Height: | Size: 116 B |
BIN
static/content/toaster/Toaster_v1.0_sticker.png
Normal file
|
After Width: | Height: | Size: 1.0 MiB |
BIN
static/content/toaster/Toaster_v1.1.png
Normal file
|
After Width: | Height: | Size: 830 KiB |
@@ -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);
|
||||
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
@@ -81,4 +81,8 @@ ul#toaster-specs li {
|
||||
.flex-col {
|
||||
flex-direction: column;
|
||||
}
|
||||
}
|
||||
|
||||
#toaster-wave {
|
||||
display: none;
|
||||
}
|
||||
@@ -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() {
|
||||
|
||||
70
static/js/furnix_widget.js
Normal 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
@@ -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 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();
|
||||
});
|
||||
78
static/js/ultraring_widget.js
Normal 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>
|
||||
`);
|
||||
|
||||
}
|
||||
@@ -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>
|
||||
|
||||
@@ -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
@@ -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 %}
|
||||
@@ -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 %}
|
||||
@@ -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 %}
|
||||
16
templates/errors/error.html
Normal 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 %}
|
||||
@@ -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 %}
|
||||
@@ -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 %}
|
||||
@@ -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
@@ -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 %}
|
||||
@@ -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>
|
||||