Make use of static-site generation with 11ty

This commit is contained in:
Nexus 2024-06-18 01:28:00 +01:00
parent 69b890e0e9
commit 24612ac146
Signed by: nex
GPG key ID: 0FA334385D0B689F
55 changed files with 5607 additions and 1 deletions

164
.gitignore vendored Normal file
View file

@ -0,0 +1,164 @@
# Created by https://www.toptal.com/developers/gitignore/api/visualstudiocode,node
# Edit at https://www.toptal.com/developers/gitignore?templates=visualstudiocode,node
### Node ###
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*
# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
*.lcov
# nyc test coverage
.nyc_output
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# Snowpack dependency directory (https://snowpack.dev/)
web_modules/
# TypeScript cache
*.tsbuildinfo
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional stylelint cache
.stylelintcache
# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
.env.local
# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache
# Next.js build output
.next
out
# Nuxt.js build / generate output
.nuxt
dist
# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public
# vuepress build output
.vuepress/dist
# vuepress v2.x temp and cache directory
.temp
# Docusaurus cache and generated files
.docusaurus
# Serverless directories
.serverless/
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/
# TernJS port file
.tern-port
# Stores VSCode versions used for testing VSCode extensions
.vscode-test
# yarn v2
.yarn/cache
.yarn/unplugged
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*
### Node Patch ###
# Serverless Webpack directories
.webpack/
# Optional stylelint cache
# SvelteKit build / generate output
.svelte-kit
### VisualStudioCode ###
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
!.vscode/*.code-snippets
# Local History for Visual Studio Code
.history/
# Built Visual Studio Code Extensions
*.vsix
### VisualStudioCode Patch ###
# Ignore all local history of files
.history
.ionide
# End of https://www.toptal.com/developers/gitignore/api/visualstudiocode,node
ssg/_site

View file

@ -1,5 +1,5 @@
:8080
root * ./src
root * ./ssg/_site
redir /status /status/default
redir /status/* https://status.nexy7574.co.uk{uri}
encode {

22
ssg/.eleventy.js Normal file
View file

@ -0,0 +1,22 @@
// const { eleventyImageTransformPlugin } = require("@11ty/eleventy-img");
module.exports = function (eleventyConfig) {
eleventyConfig.setLiquidOptions({
jsTruthy: true,
});
// eleventyConfig.addPassthroughCopy("img");
// eleventyConfig.addPassthroughCopy("assets");
// eleventyConfig.addPassthroughCopy("js");
eleventyConfig.addPassthroughCopy("src/css");
eleventyConfig.addPassthroughCopy("src/img");
eleventyConfig.addPassthroughCopy("src/assets");
return {
dir: {
input: "src",
// data: "_assets",
// includes: "_includes",
// layouts: "_layouts"
}
};
//
};

2962
ssg/package-lock.json generated Normal file

File diff suppressed because it is too large Load diff

17
ssg/package.json Normal file
View file

@ -0,0 +1,17 @@
{
"name": "ssg",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "eleventy --serve",
"build": "eleventy"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"@11ty/eleventy": "^2.0.1",
"@11ty/eleventy-img": "^4.0.2"
}
}

View file

@ -0,0 +1,3 @@
<footer>
<p>🍉 Free Palestine | 🇺🇦 Slava Ukraini | 🔥 Tories out</p>
</footer>

View file

@ -0,0 +1,18 @@
<!DOCTYPE html>
<html lang="en" style="background-color: black;">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>nexy7574.co.uk</title>
<link rel="stylesheet" href="{{ '/css/bundle.css' | url }}">
</head>
<body>
<div class="mainBody">
{% include 'nav.njk' %}
<main>
{{ content | safe }}
</main>
{% include 'footer.njk' %}
</div>
</body>
</html>

28
ssg/src/_includes/nav.njk Normal file
View file

@ -0,0 +1,28 @@
<header>
<nav>
<div>
<span><img src="/img/twemoji_trans.svg" width="32px" height="32px" alt="🏳️‍⚧️" class="icon"/></span>&nbsp;<i id="__name">Nexus</i>
</div>
<div class="navbar">
<div><a href="/">Home</a></div>
<div><a href="/faq">FAQ</a></div>
<div><a href="/chat/#/user/@nex:nexy7574.co.uk" class="icon"><img src="/img/matrix-color.svg" width="32px" height="32px" alt="Chat" title="Chat" class="icon"/></a></div>
<div><a href="https://status.nexy7574.co.uk" class="icon"><img src="/img/server.svg" alt="Service Status" title="Service Status" width="32px" height="32px" class="icon"/></a></div>
<div>
<a href="https://github.com/nexy7574" rel="noopener noreferrer" target="_blank" class="icon">
<img src="/img/github.svg" alt="GitHub" title="GitHub" width="32px" height="32px" class="icon">
</a>
</div>
<div>
<a href="https://git.i-am.nexus/nex/nexy7574.co.uk-b" rel="noopener" target="_blank" class="icon">
<img src="/img/forgejo-color.svg" alt="Forgejo" title="Forgejo (git) & source code" width="32px" height="32px" class="icon">
</a>
</div>
<div>
<a href="https://mastodon.nexy7574.co.uk" rel="noopener noreferrer" target="_blank" class="icon">
<img src="/img/mastodon-color.svg" alt="Mastodon" title="Mastodon" width="32px" height="32px" class="icon">
</a>
</div>
</div>
</nav>
</header>

View file

@ -0,0 +1,89 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
5UGvAepPBA==
=PAYz
-----END PGP PUBLIC KEY BLOCK-----

View file

@ -0,0 +1 @@
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCqk+0tSp1dm8ALhcxRjkurj3y/3rN9SOHquNHVk+xXZIOUTXjWSgXclrlsHH2562VgeBx8ZxJFkX04jMb3wkPHNL794troX4LX17X0j5ixBK76vPGMuzG0/VU6oLwl3S2Zkuz6q3d3oGj6+qemLhQF6qRZ+ByTkhoQu22Jc6QYpk0o6lMF1kabkS496LxBD8JlAGBT4DsdHem3dDUwvAWseNEs3gJHOup9T43Iw3pKpZYrfISBxhkehojtsMNFziL+pX2rYZHxwoMAiaD9LKlhFsZgND2bMYFJ0WODycAwkrhEMwEVoEWNtlYeqadRZpCSA1ta1Rz9souovTkV2Kbov522eHuIVlu1uWNENiM+fEtP36QEMnZago0FgUBpfijh8LNjN/SR5aOeyn2Nw9pjQP3ZSjmFe2lFz88E092HwrAczc6gGb/tCH4DcTBwyna6AQFHFFw1QcW9rer5kjYnFpZGjmXBBnSFg8lDy3AhGdUSJfELS3ESA0pyAWk7Nr0=

211
ssg/src/css/bundle.css Normal file
View file

@ -0,0 +1,211 @@
.question {
margin: 1em;
padding: 1em;
box-shadow: 0 0 1em rgba(255, 255, 255, 0.2);
background-color: rgba(255, 255, 255, 0.2);
border-radius: 5px;
text-align: left;
}
.question p {
font-size: large
}
code.block {
display: block;
padding: 1em;
margin: 1em 0;
background-color: #1f1f1f;
color: #dcdcdc;
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
font-size: 14px;
line-height: 1.5;
border-radius: 5px;
overflow-x: auto;
}
code.inline {
background-color: #1f1f1f;
color: #dcdcdc;
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
font-size: initial;
line-height: 1.2;
border-radius: 3px;
padding: 0.4em 0.6em;
}
.emoji {
font-family: 'Noto Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Android Emoji',
'EmojiSymbols', 'EmojiOne Color', 'EmojiOne', 'Apple Color Emoji', 'Twemoji Mozilla', 'Twemoji', 'Segoe UI Symbol', sans-serif;
/* just try them all 🤷 */
}
a {
color: #59CBF7
}
a:hover, a:visited {
color: #F5A9B7
}
a.icon {
text-decoration: none;
}
img.icon {
vertical-align: middle;
}
html,body {
margin: 0;
padding: 0;
font-family: Arial, sans-serif;
background-color: #000;
color: #fff;
text-align: center;
font-size: larger;
}
body {
width: 100%;
height: 100%;
display: flex;
justify-content: center;
margin: 0 auto;
}
.mainBody {
max-width: 1200px;
height: 100%;
}
header {
color: #fff;
padding: 0;
margin: 1em 0;
text-align: center;
}
nav {
display: flex;
flex-direction: row;
justify-content: space-between;
background-color: #111;
border-radius: 12px;
align-items: center;
width: 100%;
padding: 1em;
}
.navbar {
margin: 0;
padding: 0;
display: grid;
grid-template-columns: repeat(7, 1fr);
align-items: center;
align-self: center;
}
table {
width: 100%;
border-collapse: collapse;
background-color: #111;
color: #fff;
}
table th,
table td {
padding: 0.5em;
border: 1px solid #444;
}
table th {
background-color: #222;
font-weight: bold;
}
table tr:nth-child(even) {
background-color: #333;
}
table tr:hover {
background-color: #555;
}
#array {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-gap: 1em;
}
#array div, .box {
margin: 0 0.5em;
padding: 0.5em;
background-color: #333;
border-radius: 12px;
color: #fff;
font-weight: bold;
}
footer {
margin: 1em 0;
padding: 1em;
background-color: #111;
border-radius: 12px;
color: #fff;
border-top: 1px solid #444
}
/* MAKE SURE THIS IS LOADED *AFTER* MAIN STYLESHEETS! ORDER MATTERS! */
@media screen and (max-width: 1600px) {
body {
max-width: 80%;
}
}
@media screen and (max-width: 1400px) {
body {
max-width: 80%;
}
}
@media screen and (max-width: 800px) {
body {
max-width: 100%;
min-width: 100%;
width: 100%;
font-size: initial;
text-align: center;
margin: 0;
padding: 0;
}
nav {
flex-direction: column;
padding: 0;
gap: 2em;
padding: 1em 0;
}
.navbar span {
display: none
}
ul.navbar li {
margin: 0.3em 0;
}
#array {
grid-template-columns: repeat(1, 1fr);
}
header {
margin: 0;
width: 100%;
}
}
img {
max-width: 100%;
height: auto;
}
/*
This file should be imported at the end of <body> so that any fonts that're needed are loaded last.
Sure this will make fonts look ugly on slow connections, but if you can't load the page because the font is taking too long to load, well that's even worse.
*/
@import url('https://fonts.googleapis.com/css2?family=Noto+Color+Emoji&display=swap');

