Universal Profiles
Built the native iOS app · one of the main contributors to the React Native rebuild · Native iOS build first, then the React Native rebuild (Apr 2023 – Jul 2026)
LUKSO's official mobile wallet - the app people use to create and control their blockchain identity, send tokens and collectibles, and connect safely to web3 apps. Built twice: first as a native iOS, then cross-platform React Native.
















Universal Profile is LUKSO's official mobile wallet - the app people use to create and control their blockchain identity from a phone. On LUKSO, a user's identity is a smart-contract account (a "Universal Profile") rather than a raw crypto key, which makes it recoverable, upgradeable, and able to grant limited, revocable permissions to individual apps and devices. This app is the phone-based control center for that identity.
From the app, a person can create a profile without owning any cryptocurrency first - the network setup fees are sponsored on their behalf, and they can preview and pick their future address before it profile creation. They can hold and send tokens and digital collectibles, sign in to web3 apps and approve or reject each request, browse those apps through a built-in browser, buy crypto with a card, and decide precisely which apps and devices are allowed to act for them and what each one is permitted to do.
This mobile product has been built twice, and both builds are part of the story. The first was a native iOS app in Swift and SwiftUI - on-chain identity management, a transaction-signing engine and biometric key protection backed by the iOS Keychain. Every dependency was managed through Swift Package Manager, and several core packages ran on my own forks: web3swift (I contributed upstream and kept a fork pinned to a universal-profile branch for the latest changes), WalletConnectSwift together with a forked Starscream carrying a custom patched WebSocket, and SwiftUICoordinator - my own SwiftUI navigation package.
The second build is the current cross-platform app. Once the wallet needed to reach Android as well, keeping two separate native codebases would have meant rebuilding the same web3 logic twice over, so the team moved to React Native: one codebase serving both iOS and Android, with the core wallet logic shared with LUKSO's browser extension through internal packages so a feature written once behaves consistently across products and additionally we were aiming at reducing the time spent building the web3 iOS native tools. I was one of the main contributors to this React Native rebuild over almost four years, working across the wallet, transactions, account setup, app connectivity, and the in-app browser.
Under the hood the React Native app is a domain-driven, dependency-injected codebase with a split state model - application state kept separate from live on-chain data - and three custom native modules written in Swift and Kotlin for the pieces React Native does not provide out of the box. It ships with an automated test suite and release automation that decides on its own whether a change goes out as an instant over-the-air update or a full app-store build.
Architecture & engineering highlights
- Shipped on two stacks - the original native iOS app (Swift / SwiftUI) and the current cross-platform React Native app - including a full platform migration of a live product.
- Sponsored ("gasless") account creation - new users create their on-chain profile with the network fees covered for them, so there is no crypto-buying hurdle before the first use, and they can preview their future address before it exists. Built as a resumable flow that survives interruptions and picks up where it left off.
- Two transaction paths behind one interface - a standard on-chain path and a sponsored "relay" path where the user pays no fees - with smart handling of transaction ordering to avoid stuck or failed sends.
- Key protection - private keys are encrypted, stored in the device's secure hardware (iOS Keychain / Android Keystore), and unlocked with biometrics; the master encryption key is only ever injected during the release build in the release pipeline.
- An in-app browser for web3 apps that connects them to the user's wallet and blocks unsafe links and address schemes.
- Fine-grained permission management - a user can grant an app or device a narrow, revocable set of rights instead of all-or-nothing access.
- One pipeline handling both QR scanning and links - pairing an app, opening a profile, or prefilling a payment all flow through the same reviewed-and-approved path.
- Three first-party native modules (Swift + Kotlin) for cryptography, rich notifications and background parallel execution not covered by React Native's defaults.
- Backed by an automated test suite (unit, integration, and end-to-end flows) and release automation that routes each change to an over-the-air update or a full native build.
Tech stack
Native iOS - core (original build)
Native iOS - Web3 & networking
Native iOS - data & media
React Native app & state
Web3
Security & device
Native modules (Swift & Kotlin)
Delivery & QA
All rights belong to their respective owners.