Files
vega/ROADMAP.md
Jure 4ef824a26a Add OS keychain for persistent nsec sessions (roadmap #1)
- Rust: store_nsec / load_nsec / delete_nsec Tauri commands via keyring crate
  (macOS Keychain, Windows Credential Manager, Linux Secret Service)
- On nsec login: key is stored in OS keychain keyed by hex pubkey
- On startup: restoreSession() auto-loads nsec from keychain and re-establishes
  the NDK signer — no manual re-login required after restart
- On logout: keychain entry is deleted
- Graceful degradation: if keychain is unavailable (e.g. Linux without a Secret
  Service daemon), the app starts logged-out — same UX as before, no crash

Also updates ROADMAP.md with 4 new items from the Windows playtest (multi-account
switcher, NWC wizard, system tray, zap history view) and reorders the list.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-10 17:21:44 +01:00

7.2 KiB
Raw Blame History

Wrystr — Next Steps Roadmap


Vision note: more than a Nostr client

Wrystr is not just a great desktop Nostr client. Long-form content is a first-class, distinguishing feature of this project — not an afterthought, not a checkbox NIP.

The article editor (NIP-23), the reading experience, the writing tools around it — these set Wrystr apart from other clients and define its identity. Think of it as a publishing platform that happens to live on Nostr, not a social feed that happens to support articles.

TODO — brainstorm needed: What does "owning long-form on Nostr desktop" actually look like? Reading experience, discovery, editor features, monetization via zaps, cross-posting, author identity — all of this needs a dedicated design session. Leave this as an open thread until we sit down to work through it properly.


Up next

1. OS Keychain via Rust (Tauri backend)

  • Security-critical: private keys currently live in NDK signer memory only
  • nsec sessions don't survive app restart — keychain fixes this permanently
  • Tauri has keychain plugins ready (tauri-plugin-keychain)

2. Multi-account / profile switcher

  • Nostr users regularly maintain separate identities (personal, professional, pseudonymous)
  • Near-blocker-level friction discovered during Windows playtest — session re-login every restart is currently the #1 UX pain point
  • Depends on OS keychain (#1) — keys must persist for instant switching
  • UI: small account switcher in sidebar footer; click → list of saved accounts; one click to switch
  • No re-login flow — switching is instant once accounts are stored in keychain
  • v1: stored nsec accounts only; v2 could add NIP-46 remote signer support

3. SQLite note caching

  • Notes disappear on every restart — no local persistence
  • Would make the app feel dramatically more solid and fast
  • Rust backend is the right place for this

4. About / Funding page

  • Hardcoded in-app page with all support options
  • Bitcoin on-chain address with scannable QR code
  • Lightning address with scannable QR code
  • Zap button (zap the developer's npub directly from within the app)
  • Links: GitHub (hoornet), Ko-fi/Jure, and any other funding sources
  • Lives in the sidebar footer or as a dedicated view — tasteful, never nagging
  • Ties into the zap infrastructure already built

5. Mute / ignore user + anti-spam

  • "Ignore this user" from profile or note context menu (NIP-51 mute list)
  • Mute list persisted to Nostr so it follows you across clients
  • Settings toggles for basic spam filters (e.g. hide notes from accounts < N days old, hide notes with no followers, hide pure bot patterns)
  • Consider: Web of Trust (WOT) score as an optional feed filter — needs design session

6. Quote / Repost (NIP-18)

  • "Quote" wraps a note in your own post with added commentary
  • "Repost" is a plain re-broadcast (kind 6)
  • Both are standard and expected by Nostr users
  • Quote is more valuable — it drives conversation

7. NWC setup UX — guided wizard

  • Plain-text NWC URI field is confusing for non-technical users (confirmed in Windows playtest)
  • Wizard: detect wallet type (Alby Hub, Mutiny, Phoenix), deep-link to the right wallet page, show inline validation + clear error states on connection failure
  • Keep raw URI field as advanced fallback

8. System tray / minimize to tray

  • Standard expectation for any messaging/social app on Windows
  • Without it, closing the window exits — unexpected for a persistent social client
  • Research needed for macOS (menu bar?) and Linux (varies by DE) before implementing
  • Tauri 2.0 has a tray API — Windows implementation should be straightforward

9. Zap history view

  • Sent and received zaps should be visible in the app
  • Zap infrastructure (NIP-47 + NIP-57) already built — this is display-layer only
  • v1: simple list in a "Zaps" tab on the profile view, or a section in Settings
  • Good demo material for OpenSats reviewers

10. Sidebar: collapsible to icon-only + auto-hide

  • Toggle already exists (clicking WRYSTR collapses to w-12 icons), but it's not obvious
  • Make the toggle affordance clearer — a visible / button
  • Auto-hide mode: sidebar expands on hover/click, collapses automatically after N seconds of activity in the main pane
  • Most important: the icon-only state should be the default or easily reachable

11. Profile helpers for newcomers

  • NIP-05: link to a guide or offer a basic self-hosted verification path
  • Avatar / banner image upload: instead of pasting a URL, let users upload directly (NIP-96 file storage or a simple Blossom upload via Tauri)
  • Newcomers fill in a URL field and have no idea what to put — this is a friction point

12. Search: improve full-text + people

  • NIP-50 full-text (bitcoin query) returns zero results on most relays — the UI should detect this and suggest using #hashtag instead, or show which relays support it
  • People search only works on NIP-50-capable relays; most don't support it
  • Consider: local people search by scanning follows-of-follows graph

13. Direct Messages (NIP-44 / NIP-17)

  • Significant complexity (encryption, key handling, inbox model)
  • Major feature gap but non-trivial to implement well
  • NIP-17 (private DMs) is the modern standard; NIP-44 is the encryption layer

TODO — brainstorm sessions needed

UI / look & feel

  • After Windows playtest: full design review of native feel, spacing, typography
  • The current UI is functional but has "amateur web app" feel on some surfaces
  • Target bar remains Telegram Desktop — fast, keyboard-navigable, feels native not webby
  • Specific surfaces to revisit: note cards, thread view, profile header, modals
  • Windows playtest notes (10 Mar 2026): install went smoothly, window resize/maximise feels native; full design review still needed

Web of Trust (WOT)

  • Nostr has a concept of social graph distance for trust scoring
  • Could power: feed ranking, spam filtering, people search, follow suggestions
  • Worth exploring but needs a dedicated design session — not a simple feature add

Long-form reading experience

  • We write articles but there's no reader view
  • Discovery, recommendations, reading history, estimated read time
  • This is a major differentiator — needs its own design session

What's already done

  • Onboarding: key generation, nsec backup, plain-language UX, no extension required
  • Global + following feed, compose, reply, thread view
  • Reactions (NIP-25) with live network counts
  • Follow / Unfollow (NIP-02), contact list publishing
  • Profile view + edit (kind 0) — bug fix: own profile now updates immediately after save
  • Long-form article editor (NIP-23) with draft auto-save
  • Zaps: NWC wallet connect (NIP-47) + NIP-57 via NDKZapper, amount presets, comment
  • Search: NIP-50 full-text, hashtag (#t filter), people with inline follow
  • Settings: relay add/remove (live + persisted), NWC wallet setup, npub copy
  • Sidebar: collapsible to icon-only (click WRYSTR to toggle)
  • Read-only mode: npub login hides all write actions correctly
  • Note rendering (images, video, mentions, hashtags)
  • Relay connection status view
  • NDK 3.x wrapper for all Nostr interactions
  • GitHub Actions release: Linux AppImage, Windows exe/msi, macOS ARM dmg