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

@@ -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

@@ -109,6 +109,13 @@
</section>
<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,28 +1,32 @@
<!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 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 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: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">
<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">
<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 -->
@@ -39,45 +43,75 @@
<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>
<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>
<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>
<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>
<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>
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>
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>
<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://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>
<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>
<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 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>
<script>
@@ -140,4 +174,5 @@ document.addEventListener('DOMContentLoaded', init);
<div id="footer"></div>
</body>
</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,15 +1,18 @@
<!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>
@@ -21,7 +24,9 @@
</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>
<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">
@@ -30,74 +35,62 @@
<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="apps">Cashu Apps</option>
<option value="getting-started">Getting Started</option>
<option value="videos">Video Resources</option>
</select>
</div>
<!-- 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>
<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="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>
<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>
<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>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>
<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.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>
<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>
<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>
<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>
<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>
<a href="https://twitter.com/CashuProtocol" target="_blank" class="prefetch"><i
class="fa-brands fa-twitter"></i></a>
</div>
<div class="last-update">
@@ -105,6 +98,10 @@
</div>
</div>
<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;
@@ -112,4 +109,5 @@
document.getElementById(sectionId).scrollIntoView({ behavior: 'smooth' });
}
}</script>
</html>

View File

@@ -1,5 +1,6 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Learn Nostr</title>
<meta charset="UTF-8">
@@ -18,6 +19,7 @@
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.6.0/css/all.min.css" rel="stylesheet">
</head>
<body>
<!-- Bitcoin Price Banner -->
@@ -31,19 +33,66 @@
</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>
<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">
<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>
<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>
@@ -60,5 +109,5 @@
}
};</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

@@ -5,9 +5,11 @@
<style>
.nostr-icon {
width: 1em; /* same size as the other icons */
width: 1em;
/* same size as the other icons */
height: 1em;
background-color: currentColor; /* inherits the surrounding text colour */
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;
@@ -27,12 +29,13 @@
</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 -->
<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>
@@ -42,10 +45,11 @@
<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">
<a href="mailto: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 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 -->
@@ -54,5 +58,7 @@
</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>
<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>