# Project export: FrontLine

This document was generated by HackStack to give an AI agent context about a hackathon project. Sections are labeled with their provenance; content marked as truncated was cut to keep this document small.

## Project metadata

- Hackathon: TreeHacks 2026
- Tagline: Accelerating first response when every second counts.
- Devpost: https://devpost.com/software/hello-m52pvi
- GitHub: https://github.com/sanjanas18/frontline
- Video: https://www.youtube.com/embed/VHtCGhB9Y38?enablejsapi=1&hl=en_US&rel=0&start=&version=3&wmode=transparent
- Team: 4 GitHub contributor(s) — Sanjana (16 commits), ArishaG (4 commits), ksampada23 (3 commits), kathy-guo811 (2 commits)

## Devpost submission (written by the team)

### Inspiration

Several of us have had loved ones injured or in medical distress where help felt delayed—not because responders didn’t care, but because the path from a phone call to meaningful care requires assembling fragmented information, such as the injured person’s identity, location, and condition. In moments of extreme stress, callers often struggle to describe what’s happening, follow verbal instructions, or clearly advocate for the person in need, causing the most critical early moments to be lost. Those minutes matter, and this project grew from a desire to use every available second more effectively by helping initiate the right actions as early as possible, while professional care is still on the way.

### What it does

Frontline is a video-first emergency response system that enables individuals in need to visually connect with 911 operators, allowing responders to assess situations beyond what can be conveyed through audio alone. The system integrates live video access via Zoom, which is analyzed in real time using computer vision through Claude to extract environmental and situational context. Caller audio is processed in parallel to capture spoken descriptions and responder instructions. Rather than independently analyzing raw audio, Perplexity serves as a synthesis layer, combining structured outputs from the computer vision pipeline with parsed audio input to generate a consolidated incident report.

### How we built it

Mobile frontend (emergency caller app): The user-facing mobile application is built with React Native and TypeScript, creating a frictionless app experience for emergency callers. Web frontend (operator dashboard): The operator interface is built with HTML, CSS, and JavaScript, providing real-time visibility into incoming emergency calls and active responses. Real-time communication: FrontLine’s video streaming capabilities are planned using Zoom Video SDK to enable live video connection between emergency callers and operators during active responses. AI processing: Claude (Anthropic) analyzes real-time images from emergency scenes to extract environmental context, while Perplexity AI synthesizes audio and visual findings into post-call incident reports.

### Challenges we ran into

Zoom meeting SDK integration: Encountered difficulties embedding the Zoom Video SDK into the web application for live video streaming between callers and operators, requiring careful configuration of authentication and session management. Poke integration: The main challenge was migrating Poke from a local environment to deployment on Render, requiring adjustments to environment configuration and asynchronous API handling to ensure reliable execution after the transition. Computer vision analysis: Ensuring accurate analysis requires correctly accessing and isolating the appropriate video stream and frames within the Zoom session, specifically distinguishing and processing the caller’s video feed rather than the operator’s, while maintaining real-time performance.

### Accomplishments we're proud of

Built a fully functional emergency response app in 36 hours that could have a real positive impact on people's safety. Successfully integrated Claude AI with Zoom to analyze video/images in real-time for emergency situations. Created an intelligent system that processes visual information to help emergency responders make faster, better-informed decisions.

### What we learned

How to integrate multiple third-party APIs and SDKs (Claude AI, Zoom SDK, etc.) into a mobile app, handling authentication, real-time data streaming, and making different services communicate seamlessly. Tackled integration challenges in a niche problem space with limited documentation, learning to troubleshoot and problem-solve without established guides. Built a product that addresses a real public safety need, designing with accessibility and ease-of-use in mind for high-stress emergency situations.

### What's next

Scene-specific models: Extend computer vision beyond generic scene understanding to detect medically relevant cues (e.g., body posture, bleeding indicators, unconsciousness, fire/smoke presence). Temporal reasoning: Track changes over time (e.g., patient movement, responsiveness) instead of frame-by-frame analysis to improve situational continuity. Low-bandwidth robustness: Add adaptive frame sampling and degraded-vision fallbacks for poor network conditions common in emergencies.

## README (from the GitHub repository)

# FrontLine

