Work/AegisDial
iOS AppCross-PlatformAI Automation

AegisDial

The only consumer app combining real-time fraud prevention and full recovery in one product. Four iOS compilation targets. AES-256-GCM on every PII field. An AI Companion that talks a victim through 52 specific scam recovery sequences.

# aegisdial-backend/src/routes/
route : liveShield.ts
route : smsShield.ts
route : guardian.ts
route : breach.ts
route : identityShield.ts
route : recovery.ts
route : recoveryShield.ts
route : emailShield.ts
route : criticalTakeover.ts
route : verdict.ts
route : report.ts
route : subscription.ts
35 migrations applied. 111 tests passing. Encrypted at rest.
4
iOS targets
52
scam types
111
tests passing
35+
DB migrations
5
prevention pillars
80
commits

The market is fragmented. Victims pay for it.

Truecaller
Caller-ID
No recovery surface
Hiya
Spam detection
No recovery surface
RoboKiller
Robocall blocking
No recovery surface
AARP Hotline
Post-fraud advice
No recovery surface
FTC website
A report form
No recovery surface

A scam is a psychological event. The caller uses time pressure, fear, and authority to override judgment. The product has to operate at two moments: before the call succeeds (prevention) and after it does (recovery). No competitor ships both. AegisDial does.

Prevention

5 shields. All operating before the victim loses anything.

Live Shield
Real-time caller-ID verdicts via CallKit — appear on the incoming call screen before the user answers. Twilio Lookup V2 enrichment with Redis single-flight locking for sub-1-second latency on unknown numbers.
SMS Filter
ILMessageFilter extension scans messages before they appear. URL reputation via Google Safe Browsing. Runs at the system level without the main app open.
Safe-Words
Guardian challenge flow designed to detect AI voice clone attacks. A family member calling under duress can trigger a challenge that a cloned voice cannot pass.
Breach Monitoring
Enzoic integration monitors email and phone numbers against known breach databases. Push alerts when new exposure events are detected.
Guardian Alerts
Named guardians receive SMS when a critical call event fires. Escalation logic triggers if the guardian does not acknowledge within 5 minutes.
Recovery

52 scam types. Every one with a specific recovery sequence.

52-Type Scam Catalog
Every scam type has a deterministic recovery sequence with the exact steps for that specific fraud — in order, with the right contact information pre-filled. Grandparent scam recovery is different from romance scam recovery.
AI Companion
Claude Sonnet with recovery context and the victim's specific scam type. Explains why each step matters, what to say to the credit bureau, and what to do if a step fails. Voice output via AVSpeechSynthesizer for victims who cannot read in the moment.
Evidence Locker
PhotosPicker-backed evidence storage attached to each case. Photos, screenshots, and documents related to the fraud event — encrypted at rest, organized by case.
Pre-Filled Reports
FTC and IC3 complaint narratives pre-populated from intake data. When 10+ users report the same scam pattern within 7 days, the system generates aggregate reports and surfaces them to all affected victims.
Paste-a-Text Triage
Before money is lost — paste a suspicious message and get an immediate verdict. Operates independently of the recovery catalog so users can act before they become victims.
Step Completion Tracker
Progress tracking across the full recovery sequence. Users can stop, restart, and pick up exactly where they left off. Each step has completion state stored in the encrypted database.
Architecture

Four iOS compilation targets

CallKit caller-ID extensions and ILMessageFilter SMS extensions must be separate Xcode targets. Apple requires it. There is no way to ship caller-ID verdicts or SMS filtering from the main app bundle alone. All four targets share a Keychain access group for credential sharing.

01
AegisDial
iOS (main app)
Full product surface — onboarding, Live Shield dashboard, recovery catalog, AI Companion, evidence locker, account management.
02
CallerIDExtension
CallKit
System-level caller-ID verdicts. Runs before the user answers. Cannot be shipped from the main app binary — requires its own target, entitlements, and provisioning profile.
03
SMSFilterExtension
ILMessageFilter
Message scanning before delivery. URL reputation + pattern matching. Runs without the main app open — Apple's requirement for all SMS filter products.
04
AegisDialWatch
watchOS
End Shield button that terminates an active call and notifies a guardian. Status tile showing active protection state. Handles both immediate and queued WatchConnectivity delivery.
Security

Encrypted at rest. Everything.

A fraud prevention app stores exactly the data attackers want: call transcripts, breach exposure records, victim evidence files, AI companion conversation histories.

Every PII field is encrypted using AES-256-GCM before it is written to the database. The encryption key lives in Railway/Fly secrets. A database breach produces ciphertext. The DATA_ENCRYPTION_KEY is treated as unrecoverable if lost.

Call transcriptsAES-256-GCM
Evidence locker filesAES-256-GCM
AI companion messagesAES-256-GCM
Breach identifiersAES-256-GCM
Support ticketsAES-256-GCM
Session tokensAES-256-GCM

Stack

iOS Clients
SwiftSwiftUICallKitILMessageFilterWatchConnectivityPhotosPickerAVSpeechSynthesizerKeychain
Cross-Platform
FlutterDart
Backend API
Node.js 22TypeScriptFastifyESMDocker
AI + Data
Claude Sonnet (Anthropic)Twilio Lookup V2Google Safe BrowsingEnzoic
Infrastructure
RailwayPostgresRedisAES-256-GCMFly.io

What building it taught us

01
111 tests before TestFlight
Hand-rolled SQL migrations have no ORM safety net. A migration that drops the wrong column destroys production data. Testing every migration's up path against a real database, every route's auth guard, and every service's core logic means the TestFlight build has been exercised against the full stack before a human runs it.
02
Secrets in git history do not become safe when sanitized
Sanitizing a committed .env file removes the values from the current state but not from git history. Anyone with repo access can run git log and find the original values. The correct action is credential rotation at the source — sanitizing without rotating is security theater.
03
CallKit verdict latency is a user experience problem
If the caller-ID verdict arrives after the user has already answered or declined, it is useless. Sub-1-second for unknown numbers requires Redis single-flight locking — if two calls from the same number arrive simultaneously, one enrichment request fires and both share the result. Without it, duplicate Twilio lookups race each other for the same result.
04
The watchOS surface is constrained in ways the simulator does not show
The End Shield button needs to hang up a call without the user touching their phone. WatchConnectivity reachability is not guaranteed — if the iPhone is in another room, the message queues rather than delivering immediately. The implementation has to handle both delivery cases gracefully.
Built by
47 Industries
Full product — design, architecture, iOS engineering, backend, AI integration.
GitHubTestFlight Beta

Want something like this built?

We build full-stack consumer apps with AI embedded from the start.

Start a projectSee more work
AegisDial - Fraud prevention + recovery iOS app | 47 Industries | 47 Industries