Modern web interface for the ACTA (Automated Credential Trust Authority) ecosystem, featuring Passkey authentication and Stellar blockchain integration.
ACTA Web provides a sophisticated frontend experience for managing verifiable credentials on the Stellar blockchain. Built with Next.js 15 and featuring cutting-edge Passkey authentication, it eliminates the need for traditional wallets or seed phrases while maintaining the highest security standards.
- WebAuthn Integration: Industry-standard biometric authentication
- No Seed Phrases: Secure wallet creation without traditional crypto complexity
- Cross-Device Sync: Passkeys work seamlessly across all your devices
- Stellar Wallet Generation: Automatic wallet creation from biometric data
- Enhanced Security: Private keys never leave your device
- Particle Background System: Dynamic animated particles throughout the app
- Glass Morphism Design: Transparent elements with backdrop blur effects
- Responsive Layout: Mobile-first design that works on all screen sizes
- Dark Theme: Elegant dark interface optimized for usability
- Smooth Animations: Fluid transitions and micro-interactions
- Create Verifiable Credentials: Issue tamper-proof credentials on blockchain
- Credential Dashboard: Comprehensive view of all your credentials
- Search and Filter: Find credentials quickly with advanced search
- Public Verification: Share verification links for instant credential validation
- Status Management: Track credential lifecycle and expiration
- Secure API Keys: Generate and manage authentication keys
- Real-time Sync: Live updates from the ACTA blockchain network
- RESTful Architecture: Clean integration with backend services
- Error Handling: Comprehensive error handling and user feedback
- Next.js 15.5.0 with App Router and Turbopack
- React 19 with modern hooks and concurrent features
- TypeScript for comprehensive type safety
- Tailwind CSS for utility-first styling
- WebAuthn for passkey implementation
- Stellar SDK for blockchain interactions
- Custom Wallet Management via passkey-derived keys
- JWT Authentication for session management
- Radix UI primitives for accessibility
- shadcn/ui component library
- Lucide React for icon system
- Framer Motion for animations
- Custom Particle System for background effects
- ESLint with custom configuration
- Prettier for code formatting
- Husky for git hooks
- TypeScript strict mode
- Node.js 18 or higher
- npm or yarn package manager
- Modern browser with WebAuthn support
- Docker Desktop (optional β required only for local Supabase database)
- Supabase CLI (optional β
npm i -g supabaseor use vianpx supabase)
Note: Docker and Supabase CLI are only needed if you want a local database for waitlist persistence. Without them, the app runs normally using placeholder credentials β waitlist submissions will simply not be stored.
# Clone the repository
git clone https://github.com/your-repo/ACTA-web.git
cd ACTA-web
# Install dependencies
npm install
# Set up environment variables
cp .env.example .envConfigure .env with the following variables:
# API Configuration
NEXT_PUBLIC_API_URL=https://api.acta.build
# Application Settings
NEXT_PUBLIC_APP_NAME=ACTA Web
NEXT_PUBLIC_STELLAR_NETWORK=testnet
# Features
NEXT_PUBLIC_ENABLE_PASSKEY=true
NEXT_PUBLIC_ENABLE_PARTICLES=trueThe project includes a full local Supabase setup for waitlist persistence. This is entirely optional. When Supabase environment variables are missing or contain placeholder values, the app starts normally and the waitlist form submits without errors (requests simply won't be persisted).
-
Install & start Docker Desktop β make sure the Docker engine is running.
-
Start Supabase locally:
npm run db:start
This pulls the Supabase Docker images (first run takes a few minutes) and prints the local credentials, including
API URL,anon key, andservice_role key. -
Copy the printed credentials into
.env.local:NEXT_PUBLIC_SUPABASE_URL=http://127.0.0.1:54321 NEXT_PUBLIC_SUPABASE_ANON_KEY=<anon key from db:start> SUPABASE_SERVICE_ROLE_KEY=<service_role key from db:start>
-
Run migrations and seed:
npm run db:reset
This applies all migrations in
supabase/migrations/and runssupabase/seed.sql, which inserts 8 sample waitlist rows. -
Start the dev server:
npm run dev
| Script | Command | Description |
|---|---|---|
npm run db:start |
supabase start |
Start local Supabase (Docker containers) |
npm run db:stop |
supabase stop |
Stop local Supabase |
npm run db:reset |
supabase db reset |
Drop & recreate DB, run migrations + seed |
npm run db:migration <name> |
supabase migration new |
Create a new blank migration file |
When Supabase is running locally, you can access Supabase Studio at http://127.0.0.1:54323 to browse tables, run SQL, and inspect data.
The Supabase client (src/lib/supabase.ts) is designed to be resilient:
- If
NEXT_PUBLIC_SUPABASE_URLis missing or contains"your_supabase"/"placeholder", a safe placeholder URL is used. - If
NEXT_PUBLIC_SUPABASE_ANON_KEYis missing, a placeholder JWT is used. - If
SUPABASE_SERVICE_ROLE_KEYis missing, the server falls back to the anon client and logs a warning. - The app never throws at startup regardless of whether Supabase env vars are set.
# Start development server
npm run dev
# Build for production
npm run build
# Start production server
npm run start
# Run linting
npm run lint
# Type checking
npm run type-checkThe application will be available at http://localhost:3000
src/
βββ app/ # Next.js 15 App Router
β βββ page.tsx # Login page with passkey auth
β βββ dashboard/ # Protected dashboard routes
β β βββ layout.tsx # Dashboard layout with sidebar
β β βββ page.tsx # Main dashboard
β β βββ profile/ # User profile management
β β βββ api-key/ # API key generation
β β βββ credentials/ # Credential creation
β β βββ my-credentials/ # Credential management
β β βββ search-credential/ # Credential search
β βββ verify/ # Public credential verification
β βββ layout.tsx # Root layout
β βββ globals.css # Global styles and theme
βββ components/
β βββ layout/ # Layout components
β β βββ Sidebar.tsx # Navigation sidebar
β βββ modules/ # Feature-specific components
β β βββ auth/ # Passkey authentication
β β βββ credentials/ # Credential management
β β βββ dashboard/ # Dashboard components
β β βββ api-key/ # API key management
β β βββ profile/ # Profile management
β βββ ui/ # Reusable UI components
β βββ magicui/ # Special effects (particles)
βββ hooks/ # Custom React hooks
βββ lib/ # Utility functions and configurations
βββ providers/ # React context providers
βββ services/ # API communication services
βββ types/ # TypeScript type definitions
- User visits application homepage
- Clicks "Authenticate with Passkey"
- Browser prompts for biometric authentication
- WebAuthn creates cryptographic key pair
- Public key sent to server, private key stored locally
- Stellar wallet address generated from passkey
- User automatically logged in and redirected to dashboard
- Returning user visits homepage
- Clicks "Authenticate with Passkey"
- Browser recognizes existing passkey
- Biometric verification requested
- Cryptographic challenge/response performed
- Authentication token issued
- Redirect to dashboard with wallet access
/ (root) # Passkey login page
βββ /dashboard # Main dashboard (auth required)
βββ /dashboard/profile # User profile and wallet info
βββ /dashboard/api-key # API key generation
βββ /dashboard/credentials # Create new credentials
βββ /dashboard/my-credentials # View/manage credentials
βββ /dashboard/search-credential # Search for credentials
βββ /verify # Public credential verification
- Hardware-Backed Keys: Stored in secure hardware (TPM, Secure Enclave)
- Biometric Gating: Access requires fingerprint, face, or PIN
- Phishing Resistant: Domain-bound authentication prevents attacks
- No Shared Secrets: No passwords or seed phrases to compromise
- HTTPS Enforcement: All communications encrypted in transit
- JWT Tokens: Secure session management with expiration
- Input Validation: Comprehensive sanitization of user inputs
- CORS Protection: Proper cross-origin resource sharing controls
- Content Security Policy: XSS and injection attack prevention
- Immutable Storage: Credentials permanently stored on Stellar
- Cryptographic Proofs: Mathematical verification of authenticity
- Decentralized Verification: No central authority required
- Smart Contract Logic: Automated credential lifecycle management
- Connect repository to Vercel
- Configure environment variables in dashboard
- Enable automatic deployments on main branch
- Production URL provided automatically
# Build application
npm run build
# Start production server
npm run start# Build Docker image
docker build -t acta-web .
# Run container
docker run -p 3000:3000 acta-web- Chrome: 67+ (Windows, macOS, Android)
- Safari: 14+ (macOS, iOS)
- Firefox: 60+ (Windows, macOS)
- Edge: 79+ (Windows)
- Windows: Windows Hello (Windows 10+)
- macOS: Touch ID, Face ID
- iOS: Touch ID, Face ID
- Android: Biometric authentication (Android 9+)
- Hardware Keys: FIDO2/U2F security keys
- Turbopack: Ultra-fast build system for development
- App Router: Optimized routing with React Server Components
- Image Optimization: Automatic WebP conversion and lazy loading
- Code Splitting: Automatic bundle optimization
- Static Generation: Pre-rendered pages for optimal performance
# Analyze bundle size
npm run analyze
# Performance audit
npm run lighthouse- Fork the repository
- Create feature branch (
git checkout -b feature/awesome-feature) - Make changes following code style guidelines
- Write or update tests as needed
- Run linting and type checking
- Commit changes with descriptive messages
- Push to feature branch
- Create Pull Request
- TypeScript: Strict mode enabled, comprehensive typing
- ESLint: Custom configuration with React and Next.js rules
- Prettier: Automatic code formatting on save
- Conventional Commits: Standardized commit message format
- Testing: Jest and React Testing Library for unit tests
The frontend integrates with the ACTA API for:
POST /v1/auth/register- Passkey registrationPOST /v1/auth/login- Passkey authenticationGET /v1/auth/profile- User profile data
POST /v1/credentials- Create new credentialsGET /v1/credentials- List user credentialsGET /v1/credentials/:id- Get credential detailsPOST /v1/verify- Verify credential authenticity
POST /v1/api-keys/generate- Generate new API keyGET /v1/api-keys- List user API keysDELETE /v1/api-keys/:id- Revoke API key
- Web Vitals: Core web vitals tracking
- Real User Monitoring: Performance data from actual users
- Error Tracking: Comprehensive error logging and alerting
- Bundle Analysis: Regular bundle size monitoring
- Conversion Tracking: Authentication flow completion rates
- Feature Usage: Most used features and user journeys
- Performance Metrics: Page load times and user experience
This project is part of the ACTA ecosystem for verifiable credentials on Stellar blockchain.
For questions, issues, or contributions:
- GitHub Issues: Technical problems and feature requests
- Documentation: Comprehensive guides and API reference
- Community: Join our developer community discussions