## Prerequisites
- Node.js (v18+)
- Xcode (for iOS development)
- CocoaPods: `sudo gem install cocoapods`

## Setup Instructions

### 1. Clone the Repository
```bash
git clone
cd operatorthing
```

### 2. Backend Setup
```bash
cd backend
npm install
npm run dev
```
✅ Server runs on `http://localhost:3000`

### 3. Operator Dashboard Setup
```bash
cd operator-dashboard
npm install
npm start
```
✅ Dashboard opens at `http://localhost:3000` (or 3001 if backend is on 3000)

### 4. Mobile App Setup (iOS)
```bash
cd EmergencyCallerApp
npm install
cd ios
pod install
cd ..
npx react-native run-ios
```
✅ iOS simulator launches automatically

## Running All Services

**Terminal 1 - Backend:**
```bash
cd backend && npm run dev
```

**Terminal 2 - Dashboard:**
```bash
cd operator-dashboard && npm start
```

**Terminal 3 - Mobile:**
```bash
cd EmergencyCallerApp && npx react-native run-ios
```

## Project Structure
```
operatorthing/
├── EmergencyCallerApp/    # React Native iOS app (emergency caller)
├── operator-dashboard/    # React web app (911 operator)
└── backend/               # Node.js API + WebSocket server
```

## Troubleshooting

**iOS Simulator won't launch:**
1. Open Xcode → Preferences → Locations
2. Set Command Line Tools to your Xcode version
3. Run `sudo xcode-select --switch /Applications/Xcode.app`

**Port already in use:**
- Backend: Change `PORT` in `backend/src/index.ts`
- Dashboard: Set `PORT=3001` before `npm start`

**Pod install fails:**
```bash
cd EmergencyCallerApp/ios
pod deintegrate
pod install
```


## Detected evidence (automated analysis)

Indexed codebase: 76 recognized source files, 730 KB.
- Anthropic (technology) — detected in the code
- CSS (language) — detected in the code
- Express (technology) — detected in the code
- HTML (language) — detected in the code
- JavaScript (language) — detected in the code
- Kotlin (language) — detected in the code
- OpenAI (technology) — detected in the code
- React (technology) — detected in the code
- Swift (language) — detected in the code
- TypeScript (language) — detected in the code
- Node.js (technology) — claimed on Devpost, not found in the code

## Codebase structure (from repository index)

### Files (120 of 132)

