feat: add donation page
Code Analysis / SonarQube (push) Failing after 15s

This commit is contained in:
2025-09-23 13:15:32 -07:00
parent 2d6b59dc21
commit be19ed3329
2 changed files with 236 additions and 0 deletions
Executable
+91
View File
@@ -0,0 +1,91 @@
#!/bin/bash
set -euo pipefail
IFS=$'\n\t'
cd "$(dirname "$0")"
DONATE_JSON_URL="https://data.nhcarrigan.com/donate.json"
DONATE_JSON_FILE="donate.json"
DONATE_HTML_FILE="donate/index.html"
# Templating
HTML_START='<!DOCTYPE html>
<html lang="en">
<head>
<title>Donate</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta
name="description"
content="Support our work and help us make a difference!"
/>
<script
src="https://cdn.nhcarrigan.com/headers/index.js"
async
defer
></script>
<style>
.badge {
width: 80%;
margin: auto;
border-radius: 5550px;
padding: 10px;
}
.url {
display: grid;
grid-template-columns: 100px auto;
align-items: center;
color: unset;
text-decoration: none;
}
.icon {
height: 100px;
}
.name {
font-size: 1.2rem;
}
.text {
text-align: center;
}
</style>
</head>
<body>
<main>
<h1>Donate</h1>
<p>Support our work and help us make a difference!</p>
<section>
'
HTML_END=' </section>
</main>
</body>
</html>
'
# Fetch the latest donate.json
curl -sSL "$DONATE_JSON_URL" -o "$DONATE_JSON_FILE"
# Convert JSON to HTML, sorted by date descending (newest first)
DONATE_HTML=$(jq -r '.[] |
"<div class=\"badge\" style=\"color: " + .foreground + "; background: " + .background + "\">
<a href=\"" + .url + "\" class=\"url\">
<i class=\"" + .icon + "\"></i>
<div class=\"text\">
<p class=\"name\">" + .name + "</p>
<p class=\"description\">" + .description + "</p>
</div>
</a>
</div>"
' "$DONATE_JSON_FILE")
# Create temporary file with the HTML content
echo "$HTML_START" > "$DONATE_HTML_FILE"
echo "$DONATE_HTML" >> "$DONATE_HTML_FILE"
echo "$HTML_END" >> "$DONATE_HTML_FILE"
echo "Donate updated in $DONATE_HTML_FILE"
# Clean up
rm "$DONATE_JSON_FILE"
+145
View File
@@ -0,0 +1,145 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Donate</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta
name="description"
content="Support our work and help us make a difference!"
/>
<script
src="https://cdn.nhcarrigan.com/headers/index.js"
async
defer
></script>
<style>
.badge {
width: 80%;
margin: auto;
border-radius: 5550px;
padding: 10px;
}
.url {
display: grid;
grid-template-columns: 100px auto;
align-items: center;
color: unset;
text-decoration: none;
}
.icon {
height: 100px;
}
.name {
font-size: 1.2rem;
}
.text {
text-align: center;
}
</style>
</head>
<body>
<main>
<h1>Donate</h1>
<p>Support our work and help us make a difference!</p>
<section>
<div class="badge" style="color: #000000; background: #F5F5F5">
<a href="https://opencollective.com/nhcarrigan" class="url">
<i class="fas fa-heart"></i>
<div class="text">
<p class="name">OpenCollective</p>
<p class="description">Our main financial ledger, all income and expenses are tracked here.</p>
</div>
</a>
</div>
<div class="badge" style="color: #ffffff; background: #5865F2">
<a href="https://chat.nhcarrigan.com" class="url">
<i class="fab fa-discord"></i>
<div class="text">
<p class="name">Discord</p>
<p class="description">Our community hub for discussion and collaboration.</p>
</div>
</a>
</div>
<div class="badge" style="color: #ffffff; background: #F96854">
<a href="https://patreon.com/nhcarrigan" class="url">
<i class="fab fa-patreon"></i>
<div class="text">
<p class="name">Patreon</p>
<p class="description">Support us through monthly memberships.</p>
</div>
</a>
</div>
<div class="badge" style="color: #ffffff; background: #29ABE0">
<a href="https://ko-fi.com/nhcarrigan" class="url">
<i class="fas fa-coffee"></i>
<div class="text">
<p class="name">Ko-Fi</p>
<p class="description">Buy us a coffee or make donations.</p>
</div>
</a>
</div>
<div class="badge" style="color: #ffffff; background: #000000">
<a href="https://throne.com/naomilgbt" class="url">
<i class="fas fa-gift"></i>
<div class="text">
<p class="name">Throne</p>
<p class="description">Suggest and purchase gifts for us.</p>
</div>
</a>
</div>
<div class="badge" style="color: #ffffff; background: #9146FF">
<a href="https://twitch.tv/naomilgbt" class="url">
<i class="fab fa-twitch"></i>
<div class="text">
<p class="name">Twitch</p>
<p class="description">Subscribe to our streams.</p>
</div>
</a>
</div>
<div class="badge" style="color: #003087; background: #009CDE">
<a href="https://paypal.me/nhcarrigan" class="url">
<i class="fab fa-paypal"></i>
<div class="text">
<p class="name">PayPal</p>
<p class="description">Send direct donations.</p>
</div>
</a>
</div>
<div class="badge" style="color: #000000; background: #00C244">
<a href="https://cash.app/$nhcarrigan" class="url">
<i class="fas fa-dollar-sign"></i>
<div class="text">
<p class="name">CashApp</p>
<p class="description">Send direct donations.</p>
</div>
</a>
</div>
<div class="badge" style="color: #ffffff; background: #171515">
<a href="https://github.com/sponsors/nhcarrigan" class="url">
<i class="fab fa-github"></i>
<div class="text">
<p class="name">GitHub Sponsors</p>
<p class="description">Sponsor us directly through GitHub.</p>
</div>
</a>
</div>
<div class="badge" style="color: #ffffff; background: #635BFF">
<a href="https://buy.stripe.com/cN24iTfqu1j6b3afZ2" class="url">
<i class="fab fa-stripe"></i>
<div class="text">
<p class="name">Stripe</p>
<p class="description">Make monthly donations directly through Stripe.</p>
</div>
</a>
</div>
</section>
</main>
</body>
</html>