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

147 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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