more updates
All checks were successful
Build and push container image / build-and-push-image (push) Successful in 2m59s
@@ -1,5 +1,5 @@
|
||||
# Imports
|
||||
from flask import Blueprint, render_template, request, abort, send_from_directory
|
||||
from flask import Blueprint, render_template, request, abort, send_from_directory, send_file
|
||||
from os import getenv as env
|
||||
import logging
|
||||
|
||||
@@ -23,22 +23,31 @@ def index():
|
||||
return render_template('index.html')
|
||||
|
||||
|
||||
# Route for robots.txt, sitemap.xml, and favicon.ico
|
||||
@bp.route('/robots.txt')
|
||||
@bp.route('/sitemap.xml')
|
||||
# Route for favicon
|
||||
@bp.route('/favicon.ico')
|
||||
def web_stuffs():
|
||||
return send_from_directory(
|
||||
env('STATIC_FOLDER', default='../static'),
|
||||
request.path.lstrip('/')
|
||||
)
|
||||
def favicon():
|
||||
return send_file('../static/content/other/favicon.ico')
|
||||
|
||||
|
||||
# catch-all route for any other static pages (only in root path)
|
||||
@bp.route('/<string:filename>')
|
||||
def static_files(filename):
|
||||
# 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 to find template in the pages directory and add .html extension
|
||||
if not filename.endswith('.html'):
|
||||
filename += '.html'
|
||||
try:
|
||||
return render_template(filename if filename.endswith('.html') else filename + '.html')
|
||||
return render_template(f'pages/{filename}')
|
||||
except Exception as e:
|
||||
log.error(f"Error serving static file {filename}: {e}")
|
||||
abort(404)
|
||||
abort(404, f"Template '{filename}' not found: {e}")
|
After Width: | Height: | Size: 3.2 MiB |
After Width: | Height: | Size: 2.0 MiB |
After Width: | Height: | Size: 4.6 MiB |
After Width: | Height: | Size: 3.5 MiB |
After Width: | Height: | Size: 3.3 MiB |
After Width: | Height: | Size: 4.0 MiB |
After Width: | Height: | Size: 4.5 MiB |
After Width: | Height: | Size: 4.7 MiB |
Before Width: | Height: | Size: 743 KiB After Width: | Height: | Size: 743 KiB |
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 49 KiB |
Before Width: | Height: | Size: 240 KiB After Width: | Height: | Size: 240 KiB |
Before Width: | Height: | Size: 2.7 MiB After Width: | Height: | Size: 2.7 MiB |
@@ -1,7 +1,7 @@
|
||||
@import url('https://fonts.googleapis.com/css2?family=Fredoka:wdth,wght@125,700&family=Space+Mono:ital,wght@0,400;0,700;1,400;1,700&display=swap');
|
||||
@font-face {
|
||||
font-family:"Irken";
|
||||
src:url("/static/content/Irken-Like-AllCaps.woff") format("woff");
|
||||
src:url("/static/content/fonts/Irken-Like-AllCaps.woff") format("woff");
|
||||
font-weight:normal;
|
||||
font-style:normal;
|
||||
}
|
||||
@@ -227,7 +227,7 @@ main section a {
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
opacity: 0.1;
|
||||
background-image: url('/static/content/background.png');
|
||||
background-image: url('/static/content/general_images/background.png');
|
||||
background-repeat: no-repeat;
|
||||
background-position: 50% 0;
|
||||
background-size: cover;
|
||||
|
@@ -34,6 +34,35 @@ ul#toaster-specs li {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.fur-meet-gallery-small {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 5px;
|
||||
}
|
||||
|
||||
.fur-meet-gallery-small img {
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
object-fit: cover;
|
||||
border-radius: 10px;
|
||||
border: 2px solid var(--secondary-background-color);
|
||||
}
|
||||
|
||||
.fur-meet-gallery-small img:hover {
|
||||
transform: scale(1.05);
|
||||
transition: transform 0.2s ease-in-out;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#fur-meets {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 10px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 740px) {
|
||||
.flex-row {
|
||||
flex-direction: column;
|
||||
|
@@ -118,7 +118,7 @@ if (document.getElementById('spotify')) {
|
||||
// load buttons
|
||||
|
||||
function loadButtons() {
|
||||
fetch('/static/content/buttons.txt').then(response => {
|
||||
fetch('/static/content/other/buttons.txt').then(response => {
|
||||
return response.text();
|
||||
}).then(data => {
|
||||
container = document.getElementById('button-collection');
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<link rel="icon" href="/static/content/icon.webp">
|
||||
<link rel="stylesheet" href="/static/css/base.css">
|
||||
<meta name="description" content="{% block description %}server backend survivor{% endblock %}">
|
||||
<meta name="keywords" content="Alfie King, Alfie, King, Alfieking, Alfieking.dev, dev, server">
|
||||
<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">
|
||||
<meta name="robots" content="all">
|
||||
<meta name="theme-color" content="#63de90" data-react-helmet="true">
|
||||
@@ -15,7 +15,7 @@
|
||||
<meta property="og:url" content="https://alfieking.dev/">
|
||||
<meta property="og:title" content="{{ self.title() }}">
|
||||
<meta property="og:description" content="{{ self.description() }}">
|
||||
<meta property="og:image" content="{% block og_image %}/static/content/icon.webp{% endblock %}">
|
||||
<meta property="og:image" content="{% block og_image %}/static/content/general_images/icon.webp{% endblock %}">
|
||||
{% block head %}
|
||||
{% endblock %}
|
||||
</head>
|
||||
@@ -62,12 +62,12 @@
|
||||
<section>
|
||||
<pre class="vsmoltext"> |\ _,,,---,,_<br>ZZZzz /,`.-'`' -. ;-;;,_<br> |,4- ) )-,_. ,\ ( `'-'<br> '---''(_/--' `-'\_)</pre>
|
||||
</section>
|
||||
<img src="/static/content/haj.gif" alt="haj" class="haj">
|
||||
<img src="/static/content/general_images/haj.gif" alt="haj" class="haj">
|
||||
</div>
|
||||
<main id="main">
|
||||
<header id="home">
|
||||
<div class="row">
|
||||
<img src="/static/content/icon.webp">
|
||||
<img src="/static/content/general_images/icon.webp">
|
||||
<div>
|
||||
<h1>Alfie King</h1>
|
||||
<h2 id="typing">server backend survivor</h2>
|
||||
|
@@ -3,6 +3,12 @@
|
||||
{% block title %}Toaster - Alfie's basement{% endblock %}
|
||||
{% block description %}furry corner{% endblock %}
|
||||
{% block og_image %}/static/content/Toaster_v1.0_Dark.png{% endblock %}
|
||||
{% block keywords %}
|
||||
Alfie King, Alfie, King, Alfieking, Alfieking.dev, dev, server, developer, backend, selfhost, homelab, furry, protogen, toaster,
|
||||
fursona, fur, furmeet, fursuit, persona, character, protogen fursona, protogen character, protogen fursona design,
|
||||
protogen character design, critters mk, critters cmk, paws n pistons, paws'n'pistons, paws n pistons furry meet, paws'n'pistons furry meet,
|
||||
protogen v1.0, toaster v1.0
|
||||
{% endblock %}
|
||||
|
||||
{% block head %}
|
||||
<link rel="stylesheet" href="/static/css/toaster.css">
|
||||
@@ -45,7 +51,7 @@
|
||||
</ul>
|
||||
</section>
|
||||
<div class="flex-col">
|
||||
<img src="/static/content/Toaster_v1.0_Dark.png" alt="toaster" id="toaster-img">
|
||||
<img src="/static/content/toaster/Toaster_v1.0_Dark.png" alt="toaster" id="toaster-img">
|
||||
<section class="fill-height">
|
||||
<p>
|
||||
NEW AND IMPROVED! Toaster v1.0 is here!
|
||||
@@ -70,4 +76,31 @@
|
||||
If I end up making a fursuit, I will probably make a post about it on my site and maybe even make a video of it (but dont hold me to that).
|
||||
</p>
|
||||
</section>
|
||||
<section>
|
||||
<h1>Events</h1>
|
||||
<p>
|
||||
There are a few events that ive been to, however I plan on trying to go to more in the future.
|
||||
<br>
|
||||
</p>
|
||||
<ul id="fur-meets">
|
||||
<li>
|
||||
<a href="https://x.com/cmkfurmeet"><b>CrittersCMK</b></a> - A furmeet in Milton Keynes.
|
||||
<div class="fur-meet-gallery-small">
|
||||
<img src="/static/content/fur_meets/26-08-2025_critters_mk/PXL_20250726_152110445.jpg" alt="CrittersCMK">
|
||||
<img src="/static/content/fur_meets/26-08-2025_critters_mk/PXL_20250726_155134418.jpg" alt="CrittersCMK">
|
||||
<img src="/static/content/fur_meets/26-08-2025_critters_mk/PXL_20250726_155226274.jpg" alt="CrittersCMK">
|
||||
<img src="/static/content/fur_meets/26-08-2025_critters_mk/PXL_20250726_155434701.jpg" alt="CrittersCMK">
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://www.instagram.com/paws_n_pistons/"><b>Paws'N'Pistons</b></a> - A furry car meet around the UK.
|
||||
<div class="fur-meet-gallery-small">
|
||||
<img src="/static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_141943558.jpg" alt="Paws'N'Pistons">
|
||||
<img src="/static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_150138054.jpg" alt="Paws'N'Pistons">
|
||||
<img src="/static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_150249916.jpg" alt="Paws'N'Pistons">
|
||||
<img src="/static/content/fur_meets/03-08-2025_paws_n_pistons/PXL_20250803_183614897.jpg" alt="Paws'N'Pistons">
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
{% endblock %}
|