212 Commits

Author SHA1 Message Date
Jure
5e5b3a5d48 Fix CI: sync Tauri plugin versions (fs 2.5.0, dialog 2.7.0) v0.12.2 2026-04-05 14:00:12 +02:00
Jure
2083e08baa Bump to v0.12.2 — Vega public relay as default 2026-04-05 13:45:57 +02:00
Jure
4235f9e059 Add relay.veganostr.com as default relay with migration 2026-04-05 13:23:51 +02:00
Jure
05f718b092 Add signature verification instructions to README 2026-04-04 21:31:36 +02:00
Jure
5d78aac091 Bump to v0.12.1 — Media feed, Trending retry, read-only banner v0.12.1 2026-04-04 21:09:41 +02:00
Jure
fa1eb0d89b Make logged-out state visually obvious with top banner 2026-04-04 21:07:09 +02:00
Jure
a7088a494c Fix empty Trending feed: retry on empty relay response 2026-04-04 20:54:25 +02:00
Jure
9679c6f02c Fix empty Media feed: use 24h window instead of 2h 2026-04-04 20:53:02 +02:00
Jure
63f2803953 Bump to v0.12.0 — Podcasts & Value 4 Value v0.12.0 2026-04-04 20:27:48 +02:00
Jure
b155505828 Stop media playback when navigating between views
Subscribe to view changes in UI store and pause all video/audio
elements inside <main> when the view switches. Prevents double
audio when opening a thread from a note with playing video.
Podcast player audio is outside <main> and unaffected.
2026-04-04 19:07:49 +02:00
Jure
4a7f616c4b Stop V4V streaming when audio playback fails
When audio hits the 15s loading timeout or fires an error event,
stop any active V4V streaming to prevent phantom sat payments
on episodes that aren't actually playing.
2026-04-04 19:04:23 +02:00
Jure
ebf964980b Add V4V sidebar section with dashboard, settings, and history
- New V4V store with budget tracking, cap enforcement, and history
- Dashboard: live streaming status, per-episode + weekly budget bars, stats
- Settings: auto-enable toggle (guarded by caps), per-episode cap, weekly
  budget, default rate, info icons
- History: expandable list of past V4V episodes with recipient breakdowns
- Budget enforcement: streaming stops with toast when cap is hit
- Auto-streaming: starts automatically for V4V episodes when enabled
- Cap reached state: dashboard shows red card, ticker shows "(capped)"
- V4VIndicator: slimmed popup, AUTO badge, "open v4v" nav link
- Fix duplicate history entries on cap stop
2026-04-04 19:03:00 +02:00
Jure
1d5d43ae78 V4V: keysend payments, recipient breakdown, and episode nudge
- Add payKeysendViaNWC for node pubkey recipients with TLV records
- Route V4V payments to keysend or LNURL-pay based on recipient type
- Show recipient split breakdown in V4V panel (name + percentage)
- Add V4V nudge: brief tooltip when V4V episode starts (once per session)
- Highlight V4V button in amber when episode has recipients but streaming off
- Enhanced V4V badge in episode list with lightning icon and pill style
2026-04-04 17:58:14 +02:00
Jure
5444214041 Fix podcast player stability, V4V payments, and Lightning address
- Add audio.load() reset to prevent cascading failures between episodes
- Add onPlaying event handler for reliable post-buffer playback in WebKitGTK
- Add 15s loading timeout with user-friendly error for broken audio URLs
- Fix V4V LNURL-pay: use Tauri HTTP plugin instead of CORS-blocked browser fetch
- Fix Podcast Index API: use Tauri HTTP plugin for V4V enrichment
- Fall back to Podcast Index enclosure URL when Fountain.fm CDN is broken
- Update Lightning address to jure@getalby.com (Alby cloud migration)
- Add broad HTTPS scope for LNURL-pay across Lightning providers
2026-04-03 22:27:34 +02:00
Jure
c83afeabc4 Enrich Fountain.fm episodes with V4V recipients from Podcast Index
Fountain-resolved episodes now get V4V payment splits by looking up
the show on Podcast Index and matching the episode. Enables streaming
sats to podcast creators directly from the player bar.
2026-04-03 15:20:30 +02:00
Jure
aa57ff4cd8 Fix Fountain.fm episode cards: use Tauri HTTP plugin for CORS bypass
- Import fetch from @tauri-apps/plugin-http (browser fetch was CORS-blocked)
- Add fountain.fm to Tauri HTTP capability scope
- Extract og:audio meta tag for reliable audio URL resolution
- Parse OG title into show name + episode title
2026-04-03 15:01:06 +02:00
Jure
ba3ef9e2c8 Polish: reduced motion, toast animation, token consistency
- Add prefers-reduced-motion media query for accessibility
- Add slide-in animation for toast notifications
- Standardize transition durations across note cards
- Replace remaining hard-coded text-white with theme tokens
2026-04-02 18:30:10 +02:00
Jure
ae5b9a444c Optimize rendering: memo, granular selectors, code splitting
- React.memo on NoteCard and ArticleCard to skip re-renders
- Granular Zustand selectors in Feed.tsx and NoteCard.tsx
- Lazy-load 19 views with React.lazy + Suspense boundary
2026-04-02 18:03:19 +02:00
Jure
fd26a743d7 Fix text-dim and text-muted contrast to meet WCAG AA 4.5:1
All text-dim values now meet 4.5:1 minimum contrast ratio against
their theme background. Midnight/Light text-muted also bumped from
borderline 4.42:1 to compliant. Colors stay on-hue — just brighter
(dark themes) or darker (light theme) to cross the threshold.
2026-04-02 17:48:25 +02:00
Jure
1006b1a1f0 Normalize theme tokens: accent-text, zap-text, remove hard-coded colors
- Add accent-text and zap-text tokens to all 7 themes for proper contrast
  on accent/zap-colored buttons (fixes white-on-light-accent in Catppuccin,
  Nord Frost, Hackerman, Sepia, Gruvbox)
