diff --git a/.gitignore b/.gitignore index 5a0bc45..2e50f32 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,6 @@ .venv .env -db.sqlite flask_session __pycache__ -app.log -.vscode \ No newline at end of file +.vscode +db \ No newline at end of file diff --git a/app.log b/app.log new file mode 100644 index 0000000..3a91c70 --- /dev/null +++ b/app.log @@ -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 - diff --git a/src/routes/dynamic_routes.py b/src/routes/dynamic_routes.py new file mode 100644 index 0000000..da4dfda --- /dev/null +++ b/src/routes/dynamic_routes.py @@ -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('/') +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}") \ No newline at end of file diff --git a/src/routes/error_handlers.py b/src/routes/error_handlers.py index 34e055e..22e19f2 100644 --- a/src/routes/error_handlers.py +++ b/src/routes/error_handlers.py @@ -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') diff --git a/src/routes/generic.py b/src/routes/generic.py deleted file mode 100644 index cf350dd..0000000 --- a/src/routes/generic.py +++ /dev/null @@ -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('/') -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}") \ No newline at end of file diff --git a/src/routes/snake.py b/src/routes/snake.py deleted file mode 100644 index c8a4a7b..0000000 --- a/src/routes/snake.py +++ /dev/null @@ -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() \ No newline at end of file diff --git a/src/utils/cap.py b/src/utils/cap.py deleted file mode 100644 index 456e7c5..0000000 --- a/src/utils/cap.py +++ /dev/null @@ -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 \ No newline at end of file diff --git a/src/utils/database.py b/src/utils/database.py deleted file mode 100644 index 8cc5d94..0000000 --- a/src/utils/database.py +++ /dev/null @@ -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() \ No newline at end of file diff --git a/src/wsgi.py b/src/wsgi.py index 47d4970..c5c45b4 100644 --- a/src/wsgi.py +++ b/src/wsgi.py @@ -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}") \ No newline at end of file +# 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') \ No newline at end of file diff --git a/static/content/buttons/hijpixel.gif b/static/content/buttons/hijpixel.gif new file mode 100644 index 0000000..d7b2b0c Binary files /dev/null and b/static/content/buttons/hijpixel.gif differ diff --git a/static/content/buttons/lensdeer.gif b/static/content/buttons/lensdeer.gif new file mode 100644 index 0000000..47b7232 Binary files /dev/null and b/static/content/buttons/lensdeer.gif differ diff --git a/static/content/other/buttons.txt b/static/content/buttons/non_link_buttons.txt similarity index 95% rename from static/content/other/buttons.txt rename to static/content/buttons/non_link_buttons.txt index 15132bf..e6ad151 100644 --- a/static/content/other/buttons.txt +++ b/static/content/buttons/non_link_buttons.txt @@ -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 diff --git a/static/css/404.css b/static/css/404.css deleted file mode 100644 index 0816d0a..0000000 --- a/static/css/404.css +++ /dev/null @@ -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; - } -} \ No newline at end of file diff --git a/static/css/base.css b/static/css/bases/base.css similarity index 97% rename from static/css/base.css rename to static/css/bases/base.css index f731444..a37b763 100644 --- a/static/css/base.css +++ b/static/css/bases/base.css @@ -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); diff --git a/static/css/directory.css b/static/css/bases/directory.css similarity index 100% rename from static/css/directory.css rename to static/css/bases/directory.css diff --git a/static/css/cap.css b/static/css/cap.css deleted file mode 100644 index eb614a2..0000000 --- a/static/css/cap.css +++ /dev/null @@ -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; -} \ No newline at end of file diff --git a/static/css/400.css b/static/css/errors/400.css similarity index 100% rename from static/css/400.css rename to static/css/errors/400.css diff --git a/static/css/500.css b/static/css/errors/500.css similarity index 100% rename from static/css/500.css rename to static/css/errors/500.css diff --git a/static/css/gallery.css b/static/css/gallery.css index 5faafc5..29a29c4 100644 --- a/static/css/gallery.css +++ b/static/css/gallery.css @@ -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; } \ No newline at end of file diff --git a/static/js/base.js b/static/js/base.js index 0945281..b6774d4 100644 --- a/static/js/base.js +++ b/static/js/base.js @@ -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'); diff --git a/static/js/snake.js b/static/js/snake.js deleted file mode 100644 index cdd682b..0000000 --- a/static/js/snake.js +++ /dev/null @@ -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(); \ No newline at end of file diff --git a/templates/bases/base.html b/templates/bases/base.html index bc971f1..4d578b7 100644 --- a/templates/bases/base.html +++ b/templates/bases/base.html @@ -5,7 +5,7 @@ {% block title %}Alfie's basement{% endblock %} - + @@ -37,7 +37,6 @@
  • YouTube
  • Tumblr
  • Reddit
  • -
  • 404 >:3
  • @@ -47,6 +46,8 @@

    BUTTONS

      +
    • hijpixel
    • +
    • lensdeer
    • emmixis
    • dimden
    • ne0nbandit
    • @@ -61,6 +62,12 @@
    • tuxedodragon
    +
    +
    + + +
    +
          |\      _,,,---,,_
    ZZZzz /,`.-'`' -. ;-;;,_
    |,4- ) )-,_. ,\ ( `'-'
    '---''(_/--' `-'\_)
    diff --git a/templates/bases/directory.html b/templates/bases/directory.html index 714ebec..d30688e 100644 --- a/templates/bases/directory.html +++ b/templates/bases/directory.html @@ -4,7 +4,7 @@ {% block description %}server backend survivor{% endblock %} {% block head %} - + {% endblock %} {% block scripts %} diff --git a/templates/errors/400.html b/templates/errors/400.html index 2ebb911..16b471c 100644 --- a/templates/errors/400.html +++ b/templates/errors/400.html @@ -4,7 +4,7 @@ {% block description %}Bad request. The server could not understand the request due to invalid syntax.{% endblock %} {% block head %} - + {% endblock %} {% block content %} diff --git a/templates/errors/404.html b/templates/errors/404.html index 0413b88..0215a8d 100644 --- a/templates/errors/404.html +++ b/templates/errors/404.html @@ -3,80 +3,11 @@ {% block title %}404 - Not Found{% endblock %} {% block description %}The page you are looking for does not exist.{% endblock %} -{% block head %} - - -{% endblock %} - {% block content %}

    404

    - It seems like the thing you are looking for is not here :[ -

    - - while you're here, why not play some snake? - - - You can't play snake on mobile, sorry :( - + It seems like the thing you are looking for does not exist or rm -rf itself out of exsistance.

    -
    - -
    -
    -
    -

    Submit score

    -
    - - - - - -
    -
    -
    -

    Leaderboard

    -
      - {% for score in scores %} -
    • - {{ score.position }} - {{ score.name }} - {{ score.score }} -
    • - {% endfor %} -
    -
    -
    -
    -

    Leaderboard

    -
      - {% for score in scores %} -
    • - {{ score.position }} - {{ score.name }} - {{ score.score }} -
    • - {% endfor %} -
    -
    -{% if error %} - -

    Error

    -

    {{ error }}

    - -
    - -{% endif %} -{% endblock %} - -{% block scripts %} - - {% endblock %} \ No newline at end of file diff --git a/templates/errors/500.html b/templates/errors/500.html index ff54c62..eec13f3 100644 --- a/templates/errors/500.html +++ b/templates/errors/500.html @@ -4,7 +4,7 @@ {% block description %}An unexpected error occurred on the server.{% endblock %} {% block head %} - + {% endblock %} {% block content %} diff --git a/templates/index.html b/templates/index.html index eae876b..52a30b1 100644 --- a/templates/index.html +++ b/templates/index.html @@ -11,7 +11,7 @@

    A lil bit abt me

    - 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 @@

    Some News

    (dont expect this to be updated often tho :P)
      +
    • +

      18-01-2026

      +

      + :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 +

      +
    • 28-06-2025

      diff --git a/templates/pages/events/crittersmk.html b/templates/pages/events/crittersmk.html index 04f6e61..6201446 100644 --- a/templates/pages/events/crittersmk.html +++ b/templates/pages/events/crittersmk.html @@ -34,18 +34,20 @@ protogen v1.0, toaster v1.0

      Here are some photos from the meets I have attended. I will add more as I attend more meets.

      -
    {% endblock %} \ No newline at end of file