Commit Graph
39 Commits
Author SHA1 Message Date
Laan Tungir 0c340316ae Fix post-feed.html: reply composer width — add width:100% and box-sizing:border-box to .topPostComposerInput v0.7.36 2026-06-25 21:22:38 -04:00
Laan Tungir 313a55992f Change Nutzap button label from peanut emoji to text 'Nutzap' v0.7.35 2026-06-25 21:18:47 -04:00
Laan Tungir ece3a136c1 Redesign: Split Zap into two buttons (Zap + Nutzap) with separate counts and popups
- Split single Zap button into Zap ( Lightning) and Nutzap (🥜 Cashu) buttons
- Each button has its own count display and popup dialog
- Zap button: only sends Lightning zaps via Cashu melt, simplified dialog (no rail selector)
- Nutzap button: sends NIP-61 nutzaps, dialog shows recipient's accepted mints
- Removed capability badges (buttons themselves show capability via dimming)
- Removed separate nutzap count display (count now on Nutzap button)
- Added applyZapCapabilityDimming() — dims buttons based on resolveZapCapabilities
- Added promptNutzapDetails() to zaps.mjs — shows recipient mints and shared mint info
- Simplified promptZapDetails() — removed rail selector, Lightning only
- Added .interaction-item.nutzap and .dimmed CSS styles
- All colors use CSS variables only
v0.7.34
2026-06-25 21:13:55 -04:00
Laan Tungir 543ae6a1b3 Fix feed.html: disable inline comment rendering that caused flash of replies
Two fixes:
1. post-interactions2.mjs: only call addCommentToPost when getCommentsVisible() is true
2. feed.html: call cards.setCommentsVisible(false) after initPostCards to disable
   inline comment rendering for the new simplified feed

The old feed (feed-old.html) still has the Comments toggle and can re-enable them.
v0.7.33
2026-06-25 21:02:21 -04:00
Laan Tungir 508952a1ea Rename feed.html -> feed-old.html, feed2.html -> feed.html
The new simplified feed (formerly feed2.html) is now the primary feed page.
Updated post-feed.html back button to point to feed.html instead of feed2.html.
v0.7.32
2026-06-25 20:57:34 -04:00
Laan Tungir 15ef106eb5 Fix feed2.html: add missing walletGetBalance and walletGetMints imports
feed2.html was missing walletGetBalance and walletGetMints in both the
init-ndk.mjs import and the initPostCards call. Without these, the zap
rail selector and capability badges couldn't function — handleZapClick
couldn't resolve zap capabilities or show the rail toggle.
v0.7.31
2026-06-25 20:55:02 -04:00
Laan Tungir a42edcf6d6 Feed upgrade Phases 3-5: zap capability indicators, rail selector, balance checks
Phase 3 — Zap Capability Indicators:
- Added resolveZapCapabilities() to zaps.mjs with 5-min TTL cache
- Checks lud16 (from profile cache) for Lightning capability
- Checks kind 10019 (via walletFetchMintList) for nutzap capability
- Computes shared mints between sender and recipient
- Added capability badges (🥜/) to zap button in post-interactions.mjs
- Badges use var(--accent-color) for available, var(--muted-color) for unavailable
- Added proactive kind 10019 batch fetch for followed users in ndk-worker.js
- New IDB store ndk-nutzap-mintlists for persistent caching (6h TTL)
- Non-blocking: badges appear after async resolution

Phase 4 — Zap Rail Selector:
- Updated promptZapDetails with rail toggle (🥜 Nutzap /  Lightning)
- Shows Cashu balance and insufficient balance warning
- Shows shared mint info when nutzap selected
- Default rail: nutzap for <1000 sats, Lightning for >=1000 sats
- Updated handleZapClick to resolve capabilities and respect user's rail choice
- Added zap rail toggle CSS to client.css (all CSS variables)
- Wired walletGetBalance through post-interactions2.mjs and post-feed.html

Phase 5 — Balance Check and Error Handling:
- Pre-flight balance check before sending (hard stop if insufficient)
- Barely-sufficient balance confirmation dialog
- Friendly error messages for melt/swap/timeout/insufficient failures
- Post-zap balance refresh via ndkWalletBalance event

