Inspiration
bunq calls itself the bank of the free. Its users are expats navigating new cost-of-living realities, freelancers with lumpy income, entrepreneurs building in cities they've lived in for six months. These are people who chose bunq precisely because they want more control over their financial lives.
But control without awareness isn't freedom, it's just access. We kept coming back to one finding: behavioural economists have documented for decades that people spend up to 30% more in the 72 hours after their salary lands. Not because they're reckless — because the psychological signal of a large balance temporarily overrides rational constraint. It's called the pay-lump effect, and no bank has ever intervened at the moment it actually matters. bunq already has the transactions, the webhooks, the pockets, the payment requests. It has everything except the intelligence layer that makes those features proactive. That gap is what inspired Guardian — not a chatbot, not a dashboard, but an AI that watches, learns, speaks, and acts.
What it does
- It intervenes before the bad decision. Guardian builds a Financial Identity Model from your transaction history — your salary pattern, your post-payday spending velocity, your category baselines. When a new transaction arrives and the combination of timing, amount, and context crosses your personal threshold, Guardian speaks to you by voice. Not a notification. A conversation. It tells you exactly what it sees, references your own history, and offers to move money to savings. When you say yes, it executes the bunq API call immediately.
- It reads your receipts. Point your camera at any receipt — any language, any format — and Claude's vision model extracts the merchant, items, total, and date. Guardian matches it to your bunq transaction, then offers to split the bill with a contact via bunq's payment request API. No typing, no manual entry.
- It executes voice commands. Say "Guardian, move €300 to my travel savings" and it happens. Natural language parsed by Claude, action executed via bunq's scheduled payment and pocket transfer APIs, confirmation spoken back to you.
How we built it
Backend: Python + FastAPI, receiving real-time bunq payment events via webhooks tunnelled through ngrok. bunq integration: Full Python SDK implementation — session auth, transaction history, webhook registration, payment creation, payment requests (Slice It), and pocket transfers. Every Guardian action closes the loop with a real bunq API call. Financial Identity Model: Built from transaction history and stored in Redis — salary detection, rolling 72-hour velocity windows, per-category monthly baselines. A lightweight scoring engine runs on every webhook event and computes risk level against the user's own historical pattern. AI reasoning: Claude 4.6 Sonnet generates every nudge — contextual, specific, non-preachy, grounded in the user's real numbers and past behaviour. The same model handles receipt vision via its multimodal capability, returning structured JSON from a photo. Voice layer: Browser MediaRecorder API captures the user's voice response, AWS Transcribe converts it to text, Claude parses intent, and AWS Polly speaks Guardian's reply back — completing a full audio-in / audio-out loop in the browser with no native app required. Frontend: Next.js mobile-responsive web app with WebSocket connection for real-time transaction feed and a live Financial Identity Card showing what Guardian has learned about you.
Challenges we ran into
bunq sandbox authentication was the first wall. RSA key generation, installation tokens, session tokens the SDK abstracts it but the first time through it consumes hours you don't have in a hackathon. Getting the webhook signature flow right and keeping sessions alive across restarts required careful handling.
Making the AI non-annoying was harder than making it smart. The first version of Guardian alerted on almost everything. The real engineering challenge was the scoring model — calibrating thresholds so Guardian is quiet 95% of the time and speaks only when it genuinely matters. A financial AI that cries wolf is worse than no AI at all.
Receipt matching across sandbox transactions required building a fuzzy matcher on amount + timestamp since merchant names rarely match exactly between a physical receipt and a bunq transaction description. Edge cases here were plentiful.
Accomplishments that we're proud of
The full loop working end-to-end: a transaction fires in the bunq sandbox, the webhook hits Guardian, the scoring engine detects an anomaly, Claude generates a personalised nudge referencing the user's actual history, that nudge is spoken aloud by Guardian, the user responds by voice, and money moves in their bunq account — all within a few seconds, all through a browser with no app install required.
The receipt pipeline going from photo to payment request in under 10 seconds, with Claude correctly extracting itemised details from a crumpled, angled receipt photo in Dutch.
What we learned
That the hardest part of AI products is knowing when not to fire. The model is easy. The threshold calibration is everything. Financial AI that over-alerts is not a helpful tool — it's a stressful one. The scoring engine went through more iterations than any other component.
That bunq's API is genuinely deep. Most hackathon projects use three endpoints. Guardian uses webhooks, payment history, account listing, pocket transfers, payment requests, and scheduled payments — and there's still more we didn't touch. The infrastructure for building serious financial products on top of bunq is already there.
What's next for bunq Guardian
Travel mode. When Guardian detects transactions in a new currency or country, it automatically recalibrates its baselines for local cost of living, switches its nudge context to travel spending, and proactively briefs the user on their daily burn rate in both local currency and euros. Built specifically for bunq's expat core.
Shared Guardian for joint accounts. Two people, one Guardian — coordinating spending visibility, flagging when the joint account is trending toward a tight month, and suggesting rebalancing contributions based on both income patterns. Predictive intervention. Moving from reactive (a transaction happened) to predictive (you're about to open Thuisbezorgd on a Friday evening and you've hit your food delivery budget). Push-to-device before the order is placed.
Built With
- anthropic
- bunqpythonsdk
- fastapi
- python
Log in or sign up for Devpost to join the conversation.