Compare commits

...

24 Commits

Author SHA1 Message Date
3576418ba9 updates 2025-11-25 20:39:37 -05:00
Logen
2dd172a0c1 checklinks update 2025-11-25 10:43:37 -05:00
ae81a6bd7f Nostr-chat-widget shrinkify 2025-11-24 15:47:41 -05:00
8414e1013d updates 2025-11-21 16:44:51 -05:00
c4914a5ae9 gitea fetch commit 2025-11-21 10:45:12 -05:00
70c85bad7e gitea script footer 2025-11-21 10:42:18 -05:00
6176fe8eac text 2025-11-21 09:07:04 -05:00
6ffd877f9b fix 2025-11-21 09:05:19 -05:00
87ecb447db coracle 2025-11-21 09:04:16 -05:00
0969fef3a9 remove nosotros 2025-11-19 21:15:17 -05:00
7a32ae3900 flotilla community updates 2025-11-19 20:48:31 -05:00
200d6a6d7f nostr-tools 2025-11-19 19:34:14 -05:00
ce4f00dc58 footer 2025-11-19 16:20:23 -05:00
5a56ab5aa0 fevela homepage update 2025-11-19 13:34:55 -05:00
Logen
2c81078e77 docker 2025-10-28 09:19:25 -04:00
Logen
0714fcfb7a nip49-decrypt - Checklinks - icons 2025-10-21 15:43:29 -04:00
Logen
56bc8e2b92 nip49-decrypt - Checklinks - icons 2025-10-21 15:43:23 -04:00
640be15ac0 swapout 2025-10-10 08:23:56 -04:00
3fc9ed9c37 WIP 2025-10-10 05:32:26 -04:00
597d2f7a2c inject fix 2025-10-09 22:47:36 -04:00
4aa2c76e77 , 2025-10-09 22:22:10 -04:00
cd9dd6805f chat everywhere 2025-10-09 22:12:51 -04:00
36f1a0d86d chat widget cleanup 2025-10-09 22:06:29 -04:00
7a165d2cf4 minify 2025-10-09 18:31:40 -04:00
27 changed files with 8502 additions and 832 deletions

BIN
.DS_Store vendored

Binary file not shown.

3
.gitignore vendored
View File

@@ -4,3 +4,6 @@ BTCforPlebs Website Videos/*
node_modules/*
package-lock.json
public/assets/data/link-status.json
public/local.html
public/nostr-chat-widget-mini.js
public/nostr-chat-widget-mini.js

18
Dockerfile Normal file
View File

@@ -0,0 +1,18 @@
# Use an official lightweight Node image
FROM node:20-alpine
# Set the working directory inside the container
WORKDIR /app
# Copy package files and install dependencies
COPY package*.json ./
RUN npm install
# Copy the rest of the project files
COPY . .
# Expose the port your app uses
EXPOSE 9000
# Default command to start your site
CMD ["npm", "run", "both"]

View File

@@ -11,13 +11,17 @@ const links = [
"https://mempool.btcforplebs.com",
"https://lightning.btcforplebs.com",
"https://nostrudel.btcforplebs.com",
"https://nosotros.btcforplebs.com",
"https://mint.btcforplebs.com",
"https://cashu.btcforplebs.com",
"https://fevela.btcforplebs.com",
"https://nosotros.btcforplebs.com",
"https://coracle.btcforplebs.com",
"https://shipyard.btcforplebs.com",
"https://live.btcforplebs.com",
"https://explorer.btcforplebs.com",
"https://nsec.btcforplebs.com",
"https://flotilla.btcforplebs.com"
"https://ncryptdesec.btcforplebs.com",
"https://community.btcforplebs.com",
"https://nutstash.btcforplebs.com",
"https://jumble.btcforplebs.com"
];
@@ -25,9 +29,9 @@ const links = [
app.use((req, res, next) => {
const origin = req.headers.origin || 'unknown';
console.log(`Request: ${req.method} ${req.url} | Origin: ${origin}`);
res.header("Access-Control-Allow-Headers", "Content-Type");
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Methods", "GET, OPTIONS");
res.header("Access-Control-Allow-Headers", "Content-Type");
if (req.method === 'OPTIONS') {
return res.sendStatus(200);
@@ -39,8 +43,17 @@ app.get("/", (req, res) => {
res.json({ status: "Local link status server running" });
});
const cache = { data: null, timestamp: 0 };
app.get("/api/link-status", async (req, res) => {
console.log("🔄 Checking link statuses...");
const now = Date.now();
const tenMinutes = 10 * 60 * 1000;
if (cache.data && (now - cache.timestamp < tenMinutes)) {
console.log("🔁 Serving from cache");
return res.json(cache.data);
}
console.log("🔄 Checking link status and refreshing cache...");
const results = {};
const agent = new https.Agent({ rejectUnauthorized: false });
@@ -84,6 +97,10 @@ app.get("/api/link-status", async (req, res) => {
}
}
// Update cache
cache.data = results;
cache.timestamp = now;
res.json(results);
});

11
docker-compose.yml Normal file
View File

@@ -0,0 +1,11 @@
version: "3.8"
services:
web:
build: .
ports:
- "9000:9000"
volumes:
- .:/app
restart: always
command: npm run both

View File

@@ -611,3 +611,68 @@ footer {
opacity: 0.5;
}
}
/* Navbar Styles */
.navbar {
background: linear-gradient(to bottom, var(--button-bg-top), var(--button-bg-bottom));
border-bottom: 1px solid var(--button-border);
padding: 10px 20px;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
margin-bottom: 20px;
}
.navbar-container {
display: flex;
justify-content: space-between;
align-items: center;
max-width: 1200px;
margin: 0 auto;
}
.navbar-logo {
display: flex;
align-items: center;
text-decoration: none;
color: var(--text-color);
font-weight: bold;
font-size: 1.2rem;
}
.navbar-logo img {
height: 40px;
margin-right: 10px;
border-radius: 6px;
}
.navbar-menu {
display: flex;
gap: 20px;
}
.navbar-item {
text-decoration: none;
color: var(--text-color);
font-weight: 500;
padding: 8px 12px;
border-radius: 6px;
transition: background-color 0.2s, color 0.2s;
}
.navbar-item:hover {
background-color: rgba(0, 0, 0, 0.05);
color: #F7931A; /* Bitcoin Orange */
}
/* Mobile Navbar */
@media (max-width: 768px) {
.navbar-container {
flex-direction: column;
gap: 10px;
}
.navbar-menu {
flex-wrap: wrap;
justify-content: center;
gap: 10px;
}
}

View File

