major update :O #2

Merged
acetheking987 merged 1 commits from major-redesign into main 2026-01-18 23:25:17 +00:00
28 changed files with 514 additions and 765 deletions
Showing only changes of commit 25b03aa105 - Show all commits

5
.gitignore vendored
View File

@@ -1,7 +1,6 @@
.venv
.env
db.sqlite
flask_session
__pycache__
app.log
.vscode
.vscode
db

382
app.log Normal file
View File

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

View File

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

View File

@@ -3,9 +3,6 @@ from flask import Blueprint, render_template
from os import getenv as env
import logging
import src.routes.snake as snake
# Create blueprint
bp = Blueprint(
'error_handlers',
@@ -14,11 +11,9 @@ bp = Blueprint(
static_folder=env('STATIC_FOLDER', default='../static')
)
# Create logger
log = logging.getLogger(__name__)
# Route for 500 error
@bp.route('/500')
@bp.app_errorhandler(500)
@@ -27,17 +22,13 @@ def internal_server_error(error=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)
scores = snake.get_leaderboard()
token = snake.generate_start_token()
return render_template('errors/404.html', scores=scores, token=token, cap_key=env('CAP_KEY', default='')), 404 if error is not None else 200
return render_template('errors/404.html'), 404 if error is not None else 200
# Route for 400 error
@bp.route('/400')

View File

@@ -1,65 +0,0 @@
# Imports
from flask import Blueprint, render_template, request, abort, send_file
from os import getenv as env
import logging, os
# Create blueprint
bp = Blueprint(
'generic',
__name__,
template_folder=env('TEMPLATE_FOLDER', default='../templates'),
static_folder=env('STATIC_FOLDER', default='../static')
)
# Create logger
log = logging.getLogger(__name__)
# Route for index page
@bp.route('/')
def index():
return render_template('index.html')
# Route for favicon
@bp.route('/favicon.ico')
def favicon():
return send_file('../static/content/other/favicon.ico')
# Route for robots.txt
@bp.route('/robots.txt')
def robots():
return send_file('../static/content/other/robots.txt')
# Route for sitemap.xml
@bp.route('/sitemap.xml')
def sitemap():
return send_file('../static/content/other/sitemap.xml')
# Catch-all route for generic pages
@bp.route('/<path:filename>')
def catch_all(filename):
try: return render_template(f'pages/{filename if filename.endswith(".html") else filename + ".html"}')
except Exception as e:
# If the template is not found, check if it is a directory
os_path = os.path.join(bp.template_folder, 'pages', filename)[3:]
if os.path.isdir(os_path):
# walk through the directory and find all files
pages = []
for root, dirs, files_in_dir in os.walk(os_path):
for file in files_in_dir:
pages.append(os.path.relpath(os.path.join(root, file), os_path))
for dir in dirs:
pages.append(os.path.relpath(os.path.join(root, dir), os_path) + '/')
# If it is a directory, render a directory page
if not filename.endswith('/'): filename += '/'
return render_template('bases/directory.html', directory=filename, pages=pages)
# If it is a file, return a 404 error
abort(404, f"Template '{filename}' not found: {e}")

View File

@@ -1,153 +0,0 @@
# Imports
from flask import Blueprint, abort, request, redirect
from os import urandom, getenv as env
import src.utils.database as database
import src.utils.cap as cap
import logging, datetime, threading, time
# Create blueprint
bp = Blueprint(
'snake',
__name__,
template_folder=env('TEMPLATE_FOLDER', default='../templates'),
static_folder=env('STATIC_FOLDER', default='../static')
)
# Create logger
log = logging.getLogger(__name__)
# Create database instance
db = database.Database(
host=env('DB_HOST', default='localhost'),
port=env('DB_PORT', default=5432),
user=env('DB_USER', default='user'),
password=env('DB_PASSWORD', default='password'),
db_name=env('DB_NAME', default='db_name')
)
db.execute('CREATE TABLE IF NOT EXISTS snake_scores (id SERIAL PRIMARY KEY, name TEXT, score INTEGER)')
db.execute('''CREATE TABLE IF NOT EXISTS snake_tokens (
id SERIAL PRIMARY KEY,
token TEXT UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
ip TEXT UNIQUE NOT NULL
)''')
# Input validation function
def valid_length(value, min_length=1, max_length=100):
if not isinstance(value, str):
return False
return min_length <= len(value) <= max_length
def valid_score(score, game_token):
start_time = db.execute('SELECT created_at FROM snake_tokens WHERE token = %s', (game_token,)).fetchone()
if not start_time:
log.error("Game token not found.")
return False
start_time = datetime.datetime.fromisoformat(start_time[0])
current_time = datetime.datetime.now()
elapsed_time = (current_time - start_time).total_seconds()
if elapsed_time < score / 10 * 3 + 10: # assuming that each point takes 3 seconds to achieve and 10 seconds to start the game and do captcha
log.error("Score is too high for the elapsed time.")
return False
if score <= 0 or score > 10000: # Arbitrary upper limit for scores
log.error("Score is out of valid range.")
return False
if score % 10 != 0:
log.error("Score is not a multiple of 10.")
return False
# delete the token after score validation
db.execute('DELETE FROM snake_tokens WHERE token = %s', (game_token,))
log.info(f"Score {score} validated successfully for token {game_token}.")
return True
# Route for score submission
@bp.route('/snake/submit', methods=['POST'])
def submit_score():
name = request.form.get('name')
score = request.form.get('score')
captcha_token = request.form.get('cap-token')
game_token = request.form.get('game_token')
if not cap.verify_captcha(captcha_token):
log.error("Captcha verification failed.")
abort(400, "Captcha verification failed")
if not name or not score or not captcha_token or not game_token:
log.error("Name, score, captcha token, or game token is missing.")
abort(400, "Missing required fields")
if not valid_length(name, min_length=3, max_length=15):
log.error("Invalid name length.")
abort(400, "Name must be between 3 and 15 characters long.")
if not valid_score(int(score), game_token):
log.error("Invalid score.")
abort(400, "Score not vilid, so either you are trying to cheat the leaderboard or something is seriously wrong.")
try:
db.execute('INSERT INTO snake_scores (name, score) VALUES (%s, %s)', (name, int(score)))
db.execute('DELETE FROM snake_tokens WHERE token = %s', (game_token,))
log.info(f"Score submitted: {name} - {score}")
return redirect('/404')
except Exception as e:
log.error(f"Database error: {e}")
abort(500, "Internal server error while submitting score.")
# Generate a unique game token
def generate_start_token():
"""Generate a unique start token for the game."""
token = urandom(16).hex()
ip = request.headers.get('X-Forwarded-For', request.remote_addr)
ip_token = db.execute('SELECT token FROM snake_tokens WHERE ip = %s', (ip,)).fetchone()
if ip_token:
log.info(f"Token already exists for IP: {ip}, reusing token.")
return ip_token[0]
log.info(f"Generated start token: {token}")
db.execute('INSERT INTO snake_tokens (token, ip) VALUES (%s, %s)', (token, ip))
return token
# Get leaderboard scores
def get_leaderboard():
"""Fetch scores from the leaderboard."""
try:
scores = db.execute('SELECT name, score FROM snake_scores ORDER BY score DESC').fetchall()
leaderboard = [{'position': i + 1, 'name': score[0], 'score': score[1]} for i, score in enumerate(scores)]
log.info("Leaderboard fetched successfully.")
return leaderboard
except Exception as e:
log.error(f"Error fetching leaderboard: {e}")
return []
# Clear all tokens older than 1 hour
def clear_old_tokens():
while True:
try:
one_hour_ago = datetime.datetime.now() - datetime.timedelta(hours=1)
db.execute('DELETE FROM snake_tokens WHERE created_at < %s', (one_hour_ago,))
log.info("Old tokens cleared.")
except Exception as e:
log.error(f"Error clearing old tokens: {e}")
time.sleep(3600) # Run every hour
# Start the token clearing thread
token_thread = threading.Thread(target=clear_old_tokens, daemon=True)
token_thread.start()

View File

@@ -1,42 +0,0 @@
# Imports
from os import getenv as env
import requests, logging
# Create logger
log = logging.getLogger(__name__)
# Function to verify CAPTCHA response
def verify_captcha(token: str) -> bool:
"""
Verify the CAP response token with the CAP server.
Args:
token (str): The CAP response token to verify.
Returns:
bool: True if the token is valid, False otherwise.
"""
if not token:
return False
try:
response = requests.post(
f"https://cap.alfieking.dev/{env('CAP_KEY', default='')}/siteverify",
json={
'secret': env('CAP_SECRET', default=''),
'response': token,
},
timeout=10
)
response.raise_for_status()
if response.status_code != 200:
log.error("CAPTCHA verification failed with status code: %s", response.status_code)
return False
return response.json().get('success', False)
except Exception as e:
log.error("Error verifying CAPTCHA: %s", e)
return False

View File

@@ -1,23 +0,0 @@
# Imports
import psycopg2
class Database:
def __init__(self, host, port, user, password, db_name):
self.connection = psycopg2.connect(
host=host,
port=port,
user=user,
password=password,
database=db_name
)
self.cursor = self.connection.cursor()
def execute(self, query, params=None):
if params is None:
params = []
self.cursor.execute(query, params)
self.connection.commit()
return self.cursor
def close(self):
self.connection.close()

View File

@@ -1,34 +1,33 @@
# Imports
from flask import Flask
from flask import Flask, render_template, send_file
from flask_session import Session
from dotenv import load_dotenv
from os import getenv as env, listdir
import logging, importlib
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)
# Create console log handler
console_log = logging.StreamHandler()
console_log.setFormatter(logging.Formatter("\033[1;32m%(asctime)s\033[0m - \033[1;34m%(levelname)s\033[0m - \033[1;31m%(name)s\033[0m - %(message)s"))
console_log.setLevel(logging.INFO)
# Create file log handler
file_log = logging.FileHandler(env('LOG_FILE', default='app.log'), mode=env('LOG_MODE', default='a'))
file_log.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(name)s - %(message)s"))
file_log.setLevel(logging.DEBUG)
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(console_log)
log.addHandler(file_log)
log.addHandler(stream_handler)
log.addHandler(file_handler)
log.info("Logging initialized")
# Create flask app
app = Flask(
__name__,
@@ -41,18 +40,25 @@ app.config["SESSION_PERMANENT"] = True
app.config["SESSION_TYPE"] = "filesystem"
Session(app)
# Load routes
routes_dir = env('ROUTES_DIR', default='src/routes')
for filename in listdir(routes_dir):
if not filename.endswith('.py') and filename.startswith('__'):
continue
app.register_blueprint(src.routes.error_handlers.bp, url_prefix='/error')
app.register_blueprint(src.routes.dynamic_routes.bp, url_prefix='/')
module_name = f"{routes_dir.replace('/', '.')}.{filename[:-3]}"
try:
module = importlib.import_module(module_name)
if hasattr(module, 'bp'):
app.register_blueprint(module.bp)
log.info(f"Registered blueprint: {module_name}")
except Exception as e:
log.error(f"Failed to register blueprint {module_name}: {e}")
# Generic routes
@app.route('/')
def index():
return render_template('index.html')
@app.route('/favicon.ico')
def favicon():
return send_file('../static/content/other/favicon.ico')
@app.route('/robots.txt')
def robots():
return send_file('../static/content/other/robots.txt')
# Route for sitemap.xml
@app.route('/sitemap.xml')
def sitemap():
return send_file('../static/content/other/sitemap.xml')

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -3,7 +3,6 @@ https://cyber.dabamos.de/88x31/anythingbut.gif
https://cyber.dabamos.de/88x31/bestdesktop.gif
https://kopawz.neocities.org/buttonhoard/buttonsfldr2/diagnosedwithGAY.gif
https://kopawz.neocities.org/indexgraphics/buttondecor/ilikecomputer.png
https://identity-crisis.carrd.co/assets/images/gallery04/ad4f8d52.jpg?v=4e55d939
https://anlucas.neocities.org/best_viewed_with_eyes.gif
https://anlucas.neocities.org/html_learn_it_today.gif
https://highway.eightyeightthirty.one/badge/5d58a8f32b007d4897db6f862a895a81674fb35f5cc3947fc66595817ca174db

View File

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

View File

@@ -308,6 +308,14 @@ a {
text-decoration: none;
}
code {
background-color: var(--secondary-background-color-but-slightly-transparent);
padding: 4px 6px;
border-radius: 4px;
font-size: 0.9rem;
color: var(--primary-color);
}
@media screen and (max-width: 1000px) {
body {
background-color: var(--background-color);

View File

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

View File

@@ -1,17 +1,23 @@
.gallery {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
gap: 1rem;
width: 100%;
}
.gallery img {
.gallery .gallery-images {
display: flex;
flex-direction: row;
justify-content: space-between;
gap: 1rem;
overflow: hidden;
}
.gallery .gallery-images img {
max-width: 100%;
height: auto;
border-radius: 10px;
}
.gallery-date {
margin: 1rem 0 .25rem 0;
font-size: 2rem;
.gallery h2.gallery-date {
position: relative;
top: 0;
left: 0;
}

View File

@@ -118,7 +118,7 @@ if (document.getElementById('spotify')) {
// load buttons
function loadButtons() {
fetch('/static/content/other/buttons.txt').then(response => {
fetch('/static/content/buttons/non_link_buttons.txt').then(response => {
return response.text();
}).then(data => {
container = document.getElementById('button-collection');

View File

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

View File

@@ -5,7 +5,7 @@
<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">
<link rel="stylesheet" href="/static/css/base.css">
<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="author" content="Alfie King">
@@ -37,7 +37,6 @@
<li><a href="https://www.youtube.com/@acetheking987">YouTube</a></li>
<li><a href="https://acetheking987.tumblr.com/">Tumblr</a></li>
<li><a href="https://www.reddit.com/user/acetheking987">Reddit</a></li>
<li><a href="/404">404 >:3</a></li>
</ul>
</section>
</nav>
@@ -47,6 +46,8 @@
<section id="buttons">
<h1>BUTTONS</h1>
<ul>
<li><a herf="https://hijpixel.nekoweb.org/"><img src="/static/content/buttons/hijpixel.gif" alt="hijpixel"></a></li>
<li><a href="https://lensdeer.neocities.org/"><img src="/static/content/buttons/lensdeer.gif" alt="lensdeer"></a></li>
<li><a href="https://emmixis.net/"><img src="/static/content/buttons/emmixis.gif" alt="emmixis"></a></li>
<li><a href="https://dimden.dev/"><img src="https://dimden.dev/services/images/88x31.gif" alt="dimden"></a></li><!-- hotlink on purpose -->
<li><a href="https://ne0nbandit.neocities.org/"><img src="/static/content/buttons/ne0nbandit.png" alt="ne0nbandit"></a></li>
@@ -61,6 +62,12 @@
<li><a href="https://tuxedodragon.art"><img src="/static/content/buttons/tuxedodragon.gif" alt="tuxedodragon"></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>
</section>
<section>
<pre class="vsmoltext"> |\ _,,,---,,_<br>ZZZzz /,`.-'`' -. ;-;;,_<br> |,4- ) )-,_. ,\ ( `'-'<br> '---''(_/--' `-'\_)</pre>
</section>

View File

@@ -4,7 +4,7 @@
{% block description %}server backend survivor{% endblock %}
{% block head %}
<link rel="stylesheet" href="/static/css/directory.css">
<link rel="stylesheet" href="/static/css/bases/directory.css">
{% endblock %}
{% block scripts %}

View File

@@ -4,7 +4,7 @@
{% block description %}Bad request. The server could not understand the request due to invalid syntax.{% endblock %}
{% block head %}
<link rel="stylesheet" href="/static/css/400.css">
<link rel="stylesheet" href="/static/css/errors/400.css">
{% endblock %}
{% block content %}

View File

@@ -3,80 +3,11 @@
{% block title %}404 - Not Found{% endblock %}
{% block description %}The page you are looking for does not exist.{% endblock %}
{% block head %}
<link rel="stylesheet" href="/static/css/404.css">
<link rel="stylesheet" href="/static/css/cap.css">
{% endblock %}
{% block content %}
<section>
<h1>404</h1>
<p>
It seems like the thing you are looking for is not here :[
<br><br>
<span class="pcOnly">
while you're here, why not play some snake?
</span>
<span class="mobileOnly">
You can't play snake on mobile, sorry :(
</span>
It seems like the thing you are looking for does not exist or <code>rm -rf</code> itself out of exsistance.
</p>
<div class="pcOnly" id="snakeContainer">
<canvas id="snakeCanvas"></canvas>
</div>
</section>
<section class="pcOnly flex-row">
<section class="min-width">
<h2>Submit score</h2>
<form action="/snake/submit" method="POST" id="snakeForm">
<input type="text" id="name" name="name" maxlength=15 minlength=3 placeholder="Your name" required>
<cap-widget id="captcha" data-cap-api-endpoint="https://cap.alfieking.dev/{{ cap_key }}/"></cap-widget>
<input type="hidden" id="score" name="score" value="0">
<input type="hidden" id="game_token" name="game_token" value="{{ token}}">
<button type="submit" id="submit">Submit</button>
</form>
</section>
<section class="max-width" id="snakeLeaderboardSection">
<h2>Leaderboard</h2>
<ul id="snakeLeaderboard">
{% for score in scores %}
<li>
<span>{{ score.position }}</span>
<span>{{ score.name }}</span>
<span>{{ score.score }}</span>
</li>
{% endfor %}
</ul>
</section>
</section>
<section class="max-width mobileOnly" id="snakeLeaderboardSection">
<h2>Leaderboard</h2>
<ul id="snakeLeaderboard">
{% for score in scores %}
<li>
<span>{{ score.position }}</span>
<span>{{ score.name }}</span>
<span>{{ score.score }}</span>
</li>
{% endfor %}
</ul>
</section>
{% if error %}
<dialog id="errorDialog">
<h2>Error</h2>
<p>{{ error }}</p>
<button onclick="errorDialog.close()">Close</button>
</dialog>
<script>
const errorDialog = document.getElementById('errorDialog');
if (errorDialog) {
errorDialog.showModal();
}
</script>
{% endif %}
{% endblock %}
{% block scripts %}
<script src="/static/js/snake.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@cap.js/widget"></script>
{% endblock %}

View File

@@ -4,7 +4,7 @@
{% block description %}An unexpected error occurred on the server.{% endblock %}
{% block head %}
<link rel="stylesheet" href="/static/css/500.css">
<link rel="stylesheet" href="/static/css/errors/500.css">
{% endblock %}
{% block content %}

View File

@@ -11,7 +11,7 @@
<section>
<h1>A lil bit abt me</h1>
<p>
Im not good with writing so dont expect much here. I am a student who is learning c++ and python. I've Done a few projects that i think
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
slightly annoying at times (mainly because one of my most played games' anticheat doesn't support on linux atm. Also, the lack of photoshop is
@@ -104,6 +104,15 @@
<h1>Some News</h1>
<h6>(dont expect this to be updated often tho :P)</h6>
<ul>
<li>
<h2>18-01-2026</h2>
<p>
:O an update! thats unheard of on this site (aleast its more often than tf2 gets updates). finding motivation to work on things has been painful
recently, but im wokring on my mental state a bit so hopefully there will be more updates. I am writing this before i make any major changes but
i hope to add a blog or something, or maybe a daily thoughts thing that pings my phone to get me to write something. I also need to rewrite most
of the home page as well since its kinda out of date :P
</p>
</li>
<li>
<h2>28-06-2025</h2>
<p>

View File

@@ -34,18 +34,20 @@ protogen v1.0, toaster v1.0
<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">26th July 2025</h2>
<div class="gallery">
<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">
<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">
</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">
<img src="/static/content/fur_meets/23-08-2025_critters_mk/PXL_20250823_130659800.jpg" alt="Critters MK">
</div>
</section>
{% endblock %}