Review fix: threaded walletGetMints through post-interactions2.mjs and post-feed.html
so resolveZapCapabilities can compute shared mints correctly
v0.7.30
2026-06-25 20:48:38 -04:00
Laan Tungir 0267233f87 Fix post-feed.html reply composer formatting — add missing .topPostComposerInput CSS rule
The reply composer was missing the CSS rule that gives it visible formatting
(border, padding, min-height, border-radius). Copied the rule from post.html.
v0.7.29
2026-06-25 20:29:51 -04:00
Laan Tungir 6b45092bc8 Fix post-feed.html: recursive reply fetching for nested replies
Replies to replies don't carry the root post ID in their e tags, only their
immediate parent's ID. The old single-level #e filter missed nested replies.

Added fetchRepliesRecursive() which does breadth-first recursive fetching:
- Starts with root post ID, fetches direct replies
- For each reply found, fetches replies to THAT reply
- Continues up to 5 levels deep (REPLY_FETCH_MAX_DEPTH)
- Deduplicates by event ID
- Per-level timeout (8s) to guard against slow relays
- Real-time handler also triggers 1-level recursive fetch for new replies

This matches Amethyst's ThreadFilterAssemblerSubscription approach.
v0.7.28
2026-06-25 20:20:10 -04:00
Laan Tungir 6d39188967 Fix post-feed.html: remove collapse, fix missing reply, move composer to top
1. Removed collapse/expand functionality — all replies shown, no hidden counts
2. Fixed missing last reply — added safety check to ensure all fetched replies are rendered
3. Moved reply composer to top (under main post, before replies list)
v0.7.27
2026-06-25 20:00:43 -04:00
Laan Tungir c5f682c5fe Feed upgrade Phase 2.5: Threaded replies with vertical lines in post-feed.html
- Added computeReplyLevels() to compute reply depth from NIP-10 e tags
- Added buildDepthFirstOrder() for depth-first thread sorting (root first, children grouped by parent chronologically)
- Render vertical indent lines using CSS variables (var(--muted-color) for non-selected, var(--accent-color) for focused post)
- Added collapse/expand functionality with hidden reply count
- Added focused post highlight via ?focus=<eventId> URL param
- Real-time subscriptions preserved — new replies appear in correct threaded position
- All colors use CSS variables — no hardcoded colors
v0.7.26
2026-06-25 19:53:36 -04:00
Laan Tungir 073fb9e9af Feed upgrade Phase 1 & 2: simplified feed2.html + post-feed.html thread page
Phase 1 (feed2.html):
- Removed inline comment rendering and Comments toggle button
- Comment button now opens post-feed.html?event=<eventId> in new tab
- Removed inline reply composer (kept quote composer)
- Fixed missing queryCache dependency in initPostCards
- Fixed hardcoded color:red -> var(--primary-color)

