An AI-powered experiential learning platform for the W. P. Carey School of Business at Arizona State University. Students practice real estate development presentations in front of AI-driven stakeholder personas — commercial lenders, public officials, real estate agents, and negotiation counterparties — and receive real-time delivery feedback, live transcription, post-session AI analytics, and interactive voice Q&A.
🌐 Live App: https://main.d2v1f9m26bi3az.amplifyapp.com
Customers are responsible for making their own independent assessment of the information in this document. This document:
(a) is for informational purposes only,
(b) references AWS product offerings and practices, which are subject to change without notice,
(c) does not create any commitments or assurances from AWS and its affiliates, suppliers or licensors. AWS products or services are provided "as is" without warranties, representations, or conditions of any kind, whether express or implied. The responsibilities and liabilities of AWS to its customers are controlled by AWS agreements, and this document is not part of, nor does it modify, any agreement between AWS and its customers, and
(d) is not to be considered a recommendation or viewpoint of AWS.
Additionally, you are solely responsible for testing, security and optimizing all code and assets on GitHub repo, and all such code and assets should be considered:
(a) as-is and without warranties or representations of any kind,
(b) not suitable for production environments, or on production or other critical data, and
(c) to include shortcuts in order to support rapid prototyping such as, but not limited to, relaxed authentication and authorization and a lack of strict adherence to security best practices.
All work produced is open source. More information can be found in the GitHub repo.
| Index | Description |
|---|---|
| High Level Architecture | System overview and component interactions |
| Deployment Guide | How to deploy the project |
| User Guide | End-user walkthrough |
| API Documentation | REST and WebSocket API reference |
| Directories | Project structure |
| Modification Guide | Guide for developers extending the project |
| Troubleshooting | Common issues and solutions |
| Credits | Contributors |
| License | License information |
Students access the platform via a Next.js frontend hosted on AWS Amplify and authenticate through Amazon Cognito. During a practice session the browser captures video and audio locally — MediaPipe runs gaze detection client-side while Amazon Transcribe Streaming (over a signed WebSocket) handles real-time speech-to-text. Session recordings, transcripts, and per-second metric snapshots are uploaded to S3 via pre-signed URLs generated by API Gateway + Lambda.
After recording ends, a Post-Meeting Analytics Lambda invokes Amazon Bedrock (Nova Lite) to produce role-specific written feedback stored back in S3. Personas and their configurations are persisted in DynamoDB.
For the optional live Q&A phase, the browser connects via WebSocket to a Bedrock AgentCore runtime running Nova 2 Sonic for bidirectional voice. Anam AI avatars provide a visual face for each persona. All AI interactions pass through Bedrock Guardrails for content safety and PII protection.
For a detailed explanation, see the Architecture Deep Dive.
For complete deployment instructions, see the Deployment Guide.
-
Bedrock models — Amazon Nova models auto-enable on first invocation. For Anthropic Claude models, first-time users may need to submit use case details in the Bedrock Model Catalog before access is granted.
-
Enable Bedrock AgentCore — navigate to Amazon Bedrock → AgentCore in the AWS Console and complete the one-time activation.
-
Anam AI API key (optional) — sign up at app.anam.ai → Account Settings → API Keys. Press Enter during deploy to skip — voice Q&A still works without avatars.
git clone https://github.com/ASUCICREPO/Real-Estate-Program.git
cd Real-Estate-Program
bash deploy.shFollow the prompts (repo, branch, Anam API key, optional GitHub token). CodeBuild handles the rest — ~15 minutes.
For detailed usage instructions, see the User Guide.
Session Flow:
- Sign in with your Cognito account
- Select a persona (Commercial Lender, Public Official, Real Estate Agent, or Negotiation Counterparty)
- Optionally upload a PDF presentation and add custom persona notes
- Complete the camera/mic calibration, then start recording
- View real-time delivery metrics (speaking pace, volume, eye contact, filler words, pauses, monotone level) alongside your slides
- After recording, review the AI-generated written analysis
- Start the optional live voice Q&A session with the persona avatar
For complete API reference, see the API Documentation.
REST endpoints (API Gateway + Cognito auth):
| Method | Path | Description |
|---|---|---|
| GET/POST | /s3_urls |
Generate pre-signed S3 URLs for uploads |
| GET | /personas |
List all personas |
| POST | /personas |
Create a persona |
| GET/PUT/DELETE | /personas/{personaID} |
Manage a single persona |
| GET | /analytics |
Retrieve post-session AI feedback |
| POST | /content |
Trigger content analysis / question generation |
| POST | /anam-session |
Get Anam AI avatar session token |
WebSocket: Bedrock AgentCore endpoint for live voice Q&A (bidirectional audio streaming via Nova 2 Sonic).
├── backend/
│ ├── bin/
│ │ └── backend.ts # CDK app entry point
│ ├── lib/
│ │ └── backend-stack.ts # Main CDK stack (Cognito, S3, DynamoDB, API GW, Lambdas, Guardrails)
│ ├── lambda/
│ │ ├── s3-presigned-url-gen/ # Pre-signed URL generator
│ │ ├── persona-crud/ # Persona CRUD operations
│ │ ├── post-meeting-analytics/ # AI feedback generation (Bedrock Nova Lite)
│ │ ├── content-analysis/ # PDF content analysis & question generation
│ │ ├── anam-session-token/ # Anam AI avatar session token exchange
│ │ └── layers/boto3-latest/ # Shared boto3 Lambda layer
│ └── agentcore/
│ ├── index.py # Bedrock AgentCore voice agent (Nova 2 Sonic)
│ └── qa_system_prompt.jinja2 # Persona Q&A system prompt template
├── frontend/
│ ├── app/
│ │ ├── components/ # React UI components
│ │ │ └── practice/ # Practice session sub-components
│ │ ├── hooks/ # Custom hooks (audio, video, gaze, analytics)
│ │ ├── services/ # API and WebSocket service layer
│ │ └── config/config.ts # Centralized app configuration
│ └── public/ # Static assets
└── docs/
├── architectureDeepDive.md
├── deploymentGuide.md
├── userGuide.md
└── APIDoc.md
Frontend can't reach the API
- Verify
NEXT_PUBLIC_API_BASE_URLinfrontend/.env.localmatches the CDKApiUrloutput - Check CORS — Amplify domain must be in the
ALLOWED_ORIGINSenv var on each Lambda
Camera is black during recording
- Browser permissions: ensure the site has camera and microphone access
- HTTPS is required for
getUserMedia— the Amplify domain uses HTTPS by default
Anam avatar fails with 401
- The
ANAM_API_KEYLambda environment variable is empty or incorrect - Update it:
aws lambda update-function-configuration --function-name <name> --environment '{"Variables":{"ANAM_API_KEY":"<key>","ALLOWED_ORIGINS":"<origins>"}}'
Voice Q&A WebSocket won't connect
- Verify
NEXT_PUBLIC_WEBSOCKET_API_URLpoints to the AgentCore runtime endpoint - Confirm the AgentCore stack is deployed and the container is healthy
CDK deploy fails
- Run
cdk bootstrap aws://<account>/<region>if deploying to a fresh account/region - Ensure
ANAM_API_KEYis set in your shell before runningcdk deploy
Amplify shows 404
- The zip must be built from inside the
out/directory soindex.htmlis at the root - Run
cd frontend/out && zip -r ../deploy.zip .then upload viaaws amplify create-deployment
This application was developed by :
This project is licensed under the MIT License — see the LICENSE file for details.
