BridgeAI is a realtime mutual-aid dispatch platform built for urgent community response.
It connects:
- people asking for help
- nearby helpers and volunteers
- an operations view that can watch the network live
The project combines intake, prioritization, matching, tracking, OTP handoff verification, and charity fallback for unused offers in one system.
Why BridgeAI
In real community response, three things often break at the same time:
- requests arrive through different channels and lose context
- urgent cases do not always rise fast enough
- good offers and donations can expire without ever creating impact
BridgeAI is designed to make those flows feel clearer and more accountable, closer to a live delivery network than a static form submission.
What Is Built
Request side
- guided request submission from mobile and web
- category-based intake with plain-language descriptions
- live progress and history
- OTP-based handoff verification for completion
Helper side
- live queue of open requests
- accept / skip flow
- active assignment state
- arrived -> verify OTP -> complete flow
- browser-based helper console for local testing
Ops side
- live stats
- request feed
- map and status visibility
- demo scenario runner
Intelligence and routing
- emergency keyword classifier that boosts urgent requests
- realtime updates through Socket.IO
- request and helper history tied to accounts
Donation / charity flow
- offer expiry windows
- auto-route to a named charity if unclaimed
- closing donor messages
App Flow
First-time flow
- Open the app
- See the onboarding slides
- Choose a lane:
I need helpI can helpOps
- Create an account or sign in
- Enter the lane-specific experience
Requester flow
- Choose a need category
- Describe the request in plain language
- Submit the request
- Watch the request move through matching
- See when help is assigned
- Track arrival in the app
- Share the OTP with the helper at handoff
- See the request marked completed
- Review the request later in account history
Helper flow
- Sign in to the helper lane or helper console
- Review the open queue
- Accept or skip a request
- Move into the active assignment view
- Mark arrival when reaching the requester
- Ask the requester for the OTP
- Enter the OTP to verify the handoff
- Complete the assignment
- See the completed item in helper history
Ops flow
- Open the operations view
- Watch live requests enter the system
- See matching and status changes in realtime
- Monitor stats and activity feed
- Run the demo scenario when presenting the product
Offer / charity flow
- Create an offer
- Set an expiry window
- Enable auto-route to charity
- If a person claims it, the normal handoff flow continues
- If nobody claims it in time, the offer routes to a named charity
- The donor still receives a closing message so the story ends with impact
Repo Structure
bridgeai/
├── client/ # React web app
├── mobile/ # Expo React Native app
├── server/ # Express API, Socket.IO, auth, Twilio, matching logic
├── docs/ # Presentation assets
└── scripts/ # PowerPoint generator and repo scripts
Server modules
server/src/agent: classification, matching, orchestration, messaging logicserver/src/auth: JWT, Google identity handling, auth middlewareserver/src/db: schema and Postgres query layerserver/src/routes: auth, submit, requests, offers, stats, demo, helper consoleserver/src/socket: realtime events
Mobile modules
mobile/src/navigation: auth gating and route structuremobile/src/screens: onboarding, login, request, citizen, helper, demo, opsmobile/src/components: reusable UI, helper panels, history, dashboard blocksmobile/src/api: backend clientsmobile/src/store: auth, theme, stats, map, activity state
Tech Stack
- Frontend web: React
- Mobile: Expo + React Native + TypeScript
- Backend: Express + TypeScript
- Database: PostgreSQL
- Realtime: Socket.IO
- Messaging: Twilio
- AI extraction: Anthropic SDK + keyword fallback
- Auth: email/password + Google sign-in
- State: Zustand
Quick Start
1. Install dependencies
2. Configure environment variables
Create a root .env from .env.example:
Create a mobile env file:
cp mobile/.env.example mobile/.env
3. Start the backend
npm run dev --workspace=server
Backend URLs:
- API health:
http://localhost:3001/api/health - helper console:
http://localhost:3001/helper - backend home:
http://localhost:3001/
4. Start the mobile app
For Android emulator:
Or run server + mobile together:
5. Start the web app
That runs:
- server
- client
Environment Variables
Root .env
See .env.example for the full template.
Important values:
DATABASE_URL=postgresql://localhost:5432/bridgeai ANTHROPIC_API_KEY=your_key_here TWILIO_ACCOUNT_SID=your_sid_here TWILIO_AUTH_TOKEN=your_token_here TWILIO_PHONE_NUMBER=+1234567890 JWT_SECRET=bridgeai_demo_secret PORT=3001 CLIENT_URL=http://localhost:5173 GOOGLE_WEB_CLIENT_ID=your_google_web_client_id.apps.googleusercontent.com
Mobile mobile/.env
EXPO_PUBLIC_API_URL=http://localhost:3001/api EXPO_PUBLIC_GOOGLE_EXPO_CLIENT_ID=your_google_expo_client_id EXPO_PUBLIC_GOOGLE_ANDROID_CLIENT_ID=your_google_android_client_id EXPO_PUBLIC_GOOGLE_IOS_CLIENT_ID=your_google_ios_client_id EXPO_PUBLIC_GOOGLE_WEB_CLIENT_ID=your_google_web_client_id
Android Emulator Notes
For Android emulator, localhost inside the app will not point at your Mac.
Use:
EXPO_PUBLIC_API_URL=http://10.0.2.2:3001/api
Recommended local flow:
- Start the server
- Boot the Android emulator
- Run
npm run mobile:start - Press
ain the Expo terminal
Google Sign-In
BridgeAI supports Google auth on:
- mobile login
- helper console web login
Minimum setup:
- Create a Google Cloud project
- Configure the OAuth consent screen
- Add yourself as a test user
- Create:
- a Web OAuth client
- an Android OAuth client
- Put the client IDs into:
.envmobile/.env
The helper console uses:
The mobile app uses:
EXPO_PUBLIC_GOOGLE_EXPO_CLIENT_ID=... EXPO_PUBLIC_GOOGLE_ANDROID_CLIENT_ID=... EXPO_PUBLIC_GOOGLE_IOS_CLIENT_ID=... EXPO_PUBLIC_GOOGLE_WEB_CLIENT_ID=...
Database
The backend uses PostgreSQL and syncs additive schema updates on boot.
If you want to fully reapply the schema:
Helper Console
The local browser helper surface is available at:
http://localhost:3001/helper
Use it to:
- sign in as a helper
- review open requests
- accept a request
- mark arrival
- verify OTP
- complete the handoff
- create quick test requests for demo use
Demo Accounts
For quick local testing, demo fallback login is available:
This is useful for local testing only.
Core Flow
A typical end-to-end run looks like this:
- A requester submits a need from mobile, web, or message input
- BridgeAI classifies urgency and need
- The request enters the helper queue
- A helper accepts it
- The requester sees tracking updates
- The helper arrives
- The requester shares the OTP
- The helper verifies the OTP and completes the handoff
- The event appears in history and ops stats
Main Scripts
Root
npm run dev npm run build npm run db:reset npm run dev:mobile npm run mobile:start npm run mobile:android npm run mobile:ios npm run mobile:web npm run mobile:typecheck npm run presentation:build
Server
npm run dev --workspace=server npm run build --workspace=server npm run db:reset --workspace=server
Mobile
npm run start --workspace=mobile npm run start:clear --workspace=mobile npm run android --workspace=mobile npm run ios --workspace=mobile npm run web --workspace=mobile npm run typecheck --workspace=mobile
Presentation Deck
The repo includes an editable PowerPoint deck:
docs/presentation/BridgeAI-hackathon-deck.pptx
You can regenerate it with:
npm run presentation:build
The generator lives at:
scripts/generate-presentation.mjs
Current Caveats
- full remote push notifications are not available in Expo Go; use a development build for real push behavior
- Google sign-in depends on correct OAuth client IDs in local env files
- the value of the system depends on reliable helper availability and trust, not just routing logic
- Twilio and Anthropic features require valid credentials to test their full paths
Project Positioning
BridgeAI is strongest when presented as:
- a calm requester experience
- a fast helper dispatch experience
- a live operations view
- a charity fallback for unused offers
That combination makes the project more than a form app or a dashboard. It becomes a response network.