+- jack -- 23d ---------------------------------------------------------------------------------------------------[...]+ | | | same | | | +-- reply --------------------------------------------------------------------------------------------------------- ---+same
+------------------------------------------------------------------------------+
Nostr Feed
Showing notes from your follow list.
+------------------------------------------------------------------------------+
+- jack -- 23d ---------------------------------------------------------------------------------------------------[...]+ | | | yes, odd | | | +-- reply --------------------------------------------------------------------------------------------------------- ---+yes, odd
+- jack -- 23d ---------------------------------------------------------------------------------------------------[...]+ | | | bitchat pulled from china app store | | https://blossom.primal.net/6d1f5304a85f6ccd6af01a7db43da50688636822df7a38af31ef5f66457c6b77.png | | | +-- reply ------------------------------------------------------------------------------------------------ [1 reply] ---+bitchat pulled from china app store https://blossom.primal.net/6d1f5304a85f6ccd6af01a7db43da50688636822df7a38af31ef5f66457c6b77.png
+- jack -- 3mo ---------------------------------------------------------------------------------------------------[...]+ | | | bitchat now has: | | - photos/audio notes in bluetooth mesh | | - better routing algorithm for stabler and longer range meshes | | - uses @torproject's arti framework for speed and reliability | | - audited by 3rd party security group and addressed all findings | | | | bitchat.free | | | +-- reply --------------------------------------------------------------------------------------------------------- ---+bitchat now has: - photos/audio notes in bluetooth mesh - better routing algorithm for stabler and longer range meshes - uses @torproject's arti framework for speed and reliability - audited by 3rd party security group and addressed all findings bitchat.free
+- jack -- 3mo ---------------------------------------------------------------------------------------------------[...]+ | | | gm | | note:00b0c20b…8475 | | | +-- reply --------------------------------------------------------------------------------------------- [50 replies] ---+gm note:00b0c20b…8475
+- jack -- 5mo ---------------------------------------------------------------------------------------------------[...]+ | | | nostr wins if it stops trying to be a twitter clone and starts being the invisible layer underneath apps you | | actually want to use. like bitchat for location-based messaging, diVine for entertainment, whitenoise for private | | messaging, zap.stream for streaming, shakespeare for vibe coding, etc. | | | | it wins by unbundling into 50 different apps that all talk to each other, rather than one giant app/corp that traps | | you. it's all about the ecosystem. | | | +-- reply -------------------------------------------------------------------------------------------- [214 replies] ---+nostr wins if it stops trying to be a twitter clone and starts being the invisible layer underneath apps you actually want to use. like bitchat for location-based messaging, diVine for entertainment, whitenoise for private messaging, zap.stream for streaming, shakespeare for vibe coding, etc. it wins by unbundling into 50 different apps that all talk to each other, rather than one giant app/corp that traps you. it's all about the ecosystem.
+- jack -- 5mo ---------------------------------------------------------------------------------------------------[...]+ | | | yes | | note:ba9a8a6f…f6bf | | | +-- reply --------------------------------------------------------------------------------------------- [27 replies] ---+yes note:ba9a8a6f…f6bf
+- Damus -- 8mo --------------------------------------------------------------------------------------------------[...]+ | | | It's launch day!!! Damus is now available on all platforms with Android ready to download! Thanks to everyone who | | has contributed, tested, and waited patiently for this release. We can't wait to hear what you think! | | https://damus.io/android/ | | | | https://damus.io/damus-android/android_video/master.m3u8 | | | +-- reply ------------------------------------------------------------------------------------------------ [1 reply] ---+It's launch day!!! Damus is now available on all platforms with Android ready to download! Thanks to everyone who has contributed, tested, and waited patiently for this release. We can't wait to hear what you think! https://damus.io/android/ https://damus.io/damus-android/android_video/master.m3u8
+- jack -- 9mo ---------------------------------------------------------------------------------------------------[...]+ | | | live on test flight now. next stop: app store. | | | | note:a732fc1d…b55f | | | +-- reply --------------------------------------------------------------------------------------------- [33 replies] ---+live on test flight now. next stop: app store. note:a732fc1d…b55f
+- jack -- 9mo ---------------------------------------------------------------------------------------------------[...]+ | | | submit a PR | | | +-- reply --------------------------------------------------------------------------------------------------------- ---+submit a PR
+- jack -- 9mo ---------------------------------------------------------------------------------------------------[...]+ | | | bitchat 1.2.0 (purple) shipping to testflight tonight. | | | | this enables mutual favorites to automatically switch to a nostr-based transport when one of them leaves the mesh. | | only for private messages for now using NIP-17. | | | | basically people can bitchat in person, favorite each other at that time, and then can continue the conversation if | | internet is available through nostr, from any distance. no need to input a npub or know anything about nostr. it | | just works. | | | | https://github.com/permissionlesstech/bitchat/pull/358 | | https://blossom.primal.net/dc9f60a514289adc00d9dcb14e64be382317ee50f1749ea2a9cc73758da7af6a.jpg | | | +-- reply -------------------------------------------------------------------------------------------- [155 replies] ---+bitchat 1.2.0 (purple) shipping to testflight tonight. this enables mutual favorites to automatically switch to a nostr-based transport when one of them leaves the mesh. only for private messages for now using NIP-17. basically people can bitchat in person, favorite each other at that time, and then can continue the conversation if internet is available through nostr, from any distance. no need to input a npub or know anything about nostr. it just works. https://github.com/permissionlesstech/bitchat/pull/358 https://blossom.primal.net/dc9f60a514289adc00d9dcb14e64be382317ee50f1749ea2a9cc73758da7af6a.jpg
+- jack -- 9mo ---------------------------------------------------------------------------------------------------[...]+ | | | not the point. | | | +-- reply --------------------------------------------------------------------------------------------------------- ---+not the point.
+- jack -- 9mo ---------------------------------------------------------------------------------------------------[...]+ | | | no | | | +-- reply --------------------------------------------------------------------------------------------------------- ---+no
+- jack -- 9mo ---------------------------------------------------------------------------------------------------[...]+ | | | where's my bitchat? | | | | app store: https://apps.apple.com/us/app/bitchat-mesh/id6748219622 | | | +-- reply ------------------------------------------------------------------------------------------------ [1 reply] ---+where's my bitchat? app store: https://apps.apple.com/us/app/bitchat-mesh/id6748219622
+- jack -- 11mo --------------------------------------------------------------------------------------------------[...]+ | | | sats is definitely the wrong term and is stopping everyday people from holding and spending bitcoin. | | | | i agree with steve’s points in this video. | | | | https://youtu.be/F6X03efgJww | | | +-- reply -------------------------------------------------------------------------------------------- [141 replies] ---+sats is definitely the wrong term and is stopping everyday people from holding and spending bitcoin. i agree with steve’s points in this video. https://youtu.be/F6X03efgJww
+- jack -- 11mo --------------------------------------------------------------------------------------------------[...]+ | | | nope | | | +-- reply --------------------------------------------------------------------------------------------------------- ---+nope
+- jack -- 11mo --------------------------------------------------------------------------------------------------[...]+ | | | now at https://nostream.pub | | | | note:d37b030b…80d4 | | | +-- reply ---------------------------------------------------------------------------------------------- [2 replies] ---+now at https://nostream.pub note:d37b030b…80d4
+- jack -- 11mo --------------------------------------------------------------------------------------------------[...]+ | | | ¯\_(ツ)_/¯ | | | +-- reply --------------------------------------------------------------------------------------------------------- ---+¯\_(ツ)_/¯
+- jack -- 11mo --------------------------------------------------------------------------------------------------[...]+ | | | source: | | | | <!DOCTYPE html> | | <html lang="en"> | | <head> | | <meta charset="UTF-8"> | | <meta name="viewport" content="width=device-width, initial-scale=1.0"> | | <title>Nostr Media Feed</title> | | <style> | | :root { | | --bg-color: #ffffff; | | --text-color: #333333; | | } | | | | [data-theme="dark"] { | | --bg-color: #1a1a1a; | | --text-color: #ffffff; | | } | | | | body { | | font-family: -apple-system, system-ui, sans-serif; | | margin: 0; | | padding: 0; | | background: var(--bg-color); | | color: var(--text-color); | | } | | | | #header { | | position: fixed; | | top: 0; | | left: 0; | | right: 0; | | padding: 15px 20px; | | background: var(--bg-color); | | display: flex; | | justify-content: space-between; | | align-items: center; | | z-index: 1000; | | font-size: 14px; | | } | | | | #feed { | | margin-top: 52px; | | } | | | | .note { | | margin-bottom: 0; | | } | | | | .media-container { | | background: #000; | | line-height: 0; | | width: 100%; | | } | | | | .media-container a { | | display: block; | | line-height: 0; | | } | | | | .media-container img, | | .media-container video { | | width: 100%; | | height: auto; | | object-fit: contain; | | opacity: 0; | | transition: opacity 0.5s ease-in; | | } | | | | .media-container img.loaded, | | .media-container video.loaded { | | opacity: 1; | | } | | | | #status { | | display: flex; | | align-items: center; | | gap: 6px; | | opacity: 0.7; | | } | | | | .status-dot { | | width: 6px; | | height: 6px; | | border-radius: 50%; | | } | | | | .status-live .status-dot { | | background: #4CAF50; | | } | | | | .status-paused .status-dot { | | background: #ff9800; | | } | | | | @media (min-width: 800px) { | | .media-container img, | | .media-container video { | | max-height: 100vh; | | } | | } | | | | @media (max-width: 799px) { | | .media-container img, | | .media-container video { | | max-height: none; | | } | | } | | </style> | | </head> | | <body> | | <div id="header"> | | <div id="status" class="status-live"> | | <div class="status-dot"></div> | | <span>Live</span> | | </div> | | </div> | | <div id="feed"></div> | | | | <script> | | // Auto dark mode | | if (window.matchMedia('(prefers-color-scheme: dark)').matches) { | | document.body.setAttribute('data-theme', 'dark'); | | } | | window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', e => { | | document.body.setAttribute('data-theme', e.matches ? 'dark' : 'light'); | | }); | | | | // Initialize | | const feed = document.getElementById('feed'); | | const status = document.getElementById('status'); | | const seenNotes = new Set(); | | const seenMedia = new Set(); | | let isPaused = false; | | | | // Relays | | const RELAYS = [ | | 'wss://relay.damus.io', | | 'wss://relay.nostr.band', | | 'wss://nos.lol', | | 'wss://relay.nostr.info' | | ]; | | | | const relayPool = new Map(); | | | | // Function to update status display | | function updateStatus(paused) { | | status.className = paused ? 'status-paused' : 'status-live'; | | status.querySelector('span').textContent = paused ? 'Paused' : 'Live'; | | } | | | | // Pause/Resume based on scroll position | | let lastScrollTop = 0; | | window.addEventListener('scroll', () => { | | const st = window.pageYOffset || document.documentElement.scrollTop; | | if (st > lastScrollTop && st > 100) { | | // Scrolling down | | if (!isPaused) { | | isPaused = true; | | updateStatus(true); | | } | | } else if (st === 0) { | | // At top | | if (isPaused) { | | isPaused = false; | | updateStatus(false); | | } | | } | | lastScrollTop = st; | | }); | | | | // Connect to relays | | function connect() { | | let connectedRelays = 0; | | | | RELAYS.forEach(relayUrl => { | | const socket = new WebSocket(relayUrl); | | relayPool.set(relayUrl, socket); | | | | socket.onopen = () => { | | connectedRelays++; | | if (connectedRelays === 1) { | | updateStatus(false); | | } | | | | // Subscribe to notes with media | | const recentSub = JSON.stringify([ | | "REQ", | | "recent_" + relayUrl, | | { | | "kinds": [1], | | "limit": 500 | | } | | ]); | | socket.send(recentSub); | | }; | | | | socket.onclose = () => { | | relayPool.delete(relayUrl); | | connectedRelays--; | | if (connectedRelays === 0) { | | setTimeout(() => connect(), 2000); | | } | | }; | | | | socket.onerror = (error) => { | | console.error('WebSocket error:', error); | | }; | | | | // Handle incoming messages | | socket.onmessage = async (event) => { | | if (isPaused) return; | | | | const data = JSON.parse(event.data); | | if (data[0] !== 'EVENT') return; | | | | const msg = data[2]; | | | | // Handle notes | | if (msg.kind !== 1) return; | | if (seenNotes.has(msg.id)) return; | | seenNotes.add(msg.id); | | | | // Look for media URLs | | const mediaUrls = []; | | const urlRegex = /(https?:\/\/[^\s<]+\.(jpg|jpeg|png|gif|mp4|webm))/gi; | | let match; | | while ((match = urlRegex.exec(msg.content)) !== null) { | | mediaUrls.push(match[0]); | | } | | if (mediaUrls.length === 0) return; | | | | // Check for duplicate media | | const mediaKey = mediaUrls.sort().join(','); | | if (seenMedia.has(mediaKey)) return; | | seenMedia.add(mediaKey); | | | | try { | | // Create note element | | const noteEl = document.createElement('div'); | | noteEl.className = 'note'; | | | | // Add media | | const mediaContainer = document.createElement('div'); | | mediaContainer.className = 'media-container'; | | | | // Make media container clickable | | const mediaLink = document.createElement('a'); | | mediaLink.href = `https://njump.me/${msg.id}`; | | mediaLink.target = '_blank'; | | mediaLink.style.cursor = 'pointer'; | | mediaContainer.appendChild(mediaLink); | | | | for (const url of mediaUrls) { | | if (url.match(/\.(jpg|jpeg|png|gif)$/i)) { | | try { | | // Create and preload image | | const img = document.createElement('img'); | | img.style.opacity = '0'; | | img.src = url; | | img.loading = 'lazy'; | | | | // Wait for image to load | | await new Promise((resolve, reject) => { | | img.onload = resolve; | | img.onerror = reject; | | }); | | | | // Add to container and fade in | | mediaLink.appendChild(img); | | requestAnimationFrame(() => { | | img.style.opacity = '1'; | | }); | | } catch (e) { | | console.error('Failed to load image:', url); | | } | | } else { | | const video = document.createElement('video'); | | video.src = url; | | video.controls = true; | | video.autoplay = true; | | video.muted = true; | | video.loop = true; | | video.playsInline = true; | | video.style.opacity = '0'; | | | | // Fade in once video starts playing | | video.addEventListener('playing', () => { | | requestAnimationFrame(() => { | | video.style.opacity = '1'; | | }); | | }, { once: true }); | | | | video.onerror = () => { | | video.remove(); | | }; | | mediaLink.appendChild(video); | | // Try to start playing | | video.play().catch(e => console.log('Auto-play prevented:', e)); | | } | | } | | | | noteEl.appendChild(mediaContainer); | | feed.insertBefore(noteEl, feed.firstChild); | | } catch (e) { | | console.error('Error creating note element:', e); | | } | | }; | | }); | | } | | | | // Initial connection | | connect(); | | </script> | | </body> | | </html> | | | +-- reply ---------------------------------------------------------------------------------------------- [4 replies] ---+source: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Nostr Media Feed</title> <style> :root { --bg-color: #ffffff; --text-color: #333333; } [data-theme="dark"] { --bg-color: #1a1a1a; --text-color: #ffffff; } body { font-family: -apple-system, system-ui, sans-serif; margin: 0; padding: 0; background: var(--bg-color); color: var(--text-color); } #header { position: fixed; top: 0; left: 0; right: 0; padding: 15px 20px; background: var(--bg-color); display: flex; justify-content: space-between; align-items: center; z-index: 1000; font-size: 14px; } #feed { margin-top: 52px; } .note { margin-bottom: 0; } .media-container { background: #000; line-height: 0; width: 100%; } .media-container a { display: block; line-height: 0; } .media-container img, .media-container video { width: 100%; height: auto; object-fit: contain; opacity: 0; transition: opacity 0.5s ease-in; } .media-container img.loaded, .media-container video.loaded { opacity: 1; } #status { display: flex; align-items: center; gap: 6px; opacity: 0.7; } .status-dot { width: 6px; height: 6px; border-radius: 50%; } .status-live .status-dot { background: #4CAF50; } .status-paused .status-dot { background: #ff9800; } @media (min-width: 800px) { .media-container img, .media-container video { max-height: 100vh; } } @media (max-width: 799px) { .media-container img, .media-container video { max-height: none; } } </style> </head> <body> <div id="header"> <div id="status" class="status-live"> <div class="status-dot"></div> <span>Live</span> </div> </div> <div id="feed"></div> <script> // Auto dark mode if (window.matchMedia('(prefers-color-scheme: dark)').matches) { document.body.setAttribute('data-theme', 'dark'); } window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', e => { document.body.setAttribute('data-theme', e.matches ? 'dark' : 'light'); }); // Initialize const feed = document.getElementById('feed'); const status = document.getElementById('status'); const seenNotes = new Set(); const seenMedia = new Set(); let isPaused = false; // Relays const RELAYS = [ 'wss://relay.damus.io', 'wss://relay.nostr.band', 'wss://nos.lol', 'wss://relay.nostr.info' ]; const relayPool = new Map(); // Function to update status display function updateStatus(paused) { status.className = paused ? 'status-paused' : 'status-live'; status.querySelector('span').textContent = paused ? 'Paused' : 'Live'; } // Pause/Resume based on scroll position let lastScrollTop = 0; window.addEventListener('scroll', () => { const st = window.pageYOffset || document.documentElement.scrollTop; if (st > lastScrollTop && st > 100) { // Scrolling down if (!isPaused) { isPaused = true; updateStatus(true); } } else if (st === 0) { // At top if (isPaused) { isPaused = false; updateStatus(false); } } lastScrollTop = st; }); // Connect to relays function connect() { let connectedRelays = 0; RELAYS.forEach(relayUrl => { const socket = new WebSocket(relayUrl); relayPool.set(relayUrl, socket); socket.onopen = () => { connectedRelays++; if (connectedRelays === 1) { updateStatus(false); } // Subscribe to notes with media const recentSub = JSON.stringify([ "REQ", "recent_" + relayUrl, { "kinds": [1], "limit": 500 } ]); socket.send(recentSub); }; socket.onclose = () => { relayPool.delete(relayUrl); connectedRelays--; if (connectedRelays === 0) { setTimeout(() => connect(), 2000); } }; socket.onerror = (error) => { console.error('WebSocket error:', error); }; // Handle incoming messages socket.onmessage = async (event) => { if (isPaused) return; const data = JSON.parse(event.data); if (data[0] !== 'EVENT') return; const msg = data[2]; // Handle notes if (msg.kind !== 1) return; if (seenNotes.has(msg.id)) return; seenNotes.add(msg.id); // Look for media URLs const mediaUrls = []; const urlRegex = /(https?:\/\/[^\s<]+\.(jpg|jpeg|png|gif|mp4|webm))/gi; let match; while ((match = urlRegex.exec(msg.content)) !== null) { mediaUrls.push(match[0]); } if (mediaUrls.length === 0) return; // Check for duplicate media const mediaKey = mediaUrls.sort().join(','); if (seenMedia.has(mediaKey)) return; seenMedia.add(mediaKey); try { // Create note element const noteEl = document.createElement('div'); noteEl.className = 'note'; // Add media const mediaContainer = document.createElement('div'); mediaContainer.className = 'media-container'; // Make media container clickable const mediaLink = document.createElement('a'); mediaLink.href = `https://njump.me/${msg.id}`; mediaLink.target = '_blank'; mediaLink.style.cursor = 'pointer'; mediaContainer.appendChild(mediaLink); for (const url of mediaUrls) { if (url.match(/\.(jpg|jpeg|png|gif)$/i)) { try { // Create and preload image const img = document.createElement('img'); img.style.opacity = '0'; img.src = url; img.loading = 'lazy'; // Wait for image to load await new Promise((resolve, reject) => { img.onload = resolve; img.onerror = reject; }); // Add to container and fade in mediaLink.appendChild(img); requestAnimationFrame(() => { img.style.opacity = '1'; }); } catch (e) { console.error('Failed to load image:', url); } } else { const video = document.createElement('video'); video.src = url; video.controls = true; video.autoplay = true; video.muted = true; video.loop = true; video.playsInline = true; video.style.opacity = '0'; // Fade in once video starts playing video.addEventListener('playing', () => { requestAnimationFrame(() => { video.style.opacity = '1'; }); }, { once: true }); video.onerror = () => { video.remove(); }; mediaLink.appendChild(video); // Try to start playing video.play().catch(e => console.log('Auto-play prevented:', e)); } } noteEl.appendChild(mediaContainer); feed.insertBefore(noteEl, feed.firstChild); } catch (e) { console.error('Error creating note element:', e); } }; }); } // Initial connection connect(); </script> </body> </html>
+- jack -- 11mo --------------------------------------------------------------------------------------------------[...]+ | | | just scroll and it pauses | | | +-- reply --------------------------------------------------------------------------------------------------------- ---+just scroll and it pauses
+- jack -- 11mo --------------------------------------------------------------------------------------------------[...]+ | | | vibe coded this. nostr firehose stream, media only, scroll to pause, tap media to get to profile | | | | https://nostrstream.replit.app | | | | nice in full screen. | | | | (you may see things you don't want to see) | | | +-- reply ------------------------------------------------------------------------------------------------ [1 reply] ---+vibe coded this. nostr firehose stream, media only, scroll to pause, tap media to get to profile https://nostrstream.replit.app nice in full screen. (you may see things you don't want to see)
+- jack -- 1y ----------------------------------------------------------------------------------------------------[...]+ | | | https://m.primal.net/QapS.jpg | | | +-- reply ------------------------------------------------------------------------------------------------ [1 reply] ---+https://m.primal.net/QapS.jpg
+- jack -- 1y ----------------------------------------------------------------------------------------------------[...]+ | | | entirely | | | +-- reply --------------------------------------------------------------------------------------------------------- ---+entirely
+- jack -- 1y ----------------------------------------------------------------------------------------------------[...]+ | | | {"id":"f141fe20ddc2f4c31124e5fffc761baf0d683cb8dcf919f7f249b989803ecb95","sig":"e6c25fbe95461c063e60371542ebe864c3ba | | 56b8215a0432a34f73265af93b3ed884ef275ea2e9f333c5f1d81083bc052c2aa29e4c7bb6094c9e98af76d8fe78","kind":1,"tags":[],"pu | | bkey":"25a2192dcf34c3be326988b5c9f942aa96789899d15b59412602854a8723e9e8","content":"We're building Bitkey to | | eliminate the trade-offs in self-custody. And not just to bring new people into self-custody, but to make an | | incredible wallet for bitcoiners, too. \n\nAnd we're sharing what's next on our roadmap. We want to know what you're | | excited about and what you want to see next, so take a look | | here:\n\nhttps://bitkey.build/building-better-bitcoin-self-custody/","created_at":1745334479} | | | +-- reply --------------------------------------------------------------------------------------------------------- ---+{"id":"f141fe20ddc2f4c31124e5fffc761baf0d683cb8dcf919f7f249b989803ecb95","sig":"e6c25fbe95461c063e60371542ebe864c3ba56b8215a0432a34f73265af93b3ed884ef275ea2e9f333c5f1d81083bc052c2aa29e4c7bb6094c9e98af76d8fe78","kind":1,"tags":[],"pubkey":"25a2192dcf34c3be326988b5c9f942aa96789899d15b59412602854a8723e9e8","content":"We're building Bitkey to eliminate the trade-offs in self-custody. And not just to bring new people into self-custody, but to make an incredible wallet for bitcoiners, too. \n\nAnd we're sharing what's next on our roadmap. We want to know what you're excited about and what you want to see next, so take a look here:\n\nhttps://bitkey.build/building-better-bitcoin-self-custody/","created_at":1745334479} We're building Bitkey to eliminate the trade-offs in self-custody. And not just to bring new people into self-custody, but to make an incredible wallet for bitcoiners, too. And we're sharing what's next on our roadmap. We want to know what you're excited about and what you want to see next, so take a look here: https://bitkey.build/building-better-bitcoin-self-custody/
+- jack -- 1y ----------------------------------------------------------------------------------------------------[...]+ | | | transaction verification, fingerprint reset, private wallet balances, private purchasing, and buy with bitcoin. a | | lot coming to @Bitkey starting in may: https://bitkey.build/building-better-bitcoin-self-custody/ | | | +-- reply --------------------------------------------------------------------------------------------------------- ---+transaction verification, fingerprint reset, private wallet balances, private purchasing, and buy with bitcoin. a lot coming to @Bitkey starting in may: https://bitkey.build/building-better-bitcoin-self-custody/
+- jack -- 1y ----------------------------------------------------------------------------------------------------[...]+ | | | {"id":"f141fe20ddc2f4c31124e5fffc761baf0d683cb8dcf919f7f249b989803ecb95","sig":"e6c25fbe95461c063e60371542ebe864c3ba | | 56b8215a0432a34f73265af93b3ed884ef275ea2e9f333c5f1d81083bc052c2aa29e4c7bb6094c9e98af76d8fe78","kind":1,"tags":[],"pu | | bkey":"25a2192dcf34c3be326988b5c9f942aa96789899d15b59412602854a8723e9e8","content":"We're building Bitkey to | | eliminate the trade-offs in self-custody. And not just to bring new people into self-custody, but to make an | | incredible wallet for bitcoiners, too. \n\nAnd we're sharing what's next on our roadmap. We want to know what you're | | excited about and what you want to see next, so take a look | | here:\n\nhttps://bitkey.build/building-better-bitcoin-self-custody/","created_at":1745334479} | | | +-- reply --------------------------------------------------------------------------------------------------------- ---+{"id":"f141fe20ddc2f4c31124e5fffc761baf0d683cb8dcf919f7f249b989803ecb95","sig":"e6c25fbe95461c063e60371542ebe864c3ba56b8215a0432a34f73265af93b3ed884ef275ea2e9f333c5f1d81083bc052c2aa29e4c7bb6094c9e98af76d8fe78","kind":1,"tags":[],"pubkey":"25a2192dcf34c3be326988b5c9f942aa96789899d15b59412602854a8723e9e8","content":"We're building Bitkey to eliminate the trade-offs in self-custody. And not just to bring new people into self-custody, but to make an incredible wallet for bitcoiners, too. \n\nAnd we're sharing what's next on our roadmap. We want to know what you're excited about and what you want to see next, so take a look here:\n\nhttps://bitkey.build/building-better-bitcoin-self-custody/","created_at":1745334479} We're building Bitkey to eliminate the trade-offs in self-custody. And not just to bring new people into self-custody, but to make an incredible wallet for bitcoiners, too. And we're sharing what's next on our roadmap. We want to know what you're excited about and what you want to see next, so take a look here: https://bitkey.build/building-better-bitcoin-self-custody/
+- jack -- 1y ----------------------------------------------------------------------------------------------------[...]+ | | | interesting https://x.com/TheIshanGoswami/status/1914226695118168331 | | | +-- reply --------------------------------------------------------------------------------------------------------- ---+interesting https://x.com/TheIshanGoswami/status/1914226695118168331
+- jack -- 1y ----------------------------------------------------------------------------------------------------[...]+ | | | you can just understand things you don't read | | | +-- reply --------------------------------------------------------------------------------------------------------- ---+you can just understand things you don't read
+- jack -- 1y ----------------------------------------------------------------------------------------------------[...]+ | | | yes it did | | | +-- reply --------------------------------------------------------------------------------------------------------- ---+yes it did
+- jack -- 1y ----------------------------------------------------------------------------------------------------[...]+ | | | and...you can just say things you don't understand | | | | note:707423ee…9015 | | | +-- reply --------------------------------------------------------------------------------------------------------- ---+and...you can just say things you don't understand note:707423ee…9015