Architecture

Pipeline & Concurrency

Swift 6 Strict Concurrency

Compiled under strict-concurrency=complete with 0 warnings. The capture and inference pipeline is completely queue-confined and Sendable, guaranteeing thread safety when passing detections to the @MainActor UI.

Vision & Thermal Capping

The AVCaptureSession feeds a VNDetectHumanHandPoseRequest extracting 21 landmarks. To cap thermal load, the pipeline classifies every second frame while maintaining a full-rate camera preview.

Spatial Pedagogy

Skeletal Overlay & Live Corrections

Handshape doesn't just show a wall of text when you make a mistake. It overlays a live 21-point hand skeleton onto the camera feed. When a learner forms a sibling shape (like confusing T for N), the trainer highlights the specific offending finger's joints in amber on their own live hand, providing direct spatial guidance.

Accessibility

Deaf/HoH-First Design

Feedback is entirely visual and haptic (via .sensoryFeedback) and never audio-dependent. The bespoke "Liquid Glass" SwiftUI styling automatically degrades to a solid, high-contrast surface when Reduce Transparency is enabled, and animations are correctly gated on Reduce Motion.

Dictionary Data

ASL-Native Phonology, Engineered for Search

The lexicon is JSON-backed with native ASL phonology — handshape, location, movement — on every entry, decoded off the main actor by an @Observable store. Search runs debounced over a precomputed index, so filtering stays allocation-free per keystroke. Sign videos resolve bundled → disk cache → CloudFront.

Identity

Cognito OAuth + PKCE, No SDK

Optional sign-in (Apple, Google, email) runs through the Cognito Hosted UI via ASWebAuthenticationSession with a hand-rolled OAuth authorization-code + PKCE flow — no Amplify, no third-party auth SDK in the binary. Tokens live in the Keychain; the dictionary and trainer never require an account.

Community Backend

Approval-Gated Video Pipeline

Signers can submit signing videos; nothing appears until a reviewer approves. An API Gateway HTTP API with a Cognito JWT authorizer fronts dependency-free Node 20 Lambdas (presign upload / vote / moderate). Uploads land in a private S3 prefix that auto-expires unapproved submissions after 7 days; approval triggers MediaConvert — muted, faststart H.264, audio stripped since ASL is silent — before CloudFront delivery.

Data Layer

DynamoDB tables for submissions (status GSI), variants, and ratings — on-demand billing, point-in-time recovery enabled, every hot-path query a key lookup.

Infrastructure & CI/CD

Terraform, End to End

Auth, community, and budget modules; secrets in SSM Parameter Store; remote state with per-project keys. A bootstrap stack mints least-privilege OIDC roles (gha-handshape-plan / gha-handshape-apply) so GitHub Actions plans on pull requests and applies on main with no long-lived AWS credentials anywhere. Spend is isolated under a CostCenter=Handshape tag with budget alarms.