- Replace text-white → text-accent-text on all accent buttons (20+ instances)
- Replace text-white → text-zap-text on zap buttons
- Replace hover:text-white → hover:text-accent-text on follow/action buttons
- Replace bg-blue-500 → bg-accent in FountainCard (theme-aware)
- Remaining text-white is correct: overlays on bg-black, danger badges
2026-04-02 17:33:59 +02:00
Jure
1fd613425d Harden accessibility: ARIA roles, semantic buttons, alt text, form labels
- Replace clickable divs with semantic <button> elements (NoteCard, SearchView)
- Add role="dialog", aria-modal, aria-labelledby on all modals (Login, Quote, Zap, Lightbox)
- Add role="presentation" on overlay backdrops (NoteCard menu, emoji pickers)
- Add aria-label to all icon-only buttons (close, nav arrows, context menu)
- Add aria-expanded to context menu toggle
- Add meaningful alt text to all 35+ images (avatars, covers, thumbnails, media)
- Add aria-label to form inputs (search, onboarding login)
2026-04-02 17:01:02 +02:00
Jure
f1781691c5 Add .agents/ to gitignore for Impeccable design skills 2026-04-02 15:33:25 +02:00
Jure
9477b6d68e Bump to v0.11.0 — embedded relay, naddr links, new themes v0.11.0 2026-04-02 15:28:35 +02:00
Jure
51a010bfc5 Mark new followers with badge, sort to top of follows list
Track new follower pubkeys in notification store. When user opens
the follows view, new followers are highlighted with an accent "new"
badge and sorted to the top. Badge clears on view open (one-time).
2026-04-01 19:23:23 +02:00
Jure
6ae795e48d Replace themes (Sepia, Nord Frost), batch bookmark fetch, debounce bookmark publish
- Replace Solarized (low contrast) with Sepia (warm coffee tones)
- Replace Tokyo Night with Nord Frost (cool blue-grey, brighter)
- Bookmark fetch uses single batch filter instead of one-by-one (much faster)
- Debounce bookmark publish to prevent race conditions with replaceable events
2026-04-01 16:01:38 +02:00
Jure
355f412455 Increase Large/XL font sizes, enlarge account switcher, fix relay drop and bookmark persistence
- Large font 16→17px, Extra Large 18→20px
- Account avatar w-8→w-10, name and arrow text larger
- resetNDK preserves outbox-discovered relay URLs instead of dropping to fallback 3
- BookmarkView merges relay results with cache instead of replacing, so cached notes survive timeouts
2026-04-01 13:49:37 +02:00
Jure
a65b2d2f95 Resolve naddr references to clickable named links
Parse naddr bech32 references as a dedicated segment type with kind,
pubkey, and identifier. NaddrName component fetches the referenced event
and displays its title/name/d-tag. Clicking navigates to article view
(kind 30023) or author profile (other kinds). Supports emoji sets,
app listings, and other addressable content.
2026-04-01 13:33:31 +02:00
Jure
e3f5020eeb Add embedded Nostr relay with catch-up sync on startup
Embedded relay (strfry-lite in Rust) stores events locally in SQLite.
On startup, syncs user notes, follow feed (24h), mentions (7d), and
profile/contacts from remote relays into the local relay. Uses since
timestamp for incremental syncs. Toggle in Settings with event count
and DB size display. Add webkit2gtk GPU acceleration workaround and
connectToRelays safety timeout for NDK hang.
2026-04-01 12:10:11 +02:00
Jure
c1029327e7 Fix React error #31 crash from malformed Nostr profiles
Malformed profiles with non-string fields (e.g. nip05: {}) crashed
React's entire render tree in production. Add typeof guards and
profileName() utility across all components that render profile data.
Add ErrorBoundary in main.tsx to show crash details instead of blank screen.
2026-04-01 12:09:57 +02:00
Jure
5a9d387923 Add PHASE6.md to gitignore 2026-03-31 16:08:07 +02:00
Jure
82d6d32360 Update README and roadmap: rename notice, group chat + communities on roadmap 2026-03-31 15:30:37 +02:00
Jure
3d6ab39bfe Thread focus: auto-expand collapsed replies, debounced scroll, visible highlight; persist script filter v0.10.1 2026-03-31 08:35:37 +02:00
Jure
c35e734310 Fix reply-to label showing root author instead of immediate parent 2026-03-31 07:07:52 +02:00
Jure
91ddfddf53 Fix relay dedup: normalize URLs to prevent trailing-slash duplicates 2026-03-31 06:45:55 +02:00
Jure
f2d51fba31 Bump to v0.10.1 — search resilience, nostr: URI prefix support 2026-03-31 06:35:25 +02:00
Jure
3ac3e11d3c Fix search: independent relay queries, nostr: URI prefix, add nostr.wine 2026-03-31 06:33:34 +02:00
Jure
6a7a0bccf3 Bump to v0.10.0 — paste nevent/naddr in search, copy npub from profiles v0.10.0 2026-03-30 21:48:30 +02:00
Jure
d5eeb2d819 Update AUR package name to vega-nostr-git (vega-git was taken) 2026-03-30 21:27:50 +02:00
Jure
f7b5394902 Remove accidentally committed artifacts, update .gitignore
squashfs-root (old AppImage), test screenshots, and stray PNGs
should not be in the repo.
2026-03-30 21:14:26 +02:00
Jure
5cbaa7b741 Rename Wrystr to Vega
Named after Jurij Vega (1754-1802), Slovenian mathematician who made
knowledge accessible through his logarithm tables. Rebrand before
OpenSats application (April 1).