110
ssg/src/faq.njk Normal file
View file

@ -0,0 +1,110 @@
---
layout: layouts/base.njk
title: faq
---
<div>
<h1>Frequently Asked Questions</h1>
<p>Note: I am dyslexic, so please excuse any spelling or grammar errors. Feel free to message me for corrections ^^</p>
<div id="toc" hidden>
<h2>Table Of Contents:</h2>
<ol id="toc-li"></ol>
</div>
<noscript><p>There will be a table of contents here if you enable JavaScript. You don't have to though.</p></noscript>
<hr/>
<div class="question">
<h2>Q: What are your keys???</h2>
<div>
<h3>A: PGP:</h3>
<p>
<code class="inline">0FA334385D0B689F</code> - available via WKD (<code class="inline">gpg --locate-keys me@nexy7574.co.uk</code>), or the full (armoured) key is available <a href="assets/pgp-2024-05-13.txt" download>here</a>.
The key is also available on several keyservers, however
<a href="https://keyserver.ubuntu.com/pks/lookup?search=0FA334385D0B689F&fingerprint=on&op=index" target="_blank" rel="noopener noreferrer">Ubuntu's keyserver</a>
is the most reliable and kept up-to-date. Although, WKD should be preferred where possible.
</p>
</div>
<div>
<h3>A: SSH</h3>
<p>Can be imported from <a href="{{ '/assets/ssh-2024-05-13.txt' | url }}" download>this text file</a>, however be aware I do not sign anything with my SSH key, only my PGP key.</p>
<p>Feel free to give me SSH access to your servers though :^)</p>
</div>
</div>
<div class="question">
<h2 id="what-are-your-pc-specs">Q: What are your PC specs/how much did your PC cost?</h2>
<p>
A: You can find all the details on <a href="https://uk.pcpartpicker.com/b/Hfz7YJ" rel="noopener" target="_blank">PcPartPicker</a>.
It cost me around £650 to build in December, 2023.
</p>
</div>
<div class="question">
<h2 id="can-you-hack">Q: Can you hack my friend's instagram?</h2>
<p>A: <strong><em>No.</em></strong></p>
<h2 id="fix-printer">Q: Can you fix my printer?</h2>
<p>
A: Yep!
<ol>
<li>Kick the printer.</li>
<li>Kick it harder.</li>
<li>Unplug it (bare with me)</li>
<li>Bring your printer to the nearest window</li>
<li>Open the window</li>
<li>Throw the printer out the window</li>
<li>Ask someone else to print it for you (its their problem then)</li>
</ol>
</p>
</div>
<div class="question">
<h2 id="what-music-do-you-listen-to">Q: What music do you listen to?</h2>
<p>A: Here's my main playlists. TL;DR, I listen to a lot of pop and rock, with a sprinkle of electronic</p>
<p>My favourite artists aren't really a thing, I prefer music over artists and albums, but I consistently listen to K.Flay, Grandson, Mother Mother, Super Whatevr, Cavetown, The Front Bottoms, Hospital Bracelet, and Crawlers.</p>
<iframe style="border-radius:12px" src="https://open.spotify.com/embed/playlist/26wJTA2mXk3QNXhqBI95kM?utm_source=generator&theme=0" width="100%" height="352" frameBorder="0" allowfullscreen="" allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy"></iframe>
<iframe style="border-radius:12px" src="https://open.spotify.com/embed/playlist/07GvdPCtDvWO2UFawBDlSA?utm_source=generator&theme=0" width="100%" height="152" frameBorder="0" allowfullscreen="" allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy"></iframe>
<iframe style="border-radius:12px" src="https://open.spotify.com/embed/playlist/1mTh1hj7rmzCYknLWfru4C?utm_source=generator&theme=0" width="100%" height="152" frameBorder="0" allowfullscreen="" allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy"></iframe>
<p>I am one of those people that will listen to any music genre, and I actually mean it. Just remember though "will listen" doesn't mean "will like".</p>
</div>
<div class="question">
<h2 id="urandom-or-random">Q: Urandom or Random?</h2>
<p>A: Urandom</p>
</div>
</div>
<script>
document.addEventListener(
"DOMContentLoaded",
() => {
const questions = document.querySelectorAll(".question h2");
for (let question of questions) {
const id = question.id;
const a = document.createElement("a");
a.href = `#${id}`;
a.textContent = "🔗";
a.title = "Link to this question";
a.style.textDecoration = "none";
a.style.fontSize = "smaller";
a.style.color = "black";
a.style.marginLeft = "0.5em";
question.appendChild(a);
// copy URL to clipboard
a.addEventListener(
"click",
() => {
navigator.clipboard.writeText(location.href + "#" + id);
a.textContent = "✅";
setTimeout(() => {
a.textContent = "🔗";
}, 1000);
}
)
// add to table of contents
const toc = document.getElementById("toc");
toc.hidden = false;
const tocLi = document.getElementById("toc-li");
const li = document.createElement("li");
const a2 = document.createElement("a");
a2.href = `#${id}`;
a2.textContent = question.textContent.replace(/^Q: /, "").replace("🔗", "");
li.appendChild(a2);
tocLi.appendChild(li);
}
}
)
</script>

View file

@ -0,0 +1 @@
<svg fill="#FFFFFF" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Apple</title><path d="M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701"/></svg>

After

Width:  |  Height:  |  Size: 666 B

View file

@ -0,0 +1 @@
<svg role="img" fill="#512BD4" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>C#</title><path d="M1.194 7.543v8.913c0 1.103.588 2.122 1.544 2.674l7.718 4.456a3.086 3.086 0 0 0 3.088 0l7.718-4.456a3.087 3.087 0 0 0 1.544-2.674V7.543a3.084 3.084 0 0 0-1.544-2.673L13.544.414a3.086 3.086 0 0 0-3.088 0L2.738 4.87a3.085 3.085 0 0 0-1.544 2.673Zm5.403 2.914v3.087a.77.77 0 0 0 .772.772.773.773 0 0 0 .772-.772.773.773 0 0 1 1.317-.546.775.775 0 0 1 .226.546 2.314 2.314 0 1 1-4.631 0v-3.087c0-.615.244-1.203.679-1.637a2.312 2.312 0 0 1 3.274 0c.434.434.678 1.023.678 1.637a.769.769 0 0 1-.226.545.767.767 0 0 1-1.091 0 .77.77 0 0 1-.226-.545.77.77 0 0 0-.772-.772.771.771 0 0 0-.772.772Zm12.35 3.087a.77.77 0 0 1-.772.772h-.772v.772a.773.773 0 0 1-1.544 0v-.772h-1.544v.772a.773.773 0 0 1-1.317.546.775.775 0 0 1-.226-.546v-.772H12a.771.771 0 1 1 0-1.544h.772v-1.543H12a.77.77 0 1 1 0-1.544h.772v-.772a.773.773 0 0 1 1.317-.546.775.775 0 0 1 .226.546v.772h1.544v-.772a.773.773 0 0 1 1.544 0v.772h.772a.772.772 0 0 1 0 1.544h-.772v1.543h.772a.776.776 0 0 1 .772.772Zm-3.088-2.315h-1.544v1.543h1.544v-1.543Z"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -0,0 +1 @@
<svg fill="#1572B6" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>CSS3</title><path d="M1.5 0h21l-1.91 21.563L11.977 24l-8.565-2.438L1.5 0zm17.09 4.413L5.41 4.41l.213 2.622 10.125.002-.255 2.716h-6.64l.24 2.573h6.182l-.366 3.523-2.91.804-2.956-.81-.188-2.11h-2.61l.29 3.855L12 19.288l5.373-1.53L18.59 4.414z"/></svg>

After

Width:  |  Height:  |  Size: 343 B

View file

@ -0,0 +1 @@
<svg fill="#5865F2" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Discord</title><path d="M20.317 4.3698a19.7913 19.7913 0 00-4.8851-1.5152.0741.0741 0 00-.0785.0371c-.211.3753-.4447.8648-.6083 1.2495-1.8447-.2762-3.68-.2762-5.4868 0-.1636-.3933-.4058-.8742-.6177-1.2495a.077.077 0 00-.0785-.037 19.7363 19.7363 0 00-4.8852 1.515.0699.0699 0 00-.0321.0277C.5334 9.0458-.319 13.5799.0992 18.0578a.0824.0824 0 00.0312.0561c2.0528 1.5076 4.0413 2.4228 5.9929 3.0294a.0777.0777 0 00.0842-.0276c.4616-.6304.8731-1.2952 1.226-1.9942a.076.076 0 00-.0416-.1057c-.6528-.2476-1.2743-.5495-1.8722-.8923a.077.077 0 01-.0076-.1277c.1258-.0943.2517-.1923.3718-.2914a.0743.0743 0 01.0776-.0105c3.9278 1.7933 8.18 1.7933 12.0614 0a.0739.0739 0 01.0785.0095c.1202.099.246.1981.3728.2924a.077.077 0 01-.0066.1276 12.2986 12.2986 0 01-1.873.8914.0766.0766 0 00-.0407.1067c.3604.698.7719 1.3628 1.225 1.9932a.076.076 0 00.0842.0286c1.961-.6067 3.9495-1.5219 6.0023-3.0294a.077.077 0 00.0313-.0552c.5004-5.177-.8382-9.6739-3.5485-13.6604a.061.061 0 00-.0312-.0286zM8.02 15.3312c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9555-2.4189 2.157-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.9555 2.4189-2.1569 2.4189zm7.9748 0c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9554-2.4189 2.1569-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.946 2.4189-2.1568 2.4189Z"/></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
ssg/src/img/discordpy.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

View file

