Skip to main content

Web App

The Web App is the main user-facing application that provides the identity verification experience. It guides users through the verification process including document capture, face liveness checks, and result handling.

Overview​

PropertyValue
Imageghcr.io/identivia/web-app:latest
Container Nameweb-app
Internal Port80
External URLhttps://app.${DOMAIN}

Features​

  • Document Capture: Camera-based document scanning and upload
  • Face Liveness: Real-time face detection with liveness verification
  • Device Fingerprinting: Fingerprint.js integration for fraud prevention
  • Responsive Design: Mobile-first design for all devices
  • Progress Tracking: Clear step-by-step verification flow
  • Multi-language Support: Internationalization support

Docker Configuration​

web-app:
image: ghcr.io/identivia/web-app:latest
container_name: web-app
restart: unless-stopped
environment:
- VITE_FINGERPRINT_PUBLIC_KEY=${VITE_FINGERPRINT_PUBLIC_KEY}
- VITE_BACKEND_API_URL=${VITE_BACKEND_API_URL}
- VITE_DEMO_SITE_URL=${VITE_DEMO_SITE_URL}
- VITE_DOMAIN_URL=${VITE_DOMAIN_URL}
depends_on:
pocketbase:
condition: service_healthy
backend-api:
condition: service_started
labels:
- traefik.enable=true
- traefik.http.routers.web-app.rule=Host(`app.${DOMAIN}`)
- traefik.http.routers.web-app.entrypoints=websecure
- traefik.http.routers.web-app.tls.certresolver=letsencrypt
- traefik.http.services.web-app.loadbalancer.server.port=80

Environment Variables​

VariableDescriptionRequired
VITE_FINGERPRINT_PUBLIC_KEYPublic key for Fingerprint.js client SDKYes
VITE_BACKEND_API_URLURL to the Backend API serviceYes
VITE_DEMO_SITE_URLURL to demo/sandbox site (optional redirect)No
VITE_DOMAIN_URLBase domain for cookie and security settingsYes

Example Configuration​

# Web App
VITE_FINGERPRINT_PUBLIC_KEY=your_fingerprint_public_key
VITE_BACKEND_API_URL=https://api.identivia.com
VITE_DEMO_SITE_URL=https://demo.identivia.com
VITE_DOMAIN_URL=identivia.com
note

Variables prefixed with VITE_ are embedded at build time and exposed to the browser. Never put sensitive secrets in these variables.

Dependencies​

The Web App depends on:

  • PocketBase: Must be healthy (for user session management)
  • Backend API: Must be started (for verification processing)

Verification Flow​

The Web App guides users through a multi-step verification process:

┌─────────────────┐
│ 1. Welcome │
│ (Get Started) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 2. Document │
│ Capture │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 3. Face │
│ Liveness │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 4. Processing │
│ & Verification│
└────────┬────────┘
│
▼
┌─────────────────┐
│ 5. Results │
│ (Success/Fail)│
└─────────────────┘

Step 1: Welcome​

  • Introduction to the verification process
  • Privacy policy acknowledgment
  • Get started button

Step 2: Document Capture​

  • Camera permission request
  • Document type selection (ID, Passport, Driver's License)
  • Front and back capture for applicable documents
  • Image quality validation
  • Manual upload fallback

Step 3: Face Liveness​

  • Camera permission (if not already granted)
  • Face detection guidance
  • Liveness challenge (head movement, blink detection)
  • Real-time feedback
  • Selfie capture

Step 4: Processing​

  • Document analysis
  • Face comparison
  • Liveness verification
  • Fraud detection
  • Processing indicator

Step 5: Results​

  • Verification outcome (approved/rejected/manual review)
  • Next steps guidance
  • Retry option if failed

Device Requirements​

Supported Devices​

Device TypeRequirements
DesktopModern browser with webcam
MobileiOS 14+ or Android 10+
TabletSame as mobile requirements

Browser Requirements​

FeatureRequirement
JavaScriptEnabled
CookiesEnabled (for sessions)
CameraPermission required
WebRTCSupported browser

Minimum Browser Versions​

BrowserVersion
Chrome80+
Firefox75+
Safari14+
Edge80+

Fingerprint.js Integration​

The Web App uses Fingerprint.js for device fingerprinting:

Purpose​

  • Fraud Prevention: Detect suspicious devices and patterns
  • Session Binding: Ensure verification integrity
  • Analytics: Track device usage patterns

Configuration​

  1. Obtain a Fingerprint.js subscription
  2. Get your public API key from the dashboard
  3. Set VITE_FINGERPRINT_PUBLIC_KEY environment variable
note

Fingerprint.js public keys are safe to expose in the browser. Secret keys should only be used server-side in the Backend API.

Accessibility​

The Web App follows WCAG 2.1 AA guidelines:

  • Keyboard navigation support
  • Screen reader compatibility
  • High contrast mode support
  • Focus indicators
  • Alt text for images
  • Form field labels

Internationalization​

The Web App supports multiple languages:

LanguageCode
Englishen
Spanishes
Frenchfr
Germande

Language is automatically detected from the browser or can be manually selected.

Security​

Client-Side Security​

  • No secrets in browser: All sensitive operations happen server-side
  • HTTPS only: Enforced via Traefik
  • CSP headers: Content Security Policy for XSS prevention
  • Secure cookies: HttpOnly, Secure, SameSite flags

Camera Security​

  • Camera access requires explicit user permission
  • Video streams are processed locally when possible
  • Images are transmitted securely to the backend
  • No persistent camera recording

Data Handling​

  • Temporary storage only during verification
  • Automatic cleanup after verification completion
  • GDPR-compliant data handling

Error Handling​

The Web App provides user-friendly error handling:

Error TypeUser MessageAction
Camera denied"Camera access required"Guide to enable camera
Network error"Connection lost"Retry button
API error"Something went wrong"Contact support option
Browser unsupported"Browser not supported"Suggested browsers

Troubleshooting​

Camera Not Working​

  1. Check browser camera permissions
  2. Ensure no other app is using the camera
  3. Try a different browser
  4. Check device camera functionality

Verification Failing​

  1. Ensure good lighting for document capture
  2. Hold document steady during capture
  3. Face the camera directly for liveness check
  4. Check internet connection stability

Page Not Loading​

  1. Clear browser cache and cookies
  2. Disable browser extensions
  3. Check network connectivity
  4. Verify the URL is correct

Mobile Issues​

  1. Use the native mobile browser (Safari on iOS, Chrome on Android)
  2. Ensure app permissions are granted
  3. Update to the latest browser version
  4. Close other camera-using apps

Performance​

Optimization Tips​

  • Images are compressed before upload
  • Progressive loading for faster initial display
  • Service worker caching (when enabled)
  • Lazy loading of non-critical resources
ConnectionExperience
4G/LTEExcellent
3GAcceptable
WiFiExcellent
2GNot recommended