```
.gitignore
backend/package.json
backend/src/controllers/emergencyController.ts
backend/src/index.ts
backend/src/routes/emergencyRoutes.ts
backend/src/routes/pokeRoutes.ts
backend/src/services/PerplexityService.ts
backend/src/services/VisionAnalysisService.ts
backend/src/services/ZoomRecordingService.ts
backend/src/services/ZoomService.ts
backend/tsconfig.json
EmergencyCallerApp/__tests__/App.test.tsx
EmergencyCallerApp/.bundle/config
EmergencyCallerApp/.eslintrc.js
EmergencyCallerApp/.gitignore
EmergencyCallerApp/.prettierrc.js
EmergencyCallerApp/.watchmanconfig
EmergencyCallerApp/android/app/build.gradle
EmergencyCallerApp/android/app/debug.keystore
EmergencyCallerApp/android/app/proguard-rules.pro
EmergencyCallerApp/android/app/src/main/AndroidManifest.xml
EmergencyCallerApp/android/app/src/main/java/com/emergencycallerapp/MainActivity.kt
EmergencyCallerApp/android/app/src/main/java/com/emergencycallerapp/MainApplication.kt
EmergencyCallerApp/android/app/src/main/res/drawable/rn_edit_text_material.xml
EmergencyCallerApp/android/app/src/main/res/values/strings.xml
EmergencyCallerApp/android/app/src/main/res/values/styles.xml
EmergencyCallerApp/android/build.gradle
EmergencyCallerApp/android/gradle.properties
EmergencyCallerApp/android/gradle/wrapper/gradle-wrapper.properties
EmergencyCallerApp/android/gradlew
EmergencyCallerApp/android/gradlew.bat
EmergencyCallerApp/android/settings.gradle
EmergencyCallerApp/app.json
EmergencyCallerApp/App.tsx
EmergencyCallerApp/babel.config.js
EmergencyCallerApp/Gemfile
EmergencyCallerApp/Gemfile.lock
EmergencyCallerApp/index.js
EmergencyCallerApp/ios/.xcode.env
EmergencyCallerApp/ios/EmergencyCallerApp.xcodeproj/project.pbxproj
EmergencyCallerApp/ios/EmergencyCallerApp.xcodeproj/xcshareddata/xcschemes/EmergencyCallerApp.xcscheme
EmergencyCallerApp/ios/EmergencyCallerApp.xcworkspace/contents.xcworkspacedata
EmergencyCallerApp/ios/EmergencyCallerApp/AppDelegate.swift
EmergencyCallerApp/ios/EmergencyCallerApp/Images.xcassets/AppIcon.appiconset/Contents.json
EmergencyCallerApp/ios/EmergencyCallerApp/Images.xcassets/Contents.json
EmergencyCallerApp/ios/EmergencyCallerApp/Info.plist
EmergencyCallerApp/ios/EmergencyCallerApp/LaunchScreen.storyboard
EmergencyCallerApp/ios/EmergencyCallerApp/PrivacyInfo.xcprivacy
EmergencyCallerApp/ios/Podfile
EmergencyCallerApp/ios/Podfile.lock
EmergencyCallerApp/jest.config.js
EmergencyCallerApp/metro.config.js
EmergencyCallerApp/package.json
EmergencyCallerApp/README.md
EmergencyCallerApp/src/EmergencyCallScreen.tsx
EmergencyCallerApp/tsconfig.json
operator-dashboard/.gitignore
operator-dashboard/package.json
operator-dashboard/public/index.html
operator-dashboard/public/manifest.json
operator-dashboard/public/robots.txt
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/.gitignore
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/CDN/.babelrc
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/CDN/corp.js
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/CDN/externalLinkPage.html
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/CDN/helper.html
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/CDN/index.html
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/CDN/js/index.js
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/CDN/js/meeting.js
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/CDN/js/tool.js
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/CDN/js/vconsole.min.js
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/CDN/localhost.crt
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/CDN/localhost.key
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/CDN/meeting.html
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/CDN/package.json
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/CDN/webpack.config.dev.js
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/CHANGELOG.md
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Components/.eslintrc.cjs
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Components/.gitignore
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Components/.prettierrc
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Components/.stylelintrc.json
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Components/commitlint.base.cjs
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Components/commitlint.config.cjs
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Components/index.html
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Components/package.json
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Components/postinstall.js
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Components/public/cdn.html
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Components/public/nav.html
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Components/public/tools/cdn.js
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Components/public/tools/nav.js
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Components/public/tools/tool.js
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Components/public/tools/vconsole.min.js
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Components/readme.md
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Components/script.js
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Components/src/index.tsx
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Components/src/utils/platform.ts
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Components/src/vite-env.d.ts
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Components/tsconfig.json
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Components/tsconfig.node.json
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Components/vite.config.ts
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/CONTRIBUTING.md
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/LICENSE.md
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Local/.babelrc
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Local/.eslintrc
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Local/corp.js
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Local/externalLinkPage.html
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Local/helper.html
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Local/index.html
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Local/js/index.js
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Local/js/meeting.js
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Local/js/tool.js
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Local/localhost.crt
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Local/localhost.key
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Local/meeting.html
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Local/package.json
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Local/postinstall.js
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Local/webpack.config.dev.js
operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/README.md
operator-dashboard/README.md
operator-dashboard/src/App.css
[12 more files omitted for size]
```

### Dependencies