@ -0,0 +1 @@
<svg fill="#2496ED" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Docker</title><path d="M13.983 11.078h2.119a.186.186 0 00.186-.185V9.006a.186.186 0 00-.186-.186h-2.119a.185.185 0 00-.185.185v1.888c0 .102.083.185.185.185m-2.954-5.43h2.118a.186.186 0 00.186-.186V3.574a.186.186 0 00-.186-.185h-2.118a.185.185 0 00-.185.185v1.888c0 .102.082.185.185.185m0 2.716h2.118a.187.187 0 00.186-.186V6.29a.186.186 0 00-.186-.185h-2.118a.185.185 0 00-.185.185v1.887c0 .102.082.185.185.186m-2.93 0h2.12a.186.186 0 00.184-.186V6.29a.185.185 0 00-.185-.185H8.1a.185.185 0 00-.185.185v1.887c0 .102.083.185.185.186m-2.964 0h2.119a.186.186 0 00.185-.186V6.29a.185.185 0 00-.185-.185H5.136a.186.186 0 00-.186.185v1.887c0 .102.084.185.186.186m5.893 2.715h2.118a.186.186 0 00.186-.185V9.006a.186.186 0 00-.186-.186h-2.118a.185.185 0 00-.185.185v1.888c0 .102.082.185.185.185m-2.93 0h2.12a.185.185 0 00.184-.185V9.006a.185.185 0 00-.184-.186h-2.12a.185.185 0 00-.184.185v1.888c0 .102.083.185.185.185m-2.964 0h2.119a.185.185 0 00.185-.185V9.006a.185.185 0 00-.184-.186h-2.12a.186.186 0 00-.186.186v1.887c0 .102.084.185.186.185m-2.92 0h2.12a.185.185 0 00.184-.185V9.006a.185.185 0 00-.184-.186h-2.12a.185.185 0 00-.184.185v1.888c0 .102.082.185.185.185M23.763 9.89c-.065-.051-.672-.51-1.954-.51-.338.001-.676.03-1.01.087-.248-1.7-1.653-2.53-1.716-2.566l-.344-.199-.226.327c-.284.438-.49.922-.612 1.43-.23.97-.09 1.882.403 2.661-.595.332-1.55.413-1.744.42H.751a.751.751 0 00-.75.748 11.376 11.376 0 00.692 4.062c.545 1.428 1.355 2.48 2.41 3.124 1.18.723 3.1 1.137 5.275 1.137.983.003 1.963-.086 2.93-.266a12.248 12.248 0 003.823-1.389c.98-.567 1.86-1.288 2.61-2.136 1.252-1.418 1.998-2.997 2.553-4.4h.221c1.372 0 2.215-.549 2.68-1.009.309-.293.55-.65.707-1.046l.098-.288Z"/></svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -0,0 +1 @@
<svg fill="#0DBD8B" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Element</title><path d="M12 0C5.373 0 0 5.373 0 12s5.373 12 12 12 12-5.373 12-12S18.627 0 12 0zm-1.314 4.715c3.289 0 5.956 2.66 5.956 5.943 0 .484-.394.877-.879.877s-.879-.393-.879-.877c0-2.313-1.88-4.189-4.198-4.189-.486 0-.879-.393-.879-.877s.392-.877.879-.877zm-5.092 9.504c-.486 0-.879-.394-.879-.877 0-3.283 2.666-5.945 5.956-5.945.485 0 .879.393.879.877s-.394.876-.879.876c-2.319 0-4.198 1.877-4.198 4.191 0 .484-.395.878-.879.878zm7.735 5.067c-3.29 0-5.957-2.662-5.957-5.944 0-.484.394-.878.879-.878s.879.394.879.878c0 2.313 1.88 4.189 4.199 4.189.485 0 .879.393.879.877 0 .486-.394.878-.879.878zm0-2.683c-.485 0-.88-.393-.88-.876 0-.484.395-.878.88-.878 2.318 0 4.199-1.876 4.199-4.19 0-.484.393-.877.879-.877.485 0 .879.393.879.877 0 3.282-2.667 5.944-5.957 5.944z"/></svg>

After

Width:  |  Height:  |  Size: 875 B

BIN
ssg/src/img/email.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

View file

@ -0,0 +1 @@
<svg fill="#009688" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>FastAPI</title><path d="M12 0C5.375 0 0 5.375 0 12c0 6.627 5.375 12 12 12 6.626 0 12-5.373 12-12 0-6.625-5.373-12-12-12zm-.624 21.62v-7.528H7.19L13.203 2.38v7.528h4.029L11.376 21.62z"/></svg>

After

Width:  |  Height:  |  Size: 284 B

View file

@ -0,0 +1 @@
<svg fill="#51A2DA" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Fedora</title><path d="M12.001 0C5.376 0 .008 5.369.004 11.992H.002v9.287h.002A2.726 2.726 0 0 0 2.73 24h9.275c6.626-.004 11.993-5.372 11.993-11.997C23.998 5.375 18.628 0 12 0zm2.431 4.94c2.015 0 3.917 1.543 3.917 3.671 0 .197.001.395-.03.619a1.002 1.002 0 0 1-1.137.893 1.002 1.002 0 0 1-.842-1.175 2.61 2.61 0 0 0 .013-.337c0-1.207-.987-1.672-1.92-1.672-.934 0-1.775.784-1.777 1.672.016 1.027 0 2.046 0 3.07l1.732-.012c1.352-.028 1.368 2.009.016 1.998l-1.748.013c-.004.826.006.677.002 1.093 0 0 .015 1.01-.016 1.776-.209 2.25-2.124 4.046-4.424 4.046-2.438 0-4.448-1.993-4.448-4.437.073-2.515 2.078-4.492 4.603-4.469l1.409-.01v1.996l-1.409.013h-.007c-1.388.04-2.577.984-2.6 2.47a2.438 2.438 0 0 0 2.452 2.439c1.356 0 2.441-.987 2.441-2.437l-.001-7.557c0-.14.005-.252.02-.407.23-1.848 1.883-3.256 3.754-3.256z"/></svg>

After

Width:  |  Height:  |  Size: 911 B

View file

@ -0,0 +1 @@
<svg fill="#FB923C" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Forgejo</title><path d="M16.7773 0c1.6018 0 2.9004 1.2986 2.9004 2.9005s-1.2986 2.9004-2.9004 2.9004c-1.0854 0-2.0315-.596-2.5288-1.4787H12.91c-2.3322 0-4.2272 1.8718-4.2649 4.195l-.0007 2.1175a7.0759 7.0759 0 0 1 4.148-1.4205l.1176-.001 1.3385.0002c.4973-.8827 1.4434-1.4788 2.5288-1.4788 1.6018 0 2.9004 1.2986 2.9004 2.9005s-1.2986 2.9004-2.9004 2.9004c-1.0854 0-2.0315-.596-2.5288-1.4787H12.91c-2.3322 0-4.2272 1.8718-4.2649 4.195l-.0007 2.319c.8827.4973 1.4788 1.4434 1.4788 2.5287 0 1.602-1.2986 2.9005-2.9005 2.9005-1.6018 0-2.9004-1.2986-2.9004-2.9005 0-1.0853.596-2.0314 1.4788-2.5287l-.0002-9.9831c0-3.887 3.1195-7.0453 6.9915-7.108l.1176-.001h1.3385C14.7458.5962 15.692 0 16.7773 0ZM7.2227 19.9052c-.6596 0-1.1943.5347-1.1943 1.1943s.5347 1.1943 1.1943 1.1943 1.1944-.5347 1.1944-1.1943-.5348-1.1943-1.1944-1.1943Zm9.5546-10.4644c-.6596 0-1.1944.5347-1.1944 1.1943s.5348 1.1943 1.1944 1.1943c.6596 0 1.1943-.5347 1.1943-1.1943s-.5347-1.1943-1.1943-1.1943Zm0-7.7346c-.6596 0-1.1944.5347-1.1944 1.1943s.5348 1.1943 1.1944 1.1943c.6596 0 1.1943-.5347 1.1943-1.1943s-.5347-1.1943-1.1943-1.1943Z"/></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -0,0 +1 @@
<svg fill="#F05032" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Git</title><path d="M23.546 10.93L13.067.452c-.604-.603-1.582-.603-2.188 0L8.708 2.627l2.76 2.76c.645-.215 1.379-.07 1.889.441.516.515.658 1.258.438 1.9l2.658 2.66c.645-.223 1.387-.078 1.9.435.721.72.721 1.884 0 2.604-.719.719-1.881.719-2.6 0-.539-.541-.674-1.337-.404-1.996L12.86 8.955v6.525c.176.086.342.203.488.348.713.721.713 1.883 0 2.6-.719.721-1.889.721-2.609 0-.719-.719-.719-1.879 0-2.598.182-.18.387-.316.605-.406V8.835c-.217-.091-.424-.222-.6-.401-.545-.545-.676-1.342-.396-2.009L7.636 3.7.45 10.881c-.6.605-.6 1.584 0 2.189l10.48 10.477c.604.604 1.582.604 2.186 0l10.43-10.43c.605-.603.605-1.582 0-2.187"/></svg>

After

Width:  |  Height:  |  Size: 717 B

1
ssg/src/img/github.svg Normal file
View file

@ -0,0 +1 @@
<svg role="img" fill="#FFFFFF" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg>

After

Width:  |  Height:  |  Size: 838 B

View file

@ -0,0 +1 @@
<svg fill="#EA4335" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Gmail</title><path d="M24 5.457v13.909c0 .904-.732 1.636-1.636 1.636h-3.819V11.73L12 16.64l-6.545-4.91v9.273H1.636A1.636 1.636 0 0 1 0 19.366V5.457c0-2.023 2.309-3.178 3.927-1.964L5.455 4.64 12 9.548l6.545-4.91 1.528-1.145C21.69 2.28 24 3.434 24 5.457z"/></svg>

After

Width:  |  Height:  |  Size: 354 B

View file

