-
-
Thumbnail
-
Coach brief with live spend stats, dynamic prompt pills based on real transaction data, ask bar.
-
Stats row, spend rate badge, net wealth + spending mix donut chart, import bank statement button.
-
Goal wizard: 4 financial goal options, Continue button. First screen users see.
-
Penny replies with spending breakdown, shows CTA action card, user/AI bubbles, TTS toggle in header.
Inspiration
Most people have money spread across 3 banks and no clear picture of where it goes. bunq had the infrastructure to fix that. We built the coach layer on top of it. Inspired by how bunq names features like people (Finn, Iris), we created Penny: a voice-first AI money coach that understands your habits, not just your balance.
What it does
Penny reads your real bunq transaction data, categorises spending, and flags the habits most users miss: subscription creep, daily coffee at €90/month, savings sitting in a 0% checking account.
Import a statement from ING, Revolut or any other bank and Penny merges it instantly into one view: net wealth, spending mix, and expense breakdown across all accounts.
Ask Penny anything about your finances. She replies in plain language, out loud via text-to-speech, and ends every answer with a specific actionable call to action. Not "save money" but "skip 2 deliveries this week and hit your buffer 5 weeks sooner."
How we built it
- Backend: Python + Flask connected to the bunq sandbox API for live transaction data
- AI: Claude (Anthropic) with a system prompt that enforces bunq tone, prevents bad CTAs (never suggest cutting rent), and keeps replies to 60-90 words
- Multi-modal: Web Speech Synthesis for voice output, file import for cross-bank statement ingestion
- Frontend: Vanilla JS + CSS, dark bunq-style UI with rainbow gradient identity, mobile-first
Challenges we ran into
- bunq sandbox uses RSA key pairs and a non-standard install flow, getting it right took significant debugging
- Claude prompt engineering was harder than expected. Early replies were too long and suggested cutting rent. Many iterations needed to get tone, length, and CTA logic right
- Deduplicating recurring payments (rent appearing twice in one month) without losing real repeated transactions required careful logic
- Normalising spend categories across banks: ING calls it "Dining Out", we call it "Dining"
Accomplishments that we're proud of
- Penny never tells you to cut your rent
- Voice output sounds like a smart friend, not a bank robot
- Importing a statement from another bank updates every metric on screen in real time: spend rate, badge, accordion, wealth chart
- Full coaching loop: real data, AI insight, voice reply, one-tap action card
What we learned
- Prompt engineering is a product skill. The difference between a generic chatbot and a trusted coach lives entirely in the system prompt
- bunq's API is powerful but the sandbox environment requires patience
- Multi-modal does not have to mean camera or images. Voice output on a financial insight is more useful than reading a wall of text
What's next for Penny the Coach
- Receipt scanning via Claude vision to log cash spending bunq cannot see
- Proactive Monday voice brief: "You have spent 60% of your dining budget by day 3"
- Goal tracking: set a savings target, Penny adjusts advice weekly as the month runs
- Wire the Invest CTA to bunq's savings sub-account API so the action card moves real money, not just suggests it
Built With
- bunq-api
- claude-api-(anthropic)
- flask
- html/css
- javascript
- python
- web-speech-synthesis-api
- webspeachrecognitionapi
Log in or sign up for Devpost to join the conversation.