- backend/package.json: @anthropic-ai/sdk@^0.74.0, @types/cors@^2.8.17, @types/express@^4.17.21, @types/jsonwebtoken@^9.0.10, @types/node@^20.11.0, axios@^1.13.5, axois@^0.0.1-security, cors@^2.8.5, dotenv@^16.6.1, express@^4.18.2, jsonwebtoken@^9.0.3, nodemon@^3.0.2, openai@^6.22.0, socket.io@^4.6.1, tsx@^4.21.0, typescript@^5.3.3
- EmergencyCallerApp/package.json: @babel/core@^7.25.2, @babel/preset-env@^7.25.3, @babel/runtime@^7.25.0, @react-native-community/cli@20.1.0, @react-native-community/cli-platform-android@20.1.0, @react-native-community/cli-platform-ios@20.1.0, @react-native/babel-preset@0.84.0, @react-native/eslint-config@0.84.0, @react-native/metro-config@0.84.0, @react-native/new-app-screen@0.84.0, @react-native/typescript-config@0.84.0, @types/jest@^29.5.13, @types/react@^19.2.0, @types/react-test-renderer@^19.1.0, @zoom/react-native-videosdk@^2.4.5, axios@^1.13.5, eslint@^8.19.0, jest@^29.6.3, prettier@2.8.8, react@19.2.3, react-native@0.84.0, react-native-safe-area-context@^5.5.2, react-native-webview@^13.16.0, react-test-renderer@19.2.3, typescript@^5.8.3
- operator-dashboard/package.json: @testing-library/dom@^10.4.1, @testing-library/jest-dom@^6.9.1, @testing-library/react@^16.3.2, @testing-library/user-event@^13.5.0, @types/jest@^27.5.2, @types/node@^16.18.126, @types/react@^19.2.14, @types/react-dom@^19.2.3, axios@^1.13.5, react@^19.2.4, react-dom@^19.2.4, react-scripts@5.0.1, socket-io@^1.0.0, socket.io-client@^4.8.3, typescript@^4.9.5, web-vitals@^2.1.4
- operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/CDN/package.json: webpack@^5.101.3, webpack-cli@^6.0.1, webpack-dev-server@^5.2.2
- operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Components/package.json: @commitlint/cli@^19.8.1, @commitlint/cz-commitlint@^19.8.1, @types/react@^18.2.34, @types/react-dom@^18.2.14, @typescript-eslint/eslint-plugin@^6.9.1, @typescript-eslint/parser@^6.9.1, @vitejs/plugin-react-swc@^3.10.2, @zoom/meetingsdk@5.1.2, commitizen@^4.3.1, cross-env@^7.0.3, eslint@^8.52.0, eslint-config-airbnb@^19.0.4, eslint-config-airbnb-typescript@^17.1.0, eslint-config-prettier@^9.1.0, eslint-config-standard-with-typescript@^43.0.0, eslint-import-resolver-typescript@^3.6.1, eslint-plugin-import@^2.32.0, eslint-plugin-jsx-a11y@^6.10.2, eslint-plugin-n@^16.2.0, eslint-plugin-prettier@^5.5.4, eslint-plugin-promise@^6.2.0, eslint-plugin-react@^7.37.5, eslint-plugin-react-hooks@^4.6.2, eslint-plugin-react-refresh@^0.4.20, husky@^9.1.7, lint-staged@^15.5.1, lodash@^4.17.21, lodash@^4.17.21, mkdirp@^3.0.1, ncp@^2.0.0, prettier@^3.6.2, prettier-eslint@^16.4.2, react@18.2.0, react-dom@18.2.0, react-redux@8.1.2, redux@4.2.1, redux-thunk@2.4.2, regenerator-runtime@^0.14.1, rimraf@^6.0.1, sass@^1.91.0, sass-loader@^16.0.5, stylelint@^16.23.1, stylelint-config-sass-guidelines@^12.1.0, stylelint-config-standard-scss@^14.0.0, stylelint-order@^7.0.0, targz@^1.0.1, typescript@^5.9.2, vite@^7.1.4, vite-plugin-svgr@^4.5.0
- operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Local/package.json: @babel/cli@^7.28.3, @babel/core@^7.28.3, @babel/eslint-parser@^7.23.3, @babel/plugin-syntax-dynamic-import@^7.8.3, @babel/preset-env@^7.28.3, @babel/preset-react@^7.23.3, @babel/preset-stage-0@7.8.3, @babel/preset-stage-1@7.8.3, @babel/runtime@^7.28.3, @zoom/meetingsdk@5.1.2, babel-loader@^9.1.3, babel-preset-airbnb@^5.0.0, css-loader@^7.1.2, eslint@^8.55.0, eslint-config-airbnb@^19.0.4, eslint-config-prettier@^8.10.0, eslint-plugin-import@^2.29.0, eslint-plugin-jsx-a11y@^6.8.0, eslint-plugin-prettier@^5.5.4, eslint-plugin-react@^7.33.1, eslint-plugin-react-hooks@^4.6.0, file-loader@6.2.0, lodash@^4.17.21, node-polyfill-webpack-plugin@^4.1.0, react@18.2.0, react-dom@18.2.0, react-redux@8.1.2, redux@4.2.1, redux-thunk@2.4.2, style-loader@^4.0.0, url-loader@4.1.1, webpack@^5.101.3, webpack-cli@^6.0.1, webpack-dev-server@^5.2.2
- package.json: @anthropic-ai/sdk@^0.74.0, openai@^6.22.0

