From 97fd6c55bf699e3c9568a8ae6520bfef83c3d210 Mon Sep 17 00:00:00 2001 From: Jure <44338+hoornet@users.noreply.github.com> Date: Mon, 23 Mar 2026 19:18:10 +0100 Subject: [PATCH] =?UTF-8?q?Bump=20to=20v0.9.2=20=E2=80=94=20relay=20status?= =?UTF-8?q?,=20toasts,=20debug=20panel,=20relay=20UX?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/release.yml | 25 +++++++++++++++---------- CLAUDE.md | 10 +++++++--- PKGBUILD | 2 +- README.md | 13 +++++++++---- package.json | 2 +- src-tauri/Cargo.toml | 2 +- src-tauri/tauri.conf.json | 2 +- 7 files changed, 35 insertions(+), 21 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7d94aac..8fb4eae 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -69,16 +69,21 @@ jobs: > **Windows note:** The installer is not yet code-signed. Windows SmartScreen will show an "Unknown publisher" warning — click "More info → Run anyway" to install. - ### New in v0.9.1 — Live Feed & Relay Reliability - Fundamental upgrade to how Wrystr connects to relays and delivers content. - - **Live streaming feed** — persistent relay subscriptions deliver new notes in real-time; no manual refresh needed - - **Timeouts on all relay fetches** — every relay query across the entire codebase now has a timeout (5–12s). No view can hang indefinitely — Articles, DMs, Notifications, Zaps, Trending all fixed - - **Fixed relay death spiral** — removed aggressive liveness probe that was disconnecting working relays; relay connections now stay stable - - **NDK subscription hygiene** — prevents stale subscription reuse; `since` filters ensure feed freshness - - **Feed diagnostics** — developer console helpers for tracking fetch timing, event freshness, and relay states - - **Background relay recovery** — automatic NDK instance reset after 30s of continuous failure; preserves login state - - **Fixed Articles Latest** — no longer wipes results on follow list changes - - **Fixed Zap History** — proper loading state; increased timeout for zap queries + ### New in v0.9.2 — Relay Status, Toasts & Debug Tools + Better visibility into what's happening under the hood. + - **Relay status badge** — compact "8/12 relays" indicator in feed header with color coding (green/yellow/red); hover for per-relay connection details + - **Toast notifications** — transient messages for connection events: "Connection lost", "Back online", "Resetting relay connections", "Relays reconnected" + - **Per-tab "last updated" timestamp** — shows how fresh each feed tab is; Global/Following/Trending tracked independently + - **Subscription debug panel** — Ctrl+Shift+D toggles a hidden panel showing NDK uptime, live subscription status, per-relay state, feed timestamps, and recent diagnostics log + - **Consolidated relay management** — all relay controls (add, remove, health check, publish list, recommendations) now in one Relays view; removed duplicate relay section from Settings + - **Per-relay remove button** — hover any relay card to remove it individually + - **Full NIP badge display** — relay cards now show all supported NIPs, not just a filtered subset + - **Status dot tooltips** — hover relay status dots for explanations (Online, Slow, Offline, Awaiting check) + - **Wider scrollbar** — 12px for easier mouse dragging on long threads + - **Acknowledgements section** — added to README + + ### Previous: v0.9.1 — Live Feed & Relay Reliability + - Live streaming feed, timeouts on all relay fetches, fixed relay death spiral, NDK subscription hygiene, feed diagnostics, background relay recovery ### Previous: v0.9.0 — Thread Conversation Overhaul - Nested thread trees, reply-to-any-note, recursive reply fetching, ancestor chain, multi-level back navigation, thread collapse, mute filtering in trees, podcast subscriptions diff --git a/CLAUDE.md b/CLAUDE.md index 67cb755..2112564 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -45,7 +45,7 @@ CI triggers on the tag and builds all three platforms (Ubuntu, Windows, macOS AR **Frontend** (`src/`): React 19 + TypeScript + Vite + Tailwind CSS 4 - `src/App.tsx` — root component; shows `OnboardingFlow` for new users, then view routing via UI store -- `src/stores/` — Zustand stores per domain: `feed.ts`, `user.ts`, `ui.ts`, `lightning.ts`, `drafts.ts`, `relayHealth.ts`, `bookmark.ts` +- `src/stores/` — Zustand stores per domain: `feed.ts`, `user.ts`, `ui.ts`, `lightning.ts`, `drafts.ts`, `relayHealth.ts`, `bookmark.ts`, `toast.ts` - `src/lib/nostr/` — NDK wrapper split into domain modules (`core.ts`, `notes.ts`, `social.ts`, `articles.ts`, `engagement.ts`, `dms.ts`, `bookmarks.ts`, `muting.ts`, `search.ts`, `relays.ts`, `trending.ts`); barrel `index.ts` re-exports all; all Nostr calls go through here - `src/lib/lightning/` — NWC client (`nwc.ts`); Lightning payment logic - `src/hooks/` — `useProfile.ts`, `useReactionCount.ts` @@ -105,9 +105,13 @@ CI triggers on the tag and builds all three platforms (Ubuntu, Windows, macOS AR - Zaps: NWC wallet connect (NIP-47) + NIP-57 via NDKZapper - **Advanced search** — query parser with modifiers: `by:author`, `mentions:npub`, `kind:N`, `is:article`, `has:image`, `since:date`, `until:date`, `#hashtag`, `"phrase"`, boolean `OR`; NIP-05 resolution; client-side content filters; search help panel - Search: NIP-50 full-text, hashtag (#t filter), people, articles -- Settings: relay add/remove (persisted to localStorage), NWC URI, npub copy -- **Relay health checker** — NIP-11 info fetch, WebSocket latency probing, online/slow/offline status; expandable cards with supported NIPs, software info; "Remove dead" + "Republish list" workflow +- Settings: NWC wallet, notifications, data export, identity, mute lists +- **Relay management** — consolidated Relays view with add/remove individual relays, health checker (NIP-11 info, WebSocket latency, online/slow/offline status), expandable cards with all supported NIPs, per-relay remove button, "Remove dead" workflow, publish relay list (NIP-65) - **Relay recommendations** — suggest relays based on follows' NIP-65 relay lists; "Discover relays" button with follow count, one-click "Add" +- **Relay status badge** — compact "N/M relays" indicator in feed header with color coding; hover tooltip shows per-relay connection state +- **Toast notifications** — transient status messages for relay connection events (lost, reconnecting, back online) +- **Per-tab "last updated" timestamp** — relative time in feed header, tracked independently per tab (global/following/trending) +- **Subscription debug panel** — Ctrl+Shift+D toggles hidden panel showing NDK uptime, live sub status, per-relay state, feed timestamps, recent diagnostics log - **Data export** — export bookmarks, follows, and relay list as JSON via native save dialog (Tauri plugin-dialog + plugin-fs) - **Profile banner polish** — hero-height banner (h-36), click-to-lightbox, avatar overlaps banner edge with ring, loading shimmer - **Reading list tracking** — read/unread state on bookmarked articles (localStorage-backed), unread dot indicators, sidebar badge, auto-mark-read on open diff --git a/PKGBUILD b/PKGBUILD index ac66359..f1e3c95 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -1,6 +1,6 @@ # Maintainer: hoornet pkgname=wrystr -pkgver=0.9.1 +pkgver=0.9.2 pkgrel=1 pkgdesc="Cross-platform Nostr desktop client with Lightning integration" arch=('x86_64') diff --git a/README.md b/README.md index 35d33cd..7bf8aab 100644 --- a/README.md +++ b/README.md @@ -65,10 +65,12 @@ sudo dnf install gstreamer1-plugins-base gstreamer1-plugins-good gstreamer1-liba - **Notifications** — background poller (60s) for mentions, zaps, new followers; each type independently toggleable; OS push notifications; 🔔 in sidebar with unread badge **Relay & network** -- **Relay health checker** — NIP-11 info fetch, WebSocket latency probing, online/slow/offline classification; expandable cards show supported NIPs, software, description; "Remove dead" strips offline relays, "Republish list" publishes cleaned NIP-65 relay list; auto-checks on mount +- **Relay status badge** — compact "8/12 relays" indicator in feed header with color coding (green/yellow/red by connection ratio); hover shows per-relay connection status +- **Toast notifications** — transient status messages for relay events: "Connection lost — reconnecting", "Back online", "Relays reconnected" +- **Relay health checker** — NIP-11 info fetch, WebSocket latency probing, online/slow/offline classification; expandable cards show all supported NIPs, software, description; per-relay remove button; "Remove dead" strips offline relays; "Publish list" publishes NIP-65 relay list; auto-checks on mount - **Relay recommendations** — discover relays based on your follows' NIP-65 relay lists; shows follow count, one-click "Add" -- Relay management: add/remove relays with live connection status -- **NIP-65 outbox model** — reads user relay lists (kind 10002) so you see notes from people who publish to their own relays; publish your own relay list to Nostr from Settings +- Relay management: add/remove relays, all in one consolidated Relays view +- **NIP-65 outbox model** — reads user relay lists (kind 10002) so you see notes from people who publish to their own relays; publish your own relay list to Nostr **Lightning & zaps** - **Per-account NWC wallet** — each account remembers its own Lightning wallet; switching accounts loads the correct one automatically @@ -89,7 +91,9 @@ sudo dnf install gstreamer1-plugins-base gstreamer1-plugins-good gstreamer1-liba - **NIP-05 verification badges** — cached verification with green checkmark on note cards **Performance & UX** -- **Resilient relay connectivity** — all relay queries have timeouts (no more infinite loading); automatic reconnection with NDK instance reset as last resort; feed diagnostics for debugging +- **Resilient relay connectivity** — all relay queries have timeouts (no more infinite loading); automatic reconnection with NDK instance reset as last resort; toast notifications for connection events; feed diagnostics for debugging +- **Per-tab "last updated" timestamp** — relative time indicator in feed header shows how fresh each tab's data is +- **Subscription debug panel** — `Ctrl+Shift+D` toggles a hidden panel showing NDK uptime, live subscription status, per-relay state, feed timestamps, and recent diagnostics - **Auto-updater** — "Update & restart" banner when a new version is available - **SQLite note cache** — feed loads instantly from local cache on startup; profiles cached for immediate avatar display - **Data export** — export bookmarks, follows, and relay list as JSON via native save dialog @@ -153,6 +157,7 @@ npm run tauri build # production binary See [ROADMAP.md](./ROADMAP.md) for the full prioritised next steps. Up next: +- Color themes / light mode - UI polish and visual makeover - Nostr NIP research sprint — expanding protocol support - Web of Trust scoring diff --git a/package.json b/package.json index 7487cbe..30dc8b7 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "wrystr", "private": true, - "version": "0.9.1", + "version": "0.9.2", "type": "module", "scripts": { "dev": "vite", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 25c22e2..8497242 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "wrystr" -version = "0.9.1" +version = "0.9.2" description = "Cross-platform Nostr desktop client with Lightning integration" authors = ["hoornet"] edition = "2021" diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 235bd5c..5ee6c72 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "Wrystr", - "version": "0.9.1", + "version": "0.9.2", "identifier": "com.hoornet.wrystr", "build": { "beforeDevCommand": "npm run dev",