Seedelf-Wallet

Roadmap, v1 — the full record (archived)

Frozen on 2026-10-02. This is roadmap.md exactly as it stood when v1 finished: every chunk’s full scope, and all 30 handoff notes, about 90 KB of them. The live file was compressed to an index on the same day; nothing was deleted, it was moved here.

Read this when a one-line entry in the live roadmap isn’t enough — when you need the reasoning behind a decision, what a chunk actually did, what surprised the session that built it, or a transaction hash and fee from a live run.

Line references to roadmap.md written before 2026-10-02 (such as the one in plans/privacy-review.md) resolve against this file, not the live one.

Don’t edit this file. It’s a record. New handoff notes go in the live roadmap.md; what comes next is in post-release-roadmap.md.

Every relative link below has gained one ../, since this copy sits one directory deeper than the original. Nothing else in the text was changed.


Roadmap (as it stood)

The wallet is built in chunks, each about one working session.

Each chunk:

  1. Starts on a branch web-wallet/<topic> taken from main (from seedelf-web-wallet before v1.0.0). See development.md.
  2. Ends with a PR back into main.
  3. At its end, updates this file: tick the chunk, and write what the next session needs to know under Handoff notes.

Status: ✅ done · 🚧 in progress · ⬜ not started

v1

Shipped. Every chunk below is done, and v1.0.0 went to the Chrome Web Store on 2026-09-28 (see the newest handoff note). Work from here is After v1.

