Commit Graph

246 Commits

Author SHA1 Message Date
Jure
c6ccb0989c Remove unused delete_event function; bump Vite + picomatch (audit fix) 2026-04-12 18:56:02 +02:00
Jure
a393469c17 Add interest selection step to new-user onboarding
New users now choose topics after backing up their key. Selected interests
are saved to localStorage (wrystr_interests) and surfaced as clickable
hashtag pills in the Following feed empty state, giving new users a path
into content without auto-following strangers.

Flow: welcome → create → backup → interests → app
Login path is unchanged.
2026-04-11 22:29:25 +02:00
Jure
35da2a9111 Sync Cargo.lock to v0.12.6 2026-04-11 22:23:53 +02:00
Jure
c22522a170 Add CHANGELOG entry for v0.12.6 2026-04-10 20:47:22 +02:00
Jure
4759c2df64 Parse URLs, mentions and hashtags in profile bio
Profile about/bio text now renders clickable links, nostr mentions,
and hashtags instead of plain text.
2026-04-10 20:40:35 +02:00
Jure
37e87825d4 Bump to v0.12.6 — DM polish, multi-image upload fix, Blossom image rendering v0.12.6 2026-04-10 20:10:20 +02:00
Jure
214c42b9e5 Fix Blossom image URLs with non-standard extensions (.jp etc.)
SHA-256 hash filenames from content-addressed storage (Blossom/NIP-96)
now always treated as images regardless of extension. Also broaden
IMAGE_EXTENSIONS to cover avif, bmp, tiff, jp2 and common variants.
2026-04-10 20:09:44 +02:00
Jure
f4878f9d4f Polish DM view: clickable links, inline images, nostr entity rendering
- DM messages now parse and render URLs as clickable accent links
- Image URLs show inline in the bubble (max-h-48)
- nostr:naddr and mentions rendered as styled clickable links
- nostr:nevent quotes show a subtle indicator
- Media URLs (video/audio/youtube etc.) rendered as clickable links
- parseContent regex now case-insensitive for nostr: prefix; entity
  lowercased before nip19.decode for robustness
- renderTextSegments: add case for quote type (↩ note indicator)
2026-04-10 17:49:11 +02:00
Jure
7375ddc7e3 Fix multi-image upload in article editor; add thumbnail lightbox
- All selected images now upload and insert correctly (was: only last
  image kept due to stale content closure in loop)
- Images inserted as a block with proper newline padding
- Thumbnail strip thumbnails are now clickable — opens a lightbox;
  click overlay to dismiss
2026-04-10 11:33:13 +02:00
Jure
0bda04904b Add screenshot capture scripts and CHANGELOG; gitignore screenshots/ 2026-04-09 22:01:49 +02:00
Jure
2b2a5929f7 Bump to v0.12.5 — UI polish, V4V fix, production-silent logging v0.12.5 2026-04-09 19:57:57 +02:00
Jure
c0fbc93377 Polish pass 14 — silence remaining console calls in production
- feedDiagnostics.ts: guard styled console.log with isDev, plain log → debug.log
- main.tsx: error boundary console.error → debug.error
2026-04-09 19:56:05 +02:00
Jure
9fb0a7ef2e Polish pass 13 — final sentence case sweep
- NoteActions: Share, Follow/Unfollow
- SearchView: Search button, Notes/Articles/People result tabs
- RelaysView: Check all, Add (suggested relays)
- SettingsView: Add (mute keywords), Export data/Exporting…/Exported ✓
- InlineReplyBox: Reply/Replied ✓/Posting…
2026-04-09 19:51:16 +02:00
Jure
721a552f91 Polish pass 12 — sentence case on ArticleView, ComposeBox, DMView, SettingsView
- ArticleView: Back, Save/Saved, Repost/Reposted, Comment, Copy link,
  Like/Liked, Post — all button labels capitalised (header + footer)
- ComposeBox: Post, Post poll, Posting…
- DMView: Send, Start
- SettingsView: mute keyword placeholder + Remove button
2026-04-09 19:49:24 +02:00
Jure
63a0f05e92 Polish pass 11 — color tokens, text size consistency, overlay fix
- V4VHistory: text-amber-400 → text-zap on sats total
- V4VSettings: size status dot to text-[8px] for visual consistency
- Feed: last-updated timestamp text-[10px] → text-[11px] (matches siblings)
- NoteContent: +N overlay bg-black/50 → bg-bg/60, text-white → text-text,
  text-lg → text-[14px] (consistent with rest of file)