Phase 2 (post-feed.html):
- New post thread page showing post + all replies + inline composer
- Parses ?event=<hex|nevent|note> URL parameter
- Fetches replies via { kinds: [1], '#e': [postId] }
- Real-time subscriptions for new replies
- Comment button on replies opens sub-threads in new tabs
- Error states for missing/invalid/not-found posts
- All CSS uses variables, no hardcoded colors
v0.7.25
2026-06-25 19:45:36 -04:00
Laan Tungir 2f45c78741 Lightweight 17375-only republish: skip 7375 rewrite, no deletions needed
Kind 17375 is a replaceable event (NIP-60, d-tag=''), so publishing a new
one automatically supersedes the old one on relays. The republish now only:
1. ensureDirectNutzapP2pk() - generate privkey if missing
2. Build NIP-60 tag-array payload
3. NIP-44 encrypt + sign + publish single 17375 event
That's 1 signing round-trip instead of 100+.
Reduced timeout from 120s back to 30s.
Bumped WORKER_REVISION to nip60-lightweight-republish-1.
v0.7.24
2026-06-25 14:05:33 -04:00
Laan Tungir 6d41680297 Increase walletRepublish timeout to 120s for large wallets
The 45s timeout was too short for wallets with many old 7375 token events —
each deletion requires a signing round-trip through the nos2x extension.
v0.7.23
2026-06-25 14:01:01 -04:00
Laan Tungir b2a50376df Ensure nutzap privkey is always included in kind 17375 republish
- Added ensureDirectNutzapP2pk() call in publishDirectProofs before building wallet payload
- This auto-generates a privkey if one wasn't hydrated from the old 17375 event
- Bumped WORKER_REVISION to nip60-privkey-ensure-1
v0.7.22
2026-06-25 13:48:34 -04:00
Laan Tungir 3c4be89ead Add Republish Wallet button to force kind 17375 republish in NIP-60 format
- Added walletRepublish worker handler that calls publishDirectProofs()
- Added walletRepublish() to init-ndk.mjs
- Added republishWallet() to cashu-wallet.mjs controller
- Added 'Republish Wallet (kind 17375)' button to cashu.html sidenav
- Bumped WORKER_REVISION to nip60-republish-1 and cashu-wallet.mjs cache-bust
v0.7.21
2026-06-25 13:39:32 -04:00
Laan Tungir 89d2c259f6 Fix event-management Refresh Kind to honor NIP-65 write-only relay designation and not read from write-only relays like sendit.nosflare.com v0.7.20 2026-06-25 13:34:24 -04:00
Laan Tungir 7b77da7349 Fix NIP-60 kind 17375 content format: use tag-array instead of proprietary object
- Changed walletPayloadObj from {mints, nutzap} object to [['mint',url],['privkey',hex]] tag-array
- Removed non-standard pubkey tag from 17375 public tags (belongs on kind 10019)
- Added parseWalletContent() helper that reads both new tag-array and legacy object formats
- Added migrateLegacyWalletEventIfNeeded() for one-time auto-migration of old wallets
- Bumped WORKER_REVISION to nip60-tagarray-fix-1 to force SharedWorker restart
- Added wallet-page.md plan for unified wallet.html (Bitcoin, Cashu, NWC, CLINK)
v0.7.19
2026-06-25 12:24:48 -04:00
Laan Tungir 38661b7fb6 . v0.7.18 2026-06-14 08:07:35 -04:00
Laan Tungir eed00f67cf Migrate music playlists to Gruuv a-tag hydration and add optional lazy FRIENDS loading v0.7.17 2026-06-09 15:15:08 -04:00
Laan Tungir 8998c5664d Re-sort projects table by 30-day commits after lazy commit counts load v0.7.16 2026-05-29 10:58:32 -04:00
Laan Tungir e943870d77 Port projects page functionality into template with public/no-login mode and project-native styling v0.7.15 2026-05-28 14:44:00 -04:00
Laan Tungir 08fc661077 Prioritize live window.nostr authState for active signing port registration v0.7.14 2026-05-27 15:48:34 -04:00
Laan Tungir 92430296c2 Fix shared-worker signer authority routing for multi-tab nsigner v0.7.13 2026-05-27 15:27:24 -04:00
Laan Tungir bc8e2f46fd Improve shared worker nsigner routing with explicit active signing port registration v0.7.12 2026-05-27 15:17:45 -04:00
Laan Tungir bd713d01f9 Fix stream site URL template editing and add NIP-53 starts/ends tags v0.7.11 2026-05-03 07:00:46 -04:00
Laan Tungir 7ce913997a This is a meaningful git commit message v0.7.10 2026-04-28 12:33:29 -04:00
Laan Tungir 63f5097a6d This is a meaningful git commit message v0.7.9 2026-04-28 10:44:22 -04:00
Laan Tungir 89fed0c818 This is a meaningful git commit message v0.7.8 2026-04-28 10:39:51 -04:00
Laan Tungir 0c9e8bebcb Implement document page chat binding, JSON editor flow, and resizable columns v0.7.7 2026-04-28 10:00:02 -04:00
Laan Tungir 22334ad432 . v0.7.6 2026-04-21 06:32:47 -04:00
Laan Tungir 3ff4bc532b This is a meaningful git commit message v0.7.5 2026-04-19 14:31:26 -04:00
Laan Tungir dc5b97ecf4 Add music player auto-save toggle and Blossom upload for now-playing tracks v0.7.4 2026-04-19 14:00:32 -04:00
Laan Tungir a2f7a7fceb Fix music optional auth to detect existing logged-in session on page load v0.7.3 2026-04-19 13:43:13 -04:00
Laan Tungir 9c85c8ec5e Vendor CDN scripts locally for FIPS HTTP compatibility v0.7.2 2026-04-19 13:37:32 -04:00
Laan Tungir 7f86ca8e66 This is a meaningful git commit message v0.7.1 2026-04-17 16:59:07 -04:00
Laan Tungir ed39a7ee4a Release v0.7.0 v0.1.0 v0.7.0 2026-04-17 16:56:46 -04:00
Laan Tungir fe08e675c6 New name, new life v0.0.1 2026-04-17 16:53:38 -04:00
Laan Tungir a8bbbbafb9 rename to client 2026-04-17 16:52:51 -04:00