add gpg keys to website
Build and Push Container / build-and-push (push) Successful in 33s

This commit is contained in:
2026-05-27 22:52:14 -04:00
parent a9c8147296
commit 44e196d6b0
3 changed files with 224 additions and 16 deletions
-14
View File
@@ -1,14 +0,0 @@
[Unit]
Description=Developer Homepage
After=network.target
[Container]
ContainerName=homepage
Image=localhost/homepage:latest
AddDevice=/dev/fuse
PublishPort=8080:8080
HealthCheckUrl=http://localhost:8080/
Environment=TZ=UTC
[Install]
WantedBy=default.target
+108 -2
View File
@@ -394,8 +394,114 @@
</div> </div>
</section> </section>
<!-- Footer --> <!-- GPG Keys -->
<footer> <section class="gpg-section" id="gpg">
<p class="section-label fade-in">Trust</p>
<h2 class="section-title fade-in">Public GPG Keys</h2>
<p class="section-desc fade-in" style="margin-left:auto;margin-right:auto;text-align:center;">
Use these keys to verify signed commits and communications. Both keys belong to Reese Wells.
</p>
<div class="gpg-keys-grid">
<div class="gpg-key-card fade-in">
<div class="gpg-key-header">
<span class="gpg-key-icon">&#128274;</span>
<div>
<h3>Primary Key</h3>
<p class="gpg-key-email">reese@ducoterra.net</p>
</div>
</div>
<div class="gpg-key-fingerprint">
<span>Fingerprint:</span>
<code>7FC1 B297 0011 4F4F C589 E706 5FDD CFA5 44D7 7B8C</code>
</div>
<pre class="gpg-key-block"><code>-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEaE5XjhYJKwYBBAHaRw8BAQdAURfgqa4xpT9tTtRETfknsq8UacTcUeXd2P+N
CmdSxw+0IVJlZXNlIFdlbGxzIDxyZWVzZUBkdWNvdGVycmEubmV0PoiPBBMWCAA3
BAsJCAcCFQgCFgECGQECngECmwMWIQR/wbKXABFPT8WJ5wZf3c+lRNd7jAUCaOe5
HQUJBHjscgAKCRBf3c+lRNd7jDo+AP9ElEJP3nsUcW9TbStKwmu0Iq5cjwbDofYx
aoo8lxpgYAEAtEnBYpRz8g94NpCi0TF2EGCmlQupJy1S0nlQdkW3QQq0IVJlZXNl
IFdlbGxzIDxkdWNvdGVycmFAZ21haWwuY29tPoiPBBMWCAA3BAsJCAcCFQgCFgEC
GQACngECmwMWIQR/wbKXABFPT8WJ5wZf3c+lRNd7jAUCaOe5HQUJBHjscgAKCRBf
3c+lRNd7jMoiAP4scAB+6RdRTIo/UvLzI5LdO0Ej1W9i6d09Vmt5T3ES3wD/e2JD
CNwMixU02xbSh0wRFwOmBK1ltw3qoABUIoG4Qgu0H1JlZXNlIFdlbGxzIDxkdWNv
d2FlQGdtYWlsLmNvbT6IjwQTFggANwQLCQgHAhUIAhYBAhkAAp4BApsDFiEEf8Gy
lwART0/FiecGX93PpUTXe4wFAmjnuR0FCQR47HIACgkQX93PpUTXe4w/bgEAgr5K
MJypCb1dmjUmFBBLmvEVT7zt8llZbcsrPqQHZo4BAM2lnEa4pQQ5AZ6XMSlx2dSi
V89/RIugpbqhStR+hGsJtCdSZWVzZSBXZWxscyA8cmVlc2Uud2VsbHNAZHVjb3Rl
cnJhLm5ldD6ImQQTFgoAQRYhBH/BspcAEU9PxYnnBl/dz6VE13uMBQJp36cbAhsD
BQkEeOxyBQsJCAcCAiICBhUKCQgLAgQWAgMBAh4HAheAAAoJEF/dz6VE13uMGwUB
AMZTs+ggIGdyDNNHQKxCjSiFj1tV4txdGMhFs7zg061JAQDsnuEZxZ2r5oM+Hl4e
1JmPiUT7TI3I0KyLzSnrE5TiBbg4BGhOV44SCisGAQQBl1UBBQEBB0DwrTk+obNw
CZVjUW/wi97DI7d1VtebvszT24X04nFSawMBCAeIeAQYFggACQWCaE5XjgKbDAAh
CRBf3c+lRNd7jBYhBH/BspcAEU9PxYnnBl/dz6VE13uM79kA/iGOP6Duiw19F/TT
bIbyO3rh99O5VMtxdgYAxhxLF29gAP9p8UwxP0vhCXrB+VrT3p8ZVNtXYswCsXKY
RZXs6UjJArkCDQRoTleOARAAs92LnhZYtwJvOFFVivXb8ZsgHf6oVdK6/c1htn9K
90hbVbVoArMjrHY+3msoZ0sOBd1s1K3/Q9B0lwDJV6VgEggckIxYc6hpoVu9HmiG
XGdIPzbnnyOeV7NHdYpARPBjXt8HKL96O181qS02WhjIg3sDg3pnuCxJ78nOcNvP
F3ANNpPKr05IWme5NAN+kfKrRaurKP3OePHG6l8ZUWGJPxW+jfE2w1R5hGpEqeu6
RgnfaeBGta10tdJE68+i9RLO1KVDgrIC2c+hNzwMPEMgiiM+MHWgC5uHxpWohv+L
cF4STKLYx8uo9VpwuwNXIh6QEqUm/YWQxcrmrvh4+UNupX00zrzgcUCjJxmyChj8
tyYiM6ltqQ2qOjWLdXZfNbdq0vQw7K1jCMg+kESdFF4jGYGBsYqDBrJXvC0fIJF3
oQIcIc+wGP3kikoj1DREpz53loowMWtSaKx1eZky08PT6KSgM3jefLctfmcpCATL
AKW0FksC9xk6U/UatWwSEZ30ZjOOf2yhnnb1tI0g6EvP3528T4dZiyIWPDwegQZv
Bu2Fa+YcAj5cJ3jLO8UoPtXJA1/3KiIWIXKlchBQtAelvbdikMpJCdl3Yzpx4rJ7
A4Oaz7E0eVKR4ZrU62ti1jM9dMNA5AyTiGxZeBAVXc6CNqZUXyFqLQF7T1zuKWEu
baUAEQEAAYkClwQYFggACQWCaE5XjgKbDgJACRBf3c+lRNd7jMFdoAQZAQgABgUC
aE5XjgAKCRCfMr6uYxJ0la7ED/9/wj2h4ntIynkpU2dLeSuibTRKT4o7EMt2P1wt
7oCvTG4n4CGQy/bRMBqK6nWjRAfyDNyJfXq15lWESEzyvKRHeVjzgBQ3uvmk3485
CYO17aIHfci6NMN2LUD8F5WVsNkP6pxuL/RF4tIfxLWb0hNOVREbxLsFrFcvMpl9
9e3zGEQT8nIo/K25Ex9a3SbPW4zStYvVmg3OI44q85hIMrxyw1OZgzV1aLCYAPGf
Brj941Mm0BEdXO28LulJF5eMqdPSNpzF+VPbkz4A3RcbQ+IC09W8YU3+vRjOshkV
++nrd8GEYzlUWL7osz5JCvtUtvCAEBoGfHcqc328vvurHwvHsACysJ/BPPVPnxs/
NfaFybr9f9wqO/4DA+157kAxNWDyQN3v6bIry0e4H1SijBTosgP/QFVW8Te6A7Xc
k4B+r/buFOi4xZEYcS7Sj1g+xhmHWnr9ogWS9NgVJMxgiaFivB9XqLDD6pRKisfR
ukqAKaHjXtA4HLfLOV95plJoEG9KBWeLGOC2MSrytwplOHZGjyf6eWT3T60fplpW
ZKg97p/WBLy2JsKSBLvAgYOAdSp2lbg+BUEMQR4Ik/yC0MLvrV4+534+Vt+KW1cB
QCW6h0ehT137OR4a79Z94nOA3jdvoI8G5svpsXILXxnnRTaNQBm1bh7706NGszqC
lniyJxYhBH/BspcAEU9PxYnnBl/dz6VE13uMFw4A/0G+/1lmIe06f8wk84ajyrjv
pONgYKHcXyh0UkEKz1ufAQDKmC4MEH0My+HFiCmbgYlaZrL1kCAkhSk6SQ1D0k7S
BQ==
=U3eP
-----END PGP PUBLIC KEY BLOCK-----</code></pre>
</div>
<div class="gpg-key-card fade-in">
<div class="gpg-key-header">
<span class="gpg-key-icon">&#128274;</span>
<div>
<h3>Git Signing Key</h3>
<p class="gpg-key-email">git@ducoterra.net</p>
</div>
</div>
<div class="gpg-key-fingerprint">
<span>Fingerprint:</span>
<code>2FF3 619F A6CA 2A4C FA2D 3532 816E 5FE7 8271 602B</code>
</div>
<pre class="gpg-key-block"><code>-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEaPWJEBYJKwYBBAHaRw8BAQdAkbMCw8vlCTSyvxCnaWvFwvvlm7wW94Fgsj47
3NeMC9a0MVJlZXNlIFdlbGxzIChHaXQgU2lnbmluZyBLZXkpIDxnaXRAZHVjb3Rl
cnJhLm5ldD6ImQQTFgoAQQIbAwULCQgHAgIiAgYVCgkICwIEFgIDAQIeBwIXgBYh
BC/zYZ+myipM+i01MoFuX+eCcWArBQJo9l/LBQkDwz27AAoJEIFuX+eCcWArk3cB
AMtkMa5nxG16CaiKMyOGmzlhCZJnS2wvz84DEAMr2BKRAP9Xg//BEVaDMzvRXuU+
Nya5ewmhjfvI0O3dxUfhUIDUCYh1BBAWCgAdFiEEf8GylwART0/FiecGX93PpUTX
e4wFAmj2qewACgkQX93PpUTXe4zbuQD+NiQ8+ubTNSIxoq5qv20rTEIJZwhWamyS
KSCxUnramK0A/Ajzne+dP6ZJh3O96YaTxhQtCibcSqo66/hVndXymvIKiJMEExYK
ADsWIQQv82GfpsoqTPotNTKBbl/ngnFgKwUCaPWJEAIbAwULCQgHAgIiAgYVCgkI
CwIEFgIDAQIeBwIXgAAKCRCBbl/ngnFgK9bsAP47Fth3baT2awbVmlwPEXt17aFI
yIgxXyp9/5DA2QB4QAD/Wy4h8NiWzCzfO6kD1YzgIepVv2UlRH0sQ70vEi5RWAq4
OARo9YkQEgorBgEEAZdVAQUBAQdAeODe7hrNZC143n0+CvNh6x0E9QxGRJfjJPN1
WAV5bWsDAQgHiHgEGBYKACAWIQQv82GfpsoqTPotNTKBbl/ngnFgKwUCaPWJEAIb
DAAKCRCBbl/ngnFgK7kQAQDOnSYe0XO4Hw7QAAo2VhOUHvOjj4c2WSlLuIkyG4n2
XwEAnes79w4eYeMUjIytQWACEvy4QoO7X2MLTKliSqc4Ag8=
=9aAm
-----END PGP PUBLIC KEY BLOCK-----</code></pre>
</div>
</div>
</section>
<!-- Footer -->
<footer>
<p style="font-size: 0.75rem; color: var(--text-muted);"> <p style="font-size: 0.75rem; color: var(--text-muted);">
Built with a 100% self-hosted LLM stack running Built with a 100% self-hosted LLM stack running
<a href="https://github.com/ggml-org/llama.cpp" target="_blank" rel="noopener" style="color: var(--accent-hover); text-decoration: none;">llama.cpp</a>, <a href="https://github.com/ggml-org/llama.cpp" target="_blank" rel="noopener" style="color: var(--accent-hover); text-decoration: none;">llama.cpp</a>,
+116
View File
@@ -644,6 +644,114 @@ section {
font-size: 1.1rem; font-size: 1.1rem;
} }
/* GPG Keys */
.gpg-section {
text-align: center;
}
.gpg-section .section-desc {
margin-left: auto;
margin-right: auto;
}
.gpg-keys-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(480px, 1fr));
gap: 1.5rem;
margin-top: 2rem;
text-align: left;
}
.gpg-key-card {
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: 16px;
padding: 1.5rem;
transition: all 0.3s ease;
}
.gpg-key-card:hover {
border-color: rgba(234, 179, 8, 0.3);
transform: translateY(-2px);
box-shadow: 0 8px 30px rgba(0, 0, 0, 0.3);
}
.gpg-key-header {
display: flex;
align-items: center;
gap: 1rem;
margin-bottom: 1rem;
}
.gpg-key-icon {
width: 44px;
height: 44px;
display: flex;
align-items: center;
justify-content: center;
background: var(--accent-glow);
border: 1px solid rgba(234, 179, 8, 0.2);
border-radius: 10px;
font-size: 1.3rem;
flex-shrink: 0;
}
.gpg-key-header h3 {
font-size: 1rem;
font-weight: 700;
margin-bottom: 0.15rem;
}
.gpg-key-email {
color: var(--text-muted);
font-size: 0.8rem;
margin: 0;
}
.gpg-key-fingerprint {
display: flex;
align-items: center;
gap: 0.5rem;
padding: 0.625rem 0.875rem;
background: var(--bg-secondary);
border: 1px solid var(--border);
border-radius: 8px;
font-size: 0.75rem;
margin-bottom: 0.75rem;
flex-wrap: wrap;
}
.gpg-key-fingerprint span {
color: var(--text-muted);
font-weight: 600;
text-transform: uppercase;
font-size: 0.65rem;
letter-spacing: 0.05em;
}
.gpg-key-fingerprint code {
color: var(--accent-hover);
font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;
font-size: 0.7rem;
}
.gpg-key-block {
background: var(--bg-secondary);
border: 1px solid var(--border);
border-radius: 10px;
padding: 1rem;
margin: 0;
overflow-x: auto;
}
.gpg-key-block code {
font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;
font-size: 0.65rem;
line-height: 1.5;
color: var(--text-secondary);
white-space: pre;
}
/* Footer */ /* Footer */
footer { footer {
padding: 3rem 2rem; padding: 3rem 2rem;
@@ -732,6 +840,14 @@ footer p {
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
} }
.gpg-keys-grid {
grid-template-columns: 1fr;
}
.gpg-key-block code {
font-size: 0.6rem;
}
} }
@media (max-width: 480px) { @media (max-width: 480px) {