Portal is a mobile identity wallet for secure authentication and payments using the Nostr protocol. Built with React Native and Expo, it puts you in complete control of your digital identity and personal data with enterprise-grade security.
- Nostr Authentication: Cryptographically secure authentication with websites and services
- Biometric Security: Face ID, Touch ID, and fingerprint authentication
- Secure Key Management: Private keys never leave your device
- Identity Management: Complete control over your digital identity
- Lightning Payments: One-time Bitcoin Lightning Network payments
- Subscription Management: Monitor and control recurring payments
- Payment Status Tracking: Real-time payment status with Revolut-style UI
- Wallet Integration: Seamless NWC (Nostr Wallet Connect) integration
- Activity Dashboard: Comprehensive tracking of all authentications and payments
- QR Code Scanner: Quick authentication and payment initiation
- Dark/Light Theme: Adaptive theme system with system preference support
- Intuitive Navigation: Tab-based navigation with detailed activity views
- Local Storage: All sensitive data stored securely on device
- Biometric Protection: Additional security layer for sensitive operations
- No Data Sharing: Zero personal data shared without explicit consent
- Cryptographic Verification: All operations cryptographically verified
- React Native - Cross-platform mobile development
- Expo - Development platform and SDK
- TypeScript - Type-safe development
- Expo Router - File-based navigation
- Expo SQLite - Local database storage
- Expo SecureStore - Secure key storage
- Expo LocalAuthentication - Biometric authentication
- Nostr Protocol - Decentralized identity and messaging
- Custom Rust lib - Core Nostr logic and cryptography
- NWC Integration - Nostr Wallet Connect for Lightning payments
- Lucide React Native - Beautiful icon library
- Custom Theme System - Adaptive dark/light theme support
- Safe Area Context - Proper device-safe rendering
- Node.js (v18 or higher)
- npm or yarn
- Expo CLI:
npm install -g @expo/cli
- iOS Simulator (Mac) or Android Studio (for emulators)
-
Clone the repository:
git clone https://github.com/PortalTechnologiesInc/Portal-App.git cd Portal-App
-
Install dependencies:
npm install
-
Start the development server:
npx expo start
-
Run on device/simulator:
# iOS npx expo run:ios # Android npx expo run:android # Web (development only) npx expo start --web
- Generate Identity: Create a new Nostr private key or import existing seed phrase
- Profile Configuration: Set up your identity information
- Wallet Connection: Connect your NWC-compatible Lightning wallet
- Scan QR Code: Use built-in scanner from website or service
- Review Request: Examine authentication details and permissions
- Biometric Confirmation: Confirm with Face ID/Touch ID
- Approve/Deny: Complete the authentication process
- Payment Requests: Review incoming payment requests
- Status Tracking: Monitor payment progress with real-time updates
- Subscription Control: Manage recurring payments and subscriptions
- Activity History: View complete payment and authentication history
portal-app/
βββ app/ # Expo Router pages
β βββ (tabs)/ # Tab navigation screens
β βββ activity/[id]/ # Dynamic activity detail pages
β βββ qr/ # QR scanner flow
β βββ subscription/[id]/ # Subscription management
βββ components/ # Reusable UI components
β βββ ActivityDetail/ # Activity-specific components
β βββ ui/ # Base UI components
βββ context/ # React Context providers
β βββ ActivitiesContext.tsx
β βββ NostrServiceContext.tsx
β βββ ThemeContext.tsx
βββ services/ # Core business logic
β βββ database/ # SQLite database layer
β βββ BiometricAuthService.ts
β βββ SecureStorageService.ts
βββ hooks/ # Custom React hooks
βββ models/ # TypeScript interfaces
βββ constants/ # App constants and configuration
βββ utils/ # Helper functions and utilities
- Context-based Architecture: Multiple specialized contexts for different domains
- SQLite Database: Persistent storage for activities, subscriptions, and user data
- Secure Storage: Encrypted storage for sensitive keys and tokens
# Start development server
npm start
# Run on specific platforms
npm run android
npm run ios
npm run web
# Type checking
npm run type-check
# Linting
npm run lint
# Build for production
npm run build
import { useThemeColor } from '@/hooks/useThemeColor';
const backgroundColor = useThemeColor({}, 'background');
const textColor = useThemeColor({}, 'textPrimary');
import { DatabaseService } from '@/services/database';
import { useSQLiteContext } from 'expo-sqlite';
const db = useSQLiteContext();
const dbService = new DatabaseService(db);
import { BiometricAuthService } from '@/services/BiometricAuthService';
const authResult = await BiometricAuthService.authenticate();
- Create Components: Add to appropriate directory in
components/
- Update Context: Extend existing or create new context providers
- Database Schema: Update database migrations in
services/database/
- Type Definitions: Add interfaces to
models/
directory - Navigation: Add routes in
app/
directory following Expo Router conventions
The project uses Expo Application Services (EAS) for building and deployment:
# Install EAS CLI
npm install -g eas-cli
# Build for development
eas build --profile development
# Build for production
eas build --profile production
# Submit to app stores
eas submit
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature
- Commit changes:
git commit -m 'Add amazing feature'
- Push to branch:
git push origin feature/amazing-feature
- Open a Pull Request
- TypeScript: All new code must be written in TypeScript
- Theme Support: All components must support dark/light themes
- Security First: Follow secure coding practices, especially for key management
- Component Architecture: Create reusable, well-documented components
- Context Usage: Use appropriate context providers for state management
This project is licensed under the MIT License with Common Clause - see the LICENSE file for details.
Portal prioritizes security and privacy:
- π Private Key Security: All private keys stored in device secure enclave
- π Biometric Protection: Additional security layer for sensitive operations
- π‘οΈ No Data Leakage: Zero telemetry or data collection
- β Cryptographic Verification: All operations cryptographically signed and verified
- π Local-First: Everything runs locally on your device
- Documentation: Portal Docs(TBD)
- Issues: GitHub Issues
- Community: Discord Server(TBD)
- Email: [email protected](TBD)
Built with β€οΈ by the Portal Team