Commit Graph

189 Commits

Author SHA1 Message Date
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
Jure
e86561379b Bump to v0.9.9 — instant threads, Linux upload fix, trending fix v0.9.9 2026-03-29 18:38:02 +02:00
Jure
dd565ccb16 Increase mention fetch timeout and retry on empty
Tag-based #p queries are slower on some relays. Increase timeout
from 8s to 12s for fetchMentions. Also retry once after 3s if the
initial notification fetch returns empty (helps on cold start when
relays need time to connect).
2026-03-29 18:23:02 +02:00
Jure
2bb1341eed Instant thread display, faster fetches, trending always shows notes
Threads now render the focused note immediately instead of showing a
loading skeleton. Root + ancestors fetch in parallel, timeouts cut
from 10s to 5s per round-trip, ancestor lookups from 5s to 2s.

Trending feed adds a base recency score so notes always appear even
when engagement data times out from relays.
2026-03-29 17:50:10 +02:00
Jure
8e685f2d4b Fix image upload on Linux/Wayland (WebKitGTK)
WebKitGTK can't serialize FormData with Blob objects through Tauri's
HTTP plugin, throwing "InvalidStateError: Unable to read form data
blob". Build the multipart/form-data body manually as raw bytes
instead. Also add void.cat and nostrimg.com to the HTTP scope.
2026-03-29 17:38:03 +02:00
Jure
c5ddd88cbd Bump to v0.9.8 — Web of Trust, instant notifications, profile retry v0.9.8 2026-03-29 16:28:33 +02:00
Jure
ef81ca8ada Retry profile notes fetch on empty result
If the first relay query returns no notes (common on cold start when
relays aren't connected yet), wait 3s and retry once before showing
the empty state.
2026-03-29 16:26:40 +02:00
Jure
4cc844df28 SQLite-backed notifications, WoT profile fix, reaction queue fix
Notifications now load instantly from SQLite on startup instead of
waiting for relay responses. New events merge in as they arrive.
Read state persists in DB across restarts.

Also: filter profile owner from WoT followers list, make "+N more"
clickable to expand, fix reaction throttle queue jamming on errors.
2026-03-29 16:12:36 +02:00
Jure
2c17361e50 Add Web of Trust reputation on profiles via Vertex DVM
Query Vertex Verify Reputation API (kind 5312) for each profile and
display "Followed by people you trust" with clickable top-follower
avatars. Includes in-memory cache, request dedup, and graceful
fallback when logged out or API unreachable.
2026-03-29 10:42:19 +02:00
Jure
8bc38c11e6 Bump to v0.9.7 — emoji reactions, npub search, notification fix v0.9.7 2026-03-27 18:25:57 +01:00
Jure
616c3cad27 Remove unused useReactionCount, seed reactions from batch engagement
- Delete useReactionCount hook (replaced by useReactions)
- Remove fetchReactionCount (no longer referenced)
- Seed per-note reaction cache from fetchBatchEngagement in trending
  feed, so emoji pills render instantly without individual fetches
2026-03-27 18:21:36 +01:00
Jure
b46d383200 Grouped emoji reactions, npub search, notification fix, dev logger
- Emoji reactions now display as grouped pills (❤️5 🤙3 🔥2) instead
  of a single aggregated count. Multi-reaction per note supported.
- Throttled reaction fetch queue (max 4 concurrent) prevents relay overload.
- Searching a bare npub/nprofile navigates directly to that profile.
- Notification poller waits for relay connection before first fetch,
  fixing empty results on startup.
- Dev-only debug logger (src/lib/debug.ts) — silent in production builds.
2026-03-27 18:20:00 +01:00
Jure
fe2740c00e Always include focused note in thread tree
When relay doesn't return the clicked note in the thread fetch
results, the user sees only the root note with 'No replies yet' —
making it look like the wrong thread opened. Now the focused event
and its ancestors are always injected into the thread tree since
we already have them in memory.
2026-03-26 10:40:12 +01:00
Jure
ac061a8d4b Show image attachments as thumbnails instead of raw URLs
Uploaded images are now kept in a separate attachments list with
thumbnail previews and remove buttons. URLs are appended to note
content only at publish time. This keeps the textarea clean for
writing and avoids URLs appearing mid-sentence at the cursor position.
2026-03-26 08:43:18 +01:00
Jure
0189433269 Fix notification badges disappearing on relay timeout
Don't overwrite existing notifications with empty results when relay
times out or disconnects. Also fetch notification counts immediately
on startup instead of waiting for the first poll cycle.
2026-03-25 19:10:40 +01:00
Jure
bb084182d7 Bump to v0.9.6 — content-only zoom, font size fix v0.9.6 2026-03-25 16:35:22 +01:00
Jure
6da5f6a74c Move zoom from document root to main content area only
Sidebar now stays at fixed size regardless of font setting. Only the
content area (feed, settings, thread, articles, etc.) scales with the
font size preference. This prevents the sidebar from bloating and
eating into content space at larger zoom levels.
2026-03-25 16:34:55 +01:00
Jure
0ee9476825 Bump to v0.9.5 — large font overflow fix for Windows v0.9.5 2026-03-25 15:35:12 +01:00
Jure
5b627879ac Fix large font overflow on Windows — flex-wrap all dense rows
Feed header, note card header, note actions, compose box, settings
theme grid, font size presets, media feed tabs, and profile header
buttons all now wrap gracefully when CSS zoom makes content overflow
the viewport. Also add AgentDocs fetch instruction to CLAUDE.md.
2026-03-25 15:34:19 +01:00
Jure
f460a53875 Bump to v0.9.4 — search, follows, editor, polish
Search overhaul with dedicated NIP-50 relays, follows view, article
editor image previews, auto-expanding textareas, profile layout fix,
thread stability fix.
v0.9.4
2026-03-25 12:03:05 +01:00
Jure
ef21667d9f Fix thread disappearing bug, improve article editor UX
Move selectedNote guard after hooks in ThreadView to fix React rules
of hooks violation that caused thread content to blank out. Article
editor gets inline image previews, readable toolbar labels, and
drag-and-drop image support. Thread reply textareas now auto-expand.
2026-03-25 12:01:47 +01:00
Jure
5b94162ce1 Auto-expanding textareas and proper article comment box
Add useAutoResize hook that grows textareas to fit content up to a max.
Applied to compose box, inline replies, thread replies, and article
comments. Article comment input changed from single-line input to a
multi-row textarea with Shift+Enter support.
2026-03-25 11:11:01 +01:00
Jure
0604b5b452 Fix profile banner and avatar layout
Remove avatar-overlaps-banner approach that caused squashed avatars.
Banner and avatar are now cleanly separated with a border between them.
Banner hides entirely on load error instead of leaving empty gray space.
Avatar uses inline dimensions to prevent flex compression.
2026-03-25 10:40:41 +01:00
Jure
ec13c58b26 Overhaul search with dedicated NIP-50 relays and hybrid results
Text search now queries relay.nostr.band and search.nos.today via a
persistent NDK instance, while also running hashtag lookups on user
relays. Results are merged and deduplicated. Hashtag searches now show
all three tabs (notes, articles, people) instead of notes-only. Added
loading spinner and clear-on-search for better UX.
2026-03-25 10:21:25 +01:00