@ -0,0 +1 @@
<svg fill="#4EAA25" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GNU Bash</title><path d="M21.038,4.9l-7.577-4.498C13.009,0.134,12.505,0,12,0c-0.505,0-1.009,0.134-1.462,0.403L2.961,4.9 C2.057,5.437,1.5,6.429,1.5,7.503v8.995c0,1.073,0.557,2.066,1.462,2.603l7.577,4.497C10.991,23.866,11.495,24,12,24 c0.505,0,1.009-0.134,1.461-0.402l7.577-4.497c0.904-0.537,1.462-1.529,1.462-2.603V7.503C22.5,6.429,21.943,5.437,21.038,4.9z M15.17,18.946l0.013,0.646c0.001,0.078-0.05,0.167-0.111,0.198l-0.383,0.22c-0.061,0.031-0.111-0.007-0.112-0.085L14.57,19.29 c-0.328,0.136-0.66,0.169-0.872,0.084c-0.04-0.016-0.057-0.075-0.041-0.142l0.139-0.584c0.011-0.046,0.036-0.092,0.069-0.121 c0.012-0.011,0.024-0.02,0.036-0.026c0.022-0.011,0.043-0.014,0.062-0.006c0.229,0.077,0.521,0.041,0.802-0.101 c0.357-0.181,0.596-0.545,0.592-0.907c-0.003-0.328-0.181-0.465-0.613-0.468c-0.55,0.001-1.064-0.107-1.072-0.917 c-0.007-0.667,0.34-1.361,0.889-1.8l-0.007-0.652c-0.001-0.08,0.048-0.168,0.111-0.2l0.37-0.236 c0.061-0.031,0.111,0.007,0.112,0.087l0.006,0.653c0.273-0.109,0.511-0.138,0.726-0.088c0.047,0.012,0.067,0.076,0.048,0.151 l-0.144,0.578c-0.011,0.044-0.036,0.088-0.065,0.116c-0.012,0.012-0.025,0.021-0.038,0.028c-0.019,0.01-0.038,0.013-0.057,0.009 c-0.098-0.022-0.332-0.073-0.699,0.113c-0.385,0.195-0.52,0.53-0.517,0.778c0.003,0.297,0.155,0.387,0.681,0.396 c0.7,0.012,1.003,0.318,1.01,1.023C16.105,17.747,15.736,18.491,15.17,18.946z M19.143,17.859c0,0.06-0.008,0.116-0.058,0.145 l-1.916,1.164c-0.05,0.029-0.09,0.004-0.09-0.056v-0.494c0-0.06,0.037-0.093,0.087-0.122l1.887-1.129 c0.05-0.029,0.09-0.004,0.09,0.056V17.859z M20.459,6.797l-7.168,4.427c-0.894,0.523-1.553,1.109-1.553,2.187v8.833 c0,0.645,0.26,1.063,0.66,1.184c-0.131,0.023-0.264,0.039-0.398,0.039c-0.42,0-0.833-0.114-1.197-0.33L3.226,18.64 c-0.741-0.44-1.201-1.261-1.201-2.142V7.503c0-0.881,0.46-1.702,1.201-2.142l7.577-4.498c0.363-0.216,0.777-0.33,1.197-0.33 c0.419,0,0.833,0.114,1.197,0.33l7.577,4.498c0.624,0.371,1.046,1.013,1.164,1.732C21.686,6.557,21.12,6.411,20.459,6.797z"/></svg>

After

Width:  |  Height:  |  Size: 2 KiB

1
ssg/src/img/go-color.svg Normal file
View file

@ -0,0 +1 @@
<svg fill="#00ADD8" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Go</title><path d="M1.811 10.231c-.047 0-.058-.023-.035-.059l.246-.315c.023-.035.081-.058.128-.058h4.172c.046 0 .058.035.035.07l-.199.303c-.023.036-.082.07-.117.07zM.047 11.306c-.047 0-.059-.023-.035-.058l.245-.316c.023-.035.082-.058.129-.058h5.328c.047 0 .07.035.058.07l-.093.28c-.012.047-.058.07-.105.07zm2.828 1.075c-.047 0-.059-.035-.035-.07l.163-.292c.023-.035.07-.07.117-.07h2.337c.047 0 .07.035.07.082l-.023.28c0 .047-.047.082-.082.082zm12.129-2.36c-.736.187-1.239.327-1.963.514-.176.046-.187.058-.34-.117-.174-.199-.303-.327-.548-.444-.737-.362-1.45-.257-2.115.175-.795.514-1.204 1.274-1.192 2.22.011.935.654 1.706 1.577 1.835.795.105 1.46-.175 1.987-.77.105-.13.198-.27.315-.434H10.47c-.245 0-.304-.152-.222-.35.152-.362.432-.97.596-1.274a.315.315 0 01.292-.187h4.253c-.023.316-.023.631-.07.947a4.983 4.983 0 01-.958 2.29c-.841 1.11-1.94 1.8-3.33 1.986-1.145.152-2.209-.07-3.143-.77-.865-.655-1.356-1.52-1.484-2.595-.152-1.274.222-2.419.993-3.424.83-1.086 1.928-1.776 3.272-2.02 1.098-.2 2.15-.07 3.096.571.62.41 1.063.97 1.356 1.648.07.105.023.164-.117.2m3.868 6.461c-1.064-.024-2.034-.328-2.852-1.029a3.665 3.665 0 01-1.262-2.255c-.21-1.32.152-2.489.947-3.529.853-1.122 1.881-1.706 3.272-1.95 1.192-.21 2.314-.095 3.33.595.923.63 1.496 1.484 1.648 2.605.198 1.578-.257 2.863-1.344 3.962-.771.783-1.718 1.273-2.805 1.495-.315.06-.63.07-.934.106zm2.78-4.72c-.011-.153-.011-.27-.034-.387-.21-1.157-1.274-1.81-2.384-1.554-1.087.245-1.788.935-2.045 2.033-.21.912.234 1.835 1.075 2.21.643.28 1.285.244 1.905-.07.923-.48 1.425-1.228 1.484-2.233z"/></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -0,0 +1 @@
<svg fill="#E34F26" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>HTML5</title><path d="M1.5 0h21l-1.91 21.563L11.977 24l-8.564-2.438L1.5 0zm7.031 9.75l-.232-2.718 10.059.003.23-2.622L5.412 4.41l.698 8.01h9.126l-.326 3.426-2.91.804-2.955-.81-.188-2.11H6.248l.33 4.171L12 19.351l5.379-1.443.744-8.157H8.531z"/></svg>

After

Width:  |  Height:  |  Size: 342 B

View file

@ -0,0 +1 @@
<svg fill="#34DA50" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>iMessage</title><path d="M5.285 0A5.273 5.273 0 0 0 0 5.285v13.43A5.273 5.273 0 0 0 5.285 24h13.43A5.273 5.273 0 0 0 24 18.715V5.285A5.273 5.273 0 0 0 18.715 0ZM12 4.154a8.809 7.337 0 0 1 8.809 7.338A8.809 7.337 0 0 1 12 18.828a8.809 7.337 0 0 1-2.492-.303A8.656 7.337 0 0 1 5.93 19.93a9.929 7.337 0 0 0 1.54-2.155 8.809 7.337 0 0 1-4.279-6.283A8.809 7.337 0 0 1 12 4.154"/></svg>

After

Width:  |  Height:  |  Size: 473 B

View file

@ -0,0 +1 @@
<svg fill="#F7DF1E" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>JavaScript</title><path d="M0 0h24v24H0V0zm22.034 18.276c-.175-1.095-.888-2.015-3.003-2.873-.736-.345-1.554-.585-1.797-1.14-.091-.33-.105-.51-.046-.705.15-.646.915-.84 1.515-.66.39.12.75.42.976.9 1.034-.676 1.034-.676 1.755-1.125-.27-.42-.404-.601-.586-.78-.63-.705-1.469-1.065-2.834-1.034l-.705.089c-.676.165-1.32.525-1.71 1.005-1.14 1.291-.811 3.541.569 4.471 1.365 1.02 3.361 1.244 3.616 2.205.24 1.17-.87 1.545-1.966 1.41-.811-.18-1.26-.586-1.755-1.336l-1.83 1.051c.21.48.45.689.81 1.109 1.74 1.756 6.09 1.666 6.871-1.004.029-.09.24-.705.074-1.65l.046.067zm-8.983-7.245h-2.248c0 1.938-.009 3.864-.009 5.805 0 1.232.063 2.363-.138 2.711-.33.689-1.18.601-1.566.48-.396-.196-.597-.466-.83-.855-.063-.105-.11-.196-.127-.196l-1.825 1.125c.305.63.75 1.172 1.324 1.517.855.51 2.004.675 3.207.405.783-.226 1.458-.691 1.811-1.411.51-.93.402-2.07.397-3.346.012-2.054 0-4.109 0-6.179l.004-.056z"/></svg>

After

Width:  |  Height:  |  Size: 989 B

1
ssg/src/img/linode.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.2 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.3 KiB

View file

@ -0,0 +1 @@
<svg fill="#000000" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Markdown</title><path d="M22.27 19.385H1.73A1.73 1.73 0 010 17.655V6.345a1.73 1.73 0 011.73-1.73h20.54A1.73 1.73 0 0124 6.345v11.308a1.73 1.73 0 01-1.73 1.731zM5.769 15.923v-4.5l2.308 2.885 2.307-2.885v4.5h2.308V8.078h-2.308l-2.307 2.885-2.308-2.885H3.46v7.847zM21.232 12h-2.309V8.077h-2.307V12h-2.308l3.461 4.039z"/></svg>

After

Width:  |  Height:  |  Size: 416 B

View file

