Inspiration
Every year, immigrant families send over $650 billion in remittances worldwide. The World Bank reports the global average cost is 6.2% — but predatory providers bury the real cost inside rate markups, hidden fees, and fine print that can push actual costs above 15%.
A family in Nepal receiving $500 from the US might lose $68+ without ever knowing it. The exchange rate looks like a number. The fee looks small. But the math tells a different story:
$$\text{Money Lost} = \frac{(\text{Market Rate} - \text{Offered Rate})}{\text{Market Rate}} \times \text{Amount}$$
Our families back home don't have Bloomberg terminals. They don't read English fine print. They trust the provider at the counter. RemitSafe exists because that trust is being exploited.
What it does
RemitSafe deploys 4 AI agents in parallel to scan any remittance transfer in real-time:
| Agent | Function | Output |
|---|---|---|
| Rate Anomaly Detector | Compares offered rate vs live market rate | Markup %, dollar amount lost |
| Predatory Language Scanner | Scans terms against known predatory clause database | Red flags with risk levels |
| Scam Pattern Classifier | Matches against 5 fraud pattern engines | Pattern matches with confidence |
| Alert Generator | Aggregates scores + generates multilingual alerts | Risk score, alternatives, alerts in Nepali/Hindi/Arabic |
The Risk Score Math
The composite risk score uses weighted aggregation across all three detection agents:
$$\text{Risk} = 0.35 \times R_{\text{rate}} + 0.35 \times R_{\text{terms}} + 0.30 \times R_{\text{scam}}$$
Where each \( R \) is normalized to a 0–10 scale based on severity thresholds calibrated against real-world remittance corridor data.
Rate Markup Detection
The Rate Anomaly Detector pulls live exchange rates and computes the true cost:
$$\text{Markup \%} = \frac{(\text{Market Rate} - \text{Offered Rate})}{\text{Market Rate}} \times 100$$
$$\text{Fee Verdict} = \begin{cases} \text{fair} & \text{if fee} \leq \$6 \ \text{high} & \text{if fee} \leq \$10 \ \text{predatory} & \text{if fee} > \$10 \end{cases}$$
What the user sees
- Robinhood-style line chart showing the growing gap between offered vs market value as transfer amount increases
- Horizontal bar chart comparing total cost across providers (current provider highlighted in red, cheapest in green)
- Risk score that animates from 0 to final value with ease-out cubic easing
- Multilingual alerts in Nepali (🇳🇵), Hindi (🇮🇳), and Arabic (🇪🇬) — because the people who need this most don't read English
How we built it
Architecture
User Input → Express Server (SSE Stream)
↓
Live Exchange Rate API
↓
┌──────────┼──────────┐
Agent 1 Agent 2 Agent 3
(Rate) (Terms) (Scam)
└──────────┼──────────┘
↓
Aggregator (Weighted Risk)
↓
Agent 4 (Alert Gen)
↓
SSE Stream → React Dashboard
Stack
- Frontend: React 19 + Tailwind CSS 4 + Vite 8 + Chart.js + Framer Motion
- Backend: Express 5 with Server-Sent Events (SSE) for real-time streaming
- AI: OpenRouter API → Claude Sonnet 4 | Mock engine with real math as fallback
- Data: ExchangeRate API (live USD rates across 8 corridors)
- Design: Wise-inspired UI, shadcn components, animated SVG background paths, iPhone mockup
The SSE Streaming Pattern
Each agent result streams to the client as it completes — not after all four finish. The user watches agents activate, scan, and report in real-time:
event: agent-start → Agent 1 spinner activates
event: agent-result → Agent 1 done, risk: 7/10
event: agent-start → Agent 2 spinner activates
event: agent-result → Agent 2 done, risk: 5/10
event: risk-score → Composite: 6.2/10
event: complete → Full report rendered
Challenges we ran into
AWS Bedrock Access — Claude Sonnet 4 on Bedrock required a use-case approval form. We cycled through 5 model IDs before discovering the form requirement. Pivoted to OpenRouter in 2 minutes, then built a comprehensive mock engine as permanent fallback.
The $6,853 Bug — Our rate chart showed "You overpay $6,853 on a $500 transfer." The chart was multiplying amount × exchange rate (giving local currency values like 65,500 NPR vs 75,853 NPR) instead of computing the USD-equivalent cost gap. Had to rethink the entire visualization math to show meaningful numbers.
6 UI Rewrites — Dark glassmorphic → minimalist black → accessibility-focused → agent interactions → Wise-inspired → final dashboard with Chart.js. Each iteration taught us something about what immigrant families actually need from a tool like this.
Accomplishments that we're proud of
- Real math, not hallucinations — every number is computed from live exchange rates, not LLM output
- 4-agent parallel architecture with SSE streaming that feels like watching a real investigation unfold
- Multilingual alerts in Nepali, Hindi, and Arabic
- Full WCAG accessibility — skip links, aria-live, focus management, 44px touch targets,
prefers-reduced-motionsupport - The Robinhood chart — makes the cost gap visceral. You see the money being taken as the lines diverge
What we learned
- Mock data is not a compromise — our mock engine with real exchange rate math, predatory clause databases, and 5 pattern detectors is more reliable and faster than raw LLM output
- SSE streaming transforms UX — the difference between a loading spinner and watching agents work in real-time is the difference between a tool and an experience
- Accessibility is the baseline — immigrant families include elderly users, users with disabilities, and users on low-end phones with slow connections
What's next for RemitSafe
- Browser extension — auto-scan any remittance provider's checkout page
- WhatsApp bot — text "check $500 to Nepal via Western Union" and get a risk report
- Corridor trend tracking — predict the cheapest day/time to send based on historical rate patterns
- Community fraud map — crowdsourced reporting of predatory providers
- CFPB integration — auto-report providers exceeding fair pricing thresholds to the Consumer Financial Protection Bureau
Built with: React, Tailwind CSS, Vite, Chart.js, Framer Motion, Express.js, Node.js, Server-Sent Events, ExchangeRate API, OpenRouter, Claude Sonnet 4, Amazon Bedrock, JavaScript, HTML, CSS
Built With
- amazon-bedrock
- chart.js
- claude-sonnet-4-(anthropic)
- css
- exchangerate-api
- express.js
- framer-motion
- html
- javascript
- node.js
- openrouter-api
- react
- server-sent-events-(sse)
- tailwind-css
- vite
Log in or sign up for Devpost to join the conversation.