### Recent commits (newest first)

- Update App.tsx
- poke
- Update emergencyController.ts
- poke
- Rename project from 'Emergency Dispatch System' to 'FrontLine'
- zoom stuff
- OVerarching changes + zoom
- working scroll
- Update PerplexityService.ts
- Update emergencyController.ts
- stuff
- Update ZoomService.ts
- Update ZoomService.ts
- testing
- Update app.json
- Update app.json
- updated + new stuff
- Merge branch 'main' of https://github.com/sanjanas18/operatorthing
- Update EmergencyCallScreen.tsx
- update3

## Key source files (fetched from GitHub, selected and truncated for size)

### operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/CHANGELOG.md

```markdown
The Changelog can be found [here](https://developers.zoom.us/changelog/meeting-sdk/web/)
```

### operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/LICENSE.md

```markdown
Use of this SDK is subject to our [Terms of Use](https://explore.zoom.us/en/legal/zoom-api-license-and-tou/)
```

### package.json

```
{
  "dependencies": {
    "@anthropic-ai/sdk": "^0.74.0",
    "openai": "^6.22.0"
  }
}

```

### EmergencyCallerApp/Gemfile

```
source 'https://rubygems.org'

# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version
ruby ">= 2.6.10"

# Exclude problematic versions of cocoapods and activesupport that causes build failures.
gem 'cocoapods', '>= 1.13', '!= 1.15.0', '!= 1.15.1'
gem 'activesupport', '>= 6.1.7.5', '!= 7.1.0'
gem 'xcodeproj', '< 1.26.0'
gem 'concurrent-ruby', '< 1.3.4'

# Ruby 3.4.0 has removed some libraries from the standard library.
gem 'bigdecimal'
gem 'logger'
gem 'benchmark'
gem 'mutex_m'

```

### backend/package.json

```
{
  "name": "backend",
  "version": "1.0.0",
  "type": "module",
  "scripts": {
    "dev": "nodemon --exec tsx src/index.ts",
    "build": "tsc",
    "start": "node dist/index.js"
  },
  "dependencies": {
    "@anthropic-ai/sdk": "^0.74.0",
    "axios": "^1.13.5",
    "axois": "^0.0.1-security",
    "cors": "^2.8.5",
    "dotenv": "^16.6.1",
    "express": "^4.18.2",
    "jsonwebtoken": "^9.0.3",
    "openai": "^6.22.0",
    "socket.io": "^4.6.1"
  },
  "devDependencies": {
    "@types/cors": "^2.8.17",
    "@types/express": "^4.17.21",
    "@types/jsonwebtoken": "^9.0.10",
    "@types/node": "^20.11.0",
    "nodemon": "^3.0.2",
    "tsx": "^4.21.0",
    "typescript": "^5.3.3"
  }
}

```

### operator-dashboard/package.json

```
{
  "name": "operator-dashboard",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@testing-library/dom": "^10.4.1",
    "@testing-library/jest-dom": "^6.9.1",
    "@testing-library/react": "^16.3.2",
    "@testing-library/user-event": "^13.5.0",
    "@types/jest": "^27.5.2",
    "@types/node": "^16.18.126",
    "@types/react": "^19.2.14",
    "@types/react-dom": "^19.2.3",
    "axios": "^1.13.5",
    "react": "^19.2.4",
    "react-dom": "^19.2.4",
    "react-scripts": "5.0.1",
    "socket-io": "^1.0.0",
    "socket.io-client": "^4.8.3",
    "typescript": "^4.9.5",
    "web-vitals": "^2.1.4"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}

```

### EmergencyCallerApp/package.json