# Chunk Status Scope
1 WASM foundation ✅ Create the seedelf-web-wallet/wasm crate (a workspace member). Expose register create, re-randomize, the ownership check and the Schnorr proof. Build with wasm-bindgen and smoke-test from JS.
2 Seedelf key derivation ✅ Implement the v1 HKDF spec (keys-and-accounts.md) in seedelf-crypto with frozen test vectors. Expose it through WASM and check the vectors from TS.
3 Cardano keys ✅ Phrase → CIP-1852 Cardano account (account 0'): receive, change and stake addresses, in Rust (pallas-wallet). Checked against Lace’s library (@cardano-sdk).
4 Extension scaffold ✅ Vite + React + TS and an MV3 manifest (preprod). Service worker, popup plus full tab, typed messaging, WASM loaded in the worker, load unpacked. CI for Rust and the extension on PRs.
5 Vault and lock ✅ SecretBox vault, create/restore onboarding (restore has per-word BIP39 autocomplete, like Lace and Eternl), unlock, chrome.storage.session, auto-lock, unlock back-off. Plan: plans/chunk-05-vault-and-lock.md.
6 Balance ✅ TS Koios client. Contract scan using the ownership check. Cardano account discovery: receive and change chains, gap limit 20. Balances, tokens, list of Seedelfs. QR code for the receive address.
7 Builder extraction + move in ✅ Merge main first. Gate seedelf-koios’s connect_timeout for wasm32 (the only thing that stops seedelf-core compiling to WASM). Split building from network calls in seedelf-core, starting with external sweep, and keep the CLI tests green. Then move in, end to end on preprod.
8 Create a Seedelf ✅ Stealth mint (util mint) with giveme.my collateral. Plan: plans/chunk-08-create-seedelf.md.
8b Mint first ✅ The first Seedelf is paid by the Cardano account (the CLI’s create, signed in WASM, the account’s own collateral), before any move-in. The stealth mint stays as a choice for a Seedelf balance holding received money. See flows.md.
9 Transfer ✅ Seedelf → Seedelf (transfer). Plan: plans/chunk-09-transfer.md.
10 Withdraw ✅ sweep and remove, on ScriptSpend and the extension’s script-spend.ts. Plan: plans/chunk-10-withdraw.md.
11a Style and flow pass ✅ The whole UI, much more like Lace’s dark mode (packages/lib/ui-toolkit/src/design-tokens/theme/dark.ts): its look, not its brand. Dark only, Inter, Lucide icons, and Home as a Seedelf / Cardano account switch with round actions. Plan: plans/chunk-11-polish.md.
11b Size and live runs ✅ A smaller WebAssembly module: a size-tuned cargo profile (wasm-opt measured and left out). Live preprod runs of every flow from the built extension. The loose ends from chunks 8b–10. Same plan.
11c Testers ✅ Everything needed to submit an unlisted, preprod-only Chrome Web Store listing, never submitted: npm run package (the store build, third-party notices, a reproducible zip), the listing text and privacy policy in store/, the images from npm run store:images, and a release checklist. Same plan.
12 Style and flow ✅ The user tested the built wallet and sent findings; 29 items, each decided with the user. Among them: a loading splash, a Tokens screen and a bundled token list, a token picker with any amount of each, Settings, Activity, Contacts, an incremental contract scan, Send from the Cardano account, the minimum ADA worked out, Receive on the Seedelf tab, spending everything under the account’s payment keys, a UTxOs screen on both sides with locks, the Cardano account’s collateral in Settings, and Refresh on UTxOs and Activity. Plan: plans/chunk-12-style-flow.md.
13 Staking and voting ✅ The wallet becomes a full Cardano wallet with Seedelf built in: a Staking page (one pool, rewards spent automatically or by hand), a pool browser, and voting delegation (Always abstain, No confidence, or a DRep). Certificates patched into Pallas’s transactions. Plan: plans/chunk-13-staking.md.
14 Style and flow, second pass ✅ The user’s second round of findings, each decided with the user, as in chunk 12. So far: Send from the Cardano account pays a Seedelf, one way to write the name (Seedelf, and Seedelf Wallet for the app), several recipients in one payment on both sides, and Private and Public in place of Seedelf and Cardano. Then what Lace and Eternl had that the wallet didn’t: a full tab by default or the side panel (no popup), hide balances, a note on a public send, the lock time, your handles on Receive (and a warning for a handle in Seedelf), a check of the written phrase, Activity as CSV, staking in the public Activity, and ADA’s value in a currency on mainnet. Readable dropdowns, and a code review’s fixes before the PR. Plan: plans/chunk-14-style-flow-2.md.
15 dApps: the public connector, and private swaps ✅ The first steps towards using contracts privately. Private swaps: Minswap’s aggregator swaps from a one-time account funded from the private balance, and everything comes back into it (step 2). CIP-30 for the public account, as Lace has it, behind a Settings switch that’s off by default: Chrome is asked for access to sites only when it’s turned on, and nothing is added to any page until then. A window to connect, sign transactions (what they do to the account, read in WebAssembly) and sign messages (CIP-8), connected sites to disconnect, and chaining on the account’s own unconfirmed outputs. Then private sessions, a dApp browser, and Minswap. Plan: plans/chunk-15-dapp-connector.md.
16 Lovejoin ✅ The mixer in the wallet. A private session’s spare ADA goes through Lovejoin on its way back: 10 ₳ boxes owned by the Seedelf key, a fan-out 3 wide (depth a setting, default 2) chained locally and paid by the session, then each box withdrawn into a fresh register after a random delay. The leftover and any tokens merge into the session’s funding change. A Lovejoin tile mixes from the private balance or the public account. Scripts are evaluated in WebAssembly (uplc), after Pallas moves to 0.35. Plan: plans/chunk-16-lovejoin.md.

After v1

This section is closed, and so is this file. Chunk 17 was the last thing chosen from it. Everything after v1.1.0 is tracked in post-release-roadmap.md — what’s owed, what the owner wants, and what we’ve decided against — and a chunk picked up from there still lands its handoff note in this file.

# Chunk Status Scope
17 The transaction view ✅ Open the transaction itself — inputs, outputs, datums, scripts, certificates, votes, redeemers, metadata — decoded from the CBOR about to be signed, plus the raw bytes, from every review and from the connector’s sign window. A decoder in WebAssembly that takes CBOR and nothing else (wasm/src/decode.rs), the cheapest handler in the worker (background/tx-view.ts), one shared modal (ui/components/TxDetail.tsx), and a cross-check against cardano-cli debug transaction view for every fixture. Plan: plans/chunk-17-transaction-view.md.

Handoff notes

Newest first. Keep each entry short: what landed, what’s next, and anything surprising.