Inspiration
In September and October 2026, German police reported the same story again and again: someone calls an older person, says they are from the bank's security team, and talks them into approving a "security transfer" in the banking app. In Hemer the call lasted three and a half hours. In Kassel the doubts only came when the couple called their son. Fake police officers alone cost people €49.5 million in 2025 (BKA).
Germany already has two new rules. Since October 2025 banks must check that the payee name matches the IBAN. Since June 2025 online banking must be accessible. But in a push-TAN scam the name often matches – and an accessible "WARNING!" is still a warning that adds panic. Scammers win with urgency, authority and isolation. We wanted an interface that does the opposite.
What it does
When a risky transfer meets an active phone call, SafePause slows the moment down:
- A calm notice – "This transfer looks unusual. Let's check it together."
- Three questions, one per screen – is someone on the phone, are you being rushed, do you know the payee – plus a shortcut: "Someone is telling me what to type right now."
- What we noticed – up to three plain-language points, including the name check: the name matches – that doesn't mean it's safe.
- Never alone – one tap to a trusted person, the bank, or the 116 116 blocking line. Anna, the daughter, gets a gentle notice without the IBAN and can tap "Please stop".
- A safe pause – 30 minutes with a breathing circle. The money stays in the account.
It never blocks and never accuses: "Continue anyway" is always there, without pressure.
How we built it
- Design: Figma design system with colour tokens for a dark page, a light app screen and a high-contrast mode; Barlow Condensed for display, Atkinson Hyperlegible (made for low-vision readers) for text.
- Frontend: plain HTML, CSS and JavaScript, German first with English. Web Animations API and Canvas for the motion and the dot-matrix map of Germany, Web Speech API for read-aloud, Web Audio API for soft sound cues.
- Backend: Python + FastAPI. Three layers check the transfer and the call: rules (IBAN, payee check, amount, history, scam phrases in German and English), the open Laya model fine-tuned on 571 synthetic calls for what the rules miss, and an LLM that rewrites the findings in calm A2–B1 German and is never allowed to say "Betrug" or "Alarm".
- Deploy: one Docker container on Deployxa serves the site and the API; a static mirror runs on Vercel.
- Video: made with Remotion.
Challenges we ran into
- Making a fraud warning that doesn't feel like an alarm. Every red element, countdown and exclamation mark had to earn its place.
- Being honest about the limits: a browser can't detect a phone call, so the demo simulates it and says so.
- Merging frontend and backend work from three people into one repo without losing anything.
Accomplishments that we're proud of
- The calm-versus-alarm comparison on the landing page – the whole idea in one glance.
- Anna's phone: the trusted person can stop a payment with one tap, without seeing account details.
- Accessibility we can prove: text never below 18 px, buttons 60 px, contrast at least 4.5:1 in light, dark and high-contrast mode, full keyboard and screen-reader support. An automated test suite checks all of it: 36/36 passed, 0 axe-core violations.
What we learned
- Calm is a design decision, not a colour: it comes from pacing, one question at a time, and always leaving a way out.
- Accessibility claims are worth nothing until you test them. Our first test run failed 7 of our own README claims.
- German regulation (Verification of Payee, BFSG, the B2 language limit) is a great design brief.
What's next for SafePause
- Testing with older people in Berlin.
- More languages for migrant seniors: Turkish, Russian, Arabic.
- Talking to a bank about real call signals instead of a simulated one.
Team: Mirzobehruz Shaidov (research, frontend) · Bora Eren (backend, scam detection, Laya) · Rohan Thomas Vinu (Figma design, demo video)
Log in or sign up for Devpost to join the conversation.