Compare commits

..

No commits in common. "master" and "testing" have entirely different histories.

22 changed files with 16 additions and 283 deletions

View File

@ -1,4 +0,0 @@
*.md
*.Dockerfile
.git
.dockerignore

View File

@ -1,43 +0,0 @@
#!/bin/bash
ROOTIN="/data/in"
ROOTOUT="/data/out"
echo "Running UglifyJS on /data/in folder"
uglifyjs-folder "$ROOTIN" -x ".js" -eo "$ROOTOUT"
echo "Running UglifyCSS"
CSSIN="/data/in/style/"
CSSOUT="/data/out/style"
cd $CSSIN
echo "Changed directory"
for f in *
do
if [ -f "$f" ]; then
uglifycss "$f" --output "$f";
fi
done
echo "Moving 'styles' to 'out'"
cp -r $CSSIN $CSSOUT
echo "Running html-minifier-terser on /folder"
HTMLIN="/data/in/"
HTMLOUT="/data/out"
html-minifier-terser --collapse-whitespace --remove-comments --file-ext html --input-dir /data/in/ --output-dir /data/out/
#echo "Moving JSON Manifest file from root to output"
#cat /data/in/manifest.json | jq -c > /data/out/manifest.json
echo "Moving other files folder from in/ to out/"
cp -r /data/in/images /data/out/images
cp -r /data/in/error-pages/*.php /data/out/error-pages/
cp -r /data/in/downloads /data/out/downloads
cp -r /data/in/*.php /data/out/
cp -r /data/in/*.ico /data/out/
cp -r /data/in/page-blocks /data/out/page-blocks
cp -r /data/in/php /data/out/php
echo "Running GZIP & Brotli on all HTML, JS, CSS, JSON, SVG, TTF, VCF, PUB files"
find /data/out -type f -name \*.html -or -name \*.vcf -or -name \*.pub -or -name \*.js -or -name \*.css -or -name \*.json -or -name \*.svg -or -name \*.ttf | while read file; do gzip -k -9 $file; brotli -k -q 11 $file; done

View File

@ -1,57 +0,0 @@
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 128;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
gzip_static on;
brotli_static on;
server {
listen 80;
server_name localhost;
access_log /var/log/nginx/access.log;
root /site;
location ~ /(.git|php|page-blocks) {
deny all;
}
location / {
index index.php;
try_files $uri $uri/ $uri/index.php &uri/index.html =404;
break;
expires 7d;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass fpm:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
error_page 403 /error-pages/403.php;
error_page 404 /error-pages/404.php;
error_page 500 501 502 503 504 /error-pages/50x.html;
}
}

View File

@ -1,85 +0,0 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
xjMEZ99c7xYJKwYBBAHaRw8BAQdAcTCFXWJlZjY3NIwP8kYTBw9ir4y13JPM
IZ3SK4cxAt/NJ2ZyZWRib25pZmFjZUBwbS5tZSA8ZnJlZGJvbmlmYWNlQHBt
Lm1lPsLAEQQTFgoAgwWCZ99c7wMLCQcJkJdelC/r7d1aRRQAAAAAABwAIHNh
bHRAbm90YXRpb25zLm9wZW5wZ3Bqcy5vcmc/6rKfzeU8aBrJ3a+6LuOMCRQa
PKgiNvocb8S4ZoUtFQMVCggEFgACAQIZAQKbAwIeARYhBLtZRj2D0iUIj4l+
rZdelC/r7d1aAAAxkAEAoI143q4ZNYiKo0fipxiUZCI/wisRfL1RHqrhSoZr
aroBAJtRI6bthiSxWo5VAmrKWXp85I6Ly26k7jjK6udtPVgOzjgEZ99c7xIK
KwYBBAGXVQEFAQEHQJxuy8CrR0HuSZuoTnkIhNaYPHYZ4yhgbNK1ksHZOiko
AwEIB8K+BBgWCgBwBYJn31zvCZCXXpQv6+3dWkUUAAAAAAAcACBzYWx0QG5v
dGF0aW9ucy5vcGVucGdwanMub3JnJt01helN7jHLfi/eFECKZ2psqjjTALWm
EmP72C8mHJoCmwwWIQS7WUY9g9IlCI+Jfq2XXpQv6+3dWgAA2IAA/2Oe6ecp
UupW+1dMdLoiC0WyRH41tN92v7NX3PN4Bjd5AQCyYtAlMmLEFKGNYelLEjSF
yCjrRC4awU17ryMemmXGCw==
=VLLR
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
xjMEZ99WbhYJKwYBBAHaRw8BAQdAuIHRAGQ3oWhiHrDmSGgsSQttD5pu76Lm
cQ/HjSPNyo/NL2ZyZWRib25pZmFjZUBwcm90b24ubWUgPGZyZWRib25pZmFj
ZUBwcm90b24ubWU+wsARBBMWCgCDBYJn31ZuAwsJBwmQcl70x2ddp2xFFAAA
AAAAHAAgc2FsdEBub3RhdGlvbnMub3BlbnBncGpzLm9yZzfK2xPidra4TP6N
uPoKYkl/jSgeNSaognijeABpHH4AAxUKCAQWAAIBAhkBApsDAh4BFiEEN7nH
IA13ooiiIeFqcl70x2ddp2wAAGcZAP0TM8+3S9+RFKCgAF5h21ghGFfPvbLJ
8La9OYPtCeo99QEAsxtZF83vm7cOWQ+heY6KsSTy+bLxHuaBhhkQIBUyqQzO
OARn31ZuEgorBgEEAZdVAQUBAQdApkjYLGREatp5pGzla/NBIz4e/h90RKrS
/v+DFk0LOwwDAQgHwr4EGBYKAHAFgmffVm4JkHJe9MdnXadsRRQAAAAAABwA
IHNhbHRAbm90YXRpb25zLm9wZW5wZ3Bqcy5vcmeQJSmszuT7lI5+g81gaNkb
Ndp6tzprml9T/a1nJYXvzQKbDBYhBDe5xyANd6KIoiHhanJe9MdnXadsAAD2
iwEAxigHcqOgD/Ky2hT5gp0ECt49x6OVolh1UX82IT/L5y4BAJCLth1WsTN9
kaGrmtEr7O2zS0QV/MyCpzV7uSVGxIgF
=wVb1
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
xjMEZ+G6ORYJKwYBBAHaRw8BAQdAcVMaspTYUpvEB/mHzPQnkhz1RGfbH34U
5ALEwKcS2sjNG2ZyZWRAZmpsYS51ayA8ZnJlZEBmamxhLnVrPsLAEQQTFgoA
gwWCZ+G6OQMLCQcJkG5CNLa7QH5URRQAAAAAABwAIHNhbHRAbm90YXRpb25z
Lm9wZW5wZ3Bqcy5vcmdq4nJTtuavjhME32kYxlaAL/a/N9sXDBVX0SMWomF+
5gMVCggEFgACAQIZAQKbAwIeARYhBCsypV53ufkTjEgl1G5CNLa7QH5UAAC4
ogD/eZUPTqztiEvtemCAbA0wgwc9vs9etJNr+9D4x8X8b+gBAIOkeF50Z8Rd
CJ66bqdguPPbzL5u/NqP2wNcWstEOwkPzjgEZ+G6ORIKKwYBBAGXVQEFAQEH
QFJAaNA9tJICoYI9naUBFvHQw8UUKc9Vz5UKt193JYkuAwEIB8K+BBgWCgBw
BYJn4bo5CZBuQjS2u0B+VEUUAAAAAAAcACBzYWx0QG5vdGF0aW9ucy5vcGVu
cGdwanMub3Jnq9skrB7MqUxvbjQChkb908+0s96VCWlKLxGAIJbBO9gCmwwW
IQQrMqVed7n5E4xIJdRuQjS2u0B+VAAATx0BAPaY2QKvqv2CcKMOCoL4JEsX
/8Izv/BjcFTUv+gJq2d3AP4hp0+Qh+ODhHHV4tycmVozuQHaKgvI8kZItU8U
sk73AA==
=e++1
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
xjMEZ99gVxYJKwYBBAHaRw8BAQdAa86nOkcb2zEtYDRMn+OVOU9znmegPJoG
BUkAZyGVCT7NMW1haWxAZnJlZGJvbmlmYWNlLmNvLnVrIDxtYWlsQGZyZWRi
b25pZmFjZS5jby51az7CwBEEExYKAIMFgmffYFcDCwkHCZBgLiYbWemhckUU
AAAAAAAcACBzYWx0QG5vdGF0aW9ucy5vcGVucGdwanMub3JngQqSpxNfaQfi
sxNSuXXtr0aJffXgDWwu74/46VG1Bi4DFQoIBBYAAgECGQECmwMCHgEWIQTG
/wwE1YRSoHetkEZgLiYbWemhcgAA6j4BAKQai9wkHJawtd2/4I5ornFOC75M
QluI+1QgUryB0lTyAQDlGlZV2tCZS3Wb0bfVEqs8249FZEN94McgA2vDAezn
C844BGffYFcSCisGAQQBl1UBBQEBB0DFqWSc3ZGxpjedM9XM4cfqDbatOSlr
v4+ZvHJpSUn7VQMBCAfCvgQYFgoAcAWCZ99gVwmQYC4mG1npoXJFFAAAAAAA
HAAgc2FsdEBub3RhdGlvbnMub3BlbnBncGpzLm9yZ22l+uC0sUY2m89vNUI0
mRAYzqZJVDsSra5JGEkpknidApsMFiEExv8MBNWEUqB3rZBGYC4mG1npoXIA
AA7sAP9Q4QhAt+luwQCBOVUpHzN46qasS5WbJt2S8Auwa6O3FQEAubcN2EJw
keyrWMo1NQNk/4tT2xghQBE+/xxv6Fnl7AI=
=ZMKv
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
xjMEZ+GwURYJKwYBBAHaRw8BAQdAD9osUFlWhpOySxvhSi0JVarAZaMUKTfJ
qP+5BANS6T7NL3JtdEBmcmVkYm9uaWZhY2UuY28udWsgPHJtdEBmcmVkYm9u
aWZhY2UuY28udWs+wsARBBMWCgCDBYJn4bBRAwsJBwmQjX14Y4IySXtFFAAA
AAAAHAAgc2FsdEBub3RhdGlvbnMub3BlbnBncGpzLm9yZ94GD04uAo6xF8da
rKCCQAdclYPL4VvM5dR1pT5ur7SoAxUKCAQWAAIBAhkBApsDAh4BFiEEE3mo
BF6vrJBT15SRjX14Y4IySXsAAIkRAP96L26JOLiXif6WQCdJv0XJ3kStmTEp
7l8rO5iQfdXg8QD9EMPyuN0KhZD7tJ+Jk3JQyH1jtw+uMKLYz5sp78MzwAHO
OARn4bBREgorBgEEAZdVAQUBAQdALkoaaHtgGYsXVt+cfc3VbSh3NRU5pJjP
VyerQecQdiYDAQgHwr4EGBYKAHAFgmfhsFEJkI19eGOCMkl7RRQAAAAAABwA
IHNhbHRAbm90YXRpb25zLm9wZW5wZ3Bqcy5vcmdAXvYLpyArSuLlH7a6U4qq
HKunwydh6i0tjbhkHdWtNAKbDBYhBBN5qARer6yQU9eUkY19eGOCMkl7AACX
bwEAwDxPZGx63G0Y3OVBqGq8Jan21ZBdi4qx5gd4srOQSW0A/1HMtSA6o9+0
rPrMbuHb87sxHktN6Crg1D8S08APcQMG
=2gvh
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -1,14 +0,0 @@
BEGIN:VCARD
VERSION:3.0
FN;CHARSET=UTF-8:Frederick Boniface
N;CHARSET=UTF-8:Boniface;Frederick;;;
NICKNAME;CHARSET=UTF-8:Fred
GENDER:M
EMAIL;CHARSET=UTF-8;type=WORK,INTERNET:rmt@fredboniface.co.uk
TEL;TYPE=WORK,VOICE:07590601435
ADR;CHARSET=UTF-8;TYPE=WORK:;;LDC Office\, Platform 7 (Upstairs)\, Bristol Temple Meads Station;Bristol;;BS1 6QF;United Kingdom
ROLE;CHARSET=UTF-8:Local Staff Representative
ORG;CHARSET=UTF-8:RMT
URL;CHARSET=UTF-8:https://fredboniface.co.uk
REV:2025-03-24T22:08:32.039Z
END:VCARD

View File

@ -3,9 +3,10 @@ VERSION:3.0
FN;CHARSET=UTF-8:Fred Boniface
N;CHARSET=UTF-8:Boniface;Fred;;;
GENDER:M
EMAIL;CHARSET=UTF-8;type=HOME,INTERNET:mail@fredboniface.co.uk
EMAIL;CHARSET=UTF-8;type=HOME,INTERNET:fred@fjla.uk
TEL;TYPE=HOME,VOICE:03331126831
ADR;CHARSET=UTF-8;TYPE=HOME:;;;Bath;;;United Kingdom
URL;CHARSET=UTF-8:https://fredboniface.co.uk
NOTE;CHARSET=UTF-8:vCard generated at vcardmaker.com
REV:2022-10-06T21:38:40.052Z
END:VCARD
END:VCARD

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@ -19,9 +19,9 @@
<br>
<a href="/downloads/f.boniface_ed25519.pub">Download Public SSH key</a>
</p>
<h2>PGP</h2>
<h2>GPG</h2>
<p>
<a href="/downloads/fredboniface_all_keys.asc">Download Keys</a>
My GPG Key is currently unavailable
</p>
<h2>S/MIME</h2>
<p>

View File

@ -1,12 +0,0 @@
FROM fedora:39 as compressor
RUN dnf install brotli nodejs npm jq -y
RUN npm i uglifyjs-folder uglifycss html-minifier-terser -g
COPY . /data/in
RUN bash /data/in/conf/deploy.sh
FROM fholzer/nginx-brotli:latest
RUN rm /etc/nginx/nginx.conf
RUN apk update
RUN apk add --upgrade libxml2 libxslt
COPY ./conf/nginx.conf /etc/nginx/nginx.conf
COPY --from=compressor /data/out/ /site/

View File

@ -1,5 +1,5 @@
<footer>
<p>
&copy; Fred Boniface 2022-2023
&copy; Fred Boniface 2022
</p>
</footer>

View File

@ -3,13 +3,8 @@
<?php
if (strcmp($page_title, 'home') == 0){
echo '<picture id="header_face">';
echo '<source media="(max-width:600px)" srcset="/images/headers/index/face-200.jxl" type="image/jxl">';
echo '<source media="(max-width:600px)" srcset="/images/headers/index/face-200.webp" type="image/webp">';
echo '<source media="(max-width:600px)" srcset="/images/headers/index/face-200.jpg" type="image/jpeg">';
echo '<source srcset="/images/headers/index/face-500.jxl" type="image/jxl">';
echo '<source srcset="/images/headers/index/face-500.webp" type="image/webp">';
echo '<source srcset="/images/headers/index/face-500.jpg" type="image/jpeg">';
echo '<img src="/images/headers/index/face-500.jpg" alt="Face image">';
echo '<source srcset="/images/headers/index/face-150.webp" type="image/webp">';
echo '<img src="/images/headers/index/face-100.webp" alt="Face image">';
echo '</picture>';
} ?> <!-- Moved from separate include to inline -->
<h1><?php echo ucwords($page_title); ?></h1>

View File

@ -1,3 +0,0 @@
FROM php:8.2.1-fpm-alpine
COPY . /site

View File

@ -10,33 +10,10 @@
<?php include "./page-blocks/micro-content.php"; ?>
<div class="content hide_micro">
<p>
This isn't a complete list of all my projects, but check out my
<a href="https://git.fjla.uk/fred.boniface/">Gitea</a> to see more.
</p>
<p>
Most of my projects involve web development of some kind, you can find some software projects below
though. Besides this website, which is written in PHP - mainly for easy
templating rather than for dynamic content - I have created the following:
</p>
<dl>
<dt><a href="https://athena.fb-infra.uk">Athena</a> <a href="https://git.fjla.uk/fred.boniface/athena.fb-infra.uk">Git Repo</a></dt>
<dd>Written in PHP, a simple gateway to get easy access to train departures</dd>
<dt><a href="https://owlboard.info">OwlBoard</a> <a href="https://git.fjla.uk/OwlBoard">Git Repos</a></dt>
<dd>A suite of containerised applications offering live departure boards for UK Rail.
Consists of an Express.JS API Server utilising JS and TS, a Python db-manager script, a Go message-broker and a modern PWA frontend
written using SvelteKit and utilising compression to reduce payload size, and making use of ServiceWorker caching,
to increase reliability over low quality mobile data links. Designed for Kubernetes deployment.
</dd>
<dt><a href="https://git.fjla.uk/fred.boniface/trandom">tRandom</a> <a href="https://git.fjla.uk/fred.boniface/tRandom">Git Repo</a></dt>
<dd>Written in Python, a simple cross-platform GUI based random number
generator. Using the tkinter library for the interface.</dd>
<dt><a href="https://git.fjla.uk/fred.boniface/map-dots">map-dots</a></dt>
<dd>Written in Go, an application that can consume location history data and produce images from the data. map-dots can be run as a CLI
program or as a web-server offering a simple API. <a href="https://git.fjla.uk/fred.boniface/map-dots-fetch">map-dots-fetch</a> is
a simple script designed to request images from map-dots when it is being run as a server.
Originally designed to provide images that can be used as wallpaper images.
</dl>
I haven't written any content here yet.
<br>
In the meantime, <a href="https://git.fjla.uk">visit my Gitea Server</a>.
</p>
</div>
<?php include "./page-blocks/footer.php"; ?>
</body>

View File

@ -68,11 +68,11 @@ body {
@media(min-width:1025px){#home{background-image:url("/images/headers/index/1920.webp")}}
@media(min-width:1921px){#home{background-image:url("/images/headers/index/2800.webp")}}
@media(min-width:2801px){#home{background-image:url("/images/headers/index/4096.webp")}}
#contact{background-color: #a04911}
#keys{background-color: #a04911}
#projects{background-color: #a04911}
#email-safety{background-color: #a04911}
#about{background-color: #a04911}
#contact{background-color: blue}
#keys{background-color: blue}
#projects{background-color: blue}
#email-safety{background-color: blue}
#about{background-color: blue}
#header_face {
display: flex;
position: absolute;
@ -214,28 +214,6 @@ body {
.content a:hover {
color: var(--link-visited-color)
}
.content dl {
width: 90%;
margin: auto;
margin-top: 20px;
margin-bottom: 40px;
text-align: center;
color: var(--main-text-color);
font-family: oxygen, sans-serif;
font-weight: normal;
}
.content dt {
margin: auto;
font-weight: bolder;
}
.content dd {
margin: auto;
padding-bottom: 15px;
}
/* FOOTER */
footer {
position: relative;