03
case 03 / 05
Lumina Vision CRM
Real-time facial analysis and customer sentiment tracking for physical retail.
Year
2024
Role
Serverless · Realtime UI
Status
Deployed on private retail networks
( architecture )
How it's built
Kinesis VideoAWS RekognitionLambdaDynamoDBAppSyncReact
Hover a service to trace its connections
ClientEdge / APIComputeEvents / queuesStorageAI / ML
( the problem )
Store managers had sales numbers but no idea how customers felt while they were in the aisle, and data arrived a day late.
( the build )
Camera streams are sampled at the edge, analysed by Rekognition and pushed as anonymised sentiment events to a live React dashboard over AppSync subscriptions.
300ms
camera → dashboard
24
stores streaming live
100%
anonymised, no faces stored
( request flow )
- 01In-store cameras publish to Kinesis Video Streams.
- 02A sampler Lambda extracts frames and sends them to Rekognition.
- 03Emotions are aggregated per zone and written to DynamoDB, never the image.
- 04AppSync subscriptions stream every update to the React dashboard.
lumina.console● live
300ms
camera → dashboard
24
stores streaming live
100%
anonymised, no faces stored
handler.ts
1const faces = await rekognition.detectFaces({
2 Image: { Bytes: frame },
3 Attributes: ['EMOTIONS'],
4});
5publish(zone, aggregate(faces));
6▍
main ✓TypeScript · UTF-8 · Ln 6
Next case · 04
Velocity Oracle →