This project provides a way to escape awkward situations by simulating a call from a fake person. It consists of a backend API built on AWS infrastructure and a frontend iOS app. The app allows users to input their phone number and trigger an outbound call to get them out of an undesirable interaction.
The backend is built using AWS services and Terraform for infrastructure as code. Below are key components:
The API Gateway is set up to handle requests and integrates with Lambda for outbound call processing.
- Lambda Authorizer: Verifies API Key authenticity.
- Connect Outbound Lambda: Handles the logic for initiating outbound calls.
Used to simulate the phone call. Configured with:
- Contact flows
- Queues
- Routing profiles
- Users
Configured for the frontend and API distribution with proper caching and origin access control.
Key components include:
aws_route53_zone: Sets up DNS records.aws_cloudwatch_log_group: Manages API Gateway logs.aws_acm_certificate: Ensures secure communication.aws_secretsmanager_secret: Stores sensitive API keys.random_password: Generates secure passwords for Connect users.
Generate the API key using:
openssl rand -hex 32Store the generated API key in AWS Secrets Manager and update Secrets.plist for the iOS app with:
API_KEYAPI_URL
The iOS app is built using SwiftUI and integrates with the backend API Gateway. It features:
- Input for user phone number with formatting and validation.
- API call to trigger the backend.
- User feedback on the status of the request.
- Populate
terraform.tfvars:connect_users: Map of users and their details.did_prefix: Preferred DID prefix.domain: Base domain for the website.environment: Name of the environment (e.g.,get_me_out_of_here).region: AWS region.
- Add
API_KEYandAPI_URLtoSecrets.plist. - Configure the app to retrieve and use these values for secure communication with the backend.
Generate and securely store the API key:
openssl rand -hex 32Add this value to:
- AWS Secrets Manager (
API_KEYsecret). Secrets.plistfor the iOS app.
- All sensitive data is stored in AWS Secrets Manager.
- The API is protected using a custom Lambda Authorizer.
- CloudFront enforces HTTPS communication.



