Commit Graph

119 Commits

Author SHA1 Message Date
Jure
80838fb204 Refactor: split overgrown files into focused modules
Split client.ts (1036 lines) into 11 domain modules under lib/nostr/ —
core, notes, social, articles, engagement, dms, bookmarks, muting,
search, relays, trending. Barrel index.ts re-exports all; zero consumer
import changes.

Extract ProfileView sub-components (ImageField, Nip05Field,
EditProfileForm, ProfileMediaGallery), NoteContent renderers
(TextSegments, MediaCards), and NoteCard actions (NoteActions,
InlineReplyBox). All component files now ≤270 lines, all lib files ≤300.
2026-03-20 16:32:50 +01:00
Jure
1c3e58cdb0 Update CLAUDE.md with emoji picker, external link opener, EmojiPicker component 2026-03-20 15:34:56 +01:00
Jure
c65ddb1c26 Fix test bugs: mute filtering, notification toggles, external links, emoji picker
- Fix mute button having no effect in Media Feed (missing filter)
- Fix notification toggle switches overlapping labels (sizing + shrink-0)
- Fix external links not opening in system browser (use Tauri opener plugin)
- Fix trending refresh showing no visual feedback (clear list on force refresh)
- Fix emoji reactions inaccessible behind WebKitGTK context menu (visible + button)
- Add emoji picker to compose box, inline reply, and thread reply
- New shared EmojiPicker component with categorized emoji groups
2026-03-20 15:32:57 +01:00
Jure
0bcbba6e8f Bump to v0.8.3 — trending feed, NIP-46 remote signer, media feed, profile media gallery v0.8.3 2026-03-20 12:45:58 +01:00
Jure
57630227e1 Add NIP-05 badges, hashtag pages, keyword muting, suggestion dismissal, notification poller
- Article cover: aspect-video replaces max-h-72 for consistent 16:9
- NIP-05 verification badge on note cards with 1-hour TTL cache
- Dedicated hashtag feed pages (clicking #tag opens live feed, not search)
- Keyword muting: word-boundary matching, applied across all feed views
- Follow suggestion dismissal: persistent "don't suggest again" per person
- Background notification poller (60s): mentions, zaps, new followers
- All notification types independently toggleable in settings
- Centralized notification firing (removed inline store notifications)
2026-03-20 12:09:11 +01:00
Jure
989ed01dfc Add syntax highlighting in code blocks and OS push notifications
Syntax highlighting: shared markdown renderer with highlight.js
(atom-one-dark theme), 12 language grammars registered (JS, TS,
Python, Rust, Go, Bash, JSON, YAML, SQL, CSS, HTML, Markdown).
Applied to both article reader and editor preview.

OS notifications: Tauri notification plugin for mentions, DMs, and
zaps. Per-type toggles in Settings with custom toggle switches.
Fires on new unread mentions/DMs; requests OS permission on first
enable. Notification utility at src/lib/notifications.ts.
2026-03-20 11:11:53 +01:00
Jure
93ca13cc51 Add zen writing mode and auto-save indicator with relay confirmation
Zen mode: fullscreen distraction-free writing via F11 or "zen" button;
hides all chrome, centers content in serif font at 17px, shows only
title + content + word count. Esc/F11 to exit, exits on unmount.

Auto-save indicator: shows "saved Xs ago" in editor header, updates
every 10s. After publishing, shows "published to N relays" confirmation
in green, or warning if zero relays confirmed.
2026-03-20 11:05:05 +01:00
Jure
afb8fed97b Bump to v0.8.2 — writing & reading polish, article TOC
- Remove 280-char note limit, soft warning at 4000
- Serif reading font (Georgia) at 17px for articles
- Reading progress bar on articles
- Article table of contents (floating right, scroll-aware)
- Connection indicator fix (data-aware, 25s grace)
v0.8.2
2026-03-20 11:00:46 +01:00
Jure
d62cf73510 Writing & reading polish: remove 280-char limit, serif reader font, progress bar
- ComposeBox: remove hard 280-char post limit (Nostr has none); show counter
  only after 3000 chars with yellow/red warnings at 3500/4000
- Article reader: switch from monospace to serif font (Georgia stack) at 17px
  for comfortable long-form reading; article preview gets serif at 15px
- ArticleView: add 2px accent-colored reading progress bar (sticky top,
  scroll-driven, smooth transition)
- Connection indicator: data-aware checking (wraps fetchEvents), 30s recent-
  fetch grace period, 25s offline grace (5 checks) before marking disconnected
2026-03-20 10:50:33 +01:00
Jure
7ed478eb0e Bump to v0.8.1 — banner height fix, search timeout
Fix profile banner cropping square images (h-36 → h-44 with top-biased
focal point). Fix search hanging forever when no relay supports NIP-50
(8s timeout on fetchEvents in advancedSearch).
v0.8.1
2026-03-20 08:46:17 +01:00
Jure
7411cbf981 Fix release notes: recommend AUR for Arch/Manjaro install v0.8.0 2026-03-19 19:56:49 +01:00
Jure
d993ae1131 Bump to v0.8.0 — polish, portability, discovery
Profile banner polish (hero height, click-to-lightbox, avatar overlap),
data export (bookmarks/follows/relays as JSON), relay recommendations
(discover from follows' NIP-65 lists), reading list tracking (read/unread
on bookmarked articles with sidebar badge), trending hashtags (clickable
pills on search idle screen). Updated CLAUDE.md and release notes.
2026-03-19 19:54:14 +01:00
Jure
d257075023 Bump to v0.7.1 — relay health checker, advanced search v0.7.1 2026-03-19 19:23:39 +01:00
Jure
092553ab9b Bump to v0.7.0 — writer tools, NIP-98 uploads, multi-draft, article bookmarks
- NIP-98 HTTP Auth for image uploads with fallback services (void.cat, nostrimg.com)
- Markdown toolbar (bold, italic, heading, link, image, quote, code, list) + Ctrl+B/I/K
- Multi-draft management with draft list, resume, delete, auto-migrate
- Cover image file picker in article meta panel
- Article bookmarks via NIP-51 'a' tags; Notes/Articles tabs in BookmarkView
- Removed Rust upload_file command; dropped reqwest/mime_guess deps
- Upload spinner, draft count badge, empty states
v0.7.0
2026-03-18 18:36:08 +01:00
Jure
c66885440a Fix CI: top-level permissions, bump checkout@v6 + setup-node@v5 2026-03-18 15:02:48 +01:00
Jure
fbf05e8f90 Bump to v0.6.1 — native file upload, mention names, connection stability
- Native file picker (+) in compose box uploads via Rust backend (reqwest)
- Pasting a local file path auto-uploads instead of inserting text
- @mentions resolve to profile display names via useProfile hook
- Connection indicator uses 15s grace period before showing offline
- Upload uses correct nostr.build v2 API; Rust-side multipart for native picks
- Content parser extracted to src/lib/parsing.ts
v0.6.1
2026-03-18 14:55:29 +01:00
Jure
ef189932e6 Bump to v0.6.0 — article discovery, search, profile tab, reader polish
Article discovery feed with Latest/Following tabs, article search
(NIP-50 + hashtag for kind 30023), Notes/Articles tab on profiles,
reading time + bookmark + like buttons on article reader. Event
passed directly from card to reader to avoid relay re-fetch failures.
v0.6.0
2026-03-17 21:47:24 +01:00
Jure
8ce1d43d2d Bump to v0.5.0 — note sharing, reply counts v0.5.0 2026-03-15 21:49:52 +01:00
Jure
5b4f6381da Add NIP-17 gift-wrapped DMs, follow-from-menu, fix new conversation crash
DMs now send via NIP-17 (kind 1059 gift-wrap) with self-copy for sent
messages. Receive supports both NIP-17 and legacy NIP-04 for backward
compat. Protocol indicator shown in conversation list and compose footer.

Note card context menu (⋯) now includes follow/unfollow option so users
can follow authors directly from the feed without visiting their profile.

Fix crash (black screen) when starting a new DM conversation — empty
event array caused undefined access on lastEvent.
2026-03-15 21:30:54 +01:00
Jure
ad79ab99de Add GStreamer codec docs, fix connection indicator reactivity
Add GStreamer codec dependencies to PKGBUILD and install instructions
to README for Linux video/audio playback. Add periodic relay pool
status check so connection indicator stays accurate after reconnects.
2026-03-15 20:30:50 +01:00
Jure
17011252d6 Preserve feed scroll position across navigation
Keep Feed component mounted (hidden via CSS) instead of unmounting
when navigating to threads/profiles/etc. Back button now returns to
the exact scroll position in the feed.
2026-03-15 19:44:10 +01:00
Jure
35fac6bab9 Bump to v0.4.1 — media players, YouTube/Spotify cards, feed fix
Add inline video/audio players for direct media URLs, rich link cards
for YouTube (with thumbnails), Vimeo, Spotify, and Tidal. Fix video
clicks navigating to thread by splitting NoteContent into inline/media
modes. Fix published notes not appearing on Following tab.
v0.4.1
2026-03-15 12:32:00 +01:00
Jure
e965cf9427 Add TODO.md to gitignore for private planning 2026-03-14 18:49:01 +01:00
Jure
c8d2b05440 Bump to v0.4.0 — Phase 3: image lightbox, bookmarks, discover, language filter, UI polish v0.4.0 2026-03-14 18:00:28 +01:00
Jure
af8a364e28 Bump to v0.3.1 — Phase 2 complete, AUR package, feed tab fix v0.3.1 2026-03-14 16:31:18 +01:00
Jure
ef35f20688 Persist feed tab across navigation — back button returns to correct tab
Feed tab (Global/Following) moved from local state to UI store so it
survives thread/profile navigation. Fixed hardcoded "feed" in openThread
calls to pass currentView instead.
2026-03-14 16:23:51 +01:00
Jure
3ca73a8b01 Bump to v0.3.0 — instant post/reply feedback
Published notes now appear in the feed immediately. Thread replies
show up without waiting for the relay round-trip. Includes all
v0.2.9 fixes (image paste, sent zaps, reply-to clickable, feed
refresh on login).
v0.3.0
2026-03-13 19:40:14 +01:00
Jure
7c10423b4a Show published note in feed immediately after posting 2026-03-13 18:08:40 +01:00
Jure
176cbe8ae3 Bump to v0.2.9 — image upload fix, sent zaps, clickable reply-to, feed refresh v0.2.9 2026-03-13 15:46:43 +01:00
Jure
17304a2432 Fix image upload: use Tauri HTTP plugin to bypass WebView fetch restrictions 2026-03-13 15:44:44 +01:00
Jure
1d4ab27d08 Make reply-to @name clickable to open profile separately from thread 2026-03-13 12:38:49 +01:00
Jure
93963de28d Fix sent zaps: query kind 9735 receipts with #P tag instead of ephemeral kind 9734 2026-03-13 11:17:45 +01:00
Jure
7746e31051 Navigate to feed and refresh after login with new account 2026-03-13 10:59:29 +01:00
Jure
aef7cdf658 Use GitHub noreply email in PKGBUILD maintainer field 2026-03-13 10:26:55 +01:00
Jure
bbf6291567 Bump to v0.2.8 — enable keyring platform backends (keychain was a no-op) v0.2.8 2026-03-13 10:22:34 +01:00
Jure
8e0d92c893 Bump to v0.2.7 — multi-account persistence fix v0.2.7 2026-03-13 09:04:36 +01:00
Jure
56cf0bae4d Fix multi-account restore and switch after restart
- restoreSession pre-loads all nsec accounts from keychain into signer
  cache at startup, not just the active one
- switchAccount updates state to target account on failure instead of
  leaving UI stuck on previous account
- AccountSwitcher shows re-login prompt when account has no signer
- store_nsec now logs warnings instead of silently swallowing errors
2026-03-12 16:14:23 +01:00
Jure
f33d78ebcf Update PKGBUILD to 0.2.6 and add it to release checklist 2026-03-12 15:43:53 +01:00
Jure
6ee02eb586 Bump to v0.2.6 — add createUpdaterArtifacts for updater signing
Tauri 2 requires bundle.createUpdaterArtifacts: true to produce .sig
files and updater zip/tar.gz archives. Without it, TAURI_SIGNING_PRIVATE_KEY
is ignored and latest.json is never generated.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
v0.2.6
2026-03-12 15:30:45 +01:00
Jure
cc05a80433 Bump to v0.2.5 — fix updater signing key (regenerate without password)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v0.2.5
2026-03-12 13:27:38 +01:00
Jure
4e06aa2d00 Bump to v0.2.4 — retrigger with signing key set
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v0.2.4
2026-03-12 12:44:35 +01:00
Jure
0b02f34338 Document release procedure in CLAUDE.md — version bump before tagging, includeUpdaterJson
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 12:26:03 +01:00
Jure
7ca0e804f1 Bump to v0.2.3 — add includeUpdaterJson: true to fix latest.json generation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v0.2.3
2026-03-12 12:21:44 +01:00
Jure
9b6ba35dac Update release notes for v0.2.2
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v0.2.2
2026-03-12 11:56:06 +01:00
Jure
9d54bfb22f Bump to v0.2.2 — version files forgotten before tagging
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 11:54:59 +01:00
Jure
351667c1f0 Drop Intel macOS build — macos-13 runner no longer available on GitHub
Apple Silicon (macos-latest) is sufficient for current Mac user base.
Intel can be revisited if demand arises.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 11:19:18 +01:00
Jure
2c874de790 Bump to v0.2.1 — Batch 3 playtest fixes + auto-updater fix
- Fix: repost + quote buttons added to RootNote in ThreadView (Issue A)
- Fix: switchAccount no longer silently goes read-only when nsec keychain
  entry is missing — nsec accounts stay logged out so the login button
  handles recovery; loginType field added to SavedAccount (Issue B)
- Fix: macos-12 runner replaced with macos-13 in release.yml — macos-12
  was deprecated by GitHub, causing macOS jobs to never run, which
  prevented latest.json from being assembled and broke the auto-updater
  for every user since v0.1.5
- Bump Cargo.toml version (was stuck at 0.1.10)
- Release notes updated with v0.2.1 + v0.2.0 Phase 2 changelog
- README: Windows unsigned installer note added
- ROADMAP: NIP-05 monetization added to brainstorm backlog

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v0.2.1
2026-03-12 11:17:33 +01:00
Jure
fd1e5cac44 Fix copyright attribution in README and About page
Show full "MIT License — Copyright (c) 2026 Jure Sršen" in both
places to match the LICENSE file exactly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-11 20:41:42 +01:00
Jure
3a196cb9a0 Bump to v0.2.0 — Phase 2: Engagement & Reach
Four features shipped in this release:

- Feed reply context: replies show "↩ replying to @name" above the
  note content; clicking fetches and opens the parent thread

- NIP-65 outbox model: fetchUserRelayList + publishRelayList +
  fetchUserNotesNIP65 in client.ts; profile notes fetched via the
  author's write relays; "Publish relay list to Nostr" button in
  Settings (kind 10002)

- Notifications: new store (notifications.ts) + NotificationsView;
  🔔 sidebar nav item with unread badge; DM nav item also shows
  unread conversation count; badges clear on open/select

- Keyboard shortcuts: useKeyboardShortcuts hook + HelpModal;
  n=compose, /=search, j/k=feed nav with ring highlight,
  Esc=back, ?=help overlay

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v0.2.0
2026-03-11 20:39:30 +01:00
Jure
181233796b Bump to v0.1.10 — Bitcoin QR to right edge on Support page
Use justify-between on the QR section so Lightning address sits flush
left and Bitcoin address sits flush right, making them visually
impossible to confuse when scanning.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v0.1.10
2026-03-11 20:02:30 +01:00