Skip to content

feat: new onboarding process#3796

Merged
kaloudis merged 14 commits intomasterfrom
onboarding
Mar 31, 2026
Merged

feat: new onboarding process#3796
kaloudis merged 14 commits intomasterfrom
onboarding

Conversation

@kaloudis
Copy link
Copy Markdown
Contributor

@kaloudis kaloudis commented Mar 5, 2026

Description

Relates to issue: ZEUS-2342

This pull request is categorized as a:

  • New feature
  • Bug fix
  • Code refactor
  • Configuration change
  • Locales update
  • Quality assurance
  • Other

Checklist

  • I’ve run yarn run tsc and made sure my code compiles correctly
  • I’ve run yarn run lint and made sure my code didn’t contain any problematic patterns
  • I’ve run yarn run prettier and made sure my code is formatted correctly
  • I’ve run yarn run test and made sure all of the tests pass

Testing

If you modified or added a utility file, did you add new unit tests?

  • No, I’m a fool
  • Yes
  • N/A

I have tested this PR on the following platforms (please specify OS version and phone model/VM):

  • Android
  • iOS

I have tested this PR with the following types of nodes (please specify node version and API version where appropriate):

  • Embedded LND
  • LND (REST)
  • LND (Lightning Node Connect)
  • Core Lightning (CLNRest)
  • Nostr Wallet Connect
  • LndHub

Locales

  • I’ve added new locale text that requires translations
  • I’m aware that new translations should be made on the ZEUS Transfix page and not directly to this repo

Third Party Dependencies and Packages

  • Contributors will need to run yarn after this PR is merged in
  • 3rd party dependencies have been modified:
    • verify that package.json and yarn.lock have been properly updated
    • verify that dependencies are installed for both iOS and Android platforms

Other:

  • Changes were made that require an update to the README
  • Changes were made that require an update to onboarding

@kaloudis kaloudis added this to the v0.13.0 milestone Mar 5, 2026
@kaloudis kaloudis linked an issue Mar 5, 2026 that may be closed by this pull request
@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly enhances the Zeus application by adding support for LDK Node, a Lightning Development Kit node. It introduces a new onboarding process to guide users through wallet creation and configuration, including options for Cashu ecash and self-custodial Lightning. The PR also integrates LSPS7 for channel lease extensions and VSS for cloud backups, providing a more robust and user-friendly experience.

Highlights

  • LDK Node Integration: This PR introduces support for LDK Node, an embedded Lightning node implementation, offering users a self-custodial on-device Lightning experience.
  • Onboarding Flow: A new onboarding flow is implemented to guide users through wallet setup, including options for Cashu ecash and self-custodial Lightning.
  • LSPS7 Support: Adds support for LSPS7, enabling channel lease extensions for improved channel management.
  • VSS Support: Integrates Versioned Storage Service (VSS) for cloud backups, ensuring wallet data can be recovered across devices.
Changelog
  • .github/ISSUE_TEMPLATE/bug_report.yml
    • Added 'LDK Node' as an option for affected node interfaces in bug reports.
  • .github/PULL_REQUEST_TEMPLATE.md
    • Added 'LDK Node' to the list of tested node types in the pull request template.
  • .gitignore
    • Added entries to ignore LDK Node binaries and macOS specific files.
  • App.tsx
    • Added new routes and components for the onboarding process and LDK Node settings, including RapidGossipSync, EsploraServer, and VssServer.
  • android/app/build.gradle
    • Updated CDK dependencies comment to include LDK Node dependencies.
  • android/app/src/main/assets/custom/Gazelle.svg
    • Added a new SVG asset for Gazelle.
  • android/app/src/main/assets/custom/Olympus.svg
    • Added a new SVG asset for Olympus.
  • android/app/src/main/assets/custom/OnChain.svg
    • Added a new SVG asset for OnChain.
  • android/app/src/main/assets/custom/Rabbit.svg
    • Added a new SVG asset for Rabbit.
  • android/app/src/main/assets/custom/RebalanceIcon.svg
    • Added a new SVG asset for RebalanceIcon.
  • android/app/src/main/assets/custom/Turtle.svg
    • Added a new SVG asset for Turtle.
  • android/app/src/main/assets/custom/Upgrade.svg
    • Added a new SVG asset for Upgrade.
  • android/app/src/main/assets/custom/Watchtower.svg
    • Added a new SVG asset for Watchtower.
  • android/app/src/main/assets/custom/gift.svg
    • Added a new SVG asset for gift.
  • android/app/src/main/assets/custom/nwc-logo.svg
    • Added a new SVG asset for nwc-logo.
  • android/app/src/main/java/app/zeusln/zeus/LdkNodeModule.kt
    • Added a new module for LDK Node integration, including builder methods, mnemonic generation, node lifecycle management, payment functions, peer management, and event handling.
  • android/app/src/main/java/app/zeusln/zeus/LdkNodePackage.kt
    • Added a new package for the LDK Node module.
  • android/app/src/main/java/com/zeus/MainApplication.kt
    • Added the LdkNodePackage to the list of React packages.
  • android/app/src/main/java/org/lightningdevkit/ldknode/LogFileObserver.kt
    • Added a class to observe and tail LDK Node log files.
  • backends/CLNRest.ts
    • Added supportsMessageVerification, supportsListingOffers, and supportsBolt12Address to CLNRest backend.
  • backends/EmbeddedLND.ts
    • Added supportsMessageVerification, supportsCustomFeeLimit, supportsListingOffers, and supportsBolt12Address to EmbeddedLND backend.
  • backends/EmbeddedLdkNode.ts
    • Added a new backend for Embedded LDK Node, including methods for node initialization, event subscription, balance management, channel management, on-chain operations, and BOLT11/BOLT12 payments.
  • backends/LND.ts
    • Added supportsMessageVerification and supportsCustomFeeLimit to LND backend.
  • backends/LightningNodeConnect.ts
    • Added supportsMessageVerification and supportsCustomFeeLimit to LightningNodeConnect backend.
  • backends/LndHub.ts
    • Added supportsMessageVerification, supportsListingOffers, supportsBolt12Address, and supportsCustomFeeLimit to LndHub backend.
  • backends/NostrWalletConnect.ts
    • Added supportsMessageVerification and supportsCustomFeeLimit to NostrWalletConnect backend.
  • components/Amount.tsx
    • Added forceMsats prop to AmountDisplay and Amount components to force display of millisatoshis.
  • components/DropdownSetting.tsx
    • Added support for disabled options in DropdownSetting for iOS.
  • components/FeeLimit.tsx
    • Updated FeeLimit component to use supportsCustomFeeLimit instead of isLNDBased.
  • components/LayerBalances/LightningSwipeableRow.tsx
    • Updated LightningSwipeableRow to navigate to PayCodes or CreatePayCode based on nodeInfoStore.supportsListingOffers.
  • components/Modals/AlertModal.tsx
    • Added handling for vssError, esploraError, and rgsError in AlertModal.
  • components/Modals/NewChannelModal.tsx
    • Updated NewChannelModal to check for supportsLSPS1native when determining LSPS1 support.
  • components/Modals/RatingModal.tsx
    • Updated the ZEUS logo.
  • components/NodeIdenticon.tsx
    • Updated NodeIdenticon to include embedded-ldk-node implementation.
  • fetch-libraries.sh
    • Added script to fetch LDK Node iOS library.
  • index.js
    • Suppressed red screen for known ldk-node async errors.
  • ios/LdkNodeMobile/LdkNodeModule.m
    • Added a new module for LDK Node integration (Objective-C).
  • ios/LdkNodeMobile/LdkNodeModule.swift
    • Added a new module for LDK Node integration (Swift).
  • ios/LdkNodeMobile/LogFileObserver.swift
    • Added a class to observe and tail LDK Node log files (Swift).
  • ios/zeus.xcodeproj/project.pbxproj
    • Updated project to include LDK Node framework and source files.
  • ldknode/LdkNode.d.ts
    • Added TypeScript definitions for LDK Node module.
  • ldknode/LdkNodeInjection.ts
    • Added a wrapper class for LDK Node native module.
  • ldknode/index.ts
    • Added index file for LDK Node module.
  • locales/en.json
    • Added new locale strings for onboarding, LDK Node settings, and closure reasons.
  • models/Channel.ts
    • Updated Channel model to handle shortChannelId from LDK Node.
  • stores/AlertStore.ts
    • Added observable properties for vssError, esploraError, and rgsError.
  • stores/CashuStore.ts
    • Added mintInfoCache, fetchMintInfoBatch, and getTopScoredMints methods for managing Cashu mints.
  • stores/ChannelsStore.ts
    • Updated ChannelsStore to fetch pending payments for LDK Node.
  • stores/LSPStore.ts
    • Added LSPS7 support and methods for native LSPS1 and LSPS7 operations.
  • stores/NodeInfoStore.ts
    • Added supportsListingOffers property.
  • stores/SettingsStore.ts
    • Added properties for LDK Node settings and initialMintUrls.
  • utils/AmountUtils.ts
    • Added forceMsats parameter to processSatsAmount to force display of millisatoshis.
  • utils/BackendUtils.ts
    • Added EmbeddedLdkNode backend and updated capability flags.
  • utils/EmbeddedLdkNodeUtils.ts
    • Added utility functions for creating and managing LDK Node wallets.
  • utils/EventListenerUtils.ts
    • Added LdkNodeEventEmitter for LDK Node events.
  • utils/PhotoUtils.ts
    • Added LDK Node logo.
  • utils/RestartUtils.ts
    • Updated restartNeeded function to stop LDK Node before restarting.
  • utils/VssAuthUtils.ts
    • Added utility functions for generating VSS authentication headers.
  • utils/WalletCreationUtils.ts
    • Added utility functions for creating and managing LDK Node wallets.
  • views/Cashu/CashuPayment.tsx
    • Added forceMsats prop to Amount component.
  • views/Channels/Channel.tsx
    • Updated ChannelView to handle shortChannelId from LDK Node.
  • views/Channels/ChannelsPane.tsx
    • Updated ChannelsPane to support LDK Node and handle pending channels.
  • views/IntroSplash.tsx
    • Updated IntroSplash to navigate to Onboarding1 and removed LND specific code.
  • views/LSPS1/Order.tsx
    • Updated LSPS1Order to handle native LSPS1 orders.
  • views/LSPS1/Settings.tsx
    • Added UI elements for configuring native LSPS1 settings.
  • views/LSPS1/index.tsx
    • Updated LSPS1 index to handle native LSPS1.
  • views/LightningAddress/ZaplockerGetChan.tsx
    • Updated ZaplockerGetChan to navigate to PayCodes or CreatePayCode based on nodeInfoStore.supportsListingOffers.
  • views/Menu.tsx
    • Updated Menu to include LDK Node settings and handle seed phrase display.
  • views/NetworkInfo.tsx
    • Updated NetworkInfo to handle LDK Node specific data.
  • views/Onboarding/Onboarding1.tsx
    • Added a new view for the first step of the onboarding process.
  • views/Onboarding/Questionnaire2.tsx
    • Added a new view for the second step of the onboarding process.
  • views/Onboarding/Questionnaire3.tsx
    • Added a new view for the third step of the onboarding process.
  • views/Onboarding/Questionnaire4.tsx
    • Added a new view for the fourth step of the onboarding process.
  • views/Onboarding/RecommendedSettings.tsx
    • Added a new view for the recommended settings.
  • views/Payment.tsx
    • Added forceMsats prop to Amount component.
  • views/PaymentRequest.tsx
    • Updated PaymentRequest to handle LDK Node specific data.
  • views/PendingHTLCs.tsx
    • Updated PendingHTLCs to handle LDK Node specific data.
  • views/Settings/EmbeddedNode/EsploraServer.tsx
    • Added a new view for configuring the Esplora server.
  • views/Settings/EmbeddedNode/LDKLogs.tsx
    • Added a new view for displaying LDK Node logs.
  • views/Settings/EmbeddedNode/LNDLogs.tsx
    • Updated LNDLogs to limit log length.
  • views/Settings/EmbeddedNode/RapidGossipSync.tsx
    • Added a new view for configuring Rapid Gossip Sync.
  • views/Settings/EmbeddedNode/Troubleshooting.tsx
    • Updated Troubleshooting to handle LDK Node specific data.
  • views/Settings/EmbeddedNode/VssServer.tsx
    • Added a new view for configuring the VSS server.
  • views/Settings/Seed.tsx
    • Updated Seed view to handle LDK Node specific data.
  • views/Settings/SeedRecovery.tsx
    • Updated SeedRecovery to handle LDK Node specific data.
  • views/Settings/Wallets.tsx
    • Updated Wallets view to include LDK Node settings.
  • views/Swaps/index.tsx
    • Updated Swaps index to handle LDK Node specific data.
  • views/Tools/CashuTools.tsx
    • Updated CashuTools to handle LDK Node specific data.
  • views/Tools/NodeConfigExportImport.tsx
    • Updated NodeConfigExportImport to handle LDK Node specific data.
  • views/Tools/SignVerifyMessage.tsx
    • Updated SignVerifyMessage to handle LDK Node specific data.
  • views/Transaction.tsx
    • Added forceMsats prop to Amount component.
Activity
  • The PR author, kaloudis, has indicated that this is a new feature.
  • The PR has been tested on Android and iOS platforms.
  • The PR has been tested with Embedded LND, LND (REST), LND (Lightning Node Connect), Core Lightning (CLNRest), and Nostr Wallet Connect nodes.
  • The PR includes changes that require an update to onboarding.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a new onboarding process and integrates LDK Node as a new embedded wallet option. The changes are extensive, touching native code for Android and iOS, backend abstractions, UI components, and application state management. My review focuses on a few key areas: a critical data type issue in the native bridge that could lead to incorrect balances, a bug in the message verification logic for the new LDK backend, and a minor leftover debug statement. All identified issues are valid and should be addressed. Overall, this is a significant and well-executed feature addition.

Note: Security Review did not run due to the size of the PR.

Comment thread android/app/src/main/java/app/zeusln/zeus/LdkNodeModule.kt
Comment thread backends/EmbeddedLdkNode.ts Outdated
Comment thread views/Channels/Channel.tsx Outdated
@kaloudis kaloudis marked this pull request as ready for review March 29, 2026 14:24
@kaloudis kaloudis force-pushed the onboarding branch 2 times, most recently from 0c8e97d to a1fe637 Compare March 29, 2026 21:57
Comment thread views/Onboarding/Onboarding1.tsx Outdated
Comment thread locales/en.json Outdated
Comment thread views/Onboarding/NodeChoice.tsx Outdated
Comment thread views/Onboarding/NodeChoice.tsx Outdated
Comment thread views/Onboarding/WalletSetup.tsx Outdated
Comment thread views/Onboarding/WalletType.tsx Outdated
Copy link
Copy Markdown
Contributor

@ajaysehwal ajaysehwal left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image Image Image Image

@kaloudis, when we switch to another theme, many UI styles break.

@ajaysehwal
Copy link
Copy Markdown
Contributor

Screen.Recording.2026-03-30.at.10.10.44.PM.mov

Copy link
Copy Markdown
Contributor

@ajaysehwal ajaysehwal left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Screen.Recording.2026-03-30.at.10.15.21.PM.mov

@kaloudis, I don’t think this navigation behavior looks correct.

Copy link
Copy Markdown
Contributor

@ajaysehwal ajaysehwal left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kaloudis , i think we need to remove intro images refs from ios/zeus.xcodeproj/project.pbxproj , ios/link-assets-manifest.json and android/link-assets-manifest.json

Comment thread views/Onboarding/MintDiscovery.tsx Outdated
import TextInput from '../../components/TextInput';

import CashuStore, { ScoredMint } from '../../stores/CashuStore';
import SettingsStore from '../../stores/SettingsStore';
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: SettingsStore is unused

Copy link
Copy Markdown
Contributor

@ajaysehwal ajaysehwal left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image

Copy link
Copy Markdown
Contributor

@ajaysehwal ajaysehwal left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kaloudis, the “Donate to ZEUS” option is currently visible on iOS, so we should remove it. We should also remove the Payment Tips option from the onboarding flow

Image Image

@ajaysehwal
Copy link
Copy Markdown
Contributor

I don’t think the developer options look appropriate in the onboarding flow.

Simulator Screenshot - iPhone 17 Pro - 2026-03-31 at 17 47 31

Copy link
Copy Markdown
Contributor

@ajaysehwal ajaysehwal left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i think we need to remove Sweep on-chain wallet tools also

Screen.Recording.2026-03-31.at.5.51.02.PM.mov

@kaloudis kaloudis force-pushed the onboarding branch 2 times, most recently from 3240d95 to 9ef4df5 Compare March 31, 2026 15:10
@kaloudis kaloudis force-pushed the onboarding branch 2 times, most recently from d668246 to 61276de Compare March 31, 2026 15:22
@kaloudis kaloudis force-pushed the onboarding branch 2 times, most recently from 9d95b0b to edc8992 Compare March 31, 2026 15:57
Copy link
Copy Markdown
Contributor

@ajaysehwal ajaysehwal left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tACK

@kaloudis kaloudis merged commit 1132a63 into master Mar 31, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

New onboarding process

2 participants