Loads of stuff

This commit is contained in:
Dan 2026-01-07 14:32:06 +00:00
parent fd015bd52c
commit a3b9bd2680
15 changed files with 2310 additions and 208 deletions

View file

@ -23,36 +23,7 @@
<div class="blog-summary">{{ .Content }}</div>
</article>
<section class="blog-contact-section">
<h2 class="contact-title">Contact</h2>
<div class="contact-content">
<p>
If you found this interesting, have any comments, questions,
corrections, or just fancy saying "hello" please feel free to get
in touch.
</p>
<div class="contact-email">
<span class="contact-label">Email:</span>
<a href="mailto:dan@ritual.sh">dan@ritual.sh</a>
</div>
<div class="contact-pgp">
<span class="contact-label">PGP Public Key:</span>
<div class="pgp-actions">
<a
href="/publickey.asc"
download
class="pgp-button download-key"
>
<span class="button-icon"></span> Download
</a>
<button id="copy-pgp-key" class="pgp-button copy-key">
<span class="button-icon"></span> Copy to Clipboard
</button>
</div>
<div id="copy-feedback" class="copy-feedback"></div>
</div>
</div>
</section>
{{ partial "contact-section.html" . }}
<nav class="blog-post-navigation">
<div class="post-nav-links">
@ -80,36 +51,4 @@
<script src="/js/footnote-scroll.js"></script>
<script>
document.addEventListener("DOMContentLoaded", function () {
const copyButton = document.getElementById("copy-pgp-key");
const feedback = document.getElementById("copy-feedback");
if (copyButton) {
copyButton.addEventListener("click", async function () {
try {
const response = await fetch("/publickey.asc");
const pgpKey = await response.text();
await navigator.clipboard.writeText(pgpKey);
feedback.textContent = "PGP key copied to clipboard!";
feedback.classList.add("show", "success");
setTimeout(() => {
feedback.classList.remove("show");
}, 3000);
} catch (err) {
feedback.textContent = "Failed to copy key";
feedback.classList.add("show", "error");
setTimeout(() => {
feedback.classList.remove("show");
}, 3000);
}
});
}
});
</script>
{{ end }}

View file

@ -0,0 +1,30 @@
<section class="contact-section">
<h2 class="contact-title">Contact</h2>
<div class="contact-content">
<p>
If you found this interesting, have any comments, questions,
corrections, or just fancy saying "hello" please feel free to get
in touch.
</p>
<div class="contact-email">
<span class="contact-label">Email:</span>
<a href="mailto:dan@ritual.sh">dan@ritual.sh</a>
</div>
<div class="contact-pgp">
<span class="contact-label">PGP Public Key:</span>
<div class="pgp-actions">
<a
href="/publickey.asc"
download
class="pgp-button download-key"
>
<span class="button-icon"></span> Download
</a>
<button class="pgp-button copy-key pgp-copy-trigger">
<span class="button-icon"></span> Copy to Clipboard
</button>
</div>
<div class="copy-feedback pgp-copy-feedback"></div>
</div>
</div>
</section>

View file

@ -1,6 +1,17 @@
{{ define "main" }}
<div class="resources-page">
<div class="resources-page portal-theme">
<div class="portal-bg-elements">
<div class="aperture-logo"></div>
<div class="test-chamber-grid"></div>
</div>
<div class="resources-container">
<div class="portal-header">
<div class="portal-icon blue-portal hidden-lg-down"></div>
<h1 class="portal-title">Resources</h1>
<div class="portal-icon orange-portal hidden-md-down"></div>
</div>
<div class="whiteboard">
<div class="whiteboard-header">
<div class="whiteboard-description">{{ .Content }}</div>
@ -10,6 +21,8 @@
{{ range .Pages }} {{ .Render "summary" }} {{ end }}
</div>
</div>
<div class="companion-cube"></div>
</div>
</div>
{{ end }}

View file

@ -1,8 +1,16 @@
{{ define "main" }}
<div class="resource-single">
<div class="test-chamber-grid">
</div>
<article class="resource-content">
<!-- Aperture Science hazard stripes in corners -->
<!-- Animated energy particles -->
<div class="energy-particles"></div>
<header class="resource-header">
<div class="resource-icon-large {{ .Params.icon }}"></div>
<h1>{{ .Title }}</h1>
{{ if .Params.description }}
<p class="lead">{{ .Params.description }}</p>
@ -28,6 +36,8 @@
{{ .Content }}
</div>
{{ partial "contact-section.html" . }}
<nav class="resource-navigation">
{{ with .PrevInSection }}
<a href="{{ .Permalink }}" class="nav-link prev">← {{ .Title }}</a>

View file

@ -0,0 +1,51 @@
<div id="lastfm-stats-app">
<div class="stats-form">
<div class="form-group">
<label for="lastfm-username">Last.fm Username</label>
<input
type="text"
id="lastfm-username"
placeholder="Enter your username"
/>
</div>
<div class="form-group">
<label for="time-period">Time Period</label>
<select id="time-period">
<option value="7day">Past Week (7 days)</option>
<option value="1month">Past Month (30 days)</option>
</select>
</div>
<button id="fetch-stats" class="btn-primary">Get Stats</button>
</div>
<div id="stats-results" class="stats-results" style="display: none">
<div id="stats-loading" class="loading" style="display: none">
<p>Loading your stats...</p>
</div>
<div id="stats-content" style="display: none">
<h2>Your Last.fm Stats</h2>
<div class="stat-box">
<h3>Total Tracks</h3>
<p id="total-tracks" class="stat-number">-</p>
</div>
<div class="stat-box">
<h3>Top 5 Artists</h3>
<ul id="top-artists" class="artist-list"></ul>
</div>
</div>
<div id="export-buttons" class="export-buttons" style="display: none">
<button id="copy-markdown" class="btn-export">Copy as Markdown</button>
<button id="copy-plaintext" class="btn-export">Copy as Plain Text</button>
</div>
<div id="stats-error" class="error" style="display: none">
<p id="error-message"></p>
</div>
</div>
</div>