@ -0,0 +1 @@
<svg fill="#6364FF" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Mastodon</title><path d="M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z"/></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -0,0 +1 @@
<svg fill="#FFFFFF" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Matrix</title><path d="M.632.55v22.9H2.28V24H0V0h2.28v.55zm7.043 7.26v1.157h.033c.309-.443.683-.784 1.117-1.024.433-.245.936-.365 1.5-.365.54 0 1.033.107 1.481.314.448.208.785.582 1.02 1.108.254-.374.6-.706 1.034-.992.434-.287.95-.43 1.546-.43.453 0 .872.056 1.26.167.388.11.716.286.993.53.276.245.489.559.646.951.152.392.23.863.23 1.417v5.728h-2.349V11.52c0-.286-.01-.559-.032-.812a1.755 1.755 0 0 0-.18-.66 1.106 1.106 0 0 0-.438-.448c-.194-.11-.457-.166-.785-.166-.332 0-.6.064-.803.189a1.38 1.38 0 0 0-.48.499 1.946 1.946 0 0 0-.231.696 5.56 5.56 0 0 0-.06.785v4.768h-2.35v-4.8c0-.254-.004-.503-.018-.752a2.074 2.074 0 0 0-.143-.688 1.052 1.052 0 0 0-.415-.503c-.194-.125-.476-.19-.854-.19-.111 0-.259.024-.439.074-.18.051-.36.143-.53.282-.171.138-.319.337-.439.595-.12.259-.18.6-.18 1.02v4.966H5.46V7.81zm15.693 15.64V.55H21.72V0H24v24h-2.28v-.55z"/></svg>

After

Width:  |  Height:  |  Size: 955 B

View file

@ -0,0 +1 @@
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Next.js</title><path d="M18.665 21.978C16.758 23.255 14.465 24 12 24 5.377 24 0 18.623 0 12S5.377 0 12 0s12 5.377 12 12c0 3.583-1.574 6.801-4.067 9.001L9.219 7.2H7.2v9.596h1.615V9.251l9.85 12.727Zm-3.332-8.533 1.6 2.061V7.2h-1.6v6.245Z"/></svg>

After

Width:  |  Height:  |  Size: 322 B

9
ssg/src/img/ollama.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 17 KiB

View file

@ -0,0 +1 @@
<svg fill="#412991" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>OpenAI</title><path d="M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.407-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z"/></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.1 KiB

BIN
ssg/src/img/pycord.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

View file

@ -0,0 +1 @@
<svg fill="#3776AB" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Python</title><path d="M14.25.18l.9.2.73.26.59.3.45.32.34.34.25.34.16.33.1.3.04.26.02.2-.01.13V8.5l-.05.63-.13.55-.21.46-.26.38-.3.31-.33.25-.35.19-.35.14-.33.1-.3.07-.26.04-.21.02H8.77l-.69.05-.59.14-.5.22-.41.27-.33.32-.27.35-.2.36-.15.37-.1.35-.07.32-.04.27-.02.21v3.06H3.17l-.21-.03-.28-.07-.32-.12-.35-.18-.36-.26-.36-.36-.35-.46-.32-.59-.28-.73-.21-.88-.14-1.05-.05-1.23.06-1.22.16-1.04.24-.87.32-.71.36-.57.4-.44.42-.33.42-.24.4-.16.36-.1.32-.05.24-.01h.16l.06.01h8.16v-.83H6.18l-.01-2.75-.02-.37.05-.34.11-.31.17-.28.25-.26.31-.23.38-.2.44-.18.51-.15.58-.12.64-.1.71-.06.77-.04.84-.02 1.27.05zm-6.3 1.98l-.23.33-.08.41.08.41.23.34.33.22.41.09.41-.09.33-.22.23-.34.08-.41-.08-.41-.23-.33-.33-.22-.41-.09-.41.09zm13.09 3.95l.28.06.32.12.35.18.36.27.36.35.35.47.32.59.28.73.21.88.14 1.04.05 1.23-.06 1.23-.16 1.04-.24.86-.32.71-.36.57-.4.45-.42.33-.42.24-.4.16-.36.09-.32.05-.24.02-.16-.01h-8.22v.82h5.84l.01 2.76.02.36-.05.34-.11.31-.17.29-.25.25-.31.24-.38.2-.44.17-.51.15-.58.13-.64.09-.71.07-.77.04-.84.01-1.27-.04-1.07-.14-.9-.2-.73-.25-.59-.3-.45-.33-.34-.34-.25-.34-.16-.33-.1-.3-.04-.25-.02-.2.01-.13v-5.34l.05-.64.13-.54.21-.46.26-.38.3-.32.33-.24.35-.2.35-.14.33-.1.3-.06.26-.04.21-.02.13-.01h5.84l.69-.05.59-.14.5-.21.41-.28.33-.32.27-.35.2-.36.15-.36.1-.35.07-.32.04-.28.02-.21V6.07h2.09l.14.01zm-6.47 14.25l-.23.33-.08.41.08.41.23.33.33.23.41.08.41-.08.33-.23.23-.33.08-.41-.08-.41-.23-.33-.33-.23-.41-.08-.41.08z"/></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

1282
ssg/src/img/schildichat.svg Normal file

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 43 KiB

1
ssg/src/img/server.svg Normal file
View file

@ -0,0 +1 @@
<svg fill="#EEEEEE " xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M64 32C28.7 32 0 60.7 0 96v64c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm280 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm48 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM64 288c-35.3 0-64 28.7-64 64v64c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V352c0-35.3-28.7-64-64-64H64zm280 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm56 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z"/></svg>

After

Width:  |  Height:  |  Size: 626 B

View file

@ -0,0 +1 @@
<svg fill="#3A76F0" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Signal</title><path d="m9.12.35.27 1.09a10.845 10.845 0 0 0-3.015 1.248l-.578-.964A11.955 11.955 0 0 1 9.12.35zm5.76 0-.27 1.09a10.845 10.845 0 0 1 3.015 1.248l.581-.964A11.955 11.955 0 0 0 14.88.35zM1.725 5.797A11.955 11.955 0 0 0 .351 9.119l1.09.27A10.845 10.845 0 0 1 2.69 6.374zm-.6 6.202a10.856 10.856 0 0 1 .122-1.63l-1.112-.168a12.043 12.043 0 0 0 0 3.596l1.112-.169A10.856 10.856 0 0 1 1.125 12zm17.078 10.275-.578-.964a10.845 10.845 0 0 1-3.011 1.247l.27 1.091a11.955 11.955 0 0 0 3.319-1.374zM22.875 12a10.856 10.856 0 0 1-.122 1.63l1.112.168a12.043 12.043 0 0 0 0-3.596l-1.112.169a10.856 10.856 0 0 1 .122 1.63zm.774 2.88-1.09-.27a10.845 10.845 0 0 1-1.248 3.015l.964.581a11.955 11.955 0 0 0 1.374-3.326zm-10.02 7.875a10.952 10.952 0 0 1-3.258 0l-.17 1.112a12.043 12.043 0 0 0 3.597 0zm7.125-4.303a10.914 10.914 0 0 1-2.304 2.302l.668.906a12.019 12.019 0 0 0 2.542-2.535zM18.45 3.245a10.914 10.914 0 0 1 2.304 2.304l.906-.675a12.019 12.019 0 0 0-2.535-2.535zM3.246 5.549A10.914 10.914 0 0 1 5.55 3.245l-.675-.906A12.019 12.019 0 0 0 2.34 4.874zm19.029.248-.964.577a10.845 10.845 0 0 1 1.247 3.011l1.091-.27a11.955 11.955 0 0 0-1.374-3.318zM10.371 1.246a10.952 10.952 0 0 1 3.258 0L13.8.134a12.043 12.043 0 0 0-3.597 0zM3.823 21.957 1.5 22.5l.542-2.323-1.095-.257-.542 2.323a1.125 1.125 0 0 0 1.352 1.352l2.321-.532zm-2.642-3.041 1.095.255.375-1.61a10.828 10.828 0 0 1-1.21-2.952l-1.09.27a11.91 11.91 0 0 0 1.106 2.852zm5.25 2.437-1.61.375.255 1.095 1.185-.275a11.91 11.91 0 0 0 2.851 1.106l.27-1.091a10.828 10.828 0 0 1-2.943-1.217zM12 2.25a9.75 9.75 0 0 0-8.25 14.938l-.938 4 4-.938A9.75 9.75 0 1 0 12 2.25z"/></svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

1
ssg/src/img/topdotgg.svg Normal file
View file

@ -0,0 +1 @@
<svg fill="#FF3366" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Top.gg</title><path d="M0 4.3785h7.6215V12H2.329A2.3212 2.3212 0 0 1 .0077 9.6788Zm24 0H8.757v15.243h3.1144a4.5071 4.5071 0 0 0 4.507-4.5071V12h3.1145A4.5073 4.5073 0 0 0 24 7.4929z"/></svg>

After

Width:  |  Height:  |  Size: 283 B

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36" xml:space="preserve"><path fill="#880082" d="M0 27a4 4 0 0 0 4 4h28a4 4 0 0 0 4-4v-.5H0v.5z"/><path fill="#3558A0" d="M0 22.07h36v4.6H0z"/><path fill="#138F3E" d="M0 17.83h36v4.5H0z"/><path fill="#FAD220" d="M0 13.5h36V18H0z"/><path fill="#FF7300" d="M0 9.17h36v4.5H0z"/><path fill="#FF000E" d="M32 5H4a4 4 0 0 0-4 4v.33h36V9a4 4 0 0 0-4-4z"/></svg>

After

Width:  |  Height:  |  Size: 409 B

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#5BCEFA" d="M0 27c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4v-1.3H0V27z"/><path fill="#F5A9B8" d="M.026 20.5L0 25.8h36v-5.3z"/><path fill="#EEE" d="M0 15.3h36v5.3H0z"/><path fill="#F5A9B8" d="M0 9.902h36V15.4H0z"/><path fill="#5BCEFA" d="M36 9c0-2.209-1.791-4-4-4H4C1.791 5 0 6.791 0 9v1.2h36V9z"/></svg>

After

Width:  |  Height:  |  Size: 376 B

View file

