Bump to v0.9.2 — relay status, toasts, debug panel, relay UX

This commit is contained in:
Jure
2026-03-23 19:18:10 +01:00
parent 1f50afded7
commit 97fd6c55bf
7 changed files with 35 additions and 21 deletions

View File

@@ -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. > **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.1Live Feed & Relay Reliability ### New in v0.9.2Relay Status, Toasts & Debug Tools
Fundamental upgrade to how Wrystr connects to relays and delivers content. Better visibility into what's happening under the hood.
- **Live streaming feed** — persistent relay subscriptions deliver new notes in real-time; no manual refresh needed - **Relay status badge** — compact "8/12 relays" indicator in feed header with color coding (green/yellow/red); hover for per-relay connection details
- **Timeouts on all relay fetches** — every relay query across the entire codebase now has a timeout (512s). No view can hang indefinitely — Articles, DMs, Notifications, Zaps, Trending all fixed - **Toast notifications** — transient messages for connection events: "Connection lost", "Back online", "Resetting relay connections", "Relays reconnected"
- **Fixed relay death spiral** — removed aggressive liveness probe that was disconnecting working relays; relay connections now stay stable - **Per-tab "last updated" timestamp** — shows how fresh each feed tab is; Global/Following/Trending tracked independently
- **NDK subscription hygiene** — prevents stale subscription reuse; `since` filters ensure feed freshness - **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
- **Feed diagnostics** — developer console helpers for tracking fetch timing, event freshness, and relay states - **Consolidated relay management** — all relay controls (add, remove, health check, publish list, recommendations) now in one Relays view; removed duplicate relay section from Settings
- **Background relay recovery** — automatic NDK instance reset after 30s of continuous failure; preserves login state - **Per-relay remove button** — hover any relay card to remove it individually
- **Fixed Articles Latest** — no longer wipes results on follow list changes - **Full NIP badge display** — relay cards now show all supported NIPs, not just a filtered subset
- **Fixed Zap History** — proper loading state; increased timeout for zap queries - **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 ### 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 - Nested thread trees, reply-to-any-note, recursive reply fetching, ancestor chain, multi-level back navigation, thread collapse, mute filtering in trees, podcast subscriptions

View File

@@ -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 **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/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/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/lib/lightning/` — NWC client (`nwc.ts`); Lightning payment logic
- `src/hooks/``useProfile.ts`, `useReactionCount.ts` - `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 - 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 - **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 - Search: NIP-50 full-text, hashtag (#t filter), people, articles
- Settings: relay add/remove (persisted to localStorage), NWC URI, npub copy - Settings: NWC wallet, notifications, data export, identity, mute lists
- **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 - **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 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) - **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 - **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 - **Reading list tracking** — read/unread state on bookmarked articles (localStorage-backed), unread dot indicators, sidebar badge, auto-mark-read on open

View File

@@ -1,6 +1,6 @@
# Maintainer: hoornet <hoornet@users.noreply.github.com> # Maintainer: hoornet <hoornet@users.noreply.github.com>
pkgname=wrystr pkgname=wrystr
pkgver=0.9.1 pkgver=0.9.2
pkgrel=1 pkgrel=1
pkgdesc="Cross-platform Nostr desktop client with Lightning integration" pkgdesc="Cross-platform Nostr desktop client with Lightning integration"
arch=('x86_64') arch=('x86_64')

View File

@@ -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 - **Notifications** — background poller (60s) for mentions, zaps, new followers; each type independently toggleable; OS push notifications; 🔔 in sidebar with unread badge
**Relay & network** **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 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 - 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 from Settings - **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** **Lightning & zaps**
- **Per-account NWC wallet** — each account remembers its own Lightning wallet; switching accounts loads the correct one automatically - **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 - **NIP-05 verification badges** — cached verification with green checkmark on note cards
**Performance & UX** **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 - **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 - **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 - **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. See [ROADMAP.md](./ROADMAP.md) for the full prioritised next steps.
Up next: Up next:
- Color themes / light mode
- UI polish and visual makeover - UI polish and visual makeover
- Nostr NIP research sprint — expanding protocol support - Nostr NIP research sprint — expanding protocol support
- Web of Trust scoring - Web of Trust scoring

View File

@@ -1,7 +1,7 @@
{ {
"name": "wrystr", "name": "wrystr",
"private": true, "private": true,
"version": "0.9.1", "version": "0.9.2",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",

View File

@@ -1,6 +1,6 @@
[package] [package]
name = "wrystr" name = "wrystr"
version = "0.9.1" version = "0.9.2"
description = "Cross-platform Nostr desktop client with Lightning integration" description = "Cross-platform Nostr desktop client with Lightning integration"
authors = ["hoornet"] authors = ["hoornet"]
edition = "2021" edition = "2021"

View File

@@ -1,7 +1,7 @@
{ {
"$schema": "https://schema.tauri.app/config/2", "$schema": "https://schema.tauri.app/config/2",
"productName": "Wrystr", "productName": "Wrystr",
"version": "0.9.1", "version": "0.9.2",
"identifier": "com.hoornet.wrystr", "identifier": "com.hoornet.wrystr",
"build": { "build": {
"beforeDevCommand": "npm run dev", "beforeDevCommand": "npm run dev",