Match Footage Drop

Upload match footage for AI tactical analysis — all PII scrubbed at ingestion

Drop your match footage here

MP4, MOV, AVI — up to 5 GB via S3 Transfer Acceleration

  • End-to-end encrypted
  • Pre-signed S3 URL
  • Transfer Acceleration
  • PII scrubbed

PII Scrubbing

player_uuid + jersey number in DynamoDB only. No names, no DOB ever written.

Cold Start Fix

Provisioned Concurrency on AI Lambda — zero cold start for the analysis function.

Secure Upload

Pre-signed S3 URLs with 15-min expiry + Transfer Acceleration for large videos.

IaC Ready

AWS SAM template defines all resources — Lambda, DynamoDB, S3, SNS, SES.

Python Lambda handler — jersey-aware prompt, UUID-only storage
# 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')