```
{
  "name": "EmergencyCallerApp",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "android": "react-native run-android",
    "ios": "react-native run-ios",
    "lint": "eslint .",
    "start": "react-native start",
    "test": "jest"
  },
  "dependencies": {
    "@react-native/new-app-screen": "0.84.0",
    "@zoom/react-native-videosdk": "^2.4.5",
    "axios": "^1.13.5",
    "react": "19.2.3",
    "react-native": "0.84.0",
    "react-native-safe-area-context": "^5.5.2",
    "react-native-webview": "^13.16.0"
  },
  "devDependencies": {
    "@babel/core": "^7.25.2",
    "@babel/preset-env": "^7.25.3",
    "@babel/runtime": "^7.25.0",
    "@react-native-community/cli": "20.1.0",
    "@react-native-community/cli-platform-android": "20.1.0",
    "@react-native-community/cli-platform-ios": "20.1.0",
    "@react-native/babel-preset": "0.84.0",
    "@react-native/eslint-config": "0.84.0",
    "@react-native/metro-config": "0.84.0",
    "@react-native/typescript-config": "0.84.0",
    "@types/jest": "^29.5.13",
    "@types/react": "^19.2.0",
    "@types/react-test-renderer": "^19.1.0",
    "eslint": "^8.19.0",
    "jest": "^29.6.3",
    "prettier": "2.8.8",
    "react-test-renderer": "19.2.3",
    "typescript": "^5.8.3"
  },
  "engines": {
    "node": ">= 22.11.0"
  }
}

```

### operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/CDN/package.json

```
{
  "name": "websdk-cdn",
  "version": "5.1.2",
  "description": "Zoom sample app for MeetingSDK-Web client view",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "set NODE_ENV=development && set BABEL_ENV=development && node corp.js --corp",
    "https": "set NODE_ENV=development && set BABEL_ENV=development && node corp.js --corp --https"
  },
  "author": "Zoom Communications, Inc.",
  "license": "SEE LICENSE IN LICENSE.md",
  "devDependencies": {
    "webpack": "^5.101.3",
    "webpack-cli": "^6.0.1",
    "webpack-dev-server": "^5.2.2"
  }
}

```

### operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Local/package.json

```
{
  "$schema": "http://json.schemastore.org/coffeelint",
  "name": "websdk-local",
  "version": "5.1.2",
  "description": "Zoom sample app for MeetingSDK-Web client view",
  "main": "index.js",
  "scripts": {
    "preinstall": "npx force-resolutions || echo 1",
    "postinstall": "node postinstall.js",
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "set NODE_ENV=development && set BABEL_ENV=development && node corp.js --corp",
    "https": "set NODE_ENV=development && set BABEL_ENV=development && node corp.js --corp --https"
  },
  "keywords": [
    "zoom",
    "meeting",
    "client",
    "webclient",
    "WebSDK"
  ],
  "author": "Zoom Communications, Inc.",
  "license": "SEE LICENSE IN LICENSE.md",
  "dependencies": {
    "@zoom/meetingsdk": "5.1.2",
    "lodash": "^4.17.21",
    "react": "18.2.0",
    "react-dom": "18.2.0",
    "react-redux": "8.1.2",
    "redux": "4.2.1",
    "redux-thunk": "2.4.2"
  },
  "devDependencies": {
    "@babel/cli": "^7.28.3",
    "@babel/core": "^7.28.3",
    "@babel/eslint-parser": "^7.23.3",
    "@babel/plugin-syntax-dynamic-import": "^7.8.3",
    "@babel/preset-env": "^7.28.3",
    "@babel/preset-react": "^7.23.3",
    "@babel/preset-stage-0": "7.8.3",
    "@babel/preset-stage-1": "7.8.3",
    "@babel/runtime": "^7.28.3",
    "babel-loader": "^9.1.3",
    "babel-preset-airbnb": "^5.0.0",
    "css-loader": "^7.1.2",
    "eslint": "^8.55.0",
    "eslint-config-airbnb": "^19.0.4",
    "eslint-config-prettier": "^8.10.0",
    "eslint-plugin-import": "^2.29.0",
    "eslint-plugin-jsx-a11y": "^6.8.0",
    "eslint-plugin-prettier": "^5.5.4",
    "eslint-plugin-react": "^7.33.1",
    "eslint-plugin-react-hooks": "^4.6.0",
    "file-loader": "6.2.0",
    "node-polyfill-webpack-plugin": "^4.1.0",
    "style-loader": "^4.0.0",
    "url-loader": "4.1.1",
    "webpack": "^5.101.3",
    "webpack-cli": "^6.0.1",
    "webpack-dev-server": "^5.2.2"
  },
  "resolutions": {
    "browserify-sign": "4.2.2"
  }
}

```

