Scanning Rate
87
Pre-receive head checks per minute: 4.2
Upload match footage for AI tactical analysis — all PII scrubbed at ingestion
MP4, MOV, AVI — up to 5 GB via S3 Transfer Acceleration
player_uuid + jersey number in DynamoDB only. No names, no DOB ever written.
Provisioned Concurrency on AI Lambda — zero cold start for the analysis function.
Pre-signed S3 URLs with 15-min expiry + Transfer Acceleration for large videos.
AWS SAM template defines all resources — Lambda, DynamoDB, S3, SNS, SES.
# Lambda: AI Analysis Handler — jersey-aware prompt
def handler(event, context):
session_uuid = event['session_uuid']
player_uuid = event['player_uuid']
jersey = event['jersey_number'] # e.g. "7"
position = event['position'] # e.g. "CM"
prompt = SCOUT_PROMPT.format(
jersey=jersey, position=position
)
# e.g. "Analyse player #7 (CM) in this footage…"
presigned = s3.generate_presigned_url(
'get_object',
Params={'Bucket': BUCKET, 'Key': event['s3_key']},
ExpiresIn=300
)
result = vision_model.analyze(presigned, prompt=prompt)
dynamodb.put_item(TableName=TABLE, Item={
'session_uuid': {'S': session_uuid},
'player_uuid': {'S': player_uuid},
'jersey': {'N': jersey},
'position': {'S': position},
'analysis': {'S': result}
})
sns.publish(TopicArn=SNS_TOPIC, Message='Analysis complete')