@@ -24,11 +24,11 @@ document.addEventListener('DOMContentLoaded', () => {
folder.style.display = 'block';
button.classList.add('active');
}
}
}
// Footer Loader and Event Listeners
// Footer Loader and Event Listeners
fetch('/parts/footer.html')
.then(response => response.text())
.then(data => {
@@ -62,25 +62,4 @@ document.addEventListener('DOMContentLoaded', () => {
}
})
.catch(error => console.error('Error loading footer:', error));
// --- 5. Fetch and Display Last Update from GitHub -----------------------
fetch('https://api.github.com/repos/btcforplebs/BTCforPlebs.com/commits/main')
.then(response => response.json())
.then(data => {
const lastUpdate = new Date(data.commit.author.date);
const formattedDate = lastUpdate.toLocaleDateString();
const formattedTime = lastUpdate.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });
const updateText = document.getElementById('last-updated-text');
if (updateText) {
updateText.textContent = `Website last updated: ${formattedDate} ${formattedTime}`;
}
})
.catch(error => {
console.error('Error fetching last update:', error);
const updateText = document.getElementById('last-updated-text');
if (updateText) {
updateText.textContent = 'Last update: Error fetching data.';
}
});
});
});

View File

@@ -108,7 +108,14 @@
<p>Week6 wraps up the series with a practical, faithfirst guide to the next steps in a Bitcoin journey. Logan reviews the final podcast episodes, outlines how to move from “just learning” to owning, securing, and sharing Bitcoin, and reminds listeners that the true goal is to place Christ first, practice generosity, and build a financial legacy that glorifies God. The session ends with a heartfelt prayer and an invitation for anyone to step into the gospel—one small step at a time.</p>
</section>
<footer id="footer"></footer>
<footer id="footer"></footer>
<script src="/nostr-chat-widget.js"
data-nostr-pubkey="75462f4dece4fbde54a535cfa09eb0d329bda090a9c2f9ed6b5f9d1d2fb6c15b"
data-brand-name="Chat with BTCforPlebs"
data-color="#fdad01"
data-color-secondary="#222222">
</script>
<div id="back-to-top"><a href="#top" title="Back to Top">🔝</a></div>
</body>
</html>

2237
public/dashboard/dev.html Normal file

File diff suppressed because it is too large Load Diff

BIN
public/dashboard/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 269 KiB

2650
public/dashboard/index.html Normal file

File diff suppressed because it is too large Load Diff

43
public/dashboard/sw.js Normal file
View File

@@ -0,0 +1,43 @@
// sw.js - Save this file in the same directory as your HTML
const CACHE_NAME = 'nostr-dm-v1';
const urlsToCache = [
'/',
'/index.html'
];
self.addEventListener('install', event => {
event.waitUntil(
caches.open(CACHE_NAME)
.then(cache => cache.addAll(urlsToCache))
);
});
self.addEventListener('fetch', event => {
event.respondWith(
caches.match(event.request)
.then(response => response || fetch(event.request))
);
});
self.addEventListener('notificationclick', event => {
event.notification.close();
event.waitUntil(
clients.openWindow('/')
);
});
self.addEventListener('push', event => {
const data = event.data ? event.data.json() : {};
const title = data.title || 'New Nostr DM';
const options = {
body: data.body || 'You have a new message',
icon: 'data:image/svg+xml,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' width=\'192\' height=\'192\' viewBox=\'0 0 192 192\'%3E%3Crect width=\'192\' height=\'192\' fill=\'%23fdad01\' rx=\'24\'/%3E%3Ctext x=\'50%25\' y=\'50%25\' font-size=\'90\' fill=\'%23000\' text-anchor=\'middle\' dominant-baseline=\'middle\'%3E📬%3C/text%3E%3C/svg%3E',
badge: 'data:image/svg+xml,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' width=\'96\' height=\'96\' viewBox=\'0 0 96 96\'%3E%3Ccircle cx=\'48\' cy=\'48\' r=\'48\' fill=\'%23fdad01\'/%3E%3Ctext x=\'50%25\' y=\'50%25\' font-size=\'50\' text-anchor=\'middle\' dominant-baseline=\'middle\'%3E📬%3C/text%3E%3C/svg%3E',
vibrate: [200, 100, 200],
tag: 'nostr-dm'
};
event.waitUntil(
self.registration.showNotification(title, options)
);
});

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

View File

