Compare commits
No commits in common. "master" and "testing" have entirely different histories.
@ -1,4 +0,0 @@
|
|||||||
*.md
|
|
||||||
*.Dockerfile
|
|
||||||
.git
|
|
||||||
.dockerignore
|
|
@ -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
|
|
@ -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;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -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-----
|
|
@ -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
|
|
@ -3,9 +3,10 @@ VERSION:3.0
|
|||||||
FN;CHARSET=UTF-8:Fred Boniface
|
FN;CHARSET=UTF-8:Fred Boniface
|
||||||
N;CHARSET=UTF-8:Boniface;Fred;;;
|
N;CHARSET=UTF-8:Boniface;Fred;;;
|
||||||
GENDER:M
|
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
|
TEL;TYPE=HOME,VOICE:03331126831
|
||||||
ADR;CHARSET=UTF-8;TYPE=HOME:;;;Bath;;;United Kingdom
|
ADR;CHARSET=UTF-8;TYPE=HOME:;;;Bath;;;United Kingdom
|
||||||
URL;CHARSET=UTF-8:https://fredboniface.co.uk
|
URL;CHARSET=UTF-8:https://fredboniface.co.uk
|
||||||
|
NOTE;CHARSET=UTF-8:vCard generated at vcardmaker.com
|
||||||
REV:2022-10-06T21:38:40.052Z
|
REV:2022-10-06T21:38:40.052Z
|
||||||
END:VCARD
|
END:VCARD
|
BIN
images/headers/index/face-100.webp
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
images/headers/index/face-150.webp
Normal file
After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 52 KiB |
Before Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 94 KiB |
Before Width: | Height: | Size: 58 KiB |
BIN
images/headers/index/face-600.webp
Normal file
After Width: | Height: | Size: 3.1 KiB |
4
keys.php
@ -19,9 +19,9 @@
|
|||||||
<br>
|
<br>
|
||||||
<a href="/downloads/f.boniface_ed25519.pub">Download Public SSH key</a>
|
<a href="/downloads/f.boniface_ed25519.pub">Download Public SSH key</a>
|
||||||
</p>
|
</p>
|
||||||
<h2>PGP</h2>
|
<h2>GPG</h2>
|
||||||
<p>
|
<p>
|
||||||
<a href="/downloads/fredboniface_all_keys.asc">Download Keys</a>
|
My GPG Key is currently unavailable
|
||||||
</p>
|
</p>
|
||||||
<h2>S/MIME</h2>
|
<h2>S/MIME</h2>
|
||||||
<p>
|
<p>
|
||||||
|
@ -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/
|
|
@ -1,5 +1,5 @@
|
|||||||
<footer>
|
<footer>
|
||||||
<p>
|
<p>
|
||||||
© Fred Boniface 2022-2023
|
© Fred Boniface 2022
|
||||||
</p>
|
</p>
|
||||||
</footer>
|
</footer>
|
@ -3,13 +3,8 @@
|
|||||||
<?php
|
<?php
|
||||||
if (strcmp($page_title, 'home') == 0){
|
if (strcmp($page_title, 'home') == 0){
|
||||||
echo '<picture id="header_face">';
|
echo '<picture id="header_face">';
|
||||||
echo '<source media="(max-width:600px)" srcset="/images/headers/index/face-200.jxl" type="image/jxl">';
|
echo '<source srcset="/images/headers/index/face-150.webp" type="image/webp">';
|
||||||
echo '<source media="(max-width:600px)" srcset="/images/headers/index/face-200.webp" type="image/webp">';
|
echo '<img src="/images/headers/index/face-100.webp" alt="Face image">';
|
||||||
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 '</picture>';
|
echo '</picture>';
|
||||||
} ?> <!-- Moved from separate include to inline -->
|
} ?> <!-- Moved from separate include to inline -->
|
||||||
<h1><?php echo ucwords($page_title); ?></h1>
|
<h1><?php echo ucwords($page_title); ?></h1>
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
FROM php:8.2.1-fpm-alpine
|
|
||||||
|
|
||||||
COPY . /site
|
|
29
projects.php
@ -10,33 +10,10 @@
|
|||||||
<?php include "./page-blocks/micro-content.php"; ?>
|
<?php include "./page-blocks/micro-content.php"; ?>
|
||||||
<div class="content hide_micro">
|
<div class="content hide_micro">
|
||||||
<p>
|
<p>
|
||||||
This isn't a complete list of all my projects, but check out my
|
I haven't written any content here yet.
|
||||||
<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>
|
|
||||||
<br>
|
<br>
|
||||||
|
In the meantime, <a href="https://git.fjla.uk">visit my Gitea Server</a>.
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<?php include "./page-blocks/footer.php"; ?>
|
<?php include "./page-blocks/footer.php"; ?>
|
||||||
</body>
|
</body>
|
||||||
|
@ -68,11 +68,11 @@ body {
|
|||||||
@media(min-width:1025px){#home{background-image:url("/images/headers/index/1920.webp")}}
|
@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:1921px){#home{background-image:url("/images/headers/index/2800.webp")}}
|
||||||
@media(min-width:2801px){#home{background-image:url("/images/headers/index/4096.webp")}}
|
@media(min-width:2801px){#home{background-image:url("/images/headers/index/4096.webp")}}
|
||||||
#contact{background-color: #a04911}
|
#contact{background-color: blue}
|
||||||
#keys{background-color: #a04911}
|
#keys{background-color: blue}
|
||||||
#projects{background-color: #a04911}
|
#projects{background-color: blue}
|
||||||
#email-safety{background-color: #a04911}
|
#email-safety{background-color: blue}
|
||||||
#about{background-color: #a04911}
|
#about{background-color: blue}
|
||||||
#header_face {
|
#header_face {
|
||||||
display: flex;
|
display: flex;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
@ -214,28 +214,6 @@ body {
|
|||||||
.content a:hover {
|
.content a:hover {
|
||||||
color: var(--link-visited-color)
|
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 */
|
||||||
footer {
|
footer {
|
||||||
position: relative;
|
position: relative;
|
||||||
|