@ -0,0 +1 @@
<svg fill="#E95420" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Ubuntu</title><path d="M17.61.455a3.41 3.41 0 0 0-3.41 3.41 3.41 3.41 0 0 0 3.41 3.41 3.41 3.41 0 0 0 3.41-3.41 3.41 3.41 0 0 0-3.41-3.41zM12.92.8C8.923.777 5.137 2.941 3.148 6.451a4.5 4.5 0 0 1 .26-.007 4.92 4.92 0 0 1 2.585.737A8.316 8.316 0 0 1 12.688 3.6 4.944 4.944 0 0 1 13.723.834 11.008 11.008 0 0 0 12.92.8zm9.226 4.994a4.915 4.915 0 0 1-1.918 2.246 8.36 8.36 0 0 1-.273 8.303 4.89 4.89 0 0 1 1.632 2.54 11.156 11.156 0 0 0 .559-13.089zM3.41 7.932A3.41 3.41 0 0 0 0 11.342a3.41 3.41 0 0 0 3.41 3.409 3.41 3.41 0 0 0 3.41-3.41 3.41 3.41 0 0 0-3.41-3.41zm2.027 7.866a4.908 4.908 0 0 1-2.915.358 11.1 11.1 0 0 0 7.991 6.698 11.234 11.234 0 0 0 2.422.249 4.879 4.879 0 0 1-.999-2.85 8.484 8.484 0 0 1-.836-.136 8.304 8.304 0 0 1-5.663-4.32zm11.405.928a3.41 3.41 0 0 0-3.41 3.41 3.41 3.41 0 0 0 3.41 3.41 3.41 3.41 0 0 0 3.41-3.41 3.41 3.41 0 0 0-3.41-3.41z"/></svg>

After

Width:  |  Height:  |  Size: 963 B

View file

@ -0,0 +1 @@
<svg fill="#5CDD8B" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Uptime Kuma</title><path d="M11.759.955c-4.071 0-7.93 2.265-10.06 5.774l-.16.263-.116.284c-1.81 4.44-2.188 9.118.621 12.459 2.67 3.174 6.221 3.328 9.477 3.308 3.256-.02 6.323-.482 8.995-2.032C22.75 19.714 24 16.917 24 14.53c0-2.388-.724-4.698-1.882-7.343l-.112-.257-.148-.238C19.683 3.2 15.83.955 11.758.955Zm0 3.868c2.919 0 5.19 1.305 6.816 3.914 2.076 4.747 2.076 7.724 0 8.929-3.116 1.808-11.234 2.359-13.57-.42-1.558-1.853-1.558-4.69 0-8.51 1.584-2.608 3.835-3.913 6.754-3.913z"/></svg>

After

Width:  |  Height:  |  Size: 583 B

View file

@ -0,0 +1 @@
<svg fill="#0078D4" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Windows</title><path d="M0,0H11.377V11.372H0ZM12.623,0H24V11.372H12.623ZM0,12.623H11.377V24H0Zm12.623,0H24V24H12.623"/></svg>

After

Width:  |  Height:  |  Size: 218 B

240
ssg/src/index.njk Normal file
View file

@ -0,0 +1,240 @@
---
layout: layouts/base.njk
title: index
---
<h1>Hello There!</h1>
<p><span id="__age">17</span> | she/it | "full"-stack</p>
<h2>Quick - about me</h2>
<div>
<p>You can hover over icons to get a tooltip, and some you can click to go places.</p>
<div id="array">
<div>
<h3>Languages</h3>
<div>
<img src="img/python-color.svg" alt="Python" title="Python" width="32px" height="32px" class="icon">
<img src="img/javascript-color.svg" alt="JavaScript" title="JavaScript" width="32px" height="32px" class="icon">
<img src="img/gnubash-color.svg" alt="Bash" title="Bash" width="32px" height="32px" class="icon">
</div>
</div>
<div>
<h3>Operating Systems</h3>
<div>
<img src="img/fedora-color.svg" alt="Fedora" title="Fedora" width="32px" height="32px" class="icon">
<img src="img/ubuntu-color.svg" alt="Ubuntu" title="Ubuntu (Server)" width="32px" height="32px" class="icon">
<img src="img/windows-color.svg" alt="Windows" title="Windows" width="32px" height="32px" class="icon">
<img src="img/apple-color.svg" alt="iOS" title="iOS" width="32px" height="32px" class="icon">
</div>
</div>
<div>
<h3>Communication Platforms</h3>
<p style="font-size: initial">In order of fastest to slowest</p>
<div>
<a href="https://matrix.to/#/@nex:nexy7574.co.uk" rel="noopener noreferrer" target="_blank" class="icon">
<img src="img/matrix-color.svg" alt="Matrix" title="Matrix" width="32px" height="32px" class="icon">
</a>
<a href="https://signal.me/#eu/j24vT8zDzquI0us48k7eiNJcpJjEw4TYUz1gtvo_0HtEfq4C2MZG1YFs5POF98Sb" rel="noopener" target="_blank" class="icon">
<img src="img/signal-color.svg" alt="Signal" title="Signal" width="32px" height="32px" class="icon">
</a>
<img src="img/imessage-color.svg" alt="iMessage" title="iMessage" width="32px" height="32px" class="icon">
<a href="https://discord.gg/TveBeG7" rel="noopener" target="_blank" class="icon">
<img src="img/discord-color.svg" alt="Discord" title="Discord" width="32px" height="32px" class="icon">
</a>
<a rel="noopener" target="_blank" class="icon">
<img src="img/gmail-color.svg" alt="Email" title="Email (very slow)" width="32px" height="32px" class="icon">
</a>
</div>
</div>
<div>
<h3>Learning</h3>
<div>
<img src="img/csharp-color.svg" alt="C#" title="C#" width="32px" height="32px" class="icon"/>
<img src="img/go-color.svg" alt="Go" title="Go" width="32px" height="32px" class="icon"/>
</div>
</div>
<div>
<h3>Tools</h3>
<div>
<img src="img/docker-color.svg" alt="Docker" title="Docker" width="32px" height="32px" class="icon"/>
<img src="img/git-color.svg" alt="Git" title="Git" width="32px" height="32px" class="icon"/>
<img src="img/github.svg" alt="GitHub" title="GitHub" width="32px" height="32px" class="icon"/>
<img src="img/linode.svg" alt="Linode" title="Linode (cloud hosting)" width="32px" height="32px" class="icon"/>
<img src="img/postgresql-color.svg" alt="Postgres" title="Postgres" width="32px" height="32px" class="icon"/>
<img src="img/ollama.svg" alt="Ollama" title="Ollama (web hosting)" width="32px" height="32px" class="icon"/>
<img src="img/openai-color.svg" alt="OpenAI/ChatGPT" title="OpenAI/ChatGPT" width="32px" height="32px" class="icon"/>
</div>
</div>
<div>
<h3>Frameworks & Libraries</h3>
<div>
<img src="img/nextdotjs.svg" alt="Next.js" title="Next.js" width="32px" height="32px" class="icon"/>
<img src="img/fastapi-color.svg" alt="FastAPI" title="FastAPI" width="32px" height="32px" class="icon"/>
<img src="img/discordpy.png" alt="Discord.py" title="Discord.py" width="32px" height="32px" class="icon"/>
<img src="img/pycord.png" alt="py-cord" title="py-cord" width="32px" height="32px" class="icon"/>
</div>
</div>
</div>
<h3>Notable Projects</h3>
<div>
<table>
<thead>
<tr>
<th>Name</th>
<th>Brief</th>
<th>Source</th>
<th>Live</th>
</tr>
</thead>
<tbody>
<tr>
<td>Nio-Bot</td>
<td>A bot framework for the matrix ecosystem</td>
<td>
<a href="https://github.com/nexy7574/nio-bot" rel="noopener" target="_blank" class="icon">
<img src="img/github.svg" alt="GitHub" title="GitHub" width="32px" height="32px" class="icon">
</a>
</td>
<td>
<a href="https://matrix.to/#/#bots:nexy7574.co.uk" rel="opopener" target="_blank" class="icon">
<img src="img/matrix-color.svg" alt="Matrix" title="Matrix" width="32px" height="32px" class="icon">
</a>
</td>
</tr>
<tr>
<td>dendritecli</td>
<td>A command line interface for interacting with the Dendrite homeserver.</td>
<td>
<a href="https://github.com/nexy7574/dendritecli" rel="noopener" target="_blank" class="icon">
<img src="img/github.svg" alt="GitHub" title="GitHub" width="32px" height="32px" class="icon">
</a>
</td>
<td></td>
</tr>
<tr>
<td>ModMan</td>
<td>A CLI mod manager for minecraft servers.</td>
<td>
<a href="https://github.com/nexy7574/modman" rel="noopener" target="_blank" class="icon">
<img src="img/github.svg" alt="GitHub" title="GitHub" width="32px" height="32px" class="icon">
</a>
</td>
<td></td>
</tr>
<tr>
<td>College Bot v2</td>
<td>Specialised chat bot in discord for my college server.</td>
<td>
<a href="https://git.i-am.nexus/nex/college-bot-v2" rel="noopener" target="_blank" class="icon">
<img src="img/forgejo-color.svg" alt="Forgejo" title="Forgejo" width="32px" height="32px" class="icon">
</a>
[<a href="https://github.com/nexy7574/college-bot-v2" rel="noopener" target="_blank" class="icon">
<img src="img/github.svg" alt="GitHub" title="GitHub" width="32px" height="32px" class="icon">
</a>]
</td>
<td></td>
</tr>
<tr>
<td>drop-in-url-previews</td>
<td>A drop-in proxy URL preview server for Matrix</td>
<td>
<a href="https://git.i-am.nexus/nex/drop-in-url-previews" rel="noopener" target="_blank" class="icon">
<img src="img/forgejo-color.svg" alt="Forgejo" title="Forgejo" width="32px" height="32px" class="icon">
</a>
</td>
<td>
<a href="https://matrix.nexy7574.co.uk/_matrix/media/r0/preview_url?url=nexy7574.co.uk" rel="noopener" target="_blank" class="icon">
<img src="img/matrix-color.svg" alt="Matrix" title="Matrix" width="32px" height="32px" class="icon">
</td>
</tr>
<tr>
<td>Spanner</td>
<td>A really informational discord bot</td>
<td>
<a href="https://github.com/nexy7574/spanner-v3" rel="noopener" target="_blank" class="icon">
v3
</a><br/>
<a href="https://github.com/nexy7574/spanner-v2" rel="noopener" target="_blank" class="icon">
v2
</a><br/>
<a href="https://github.com/nexy7574/spanner-bot" rel="noopener" target="_blank" class="icon">
v1
</a>
</td>
<td>
<a href="https://discord.com/api/oauth2/authorize?client_id=722000000000000000&permissions=8&scope=bot" rel="noopener" target="_blank" class="icon">
<img src="img/discord-color.svg" alt="Discord" title="Discord" width="32px" height="32px" class="icon">
</a>
</td>
</tr>
<tr>
<td>YourApps</td>
<td>A discord bot that trailblazed the discord forms market with, at its peak, 2.5k servers, and over 5 million users.</td>
<td><i>proprietary</i></td>
<td>
<a href="https://top.gg/bot/619328560141697036" rel="noopener noreferrer" target="_blank" class="icon">
<img src="img/topdotgg.svg" alt="top.gg" title="top.gg" width="32px" height="32px" class="icon">
</a>
</td>
</tr>
<tr>
<td>Top.py</td>
<td>
An alternative python API wrapper for the
<a href="https://top.gg" rel="noopener noreferrer" target="_blank">top.gg</a>
API
</td>
<td>
<a href="https://github.com/nexy7574/top.py" rel="noopener" target="_blank" class="icon">
<img src="img/github.svg" alt="GitHub" title="GitHub" width="32px" height="32px" class="icon">
</a>
</td>
<td></td>
</tr>
</tbody>
</table>
</div>
<h4>Notable Contributions</h4>
<p>These are projects I have contributed to, but not necessarily created or had a major role in.</p>
<p>Projects listed here had code contributions - other contributions, such as issues or design insights, are not included.</p>
<div>
<table>
<thead>
<tr>
<th>Name</th>
<th>Brief</th>
<th>Source</th>
</tr>
</thead>
<tbody>
<tr>
<td>PyCord</td>
<td>"Pycord, a maintained fork of discord.py, is a python wrapper for the Discord API"</td>
<td>
<a href="https://github.com/Pycord-Development/pycord" rel="noopener" target="_blank" class="icon">
<img src="img/github.svg" alt="GitHub" title="GitHub" width="32px" height="32px" class="icon">
</a>
</td>
</tr>
<tr>
<td>matrix-nio</td>
<td>"A Python Matrix client library, designed according to sans I/O principles"</td>
<td>
<a href="https://github.com/matrix-nio/matrix-nio" rel="noopener" target="_blank" class="icon">
<img src="img/github.svg" alt="GitHub" title="GitHub" width="32px" height="32px" class="icon">
</a>
</td>
</tr>
<tr>
<td>discord.py</td>
<td>"An API wrapper for Discord written in Python"</td>
<td>
<a href="https://github.com/Rapptz/discord.py" rel="noopener" target="_blank" class="icon">
<img src="img/github.svg" alt="GitHub" title="GitHub" width="32px" height="32px" class="icon">
</a>
</td>
</tr>
</tbody>
</table>
</div>
</div>