- RelaysView: last-checked timestamp text-[9px] → text-[10px]
2026-04-09 19:47:19 +02:00
Jure
9b3783b640 Polish pass 10 — hover titles, focus rings, disabled states
- NoteCard: title tooltip on truncated name and NIP-05
- NoteActions: emoji pill buttons dim (opacity-50) while disabled
- DMView: title tooltip on truncated conv name; focus ring on send button
- RelaysView: title tooltip on truncated relay URL
- OnboardingFlow: title tooltips on npub/nsec (nsec only when revealed)
- ArticleEditor: visible focus indicator on title and body textareas
2026-04-09 19:27:22 +02:00
Jure
f34f5dc1a3 Polish pass 9 — console → debug in search.ts and localRelay.ts 2026-04-09 19:24:07 +02:00
Jure
d6287fc240 Polish pass 8 — console → debug, sentence case, attachment button
- core.ts, feed.ts, user.ts: replace all console.log/warn/error with
  debug.log/warn/error (silent in production builds)
- ArticleFeed: "write article" → "Write article"
- ComposeBox: attachment remove x → ×, add aria-label
2026-04-09 19:20:47 +02:00
Jure
f2546b5af7 Polish pass 7 — sentence case across profile, thread, follows, podcasts
- ProfileView: Cancel/Back, Edit profile, Zap, Follow/Unfollow, Mute/Unmute,
  Message, Notes/Articles/Media tab labels
- ThreadView: Back, Retry, Reply/Posting…/Replied ✓; console.error → debug.error
- ThreadNode: Reply/Posting…/Replied ✓
- FollowsView: Follow/Unfollow, Followers/Following tabs, Follows header
- EpisodeList: Back, Loading episodes…, amber → zap theme token on V4V badge
- AccountSwitcher: Login, Add account, Sign out, Remove
- PodcastCard: + Subscribe / Subscribed
2026-04-09 18:42:03 +02:00
Jure
e30e42971e Polish pass 6 + fix V4V auto-streaming not stopping on manual toggle
Polish:
- ArticleEditor: sentence case on all buttons (← Drafts, Write, Preview,
  Zen, Meta, Publish, ← Back, New draft)
- EditProfileForm: Save profile / Saving… / Saved ✓
- ImageField: Upload / Uploading…
- RelaysView: Add, Publish list, Remove dead, Discover relays (sentence case)
- InlineReplyBox: attachment remove x → ×, aria-labels on remove/attach/emoji

Bug fix:
- V4VIndicator: add userDisabledRef so manually turning off streaming
  prevents auto-start from re-engaging on subsequent play/pause/seek
  events for the same episode; resets automatically on new episode
- V4VIndicator: remaining amber-* colors → zap theme token
2026-04-09 18:36:28 +02:00
Jure
bac52b15ac Polish pass 5 — sentence case, theme tokens, remaining a11y
- Sentence case on all button labels (Mark read, Go to settings, Try again,
  Mark all read, Disconnect, Connect wallet, Logging in, Posting, Quote & post,
  Loading, Refresh); V4V tabs capitalized
