Inspiration

People don't lack discipline, they lack visibility. A €300 jacket doesn't feel like 20 days of your Tokyo trip until something computes that for you in real time. Most banking apps tell you what you spent. We wanted to show users what they're about to spend, in terms that actually mean something to them.

What it does

bunq Horizon turns any potential purchase into a real-world tradeoff. Snap a photo, enter the price, and the AI shows how many days it costs your savings goal, how it stacks up against your habits, and its carbon footprint. Two clear next steps: Plan it (auto-drafted transfers that keep your goal on track) or Not now (logged as a quiet skip, no nagging).

How we built it

A multimodal AI pipeline behind a clean React mobile interface.

  • Vision: Claude Sonnet 4.6 identifies items from photos and classifies them into spending categories.
  • Agentic reasoning: A Claude agent with five custom tools queries the user's bunq sandbox transactions, computes savings velocity, forecasts goal dates, and finds the most relevant behavioral pattern (e.g. "4th clothing purchase this month").
  • Math layer: Median-based discretionary velocity over 60 days, trimmed for outliers, computed against real bunq sandbox transactions.
  • Frontend: React + Vite + Tailwind, mobile-first, deployed on Vercel.
  • Backend: FastAPI on Render, with full RSA-signed bunq sandbox auth.

Challenges we ran into

  • bunq's sandbox has no native savings-goal primitive, so we modeled goals as a second monetary account and built the math layer ourselves.
  • No native draft-payment endpoint either, so we used RequestInquiry as the "draft transfer" primitive.
  • Strict API rate limits forced us to build a transaction-cache layer with smart fallbacks.
  • The agent's brand voice (no judgment, no "you should") had to be enforced through prompt engineering, not hardcoded strings.

Accomplishments we're proud of

  • A genuinely agentic backend, not a single-prompt wrapper. The agent makes 3-4 tool calls per request and composes them differently depending on the purchase.
  • Three-tier graceful degradation: live bunq data → cached snapshot → hardcoded fallback. The demo never breaks.
  • Brand alignment with bunq's "bank of The Free" identity: the app informs, never judges. Drafts only, never auto-executes.

What we learned

  • Vision-as-OCR is unreliable in production. We deliberately don't extract price from photos and instead let users type it. Reliability beats clever automation.
  • Agentic tool-use beats single-shot prompting for any task that needs multi-step reasoning over user-specific data.
  • bunq's API is well-designed but opinionated. The constraints forced better product decisions.

What's next for bunq Horizon

  • Wire the Plan flow to create real bunq RequestInquiry objects so users see drafts in their bunq app.
  • Webhook-driven re-forecasting on every payment that lands.
  • A cumulative carbon ledger alongside the spending ledger.
  • Voice input for hands-free decisions at the point of sale.

Built With

  • agentic-ai
  • anthropic-api
  • bunq-api
  • claude
  • claude-sonnet-4.6
  • fastapi
  • javascript
  • multimodal-ai
  • python
  • react
  • render
  • rsa-cryptography
  • tailwindcss
  • vercel
  • vite
Share this project:

Updates