38
ssg/src/js/index.js Normal file
View file

@ -0,0 +1,38 @@
document.addEventListener(
"DOMContentLoaded",
() => {
const __name = document.getElementById("__name");
__name.addEventListener(
"mouseover",
() => {
__name.textContent = "she/it";
}
)
__name.addEventListener(
"mouseout",
() => {
__name.textContent = "Nexus";
}
)
const email = document.getElementById("email-modal");
const emailImages = document.querySelectorAll("img[src='img/gmail-color.svg']");
if(email && emailImages.length > 0) {
for (let emailImg of emailImages) {
emailImg.addEventListener(
"click",
() => {
email.hidden = !email.hidden;
}
)
emailImg.style.cursor = "pointer";
}
email.addEventListener(
"click",
() => {
email.hidden = !email.hidden;
}
)
email.style.cursor = "pointer";
}
}
)

124
ssg/src/oldfaq.html Normal file
View file

@ -0,0 +1,124 @@
<!DOCTYPE html>
<html lang="en" style="background-color: black;">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>FAQ | nexy7574.co.uk</title>
<link rel="stylesheet" href="bundle.css"/>
</head>
<body>
<div class="mainBody">
<header>
</header>
<main>
<div>
<h1>Frequently Asked Questions</h1>
<p>Note: I am dyslexic, so please excuse any spelling or grammar errors. Feel free to message me for corrections ^^</p>
<div id="toc" hidden>
<h2>Table Of Contents:</div>
<ol id="toc-li"></ol>
</div> <!-- Table of Contents -->
<noscript><p>There will be a table of contents here if you enable JavaScript. You don't have to though.</p></noscript>
<hr/>
<div class="question">
<h2>Q: What are your keys???</h2>
<div>
<h3>A: PGP:</h3>
<p>
<code class="inline">0FA334385D0B689F</code> - available via WKD (<code class="inline">gpg --locate-keys me@nexy7574.co.uk</code>), or the full (armoured) key is available <a href="assets/pgp-2024-05-13.txt" download>here</a>.
The key is also available on several keyservers, however
<a href="https://keyserver.ubuntu.com/pks/lookup?search=0FA334385D0B689F&fingerprint=on&op=index" target="_blank" rel="noopener noreferrer">Ubuntu's keyserver</a>
is the most reliable and kept up-to-date. Although, WKD should be preferred where possible.
</p>
</div>
<div>
<h3>A: SSH</h3>
<p>Can be imported from <a href="assets/ssh-2024-05-13.txt" download>this text file</a>, however be aware I do not sign anything with my SSH key, only my PGP key.</p>
<p>Feel free to give me SSH access to your servers though :^)</p>
</div>
</div>
<div class="question">
<h2 id="what-are-your-pc-specs">Q: What are your PC specs/how much did your PC cost?</h2>
<p>
A: You can find all the details on <a href="https://uk.pcpartpicker.com/b/Hfz7YJ" rel="noopener" target="_blank">PcPartPicker</a>.
It cost me around £650 to build in December, 2023.
</p>
</div>
<div class="question">
<h2 id="can-you-hack">Q: Can you hack my friend's instagram?</h2>
<p>A: <strong><em>No.</em></strong></p>
<h2 id="fix-printer">Q: Can you fix my printer?</h2>
<p>
A: Yep!
<ol>
<li>Kick the printer.</li>
<li>Kick it harder.</li>
<li>Unplug it (bare with me)</li>
<li>Bring your printer to the nearest window</li>
<li>Open the window</li>
<li>Throw the printer out the window</li>
<li>Ask someone else to print it for you (its their problem then)</li>
</ol>
</p>
</div>
<div class="question">
<h2 id="what-music-do-you-listen-to">Q: What music do you listen to?</h2>
<p>A: Here's my main playlists. TL;DR, I listen to a lot of pop and rock, with a sprinkle of electronic</p>
<p>My favourite artists aren't really a thing, I prefer music over artists and albums, but I consistently listen to K.Flay, Grandson, Mother Mother, Super Whatevr, Cavetown, The Front Bottoms, Hospital Bracelet, and Crawlers.</p>
<iframe style="border-radius:12px" src="https://open.spotify.com/embed/playlist/26wJTA2mXk3QNXhqBI95kM?utm_source=generator&theme=0" width="100%" height="352" frameBorder="0" allowfullscreen="" allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy"></iframe>
<iframe style="border-radius:12px" src="https://open.spotify.com/embed/playlist/07GvdPCtDvWO2UFawBDlSA?utm_source=generator&theme=0" width="100%" height="152" frameBorder="0" allowfullscreen="" allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy"></iframe>
<iframe style="border-radius:12px" src="https://open.spotify.com/embed/playlist/1mTh1hj7rmzCYknLWfru4C?utm_source=generator&theme=0" width="100%" height="152" frameBorder="0" allowfullscreen="" allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy"></iframe>
<p>I am one of those people that will listen to any music genre, and I actually mean it. Just remember though "will listen" doesn't mean "will like".</p>
</div>
<div class="question">
<h2 id="urandom-or-random">Q: Urandom or Random?</h2>
<p>A: Urandom</p>
</div>
</div>
<script>
document.addEventListener(
"DOMContentLoaded",
() => {
const questions = document.querySelectorAll(".question h2");
for (let question of questions) {
const id = question.id;
const a = document.createElement("a");
a.href = `#${id}`;
a.textContent = "🔗";
a.title = "Link to this question";
a.style.textDecoration = "none";
a.style.fontSize = "smaller";
a.style.color = "black";
a.style.marginLeft = "0.5em";
question.appendChild(a);
// copy URL to clipboard
a.addEventListener(
"click",
() => {
navigator.clipboard.writeText(location.href + "#" + id);
a.textContent = "✅";
setTimeout(() => {
a.textContent = "🔗";
}, 1000);
}
)
// add to table of contents
const toc = document.getElementById("toc");
toc.hidden = false;
const tocLi = document.getElementById("toc-li");
const li = document.createElement("li");
const a2 = document.createElement("a");
a2.href = `#${id}`;
a2.textContent = question.textContent.replace(/^Q: /, "").replace("🔗", "");
li.appendChild(a2);
tocLi.appendChild(li);
}
}
)
</script>
</main>
<link rel="stylesheet" href="lazy-fonts.css">
</div>
</body>
</html>

254
ssg/src/oldindex.html Normal file
View file