### operator-dashboard/public/zoom-sdk/zoom-sdk-web-5.1.2/Components/package.json

```
{
  "name": "websdk-component-demo",
  "version": "5.1.2",
  "type": "module",
  "config": {
    "commitizen": {
      "path": "@commitlint/cz-commitlint"
    }
  },
  "dependencies": {
    "@zoom/meetingsdk": "5.1.2",
    "lodash": "^4.17.21",
    "react": "18.2.0",
    "react-dom": "18.2.0",
    "react-redux": "8.1.2",
    "redux": "4.2.1",
    "redux-thunk": "2.4.2"
  },
  "devDependencies": {
    "@commitlint/cli": "^19.8.1",
    "@commitlint/cz-commitlint": "^19.8.1",
    "@types/react": "^18.2.34",
    "@types/react-dom": "^18.2.14",
    "@typescript-eslint/eslint-plugin": "^6.9.1",
    "@typescript-eslint/parser": "^6.9.1",
    "@vitejs/plugin-react-swc": "^3.10.2",
    "commitizen": "^4.3.1",
    "cross-env": "^7.0.3",
    "eslint": "^8.52.0",
    "eslint-config-airbnb": "^19.0.4",
    "eslint-config-airbnb-typescript": "^17.1.0",
    "eslint-config-prettier": "^9.1.0",
    "eslint-config-standard-with-typescript": "^43.0.0",
    "eslint-import-resolver-typescript": "^3.6.1",
    "eslint-plugin-import": "^2.32.0",
    "eslint-plugin-jsx-a11y": "^6.10.2",
    "eslint-plugin-n": "^16.2.0",
    "eslint-plugin-prettier": "^5.5.4",
    "eslint-plugin-promise": "^6.2.0",
    "eslint-plugin-react": "^7.37.5",
    "eslint-plugin-react-hooks": "^4.6.2",
    "eslint-plugin-react-refresh": "^0.4.20",
    "husky": "^9.1.7",
    "lint-staged": "^15.5.1",
    "lodash": "^4.17.21",
    "mkdirp": "^3.0.1",
    "ncp": "^2.0.0",
    "prettier": "^3.6.2",
    "prettier-eslint": "^16.4.2",
    "regenerator-runtime": "^0.14.1",
    "rimraf": "^6.0.1",
    "sass": "^1.91.0",
    "sass-loader": "^16.0.5",
    "stylelint": "^16.23.1",
    "stylelint-config-sass-guidelines": "^12.1.0",
    "stylelint-config-standard-scss": "^14.0.0",
    "stylelint-order": "^7.0.0",
    "targz": "^1.0.1",
    "typescript": "^5.9.2",
    "vite": "^7.1.4",
    "vite-plugin-svgr": "^4.5.0"
  },
  "husky": {
    "hooks": {
      "prepare-commit-msg": "exec < /dev/tty && npx cz --hook || true"
    }
  },
  "license": "MIT",
  "lint-staged": {
    "{src,test}/**/*.{js,json}": [
      "prettier --write --ignore-unknown",
      "eslint --max-warnings=0"
    ]
  },
  "private": true,
  "scripts": {
    "postinstall": "node postinstall.js",
    "build": "tsc && vite build",
    "commit": "cz",
    "start": "node script.js && vite",
    "lint": "eslint --ext ts,tsx ./src  --report-unused-disable-directives --max-warnings 0",
    "lint:fix": "eslint --ext ts,tsx ./src --fix",
    "lint:style": "stylelint **/*.scss --max-warnings 4000",
    "prepare": "husky install",
    "preview": "vite preview",
    "stylelint": "npx stylelint \"**/*.scss\""
  }
}

```

[64 more indexed source files omitted to keep this export small. The full file list is in the Codebase structure section above.]