- Product name, window title, identifiers, binary name all renamed
- Cargo package: wrystr -> vega, wrystr_lib -> vega_lib
- PKGBUILD: wrystr -> vega (new AUR package name)
- Release workflow: artifact names, release text updated
- README: new tagline referencing Jurij Vega
- DB migration: auto-renames wrystr.db -> vega.db on first launch
- Keyring service name kept as "wrystr" for backward compatibility
- localStorage keys kept as wrystr_* to preserve existing user data

Pending manual steps:
- Rename GitHub repo hoornet/wrystr -> hoornet/vega
- Create new AUR package vega-git, orphan wrystr-git
- Update local .desktop launcher
2026-03-30 21:14:02 +02:00
Jure
383634fb56 Fix zap hang from dead outbox relay, add note preview to zap history
Override NDK default outbox relays (purplepag.es DNS failure was stalling
getZapInfo), add 45s zap timeout, disable outbox on NWC instance, fix
follower notification dedup in poller. Zap history rows now show a
clickable preview of the original zapped note.
2026-03-30 20:23:32 +02:00
Jure
1d86023779 Bump to v0.9.11 — notification cleanup, bookmark fixes
Follower notifications moved to Follows-only, deduped by pubkey.
Article bookmarks now appear under Articles tab. Updated docs.
v0.9.11
2026-03-30 08:32:28 +02:00
Jure
a507841292 Hide follower events from notifications list, fix article bookmark tab
Follower notifications (kind 3) now only appear in the Follows
badge, not in the Notifications list where they were confusing
since clicking them shows a contact list, not a note.

Articles bookmarked via e-tag (pre-fix) now correctly appear
under the Articles tab instead of Notes.
2026-03-30 08:27:26 +02:00
Jure
6ed0b50d33 Fix article bookmarks using note-style e tag instead of a tag
ArticleView was using addBookmark(eventId) which saves an e tag,
putting articles in the Notes tab. Now uses addArticleBookmark
with the 30023:pubkey:d-tag address so articles appear correctly
under the Articles tab in bookmarks.
2026-03-30 08:19:18 +02:00
Jure
5e8e548c42 Dedup kind 3 follower notifications by pubkey
Kind 3 events are replaceable — the same follower generates a new
event ID on every contact list update. Dedup by pubkey on load and
merge to prevent the notifications list from filling with repeats.
2026-03-29 23:38:14 +02:00
Jure
fa2eb42bf9 Fix repeated follower OS notifications
Kind 3 events are replaceable — same person produces a new event
ID every time they update their contact list. Dedup followers by
pubkey instead of event ID to prevent re-notifying.
2026-03-29 23:31:37 +02:00
Jure
56584d9b08 Bump to v0.9.10 — instant everything via SQLite caching
Followers, bookmarks, articles feed, and own profile all load
instantly from SQLite cache. Relay data merges in background.
v0.9.10
2026-03-29 20:49:54 +02:00
Jure
5d94220e5d SQLite-backed caching for bookmarks and articles feed
Bookmarks load instantly from DB cache, then fetch missing notes
from relays in background. Articles feed shows cached kind-30023
events immediately on the latest tab. Both persist to SQLite for
instant load on next visit.
2026-03-29 20:46:18 +02:00
Jure
d450f8fdeb SQLite-backed followers cache and instant own-profile load
Followers now load instantly from SQLite on startup, then merge
relay results in background. Own profile name/picture loads from
DB cache so sidebar badge never shows raw npub on slow relays.
2026-03-29 20:28:25 +02:00
Jure
2fed4e3e85 Add retry-on-empty for followers, articles, and hashtag feeds
Same pattern as profile notes and notifications: if the first relay
fetch returns empty, wait 3s and retry once. Prevents false "No X
found" messages when relays are slow to connect.
2026-03-29 20:06:00 +02:00