@@ -1,143 +1,178 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>BTCforPlebs</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>BTCforPlebs</title>
<!-- Meta Description -->
<meta name="description" content="BTCforPlebs is a resource to help ordinary people learn about Bitcoin. Explore guides, tools, and resources to start your Bitcoin journey.">
<!-- Meta Description -->
<meta name="description"
content="BTCforPlebs is a resource to help ordinary people learn about Bitcoin. Explore guides, tools, and resources to start your Bitcoin journey.">
<!-- Open Graph Meta Tags -->
<meta property="og:title" content="BTCforPlebs">
<meta property="og:description" content="A place to help ordinary people learn about Bitcoin">
<meta property="og:image" content="/images/thumb.jpeg">
<meta property="og:url" content="https://btcforplebs.com">
<meta name="twitter:card" content="summary_large_image">
<!-- Open Graph Meta Tags -->
<meta property="og:title" content="BTCforPlebs">
<meta property="og:description" content="A place to help ordinary people learn about Bitcoin">
<meta property="og:image" content="images/thumb.jpeg">
<meta property="og:url" content="https://btcforplebs.com">
<meta name="twitter:card" content="summary_large_image">
<!-- favicon -->
<link rel="icon" href="/images/favicon.png" type="image/png">
<!-- favicon -->
<link rel="icon" href="images/favicon.png" type="image/png">
<!-- scripts -->
<script src="/assets/js/scripts.js"></script>
<link rel="stylesheet" href="/assets/css/main.css">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.6.0/css/all.min.css" rel="stylesheet">
<!-- scripts -->
<script src="assets/js/scripts.js"></script>
<link rel="stylesheet" href="assets/css/main.css">
<link rel="apple-touch-icon" href="images/apple-touch-icon.png">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.6.0/css/all.min.css" rel="stylesheet">
</head>
<body>
<!-- Bitcoin Price Banner -->
<div class="container">
<body>
<!-- Bitcoin Price Banner -->
<div class="container">
<h1>Welcome to BTCforPlebs</h1>
<h3>A place to help ordinary people learn about Bitcoin</h3>
<img src="/images/btcforplebs_profile.gif" alt="Profile Picture" class="profile-picture">
<!-- Learn Links (unchanged) -->
<a href="/learn-bitcoin" class="button prefetch">Learn About Bitcoin</a>
<a href="/learn-nostr" class="button prefetch">Learn About Nostr</a>
<a href="/learn-cashu" class="button prefetch">Learn About Cashu</a>
<a href="/bitcoin-and-the-bible" class="button prefetch">Bitcoin & The Bible</a>
<!-- Learn Links (unchanged) -->
<a href="/learn-bitcoin" class="button prefetch">Learn About Bitcoin</a>
<a href="/learn-nostr" class="button prefetch">Learn About Nostr</a>
<a href="/learn-cashu" class="button prefetch">Learn About Cashu</a>
<a href="/bitcoin-and-the-bible" class="button prefetch">Bitcoin & The Bible</a>
<!-- Bitcoin Links -->
<button class="button" id="bitcoin-folder-btn" onclick="toggleFolder('folder2', 'bitcoin-folder-btn')">Use Bitcoin <span style="color: #F7931A;"></span></button>
<div class="links" id="folder2">
<a href="https://lightning.btcforplebs.com" target="_blank" class="prefetch">Lightning <span class="status-emoji" data-url="https://lightning.btcforplebs.com"></span></a>
<a href="https://mempool.btcforplebs.com" target="_blank" class="prefetch">Mempool <span class="status-emoji" data-url="https://mempool.btcforplebs.com"></span></a>
<a href="https://explorer.btcforplebs.com" target="_blank" class="prefetch">Explorer <span class="status-emoji" data-url="https://explorer.btcforplebs.com"></span></a>
<a href="https://bitview.space/" target="_blank" class="prefetch">Bitview.space ⚪️ </a>
</div>
<!-- Bitcoin Links -->
<button class="button" id="bitcoin-folder-btn" onclick="toggleFolder('folder2', 'bitcoin-folder-btn')">Use Bitcoin
<span style="color: #F7931A;"></span></button>
<div class="links" id="folder2">
<a href="https://lightning.btcforplebs.com" target="_blank" class="prefetch">Lightning <span class="status-emoji"
data-url="https://lightning.btcforplebs.com"></span></a>
<a href="https://mempool.btcforplebs.com" target="_blank" class="prefetch">Mempool <span class="status-emoji"
data-url="https://mempool.btcforplebs.com"></span></a>
<a href="https://bitfeed.live" class="prefetch">Bitfeed.Live ⚪️ </a>
<a href="https://hodl.camp" class="prefetch">Hodl.Camp ⚪️ </a>
<a href="https://bitview.space" class="prefetch">Bitview.Space ⚪️ </a>
</div>
<!-- Nostr Links -->
<button class="button" id="nostr-folder-btn" onclick="toggleFolder('folder1', 'nostr-folder-btn')">Use Nostr <span style="color: #F7931A;"></span></button>
<div class="links" id="folder1">
<a href="https://nsec.btcforplebs.com" target="_blank" class="prefetch">Nsec Bunker <span class="status-emoji" data-url="https://nsec.btcforplebs.com"></span></a>
<a href="https://nostrudel.btcforplebs.com" target="_blank" class="prefetch">Nostrudel <span class="status-emoji" data-url="https://nostrudel.btcforplebs.com"></span></a>
<a href="https://nosotros.btcforplebs.com" target="_blank" class="prefetch">Nosotros <span class="status-emoji" data-url="https://nosotros.btcforplebs.com"></span></a>
<a href="https://flotilla.btcforplebs.com" target="_blank" class="prefetch">Flotilla <span class="status-emoji" data-url="https://flotilla.btcforplebs.com"></span></a>
<a href="https://Jumble.btcforplebs.com" target="_blank" class="prefetch">Jumble <span class="status-emoji" data-url="https://jumble.btcforplebs.com"></span></a>
<a href="https://bloom.btcforplebs.com" target="_blank" class="prefetch">Bloom <span class="status-emoji" data-url="https://bloom.btcforplebs.com"></span></a>
<a href="/relay" target="_blank" class="prefetch">Relay <span class="status-emoji" data-url="https://relay.btcforplebs.com"></span></a>
<a href="https://nostrapps.com" target="_blank">NostrApps.com ⚪️ </a>
</div>
<!-- Nostr Links -->
<button class="button" id="nostr-folder-btn" onclick="toggleFolder('folder1', 'nostr-folder-btn')">Use Nostr <span
style="color: #F7931A;"></span></button>
<div class="links" id="folder1">
<!-- Cashu Links -->
<button class="button" id="cashu-folder-btn" onclick="toggleFolder('folder3', 'cashu-folder-btn')">Use Cashu <span style="color: #F7931A;"></span></button>
<div class="links" id="folder3">
<a href="https://cashu.btcforplebs.com" class="prefetch">Cashu Web App <span class="status-emoji" data-url="https://cashu.btcforplebs.com"></span></a>
<a href="/mint" class="prefetch">Cashu Mint <span class="status-emoji" data-url="https://mint.btcforplebs.com"></span></a>
<a href="https://macadamia.cash" class="prefetch">Macadamia (iOS) ⚪️ </a>
<a href="https://minibits.cash" class="prefetch">Minibits (Android) ⚪️ </a>
</div>
<a href="/relay" target="_blank" class="prefetch">Relay <span class="status-emoji"
data-url="https://relay.btcforplebs.com"></span></a>
Nostr Tools
<a href="https://nsec.btcforplebs.com" target="_blank" class="prefetch">Nsec Bunker <span class="status-emoji"
data-url="https://nsec.btcforplebs.com"></span></a>
<a href="https://ncryptdesec.btcforplebs.com" target="_blank" class="prefetch">NcryptDEsec <span
class="status-emoji" data-url="https://ncryptdesec.btcforplebs.com"></span></a>
<a href="https://live.btcforplebs.com" class="button" class="prefetch">BTCforPlebs Live <span class="status-emoji" data-url="https://live.btcforplebs.com"></span></a>
<br></br>
Nostr Clients
<a href="https://nostrudel.btcforplebs.com" target="_blank" class="prefetch">Nostrudel <span class="status-emoji"
data-url="https://nostrudel.btcforplebs.com"></span></a>
<a href="https://coracle.btcforplebs.com" target="_blank" class="prefetch">Coracle <span class="status-emoji"
data-url="https://coracle.btcforplebs.com"></span></a>
<a href="https://jumble.btcforplebs.com" target="_blank" class="prefetch">Jumble <span class="status-emoji"
data-url="https://jumble.btcforplebs.com"></span></a>
<a href="https://fevela.btcforplebs.com" target="_blank" class="prefetch">Fevela <span class="status-emoji"
data-url="https://fevela.btcforplebs.com"></span></a>
<a href="https://nosotros.btcforplebs.com" target="_blank" class="prefetch">Nosotros <span class="status-emoji"
data-url="https://nosotros.btcforplebs.com"></span></a>
<a href="https://shipyard.btcforplebs.com" target="_blank" class="prefetch">Shipyard <span class="status-emoji"
data-url="https://shipyard.btcforplebs.com"></span></a>
<small>🟢 = online | 🔴 = offline | ⚪️ = external site</small>
<br></br>
Nostr Community (add community.btcforplebs.com)
<a href="https://flotilla.btcforplebs.com/" target=" _blank" class="prefetch">Flotilla <span class="status-emoji"
data-url="https://community.btcforplebs.com"></span></a>
Google Drive Replacement (requires blossom server)
<a href="https://bloom.btcforplebs.com" target="_blank" class="prefetch">Bloom <span class="status-emoji"
data-url="https://bloom.btcforplebs.com"></span></a>
</div>
<!-- Cashu Links -->
<button class="button" id="cashu-folder-btn" onclick="toggleFolder('folder3', 'cashu-folder-btn')">Use Cashu <span
style="color: #F7931A;"></span></button>
<div class="links" id="folder3">
<a href="https://cashu.btcforplebs.com" class="prefetch">Cashu Wallet Web App <span class="status-emoji"
data-url="https://cashu.btcforplebs.com"></span></a>
<a href="/mint" class="prefetch">Cashu Mint <span class="status-emoji"
data-url="https://mint.btcforplebs.com"></span></a>
<a href="https://macadamia.cash" class="prefetch">Macadamia (iOS) ⚪️ </a>
<a href="https://minibits.cash" class="prefetch">Minibits (Android) ⚪️ </a>
</div>
<small>🟢 = online | 🔴 = offline | ⚪️ = external site</small>
<br></br>
</div>
<script src="https://btcforplebs.com/nostr-chat-widget.js" data-nostr-pubkey="75462f4dece4fbde54a535cfa09eb0d329bda090a9c2f9ed6b5f9d1d2fb6c15b" data-brand-name="Chat with BTCforPlebs" data-color="#fdad01" data-color-secondary="#8e30eb">
</script>
<script>
// emoji status fetcher
document.addEventListener('DOMContentLoaded', init);
<script src="https://btcforplebs.com/nostr-chat-widget.js"
data-nostr-pubkey="75462f4dece4fbde54a535cfa09eb0d329bda090a9c2f9ed6b5f9d1d2fb6c15b"
data-brand-name="Chat with BTCforPlebs" data-color="#fdad01" data-color-secondary="#222222">
</script>
const apiEndpoint = "/api/link-status";
<script>
// emoji status fetcher
document.addEventListener('DOMContentLoaded', init);
async function init() {
try {
console.log("🔄 Fetching statuses from:", apiEndpoint);
const response = await fetch(apiEndpoint);
const statuses = await response.json();
console.log("✅ Received statuses:", statuses);
const apiEndpoint = "/api/link-status";
document.querySelectorAll(".status-emoji[data-url]").forEach(span => {
const url = span.dataset.url;
console.log("🔍 Checking span for:", url);
async function init() {
try {
console.log("🔄 Fetching statuses from:", apiEndpoint);
const response = await fetch(apiEndpoint);
const statuses = await response.json();
console.log("✅ Received statuses:", statuses);
if (!url) {
console.warn("⚠️ Span missing data-url:", span);
return;
}
document.querySelectorAll(".status-emoji[data-url]").forEach(span => {
const url = span.dataset.url;
console.log("🔍 Checking span for:", url);
const status = statuses[url];
if (!url) {
console.warn("⚠️ Span missing data-url:", span);
return;
}
if (!status) {
console.warn(`⚠️ No status found in JSON for: ${url}`);
} else {
const emoji = status === "online" ? "🟢" : "🔴";
console.log(`${url} is ${status}, setting emoji: ${emoji}`);
span.textContent = `${emoji} `;
span.style.display = 'inline-block';
}
});
} catch (error) {
console.error("❌ Error fetching or processing statuses:", error);
const status = statuses[url];
if (!status) {
console.warn(`⚠️ No status found in JSON for: ${url}`);
} else {
const emoji = status === "online" ? "🟢" : "🔴";
console.log(`${url} is ${status}, setting emoji: ${emoji}`);
span.textContent = `${emoji} `;
span.style.display = 'inline-block';
}
});
} catch (error) {
console.error("❌ Error fetching or processing statuses:", error);
}
}
}
</script>
</script>
<script>
// Toggle folders
function toggleFolder(folderId, buttonId) {
const folder = document.getElementById(folderId);
const button = document.getElementById(buttonId);
if (!folder || !button) return;
<script>
// Toggle folders
function toggleFolder(folderId, buttonId) {
const folder = document.getElementById(folderId);
const button = document.getElementById(buttonId);
if (!folder || !button) return;
if (folder.style.display === "none" || folder.style.display === "") {
if (folder.style.display === "none" || folder.style.display === "") {
folder.style.display = "block";
button.innerHTML = button.innerHTML.replace("←", "↓");
} else {
} else {
folder.style.display = "none";
button.innerHTML = button.innerHTML.replace("↓", "←");
}
}
}
</script>
</script>
<div id="footer"></div>
<div id="footer"></div>
</body>
</html>
</html>

View File

@@ -188,7 +188,12 @@
</section>
</div>
<script src="/nostr-chat-widget.js"
data-nostr-pubkey="75462f4dece4fbde54a535cfa09eb0d329bda090a9c2f9ed6b5f9d1d2fb6c15b"
data-brand-name="Chat with BTCforPlebs"
data-color="#fdad01"
data-color-secondary="#222222">
</script>
<script>
// --- 2. Dropdown navigation ---------------------------------------------
window.navigateToSection = function (select) {
@@ -208,7 +213,8 @@
if (sectionId) {
document.getElementById(sectionId).scrollIntoView({ behavior: 'smooth' });
}
}</script>
}
</script>
</html>

View File

@@ -62,5 +62,11 @@
}
}
};</script>
<script src="/nostr-chat-widget.js"
data-nostr-pubkey="75462f4dece4fbde54a535cfa09eb0d329bda090a9c2f9ed6b5f9d1d2fb6c15b"
data-brand-name="Chat with BTCforPlebs"
data-color="#fdad01"
data-color-secondary="#222222">
</script>
</body>
</html>

