Qal Wallet strategy + prototype · content/wallet_strategy.md
Qal Wallet — Strategy & the Firefly Path
Date: 2026-09-06 · Answers: the wallet part of "functional for our use and the potential wallet similar to Firefly."
Prototype: brand/wallet/qal_wallet.html (phone-first concept — doubles as the UI spec). Brand kit: brand/index.html.
1. What Firefly was (and why we don't fork it directly)
Firefly (repos/firefly) was IOTA's official Stardust-era wallet: React + TypeScript UI over wallet.rs (Rust core with Stronghold key storage), Ledger support, profile-based accounts, staking, and a clean onboarding. Post-Rebased (2025) IOTA moved users to a web wallet / browser-extension model on the Sui-lineage stack, and Firefly is legacy. Takeaways:
- Keep: the account/profile UX patterns, Stronghold-first key custody, ledger integration ideas, the "balance-first" dashboard layout (our prototype mirrors this).
- Don't fork: the Stardust-era Rust binding is tied to the retired protocol; the new stack's SDK is TS-first and simpler.
2. Four-layer wallet strategy
| Layer | What | Stack | When |
|---|---|---|---|
| Embedded wallet (default for all qalarc apps) | "Sign in with Qal ID" + balances/holds/receipts inside each app; users never see seed phrases — keys in OS keystore via Stronghold WASM; gas sponsored by Qal Pass | @iota/dapp-kit + TS SDK (upstream pull — see tech-extraction manifest) + our qal_* Move views |
Phase 1-2 |
| Qal Wallet web app (power users + ops) | The full prototype: accounts incl. agents, caps, jobs, receipts, NFT kiosk, proof-of-reserves, Qalx swap, revocation drills | Same TS SDK; static SPA (can deploy as qalarc.com wallet later) | Phase 2 |
| Browser extension | IOTA's extension model ported: connect any qalarc web property | fork IOTA web-wallet extension | Phase 3 (if needed) |
| Mobile app | Full wallet + qal: QR payments + biometric unlock; agent dashboard notifications (hub alerts) |
React Native/Expo wrapper over TS SDK, Stronghold mobile | Phase 3+ |
3. Qal-specific wallet features (what makes it ours, not a clone)
- Two balances, honestly labelled: B-QALS (green badge: "AU$1.00 reserve-backed · redeem") vs G-QALS (bronze: "growth token · floor A$0.0004 · Qalx"). No mixed numbers, ever.
- Holds are first-class UI: active holds list with amounts + expiry countdowns ("A$13.80 held for job #4821 · settles in ~4 min") — the pre-auth mental model from petrol cards.
- Agent accounts: switch between your identity and each agent's account; per-agent caps displayed; one-tap revocation drill (the prototype demos this).
- Receipts gallery: every settled job's NFT with provenance (model hash, inputs, provider DID) — shareable proof links for clients.
- Reserve tab: live proof-of-reserves (supply vs attested AUD, last attestation, coverage) — trust as a feature.
- qal: URIs + QR:
qal:pay?to=...&amount=...&memo=...deep links for POS-style and device kiosks. - Feeless feel: all user gas sponsored (Qal Pass); the wallet explains it in one line, not a whitepaper.
4. Custody & security model (v1)
- Keys: Stronghold (IOTA's audited secure storage) wrapped in OS keychain/biometrics; no browser-localStorage keys, ever.
- Backups: encrypted Stronghold snapshot + recovery phrase option for humans; agents use delegated keys (ops-controlled governance DID — agents never custody their own master key).
- Transaction policy: spends beyond per-epoch caps impossible; new payees > threshold require a second factor (first 90 days: ops approval push via Signal hub).
- Bug bounty: QALS-denominated once mainnet value exists.
5. Build order (matches the implementation plan)
- Prototype polish (this week): react to your brand picks; mobile-PWA wrap so it's installable on your phone directly from qalarc.com.
- Phase 1 (devnet): embedded wallet in ONE app (hub dashboard) — real balances from
qal_creditobjects onqalnet-dev-1. - Phase 2: full web wallet MVP (the prototype screens, real SDK), receipts + reserves + Qalx swap.
- Phase 3: extension/mobile + QR payments at real kiosks/devices.