@ -0,0 +1,254 @@
<!DOCTYPE html>
<html lang="en" style="background-color: black;">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>nexy7574.co.uk</title>
<link rel="stylesheet" href="bundle.css">
</head>
<body>
<div id="email-modal" style="z-index: 100;width:100%;height: 100%;padding:200px auto;background-color: rgba(0, 0, 0, 0.5);position:absolute" hidden>
<p>If you're going to email me, please use PGP encryption. My key is available via WKD, or <a href="faq.html">the FAQ</a></p>
<img src="img/email.png" width="1366px" height="768px" alt="oh"/>
</div>
<div class="mainBody">
<main>
<h1>Hello There!</h1>
<p><span id="__age">17</span> | she/it | "full"-stack</p>
<h2>Quick - about me</h2>
<div>
<p>You can hover over icons to get a tooltip, and some you can click to go places.</p>
<div id="array">
<div>
<h3>Languages</h3>
<div>
<img src="img/python-color.svg" alt="Python" title="Python" width="32px" height="32px" class="icon">
<img src="img/javascript-color.svg" alt="JavaScript" title="JavaScript" width="32px" height="32px" class="icon">
<img src="img/gnubash-color.svg" alt="Bash" title="Bash" width="32px" height="32px" class="icon">
</div>
</div>
<div>
<h3>Operating Systems</h3>
<div>
<img src="img/fedora-color.svg" alt="Fedora" title="Fedora" width="32px" height="32px" class="icon">
<img src="img/ubuntu-color.svg" alt="Ubuntu" title="Ubuntu (Server)" width="32px" height="32px" class="icon">
<img src="img/windows-color.svg" alt="Windows" title="Windows" width="32px" height="32px" class="icon">
<img src="img/apple-color.svg" alt="iOS" title="iOS" width="32px" height="32px" class="icon">
</div>
</div>
<div>
<h3>Communication Platforms</h3>
<p style="font-size: initial">In order of fastest to slowest</p>
<div>
<a href="https://matrix.to/#/@nex:nexy7574.co.uk" rel="noopener noreferrer" target="_blank" class="icon">
<img src="img/matrix-color.svg" alt="Matrix" title="Matrix" width="32px" height="32px" class="icon">
</a>
<a href="https://signal.me/#eu/j24vT8zDzquI0us48k7eiNJcpJjEw4TYUz1gtvo_0HtEfq4C2MZG1YFs5POF98Sb" rel="noopener" target="_blank" class="icon">
<img src="img/signal-color.svg" alt="Signal" title="Signal" width="32px" height="32px" class="icon">
</a>
<img src="img/imessage-color.svg" alt="iMessage" title="iMessage" width="32px" height="32px" class="icon">
<a href="https://discord.gg/TveBeG7" rel="noopener" target="_blank" class="icon">
<img src="img/discord-color.svg" alt="Discord" title="Discord" width="32px" height="32px" class="icon">
</a>
<a rel="noopener" target="_blank" class="icon">
<img src="img/gmail-color.svg" alt="Email" title="Email (very slow)" width="32px" height="32px" class="icon">
</a>
</div>
</div>
<div>
<h3>Learning</h3>
<div>
<img src="img/csharp-color.svg" alt="C#" title="C#" width="32px" height="32px" class="icon"/>
<img src="img/go-color.svg" alt="Go" title="Go" width="32px" height="32px" class="icon"/>
</div>
</div>
<div>
<h3>Tools</h3>
<div>
<img src="img/docker-color.svg" alt="Docker" title="Docker" width="32px" height="32px" class="icon"/>
<img src="img/git-color.svg" alt="Git" title="Git" width="32px" height="32px" class="icon"/>
<img src="img/github.svg" alt="GitHub" title="GitHub" width="32px" height="32px" class="icon"/>
<img src="img/linode.svg" alt="Linode" title="Linode (cloud hosting)" width="32px" height="32px" class="icon"/>
<img src="img/postgresql-color.svg" alt="Postgres" title="Postgres" width="32px" height="32px" class="icon"/>
<img src="img/ollama.svg" alt="Ollama" title="Ollama (web hosting)" width="32px" height="32px" class="icon"/>
<img src="img/openai-color.svg" alt="OpenAI/ChatGPT" title="OpenAI/ChatGPT" width="32px" height="32px" class="icon"/>
</div>
</div>
<div>
<h3>Frameworks & Libraries</h3>
<div>
<img src="img/nextdotjs.svg" alt="Next.js" title="Next.js" width="32px" height="32px" class="icon"/>
<img src="img/fastapi-color.svg" alt="FastAPI" title="FastAPI" width="32px" height="32px" class="icon"/>
<img src="img/discordpy.png" alt="Discord.py" title="Discord.py" width="32px" height="32px" class="icon"/>
<img src="img/pycord.png" alt="py-cord" title="py-cord" width="32px" height="32px" class="icon"/>
</div>
</div>
</div>
<h3>Notable Projects</h3>
<div>
<table>
<thead>
<tr>
<th>Name</th>
<th>Brief</th>
<th>Source</th>
<th>Live</th>
</tr>
</thead>
<tbody>
<tr>
<td>Nio-Bot</td>
<td>A bot framework for the matrix ecosystem</td>
<td>
<a href="https://github.com/nexy7574/nio-bot" rel="noopener" target="_blank" class="icon">
<img src="img/github.svg" alt="GitHub" title="GitHub" width="32px" height="32px" class="icon">
</a>
</td>
<td>
<a href="https://matrix.to/#/#bots:nexy7574.co.uk" rel="opopener" target="_blank" class="icon">
<img src="img/matrix-color.svg" alt="Matrix" title="Matrix" width="32px" height="32px" class="icon">
</a>
</td>
</tr>
<tr>
<td>dendritecli</td>
<td>A command line interface for interacting with the Dendrite homeserver.</td>
<td>
<a href="https://github.com/nexy7574/dendritecli" rel="noopener" target="_blank" class="icon">
<img src="img/github.svg" alt="GitHub" title="GitHub" width="32px" height="32px" class="icon">
</a>
</td>
<td></td>
</tr>
<tr>
<td>ModMan</td>
<td>A CLI mod manager for minecraft servers.</td>
<td>
<a href="https://github.com/nexy7574/modman" rel="noopener" target="_blank" class="icon">
<img src="img/github.svg" alt="GitHub" title="GitHub" width="32px" height="32px" class="icon">
</a>
</td>
<td></td>
</tr>
<tr>
<td>College Bot v2</td>
<td>Specialised chat bot in discord for my college server.</td>
<td>
<a href="https://git.i-am.nexus/nex/college-bot-v2" rel="noopener" target="_blank" class="icon">
<img src="img/forgejo-color.svg" alt="Forgejo" title="Forgejo" width="32px" height="32px" class="icon">
</a>
[<a href="https://github.com/nexy7574/college-bot-v2" rel="noopener" target="_blank" class="icon">
<img src="img/github.svg" alt="GitHub" title="GitHub" width="32px" height="32px" class="icon">
</a>]
</td>
<td></td>
</tr>
<tr>
<td>drop-in-url-previews</td>
<td>A drop-in proxy URL preview server for Matrix</td>
<td>
<a href="https://git.i-am.nexus/nex/drop-in-url-previews" rel="noopener" target="_blank" class="icon">
<img src="img/forgejo-color.svg" alt="Forgejo" title="Forgejo" width="32px" height="32px" class="icon">
</a>
</td>
<td>
<a href="https://matrix.nexy7574.co.uk/_matrix/media/r0/preview_url?url=nexy7574.co.uk" rel="noopener" target="_blank" class="icon">
<img src="img/matrix-color.svg" alt="Matrix" title="Matrix" width="32px" height="32px" class="icon">
</td>
</tr>
<tr>
<td>Spanner</td>
<td>A really informational discord bot</td>
<td>
<a href="https://github.com/nexy7574/spanner-v3" rel="noopener" target="_blank" class="icon">
v3
</a><br/>
<a href="https://github.com/nexy7574/spanner-v2" rel="noopener" target="_blank" class="icon">
v2
</a><br/>
<a href="https://github.com/nexy7574/spanner-bot" rel="noopener" target="_blank" class="icon">
v1
</a>
</td>
<td>
<a href="https://discord.com/api/oauth2/authorize?client_id=722000000000000000&permissions=8&scope=bot" rel="noopener" target="_blank" class="icon">
<img src="img/discord-color.svg" alt="Discord" title="Discord" width="32px" height="32px" class="icon">
</a>
</td>
</tr>
<tr>
<td>YourApps</td>
<td>A discord bot that trailblazed the discord forms market with, at its peak, 2.5k servers, and over 5 million users.</td>
<td><i>proprietary</i></td>
<td>
<a href="https://top.gg/bot/619328560141697036" rel="noopener noreferrer" target="_blank" class="icon">
<img src="img/topdotgg.svg" alt="top.gg" title="top.gg" width="32px" height="32px" class="icon">
</a>
</td>
</tr>
<tr>
<td>Top.py</td>
<td>
An alternative python API wrapper for the
<a href="https://top.gg" rel="noopener noreferrer" target="_blank">top.gg</a>
API
</td>
<td>
<a href="https://github.com/nexy7574/top.py" rel="noopener" target="_blank" class="icon">
<img src="img/github.svg" alt="GitHub" title="GitHub" width="32px" height="32px" class="icon">
</a>
</td>
<td></td>
</tr>
</tbody>
</table>
</div>
<h4>Notable Contributions</h4>
<p>These are projects I have contributed to, but not necessarily created or had a major role in.</p>
<p>Projects listed here had code contributions - other contributions, such as issues or design insights, are not included.</p>
<div>
<table>
<thead>
<tr>
<th>Name</th>
<th>Brief</th>
<th>Source</th>
</tr>
</thead>
<tbody>
<tr>
<td>PyCord</td>
<td>"Pycord, a maintained fork of discord.py, is a python wrapper for the Discord API"</td>
<td>
<a href="https://github.com/Pycord-Development/pycord" rel="noopener" target="_blank" class="icon">
<img src="img/github.svg" alt="GitHub" title="GitHub" width="32px" height="32px" class="icon">
</a>
</td>
</tr>
<tr>
<td>matrix-nio</td>
<td>"A Python Matrix client library, designed according to sans I/O principles"</td>
<td>
<a href="https://github.com/matrix-nio/matrix-nio" rel="noopener" target="_blank" class="icon">
<img src="img/github.svg" alt="GitHub" title="GitHub" width="32px" height="32px" class="icon">
</a>
</td>
</tr>
<tr>
<td>discord.py</td>
<td>"An API wrapper for Discord written in Python"</td>
<td>
<a href="https://github.com/Rapptz/discord.py" rel="noopener" target="_blank" class="icon">
<img src="img/github.svg" alt="GitHub" title="GitHub" width="32px" height="32px" class="icon">
</a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</main>
</div>
</body>
</html>