View File

@@ -44,6 +44,12 @@
<div id="back-to-top">
<a href="#top" title="Back to Top">🔝</a>
</div>
<script src="/nostr-chat-widget.js"
data-nostr-pubkey="75462f4dece4fbde54a535cfa09eb0d329bda090a9c2f9ed6b5f9d1d2fb6c15b"
data-brand-name="Chat with BTCforPlebs"
data-color="#fdad01"
data-color-secondary="#222222">
</script>
<script>
// --- 2. Dropdown navigation ---------------------------------------------

View File

@@ -1,115 +1,113 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Cashu BTCforPlebs</title>
<meta name="description" content="Cashu is a Bitcoin thirdlayer Chaumian ecash protocol. This guide covers how it works, its privacy features, and how to get started with app walkthroughs.">
<meta name="description"
content="Cashu is a Bitcoin thirdlayer Chaumian ecash protocol. This guide covers how it works, its privacy features, and how to get started with app walkthroughs.">
<link rel="icon" href="/images/favicon.png" type="image/png">
<link rel="stylesheet" href="/assets/css/main.css">
<link rel="apple-touch-icon" href="/images/apple-touch-icon.png">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.6.0/css/all.min.css" rel="stylesheet">
</head>
<body>
<!-- Bitcoin Price Banner -->
<div id="btc-price-banner">This page is under construction</div>
<div class="logo-container">
<a href="/" class="prefetch">
<img src="/images/btcforplebs_logo.gif" alt="Home" class="header-logo">
</a>
</div>
<div class="container">
<h1>Cashu Chaumian Ecash on Bitcoin</h1>
<p>Cashu is a lightweight, privacypreserving ecash system that runs on top of the Lightning Network and settles onchain. It uses zeroknowledge proofs to hide the value of a transfer while remaining fully traceable when required.</p>
<!-- Dropdown navigation, similar to learnbitcoin -->
<div class="dropdown">
<select onchange="navigateToSection(this)">
<option value="">Select a topic</option>
<option value="what-is-cashu">What is Cashu?</option>
<option value="privacy">Privacy &amp; ZeroKnowledge</option>
<option value="technology">Underlying Technology</option>
<option value="apps">Apps &amp; UseCases</option>
<option value="getting-started">Getting Started</option>
<option value="videos">Video Resources</option>
</select>
<div class="logo-container">
<a href="/" class="prefetch">
<img src="/images/btcforplebs_logo.gif" alt="Home" class="header-logo">
</a>
</div>
<div class="container">
<h1>Cashu Chaumian Ecash on Bitcoin</h1>
<p>Cashu is a lightweight, privacypreserving ecash system that runs on top of the Lightning Network and settles
onchain. It uses zeroknowledge proofs to hide the value of a transfer while remaining fully traceable when
required.</p>
<!-- Sections -->
<section id="what-is-cashu">
<h2>What is Cashu?</h2>
<p>Cashu is an ecash protocol that allows you to mint, transfer, and spend Bitcoin value without revealing the amount or the sender/receiver in public transactions. It leverages the Lightning Network for instant settlement while maintaining onchain traceability for regulatory compliance. Think of it as a privacypreserving UTXO that can be moved anywhere on the Lightning network.</p>
</section>
<section id="privacy">
<h2>Privacy &amp; ZeroKnowledge</h2>
<p>At the core of Cashu is a zeroknowledge range proof that proves the value of a note without exposing it. This means you can pay for goods or services with a Cashu note and the recipient can verify that the note contains sufficient value, while the transaction remains private onchain.</p>
</section>
<section id="technology">
<h2>Underlying Technology</h2>
<p>Cashu uses a set of “notes” minted by a mint and signed with a unique key. Each note contains an amount and a unique identifier that the mint keeps encrypted. Transfers are executed with the Lightning Network, but minting and redeeming are done via onchain transactions that are fully verifiable.</p>
</section>
<section id="apps">
<h2>Apps &amp; UseCases</h2>
<p>Several wallet applications support Cashu, from the <a href="https://cashu.me" target="_blank" class="prefetch">Cashu Web Wallet</a> to <a href="https://meltwallet.com" target="_blank" class="prefetch">Melts Lightning Wallet</a>. Below are quick links to some popular ones:</p>
<div class="button-container">
<a href="https://cashu.me" class="button" target="_blank" class="prefetch">Cashu Web Wallet</a>
<a href="https://meltwallet.com" class="button" target="_blank" class="prefetch">Melt Wallet</a>
<a href="https://github.com/cashu/cashu-js-demo" class="button" target="_blank" class="prefetch">Cashu JS Demo</a>
<!-- Dropdown navigation, similar to learnbitcoin -->
<div class="dropdown">
<select onchange="navigateToSection(this)">
<option value="">Select a topic</option>
<option value="what-is-cashu">What is Cashu?</option>
<option value="privacy">Privacy &amp; ZeroKnowledge</option>
<option value="technology">Underlying Technology</option>
<option value="apps">Cashu Apps</option>
<option value="getting-started">Getting Started</option>
</select>
</div>
</section>
<section id="getting-started">
<h2>Getting Started</h2>
<p>To begin using Cashu, youll need a Lightningready wallet that supports the protocol. Most of the wallets listed above have a <code>Cashu</code> switch or integration. Once installed, create a new Cashu account, mint a few notes, and start experimenting.</p>
</section>
<!-- Sections -->
<section id="what-is-cashu">
<h2>What is Cashu?</h2>
<p>Cashu is an ecash protocol that allows you to mint, transfer, and spend sats without revealing
the amount or the sender/receiver in public transactions. It leverages the Lightning Network for instant
settlement on nodes. Think of it as a
privacypreserving bearer instrument that can be minted and redeemed across on the Lightning network.
</p>
</section>
<section id="videos">
<h2>Video Resources</h2>
<!-- Explainer Video 1 -->
<h3>Explainer What is Cashu?</h3>
<div class="video-container">
<video controls poster="https://i.imgur.com/Dc6m4zV.png" loading="lazy" style="width:100%">
<source src="https://raw.githubusercontent.com/cashu/cashu-presentation/master/intro.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>
</div>
<!-- Walkthrough Video 2 -->
<h3>How to Mint a Cashu Note</h3>
<div class="video-container">
<video controls poster="https://i.imgur.com/Kq4c1rT.png" loading="lazy" style="width:100%">
<source src="https://raw.githubusercontent.com/cashu/cashu-presentation/master/mint.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>
</div>
<!-- App Walkthrough 3 -->
<h3>Using Cashu in Melt Wallet</h3>
<div class="video-container">
<video controls poster="https://i.imgur.com/3p6zT9G.png" loading="lazy" style="width:100%">
<source src="https://raw.githubusercontent.com/cashu/cashu-presentation/master/melt-demo.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>
</div>
</section>
<section id="privacy">
<h2>Privacy &amp; ZeroKnowledge</h2>
<p>At the core of Cashu is a zeroknowledge range proof that proves the value of a note without exposing it.
This means you can pay for goods or services with a Cashu note and the recipient can verify that the
note contains sufficient value, while the transaction remains private onchain.</p>
</section>
<div class="social-icons">
<a href="https://github.com/cashu" target="_blank" class="prefetch"><i class="fa-brands fa-github"></i></a>
<a href="https://twitter.com/CashuProtocol" target="_blank" class="prefetch"><i class="fa-brands fa-twitter"></i></a>
<section id="technology">
<h2>Underlying Technology</h2>
<p>Cashu uses a set of “notes” minted by a mint and signed with a unique key. Each note contains an amount
and a unique identifier that the mint keeps encrypted. Transfers are executed with the Lightning
Network, and does require a mint to mint notes and therefore requires some level of trust in the mint.
</p>
</section>
<section id="apps">
<h2>Cashu Apps</h2>
<p>Several wallet applications support Cashu. Below are quick links to some popular ones:</p>
<div class="button-container">
<a href="https://cashu.btcforplebs.com" class="button" target="_blank" class="prefetch">Cashu Wallet Web
App</a>
<a href="https://nutstash.btcforplebs.com" class="button" target="_blank" class="prefetch">Nutstash
Wallet Web App</a>
<a href="https://macadamia.cash" class="button" target="_blank" class="prefetch">Macadamia (iOS App)</a>
<a href="https://minibits.cash" class="button" target="_blank" class="prefetch">Minibits (Android & iOS
App)</a>
</div>
</section>
<section id="getting-started">
<h2>Getting Started</h2>
<p>To begin using Cashu, youll need a Lightningready wallet that supports the protocol. Most of the
wallets listed above have a <code>Cashu</code> switch or integration. Once installed, create a new Cashu
account, mint a few notes, and start experimenting.</p>
</section>
<div class="social-icons">
<a href="https://github.com/cashu" target="_blank" class="prefetch"><i class="fa-brands fa-github"></i></a>
<a href="https://twitter.com/CashuProtocol" target="_blank" class="prefetch"><i
class="fa-brands fa-twitter"></i></a>
</div>
<div class="last-update">
<small id="last-updated-text"></small>
</div>
</div>
<div class="last-update">
<small id="last-updated-text"></small>
</div>
</div>
<div id="footer"></div>
<a href="#top" title="Back to Top">🔝</a>
<div id="footer"></div>
<script src="/nostr-chat-widget.js"
data-nostr-pubkey="75462f4dece4fbde54a535cfa09eb0d329bda090a9c2f9ed6b5f9d1d2fb6c15b"
data-brand-name="Chat with BTCforPlebs" data-color="#fdad01" data-color-secondary="#222222">
</script>
<a href="#top" title="Back to Top">🔝</a>
<script>function navigateToSection(select) {
const sectionId = select.value;
if (sectionId) {
document.getElementById(sectionId).scrollIntoView({ behavior: 'smooth' });
}
}</script>
</html>
const sectionId = select.value;
if (sectionId) {
document.getElementById(sectionId).scrollIntoView({ behavior: 'smooth' });
}
}</script>
</html>

