- Track frontend/capacitor.config.json with appId/appName/webDir for Capacitor Android setup
- Unignore frontend/capacitor.config.json so config is committed with the project
- Update Android Docker builder to use JDK 21 (required by current Capacitor/Gradle toolchain)
- Switch Docker CMD to JSON-array form for safer signal handling
- Refresh frontend package-lock.json to match Capacitor and crypto dependencies required by npm ci
Introduces a platform abstraction so the React app runs on both
Electron (desktop) and Android (WebView via Capacitor) without any
Python backend:
- frontend/src/services/crypto-service.js: pure-JS reimplementation of
all address types (P2PKH, P2WPKH, P2TR, P2PK, P2SH multisig) and HD
wallet generation (BIP-32/39/44/49/84/86) using @noble/curves,
@noble/hashes, @scure/bip32, @scure/bip39, bech32, bs58.
AES-256-CBC encryption via Web Crypto API, Electrum-compatible key
derivation (SHA256(SHA256(password))).
- frontend/src/services/api.js: detects Electron (window.electronAPI)
vs Android (Capacitor Filesystem) at runtime; components are
unchanged in behaviour.
- frontend/src/components/{HDWallet,SingleAddress,WalletViewer}.jsx:
import api instead of window.electronAPI directly.
- frontend/package.json: @noble/*, @scure/*, bech32, bs58,
@capacitor/core, @capacitor/filesystem, @capacitor/cli,
@capacitor/android; cap:sync script.
- frontend/capacitor.config.json: appId com.walletgen.app, webDir dist.
- contrib/android/Dockerfile + build.sh: JDK 17, Android SDK 34,
cap add/sync, ./gradlew assembleDebug; outputs wallet-gen-debug.apk