Frontend Technical Reference
Scope
This document describes implemented frontend behavior across:
- Desktop kiosk application
- Mobile onboarding application
- API integration contracts with backend
- Response handling and state flow
Desktop Application
Location:
Architecture model
- Electron main process initializes kiosk window and runtime services
- Renderer uses view-based navigation with async screen transitions
- Pages are composed from TypeScript modules and DOM components
Key files:
- Desktop/employee-access/src/main.ts
- Desktop/employee-access/src/renderer.ts
- Desktop/employee-access/src/pages/kiosk
Runtime behavior
- Starts in kiosk mode with media permission handling
- Performs backend health probe on launch
- Hosts relay WebSocket server for camera fallback scenarios
- Uses face detection quality checks before capture during registration/check-in
Core desktop flows
Kiosk registration flow
Implemented in:
- Desktop/employee-access/src/pages/kiosk/register.ts
Behavior:
- Collect profile details for employee or visitor
- Call create API endpoint to get owner ID
- Guide user through five required poses
- Validate face quality and stability before each capture
- Upload captured images array to backend /image/upload
Kiosk check-in flow
Implemented in:
- Desktop/employee-access/src/pages/kiosk/scan.ts
- Desktop/employee-access/src/services/verification.ts
Behavior:
- Capture image from camera
- Submit to /image/search
- Normalize backend payload into local VerifyFaceResponse format
- Render recognized or not-recognized states in UI
- Use confidence and result metadata for confirmation actions
Desktop API contract layer
Implemented in:
- Desktop/employee-access/src/api.ts
Common request model highlights:
- EmployeeCreate and VisitorCreate:
- fullName required
- gender, DoB, email, Phone optional
- Image upload:
- owner_id + files[] multipart form data
- Image search:
- image multipart form data
Recognition response normalization
Implemented in:
- Desktop/employee-access/src/services/verification.ts
Behavior:
- Maps backend payload to local VerifyFaceResponse fields
- Extracts owner object from employee or visitor branch
- Derives recognized flag from explicit value or message prefix fallback
- Handles similarity normalization logic for displayed value
- Extracts best-match image data URL from known backend keys
Mobile Application
Location:
Architecture model
- Expo Router stack navigation with hidden headers
- UserProvider context wraps app root
- Context stores user data, face captures, and backend-created record ID
Key files:
- Mobile/employee-access/app/_layout.tsx
- Mobile/employee-access/contexts/user-context.tsx
- Mobile/employee-access/app/identity-verification.tsx
- Mobile/employee-access/app/face-scan.tsx
- Mobile/employee-access/lib/api.ts
Core mobile flows
Identity creation flow
Implemented in:
- Mobile/employee-access/app/identity-verification.tsx
Behavior:
- User chooses role (employee or visitor)
- User enters profile details
- App validates date format as YYYY-MM-DD when provided
- App calls createEmployee or createVisitor
- App stores returned record ID in context
- App routes to face setup and then face scan
Face scan and upload flow
Implemented in:
- Mobile/employee-access/app/face-scan.tsx
Behavior:
- Captures five pose images in sequence
- Stores each capture in local screen state and context
- Builds multipart upload file array
- Calls uploadImages(recordId, files)
- Supports retry on upload error
- Supports simulated flow in no-camera/demo situations
Mobile API contract layer
Implemented in:
- Mobile/employee-access/lib/api.ts
Contract parity with desktop for core operations:
- createEmployee
- createVisitor
- searchImage
- uploadImages
All requests include X-API-Key header from environment.
Shared Frontend-Backend Contract Notes
- Optional phone field uses key name Phone (capital P)
- Date of birth is sent in DoB key, expected as date-compatible format
- Recognition UI relies on response keys including message, employee or visitor, similarity, and image payload fields
- For current desktop logic, backend message wording influences inferred recognition state when explicit recognized flag is absent
User State Handling
Context shape from mobile:
- userData
- faceScanResult
- recordId
- reset helper for logout/session reset
Desktop uses local page state and callback-driven navigation rather than a global state container.
Error Handling in Frontends
Desktop:
- Uses ApiError mapping with status/detail extraction
- Displays operational feedback for registration and scan paths
Mobile:
- Uses ApiError for backend failures
- Shows user-facing upload and submission errors
- Provides retry actions for failed image uploads
Report Traceability Notes
For report evidence, use these files as primary citations:
- Desktop behavior: Desktop/employee-access/src/pages/kiosk/register.ts
- Desktop recognition mapping: Desktop/employee-access/src/services/verification.ts
- Mobile form and record creation: Mobile/employee-access/app/identity-verification.tsx
- Mobile capture and upload: Mobile/employee-access/app/face-scan.tsx
- API contracts: Desktop/employee-access/src/api.ts and Mobile/employee-access/lib/api.ts