Skip to content

post-v1: Seedelf vault UX pass #159

Description

@logicalmechanism

Summary

The Vault's SeedelfPanel shipped functional in #155 — buttons that wire mintSeedelfTx / sendToSeedelfTx / spendFromSeedelfTx, plus a 32-byte-hex register-id render. This issue captures the UX pass that takes it from "works" to "comfortable to use day-to-day".

Scope

Receive flow

  • Per-register share-friendly id: the bare 32-byte hex is a poor UX; render it as a copy-able blob with a QR code modal and an optional "human-name" annotation the user types locally (kept in IndexedDB, not on chain).
  • A dedicated "Receive" sub-panel showing each register's id, a paste-into-this-wallet helper for the sender's UX (mirrors how exchanges show deposit addresses), and an optional "expected amount" the panel watches for.

Send flow

  • Address book: locally-stored contacts mapping a friendly name → seedelf id. Tag-based (so a contact can carry both a Lovejoin address and a Seedelf id under one entry).
  • Recent recipients: implicit "last N sent-to" suggestions sorted by recency.
  • Amount QoL: max-out button (account for fee headroom), reject below min-UTxO with a clear hint.

Spend flow

  • Internal rotate by default: today the spend form starts on "external" because that's the simpler path, but the more privacy-preserving default is "internal" (rotate the dust into a fresh register). Switch the default and explain the tradeoff inline.
  • Spend to Lovejoin mix-box: a one-click affordance that bundles a Seedelf spend with a fresh Lovejoin deposit — washes stealth ADA back through the mixer without the user having to chain two txs by hand.
  • Per-register history: a collapsed timeline of tx ids that produced / consumed this register's funds. Read-only, sourced from the indexer (today the user has to dig through cardanoscan).

Onboarding

  • An "intensity dial"-style staircase for first-time users: explain stealth wallets, walk through minting, and gate the spend forms behind a one-time consent so users don't burn ADA on a misclick.
  • Empty-state copy that links to the docs page (separate Help/Protocol page item).

Withdraw bridge

  • The Withdraw page should optionally deliver to a Seedelf register (covered by a separate feat-ticket; see #linked). The presentation half — destination-mode radios, Seedelf-id picker, dynamic min-UTxO hints — belongs here so the two flows feel like one product.

Polish

  • The mint button hard-fails when the wallet has fewer than 2-ish ADA spare; should surface a clear "needs ~2 ADA for the new register's min-UTxO" hint up-front.
  • Toast copy is generic; tx-specific toasts ("Minted register M2: validators + Preprod bootstrap (calibration deferred to M4) #3", "Sent 5 ADA to alice's stealth wallet") read better.
  • RTL audit for ar / fa / ur — the new forms should mirror correctly.
  • Accessibility: the per-register row's button cluster needs better keyboard nav + screen-reader labels.

Non-goals

Order of attack

  1. Receive flow (QR + human-name annotations) — biggest perceived UX win.
  2. Address book — once Receive lands, contacts compose naturally.
  3. Withdraw→Seedelf integration UI (after the linked SDK feat-ticket is merged).
  4. Spend defaults + Spend-to-mix-box.
  5. Onboarding staircase.
  6. Polish (a11y, RTL, toast copy).

Related

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions