Skip to content

feat: multi-wallet support — Solflare, Phantom, Backpack#97

Merged
kh0ra merged 1 commit into
mainfrom
feat/multi-wallet
May 11, 2026
Merged

feat: multi-wallet support — Solflare, Phantom, Backpack#97
kh0ra merged 1 commit into
mainfrom
feat/multi-wallet

Conversation

@kh0ra
Copy link
Copy Markdown
Contributor

@kh0ra kh0ra commented May 11, 2026

Per user request, expand wallet support beyond Solflare-only. All three providers share the legacy provider API, so the existing service abstracts cleanly.

Changes

  • services/solflare.ts: WalletProvider interface, SUPPORTED_WALLETS registry, selectWallet / getSelectedWalletId / getSelectedWalletLabel, dynamic getProvider() that resolves window.solflare / phantom.solana / backpack. Listener bind/unbind tracks the active provider so swapping wallets mid-session doesn't leak handlers. Persisted choice in liminal:wallet:selected.
  • components/WalletPickerModal.tsx: new LIMINAL-styled picker. 3 rows with colored glyphs, detects installed extensions, badges them 'Detected'. Uninstalled → opens official download page. Esc + backdrop dismiss.
  • Header / WalletPage / ExecutionPanel: 'Connect Solflare' CTAs now open the picker; labels updated to neutral 'Connect wallet'.

Verified

  • typecheck + build green
  • Modal opens from header, WalletPage, ExecutionPanel splash
  • Picker shows Solflare/Phantom/Backpack with correct glyphs
  • Detection logic correctly flags installed extensions

Trade-off

CLAUDE.md BLOK 6 originally pinned Solflare-only for hackathon integration depth. Multi-wallet dilutes that signal for the Solflare track specifically, but removes install friction for real users.

Per user request, expand wallet support beyond Solflare-only. All
three providers share the same legacy provider API (Phantom copied
Solflare's interface, Backpack is wallet-standard compatible), so
the existing service layer abstracts cleanly:

services/solflare.ts (kept the filename for callsite continuity):
  - WalletProvider interface replaces SolflareProvider
  - SUPPORTED_WALLETS registry with id/label/downloadUrl/detect()
  - selectWallet(id) + getSelectedWalletId() / getSelectedWalletLabel()
  - getProvider() resolves window.solflare | phantom.solana | backpack
  - Listener bind/unbind tracks the active provider so swapping
    wallets mid-session doesn't leak Solflare-side handlers
  - Persisted choice in localStorage (liminal:wallet:selected)
  - All error messages now include the active wallet label

components/WalletPickerModal.tsx (new):
  - LIMINAL-styled picker, 3 rows with colored glyphs
  - Detects installed extensions on open, badges them 'Detected'
  - Uninstalled wallets open the official download page
  - Esc + backdrop dismiss

Header / WalletPage / ExecutionPanel:
  - 'Connect Solflare' CTAs now open the picker instead of calling
    connectWallet() directly
  - Labels updated to neutral 'Connect wallet' / 'Choose your wallet'

Trade-off vs. CLAUDE.md BLOK 6: integration depth is now spread
across three wallets instead of concentrated on Solflare. For the
Solflare hackathon track this dilutes the depth signal, but for
real users it removes the install friction of forcing a single
brand. Solflare remains the default first-time selection.
@kh0ra kh0ra merged commit 7ee9087 into main May 11, 2026
1 of 2 checks passed
@vercel
Copy link
Copy Markdown

vercel Bot commented May 11, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
liminal Building Building Preview, Comment May 11, 2026 3:11pm

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant