"Sending crypto should be as easy as sending a text message."
NextVibe Wallet is a next-gen SocialFi wallet built on Solana, featuring Gasless Transactions, Biometric Security, and Seedless Onboarding via the LazorKit SDK.
This represents a Real-World Integration of LazorKit SDK.
- Status: Live Beta (Android)
- Adoption: 100+ Active Beta Users on mainnet/devnet.
- Goal: NextVibe is scaling to be the first major SocialFi app fully powered by LazorKit's gasless infrastructure in Vietnam & Nigeria.
- Links: Website | Twitter/X
Note for Judges: Since this demo runs on Solana Devnet via the LazorKit Relayer, transaction success may depend on network stability/relayer uptime. If transactions fail, please refer to the video demo above. >
โ ๏ธ This project was submitted on January 14th. The recent commits (January 18th) are strictly for dependency resolution to ensure the project runs smoothly for judging.No new business logic or features were added after the deadline.
- Proof of Work: Please check the Video Demo timestamp on X (posted before deadline (11 jan)).
- Reason for Update: The original submission had
npmversion conflicts that prevented a clean build. We re-initialized the repository structure to fix this for you.
This repository is a standardized Expo module demonstrating the integration.
- Node.js & npm/yarn
- Expo CLI (
npm install -g expo-cli) - EAS CLI (
npm install -g eas-cli) - Recommended for native modules
git clone https://github.com/hardusss/NextVibe-LazorKit.git
cd NextVibe-LazorKit
npm installSince LazorKit utilizes native modules for Secure Enclave access, we highly recommend creating a Development Build instead of using Expo Go.
Option A: Create Development Build (Best Experience) This creates a custom client compatible with all native libraries.
eas build --profile development --platform android
# Install the resulting APK on your device/emulator
npx expo start --dev-clientnpx expo run:androidOur module provides high-level abstractions so you don't have to deal with low-level Solana RPC calls manually. Here is how to use our hooks and services in your own components.
Instead of manually managing connection states and fetching logic, simply import usePortfolio inside any component. It automatically syncs with the LazorKit session.
Example: Building a Dashboard Component
import React from 'react';
import { View, Text, FlatList, RefreshControl } from 'react-native';
import usePortfolio from '@/hooks/usePortfolio';
export default function WalletDashboard() {
// 1. One-line hook to get all real-time data
const { data, isLoading, refresh } = usePortfolio();
return (
<View style={{ flex: 1 }}>
{/* 2. Access Total Balance easily */}
<Text style={{ fontSize: 32 }}>
${data.totalUsdBalance.toFixed(2)}
</Text>
{/* 3. Render Token List */}
<FlatList
data={data.tokens}
keyExtractor={(item) => item.symbol}
refreshControl={
<RefreshControl refreshing={isLoading} onRefresh={refresh} />
}
renderItem={({ item }) => (
<View>
<Text>{item.name}</Text>
<Text>{item.amount} {item.symbol}</Text>
</View>
)}
/>
</View>
);
}We built a facade class SolanaService that handles the complexity of creating instructions. It automatically detects if a transfer is SOL or SPL, and creates Associated Token Accounts (ATA) if needed.
Example: Logic inside a "Send Screen"
import { useWallet } from '@lazorkit/wallet-mobile-adapter';
import SolanaService from '@/src/services/SolanaService';
const handleSendPress = async (recipient: string, amount: number) => {
const { connection, smartWalletPubkey } = useWallet();
// 1. Generate Instructions (No manual SystemProgram calls needed)
// Pass 'null' as the last argument for SOL, or a Mint Address for tokens.
const instructions = await SolanaService.createTransferInstructions(
connection,
smartWalletPubkey.toString(), // Sender (LazorKit Wallet)
recipient, // Recipient
amount, // Amount
"4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU" // Example: USDC Mint
);
// 2. The instructions are now ready to be signed by LazorKit
};Here are the 3 main user flows implemented in this wallet:
- User Action: Opens the app for the first time.
- System: Instead of showing a 12-word seed phrase, the app requests Biometric Authentication (FaceID/TouchID) via LazorKit Enclave.
- Result: A secure Solana wallet is generated instantly. The private key never leaves the device's secure hardware.
- User Action: Wants to send 5 USDC but has 0 SOL for gas fees.
- Process: User selects token โ Enters address โ Swipes "Swipe to Send".
- System: The transaction is signed locally and sent to a Relayer. The Relayer pays the SOL fee.
- Result: Transaction confirmed in <2 seconds. No friction for the user.
- User Action: Checks the dashboard.
- System:
usePortfoliohook fetches live balances directly from Solana RPC + token prices via NextVibe API, which uses CoinGecko. - Action: Taps "History".
- System:
TransactionParserdecodes raw chain data into human-readable format ("Sent 5 USDC to ...").
The project is organized in a simplified way for easy navigation:
root/
โโโ app/ # ๐ Expo Router / Routes
โ โโโ (tabs) # Main app tab layout
โ โโโ _layout.tsx # Tab Bar configuration
โ โโโ index.tsx # Entry point
โ โโโ wallet-dash.tsx # Dashboard route
โ โโโ wallet-init.tsx # Onboarding route
โ โโโ transaction.tsx # Send flow route
โ โโโ deposit.tsx # Receive flow route
โ โโโ transactions.tsx # History route
โ โโโ transaction-detail.tsx # Transaction details
โ โโโ result-transaction.tsx # Transaction result (success/fail)
โ โโโ select-token.tsx # Token selection
โ
โโโ screens/ # ๐ง Screens with business logic
โ โโโ DashboardScreen.tsx
โ โโโ WalletIntroScreen.tsx
โ โโโ CreateTransactionScreen.tsx
โ โโโ ResultTransactionScreen.tsx
โ โโโ TransactionsHistoryScreen.tsx
โ โโโ TransactionDetailScreen.tsx
โ โโโ DepositScreen.tsx
โ โโโ SelectTokenScreen.tsx
โ
โโโ components/ # ๐งฉ UI components
โ โโโ Wallet/ # Dashboard, Transaction, WalletIntro, Deposit, SelectToken, TransactionsHistory
โ โโโ Shared/ # Toasts (Web3Toast), Loaders
โ
โโโ hooks/ # ๐ฃ Custom React Hooks
โ โโโ usePortfolio.ts # Fetch SOL/SPL balances + prices via NextVibe API (CoinGecko)
โ โโโ useTransaction.ts # LazorKit signing logic
โ โโโ useTransactionForm.ts # Form state management
โ โโโ useActiveToken.ts # Token selection state
โ โโโ useLastTransaction.ts # Transaction history management
โ
โโโ src/ # โ๏ธ Core logic & services
โ โโโ services/ # SolanaService.ts
โ โโโ api/ # get.tokens.price.ts (NextVibe API + CoinGecko)
โ โโโ types/ # TypeScript interfaces (solana.ts)
โ โโโ utils/ # Helper functions
โ โโโ solana/ # transactionUtils.ts, transactionParser.ts, formatValue.ts
โ โโโ url_api.ts
โ
โโโ constants/ # ๐ฆ Static data (Tokens.ts)
โโโ styles/ # ๐จ Styles
โโโ scripts/ # Utilities (reset-project.js)
โโโ assets/ # Logo, icons, Lottie animations
โโโ app.json, package.json, babel.config.js, expo-env.d.ts, README.mdThis project is a wallet module designed to integrate with the NextVibe SocialFi App (currently in beta). If this Bounty is successful, we plan to fully integrate it into the main application.
-
๐ Account Binding
Linking the anonymous LazorKit wallet address to the user's NextVibe social profile, bridging Web2 + Web3 identity. -
๐ง Social Recovery
Implementing a recovery mechanism via Email or Trusted Contacts (Multi-Factor Recovery), ensuring users never lose access to their funds even if they lose their device. -
๐ฑ Native Integration
Resolving current native module conflicts to merge this isolated wallet module back into the main React Native codebase.Built with โค๏ธ by the NextVibe Team for the LazorKit Bounty.
This project is submitted for the LazorKit Bounty.
- Open Source Logic: The source code, custom hooks (
useTransaction,usePortfolio), and integration logic are licensed under the MIT License. You are free to copy and use this code in your own projects. - Proprietary Assets: The NextVibe brand name, logo, icons, and specific UI design implementation are Copyright ยฉ 2026 NextVibe Team and NOT covered by the open-source license.
- โ You CAN: Use the code to build your own wallet.
- โ You CANNOT: Publish a clone of this app using the NextVibe name, logo, or exact design.