- V4VDashboard: amber-500 hard-coded colors → zap theme token
- BookmarkView: tab container rounded-sm overflow-hidden
- ToastContainer, DebugPanel, PodcastPlayerBar: aria-labels on dismiss/close buttons
- PodcastPlayerBar: ASCII x → × Unicode, ... → … Unicode
- AboutView: document bg-white on QR code as intentional
2026-04-09 18:29:43 +02:00
Jure
3eb6968de0 Polish pass 4 — remove remaining hard-coded colors and inline styles
- Fix bg-white toggle thumbs in V4VSettings and V4VIndicator
- Replace hard-coded amber nudge colors with theme 'warning' token
- Remove redundant gridTemplateRows and move aspectRatio to Tailwind
- Replace MarkdownToolbar inline font styles with conditional classes
2026-04-09 15:47:12 +02:00
Jure
30147afc87 Polish pass 3 — theme tokens, debug logging, remaining ellipses
- Move DMView console.log/error behind debug.log/error (silent in prod)
- Replace hard-coded text-[#ffffff] with text-white in NoteContent overlay
- Theme-ify Vimeo and Tidal media cards (bg-accent/15 instead of
  bg-black/40 and bg-white/10) so they adapt to light themes
- Convert Vimeo play icon SVG to currentColor for theme-aware tinting
- Add aria-label to update banner dismiss button
- Replace remaining '...' with unicode ellipsis in loading states
2026-04-09 15:39:53 +02:00
Jure
508829c38b Polish pass 2 — avatar hover, reply buttons, ellipses, a11y
- Unify NoteCard avatar hover between image and fallback variants
- Add aria-labels to compose toolbar buttons (emoji, attach, poll)
- Fix ThreadView inline reply button sizing to match compose post button
- Replace remaining '...' with unicode ellipsis across podcasts, v4v,
  thread, and ancestor chain components
2026-04-09 15:36:55 +02:00
Jure
d134702da7 Polish pass — consistency, a11y, theme correctness
- Fix bg-white toggle thumbs in Settings (broke on dark themes)
- Eliminate 2px layout shift when switching Media feed tabs
- Unify "Follow"/"Mute" capitalization in NoteCard context menu
- Replace ASCII "..." with unicode ellipsis across compose/search/article
- Add rounded-sm to dropdowns, emoji picker, post/reply buttons
- Add aria-labels to sidebar toggle and onboarding copy buttons
- Add role=tablist/tab/aria-selected to login mode tabs
- Replace inline width/height styles with Tailwind w-16 h-16 in ProfileView
- Replace inline transform style with rotate-90 class in SettingsView
- Unify sidebar active state opacity (bg-accent/8 → bg-accent/10)
- Pad sidebar badges with py-0.5 for consistent pill height
- Match thread reply button sizing to compose post button
- Use var(--font-reading) on non-zen article title for consistency
- Format 'saved Xs ago' as minutes/hours after 60s
- Unify expand chevron to ▶ + rotate-90 pattern
- PollWidget: transition-all → transition-colors (no layout animation)
- Remove cryptic 'Ctrl+Enter' hint from compose and thread reply
2026-04-09 13:32:59 +02:00
Jure
acd5a5979b Bump to v0.12.4 — polls, custom relay, UI polish
NIP-1068 polls: create and vote on polls inline in the feed.
Switch default relay to custom Go relay (relay2.veganostr.com).
Note action icons with tooltips, sidebar icon cleanup,
search dedup fix, thread indentation fix.
v0.12.4
2026-04-06 18:15:48 +02:00
Jure
86b7705c07 Fix thread indentation compounding on narrow screens
Replace absolute marginLeft with relative Tailwind ml-4, cap indent
depth at 3. Deep replies get border-line only, no further indent.
2026-04-06 15:21:37 +02:00
Jure
77d672b6d1 Fix duplicate people in search results — dedup by pubkey 2026-04-06 15:05:31 +02:00
Jure
67cf4010fc Fix build: remove unused withTimeout import in dms.ts v0.12.3 2026-04-06 13:05:10 +02:00
Jure
262b2d36d5 Bump to v0.12.3 — fix direct messages
NIP-17 gift-wrapped DMs were silently dropped by NDK's fetchEvents.
Switched to subscribe-based fetch that correctly receives kind 1059.
2026-04-06 12:49:40 +02:00
Jure
111473ddb4 Fix DMs not loading — use subscribe instead of fetchEvents for gift wraps
NDK's fetchEvents silently returns 0 results for kind 1059 (gift wrap)
events despite relays having them. Replaced with manual subscribe +
eose listener which correctly receives the events.
2026-04-06 11:49:34 +02:00
Jure
e99a2e880f Update ROADMAP.md and GitHub description for v0.12
Add v0.10–v0.12 release entries, mark Web of Trust as shipped,
refresh "Up next" section, tone down repo description.
2026-04-05 18:15:09 +02:00
Jure
455a044ed3 Clean up repo: private_docs dir, update AGENTS.md, harden gitignore
Move all private documents (grant app, specs, research, drafts) into
gitignored private_docs/ directory. Update AGENTS.md to reflect current
Vega state (was still referencing Wrystr). Simplify gitignore rules.
2026-04-05 18:13:49 +02:00
Jure
2bea043ef7 Remove private memory file and harden .gitignore
Removes accidentally tracked .claude/ memory directory and adds
comprehensive gitignore rules for AI agent state, draft posts,
and private docs.
2026-04-05 14:12:50 +02:00
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