View File

@@ -1,64 +1,113 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Learn Nostr</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:image" content="/images/thumb.jpeg">
<meta property="og:url" content="https://btcforplebs.com">
<meta name="twitter:card" content="summary_large_image">
<title>Learn Nostr</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:image" content="/images/thumb.jpeg">
<meta property="og:url" content="https://btcforplebs.com">
<meta name="twitter:card" content="summary_large_image">
<!-- favicon -->
<link rel="icon" href="/images/favicon.png" type="image/png">
<!-- favicon -->
<link rel="icon" href="/images/favicon.png" type="image/png">
<!-- scripts -->
<script src="/assets/js/scripts.js" defer></script>
<!-- scripts -->
<script src="/assets/js/scripts.js" defer></script>
<link rel="stylesheet" href="/assets/css/main.css">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.6.0/css/all.min.css" rel="stylesheet">
<link rel="stylesheet" href="/assets/css/main.css">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.6.0/css/all.min.css" rel="stylesheet">
</head>
<body>
<!-- Bitcoin Price Banner -->
<div id="btc-price-banner">This page is under construction</div>
<div class="container">
<div class="logo-container">
<a href="/">
<img src="/images/btcforplebs_logo.gif" alt="Home" class="header-logo">
</a>
<body>
<!-- Bitcoin Price Banner -->
<div id="btc-price-banner">This page is under construction</div>
<div class="container">
<div class="logo-container">
<a href="/">
<img src="/images/btcforplebs_logo.gif" alt="Home" class="header-logo">
</a>
</div>
<h1>Learn About Nostr</h1>
<p>Nostr is a decentralized, censorship-resistant protocol for communication. Learn more about its potential by watching the video below.</p>
<h2>What is Nostr and Why Should You Care?</h2>
<div class="video-container">
<video controls playsinline width="100%" height="auto" poster="https://img.youtube.com/vi/8aZkg3OQc5c/maxresdefault.jpg">
<source src="https://v.nostr.build/voby1u385n0ZwAbp.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>
</div>
<h1>Learn About Nostr</h1>
<p>Nostr is a decentralized, censorship-resistant protocol for communication. Learn more about its potential by
watching the video below.</p>
<h2>What is Nostr and Why Should You Care?</h2>
<div class="video-container">
<video controls playsinline width="100%" height="auto"
poster="https://img.youtube.com/vi/8aZkg3OQc5c/maxresdefault.jpg">
<source src="https://v.nostr.build/voby1u385n0ZwAbp.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>
</div>
<h2>Nostr Tools & Resources</h2>
<p>Explore the ecosystem of Nostr apps and tools available on BTCforPlebs:</p>
<h3>Relay</h3>
<ul>
<li><a href="/relay" target="_blank"><strong>BTCforPlebs Relay</strong></a> A reliable WebSocket relay for your
Nostr clients. Connect at <code>wss://relay.btcforplebs.com</code>.</li>
</ul>
<h3>Tools</h3>
<ul>
<li><a href="https://nsec.btcforplebs.com" target="_blank"><strong>Nsec Bunker</strong></a> A remote signer that
keeps your private keys safe while allowing you to use Nostr apps.</li>
<li><a href="https://ncryptdesec.btcforplebs.com" target="_blank"><strong>NcryptDEsec</strong></a> A tool for
encrypting and decrypting Nostr keys using the NIP-49 standard.</li>
</ul>
<h3>Clients</h3>
<ul>
<li><a href="https://nostrudel.btcforplebs.com" target="_blank"><strong>Nostrudel</strong></a> A feature-rich
web client for Nostr, offering a comprehensive social media experience.</li>
<li><a href="https://coracle.btcforplebs.com" target="_blank"><strong>Coracle</strong></a> A lightweight and
highly customizable Nostr web client.</li>
<li><a href="https://jumble.btcforplebs.com" target="_blank"><strong>Jumble</strong></a> A unique Nostr client
focused on specific user interactions.</li>
<li><a href="https://fevela.btcforplebs.com" target="_blank"><strong>Fevela</strong></a> A social client
designed for ease of use and community engagement.</li>
</ul>
<h3>Community</h3>
<ul>
<li><a href="https://flotilla.btcforplebs.com/" target="_blank"><strong>Flotilla</strong></a> A
community-focused platform built on Nostr for group discussions and collaboration.</li>
</ul>
<h3>Storage</h3>
<ul>
<li><a href="https://bloom.btcforplebs.com" target="_blank"><strong>Bloom</strong></a> A decentralized storage
solution replacing Google Drive, powered by Blossom servers.</li>
</ul>
<a href="/index.html" class="button">Home</a>
</div>
</div>
<script src="/nostr-chat-widget.js"
data-nostr-pubkey="75462f4dece4fbde54a535cfa09eb0d329bda090a9c2f9ed6b5f9d1d2fb6c15b"
data-brand-name="Chat with BTCforPlebs" data-color="#fdad01" data-color-secondary="#222222">
</script>
<div id="footer"></div>
<a href="#top" title="Back to Top">🔝</a>
<script>
// --- 2. Dropdown navigation ---------------------------------------------
window.navigateToSection = function (select) {
const sectionId = select.value;
if (sectionId) {
const section = document.getElementById(sectionId);
if (section) {
section.scrollIntoView({ behavior: 'smooth' });
<div id="footer"></div>
<a href="#top" title="Back to Top">🔝</a>
<script>
// --- 2. Dropdown navigation ---------------------------------------------
window.navigateToSection = function (select) {
const sectionId = select.value;
if (sectionId) {
const section = document.getElementById(sectionId);
if (section) {
section.scrollIntoView({ behavior: 'smooth' });
}
}
}
};</script>
};</script>
</body>
</html>
</html>

View File

@@ -8,36 +8,48 @@
<link rel="stylesheet" href="/assets/css/main.css">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.6.0/css/all.min.css" rel="stylesheet">
<style>
/* Override a bit to make it super retro */
body {font-family: "Courier New", monospace; background:#111; color:#ecf0f1;}
h1{color:#f39c12;}
a {color:#8e30eb;}
h1{color:#8e30eb;}
.center{max-width:800px;margin:auto;padding:2rem;text-align:left;background:rgba(0,0,0,.8);border-radius:8px;}
.btn{display:inline-block;margin:10px 0;padding:.7rem 1.5rem;background:#e67e22;color:#fff;border-radius:4px;text-decoration:none;font-weight:bold;}
.quicklinks{margin-top:1.5rem;}
.btn{display:inline-block;margin:10px 0;padding:.7rem 1.5rem;background:#8e30eb;color:#fff;border-radius:4px;text-decoration:none;font-weight:bold;}
</style>
</head>
<body>
<div class="center">
<h1>BTCforPlebs Cashu Mint</h1>
<p>Welcome to the BTCforPlebs Cashu Mint! Mint up to 100,000 sats per session but remember, no lifesaving amounts. If you hit a snag, ping us on Nostr or email <a href="mailto:mint@btcforplebs.com">mint@btcforplebs.com</a>.</p>
<p>Welcome to the BTCforPlebs Cashu Mint! Mint up to 100,000 sats but remember, no lifesaving amounts. If you hit a snag, ping us on Nostr</p>
<h2>Quick Links</h2>
<div class="quicklinks">
<a href="https://cashu.space" class="btn">cashu.space</a>
<a href="https://cashu.me" class="btn">cashu.me (external host)</a>
<a href="https://cashu.btcforplebs.com" class="btn">cashu.me (BTCforPlebs host)</a>
<a href="https://btcforplebs.com/cashu" class="btn">btcforplebs.com/cashu</a>
<li><a href="https://cashu.space" class="btn">cashu.space</a>
Learn about the nuts of Cashu and how it works. <br> </br></li>
<li><a href="https://cashu.me" class="btn">cashu.me (external host)</a>
A Cashu PWA wallet that if feature rich! <br> </br></li>
<li><a href="https://cashu.btcforplebs.com" class="btn">cashu.me (BTCforPlebs host)</a>
Our own hosted version of cashu.me <br></br></li>
<li><a href="https://btcforplebs.com/learn-cashu" class="btn">Learn Cashu</a>
Learn what Cashu is and how to use it from BTCforPlebs<br> </br></li>
</div>
<h2>Minting Policy</h2>
<br></br>
<ul>
<li>Maximum 100,000 sats per mint session.</li>
<li>Do not mint your life savings.</li>
<li>Contact us on <a href="https://nosotros.btcforplebs.com/nprofile1qydhwumn8ghj7un9d3shjtnzw33kvmmjwpkx2cnn9e3k7mgprdmhxue69uhksctkv4hzucn5vdnx7unsd3jkyuewvdhk6qgkwaehxw309aex2mrp0yh8qunfd4skctnwv46qz9rhwden5te0wfjkccte9ejxzmt4wvhxjmcqyp65vt6danj0hhj5556ulgy7krfjn0dqjz5u970ddd0e68f0kmq4kju00y6">Nostr</a></li>
<li>Payments are processed via Cashu. See the <a href="/cashu/docs">documentation</a> for details.</li>
</ul>
<h2>FAQ</h2>
<p>For frequently asked questions, visit our <a href="/cashu/faq">FAQ page</a> or join our Nostr channel.</p>
<footer style="margin-top:2rem;color:#777;text-align:center;">
© 2025 BTCforPlebs Mint responsibly.
</footer>
<script src="https://btcforplebs.com/nostr-chat-widget.js"
data-nostr-pubkey="75462f4dece4fbde54a535cfa09eb0d329bda090a9c2f9ed6b5f9d1d2fb6c15b"
data-brand-name="Chat with BTCforPlebs"
data-color="#8e30eb"
data-color-secondary="#000000">
</script>
</div>
</body>
</html>

View File

@@ -0,0 +1 @@
pong

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -3,21 +3,23 @@
<script src="/assets/js/scripts.js"></script>
<style>
.nostr-icon {
width: 1em; /* same size as the other icons */
height: 1em;
background-color: currentColor; /* inherits the surrounding text colour */
<style>
.nostr-icon {
width: 1em;
/* same size as the other icons */
height: 1em;
background-color: currentColor;
/* inherits the surrounding text colour */
/* mask the PNG requires a PNG with a transparent background */
mask: url("https://i.nostr.build/rEzdEtwDi8VDpQiX.png") no-repeat center / contain;
-webkit-mask: url("https://i.nostr.build/rEzdEtwDi8VDpQiX.png") no-repeat center / contain;
}
</style>
/* mask the PNG requires a PNG with a transparent background */
mask: url("https://i.nostr.build/rEzdEtwDi8VDpQiX.png") no-repeat center / contain;
-webkit-mask: url("https://i.nostr.build/rEzdEtwDi8VDpQiX.png") no-repeat center / contain;
}
</style>
<h3>We operate on solely on Bitcoin donations; from a pleb just like you!</h3>
<!-- Button Section -->
<!-- Button Section -->
<button class="qr-button" id="onChainButton">Donate with On-Chain</button>
<button class="qr-button" id="lightningButton">Donate Via Lightning</button>
<div id="qrCodes" style="display: none;">
@@ -27,32 +29,36 @@
</div>
<div id="lightningQRCode" style="display: none;">
<img src="/images/lightning-donate.png" alt="Lightning QR Code"><br>
<h3>btcforplebs@ln.pl3bs.co</h3>
<h3>btcforplebs@lightning.btcforplebs.com</h3>
</div>
</div>
<!-- Social Links Section -->
<!-- Social Links Section -->
<div class="social-icons">
<a href="https://nostrudel.ninja/#/u/npub1w4rz7n0vunaau499xh86p84s6v5mmgys48p0nmttt7w36takc9dsf4382j" target="_blank" title="Nostr" class="prefetch">
<a href="https://nostrudel.btcforplebs.com/#/u/npub1w4rz7n0vunaau499xh86p84s6v5mmgys48p0nmttt7w36takc9dsf4382j"
target="_blank" title="Nostr" class="prefetch">
<div class="nostr-icon"></div>
<a href="https://x.com/btcforplebs" target="_blank" title="X" class="prefetch">
<i class="fa-brands fa-twitter"></i>
</a>
<a href="https://youtube.com/@btcforplebs" target="_blank" title="YouTube" class="prefetch">
<i class="fa-brands fa-youtube"></i>
<a href="https://twitch.tv/btcforplebs" target="_blank" title="Twitch" class="prefetch">
<i class="fa-brands fa-twitch"></i>
</a>
<a href="btcforplebs@gmail.com" target="_blank" title="Email" class="prefetch">
<i class="fa-solid fa-envelope"></i>
<a href="https://github.com/btcforplebs/BTCforPlebs.com" target="_blank" title="GitHub" class="prefetch">
<i class="fa-solid fa-github"></i>
</a>
<a href="https://x.com/btcforplebs" target="_blank" title="X" class="prefetch">
<i class="fa-brands fa-twitter"></i>
</a>
<a href="https://youtube.com/@btcforplebs" target="_blank" title="YouTube" class="prefetch">
<i class="fa-brands fa-youtube"></i>
<a href="https://twitch.tv/btcforplebs" target="_blank" title="Twitch" class="prefetch">
<i class="fa-brands fa-twitch"></i>
</a>
<a href="mailto:btcforplebs@gmail.com" target="_blank" title="Email" class="prefetch">
<i class="fa-solid fa-envelope"></i>
<a href="https://gitea.btcforplebs.com/btcforplebs/BTCforPlebs.com" target="_blank" title="GitHub"
class="prefetch">
<i class="fa-brands fa-github"></i>
</a>
</div>
<!-- Last Update Section -->
<!-- Last Update Section -->
<div class="last-update">
<small id="last-updated-text"></small>
</div>
<br></br>
<small>This website is a work in progress and always under development. None of the content on this website is Financial Advice. <br>Do Your Own Research (DYOR) before converting your worthless Fiat Money into the Hardest Money ever known to mankind.<br> - Stack Sats <br> - HODL your keys<br> - It's not that complicated</small>
</footer>
<small>This website is a work in progress and always under development. None of the content on this website is
Financial Advice. <br>Do Your Own Research (DYOR) before converting your worthless Fiat Money into the Hardest
Money ever known to mankind.<br> - Stack Sats <br> - HODL your keys<br> - It's not that complicated</small>
</footer>

View File

@@ -45,7 +45,7 @@
<p>Follow BTCforPlebs on <a href="https://nostrudel.btcforplebs.com/u/npub1w4rz7n0vunaau499xh86p84s6v5mmgys48p0nmttt7w36takc9dsf4382j">Nostr</a> or <a href="https://youtube.com/@btcforplebs">YouTube</a> for the latest</p>
</div>
<script src="https://btcforplebs.com/nostr-chat-widget.js"
<script src="https://btcforplebs.com/nostr-chat-widget-WIP.js"
data-nostr-pubkey="75462f4dece4fbde54a535cfa09eb0d329bda090a9c2f9ed6b5f9d1d2fb6c15b"
data-brand-name="Chat with BTCforPlebs"
data-color="#8e30eb"

View File

@@ -0,0 +1,58 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Nostr Chat Widget V2 Test</title>
<style>
body {
margin: 0;
padding: 0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
background: linear-gradient(45deg, #1a1a1a, #2d2d2d);
min-height: 100vh;
color: white;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.content {
text-align: center;
padding: 2rem;
max-width: 600px;
}
h1 {
font-size: 2.5rem;
margin-bottom: 1rem;
background: linear-gradient(to right, #fdad01, #ff8c00);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
p {
color: #aaa;
line-height: 1.6;
}
</style>
</head>
<body>
<div class="content">
<h1>Nostr Chat Widget V2</h1>
<p>This is a test page for the refactored Nostr Chat Widget.</p>
<p>The widget should appear in the bottom right corner.</p>
</div>
<!-- Widget Embed Code -->
<!-- Using a random hex pubkey for testing purposes -->
<script src="nostr-chat-widget.js"
data-nostr-pubkey="75462f4dece4fbde54a535cfa09eb0d329bda090a9c2f9ed6b5f9d1d2fb6c15b"
data-brand-name="Test Widget" data-color="#fdad01" data-color-secondary="#ff8c00">
</script>
</body>
</html>