Skip to content
BankBird
🐦 Demo →
NL EN
🛠️ Vibe Development

Build on top
with AI

BankBird is open-source and built to be extended. On this page you'll find tools, tips and real-world examples for developing the system yourself — with or without deep programming experience.

🤖
🚀

Get set up — what do you need?

Vibe Development works best when you have the right tools ready. Here is everything you need before you start — even if you have never written a line of code.

① Choose your AI coding tool
🤖
Claude Code
claude.ai/code
  • Desktop app + terminal
  • Works with any editor
  • Recommended for beginners
  • Free to get started
💬
ChatGPT / Codex
chatgpt.com
  • In the browser, no install needed
  • Codex works via the API
  • Handy if you already have ChatGPT Plus
  • Free tier available

Either works great with BankBird. Pick what you already know, or try Claude Code if you're starting from scratch.

② Create an empty project folder

First create an empty folder on your computer (e.g. on your desktop or in your Documents folder). Then open it in your AI tool.

🪟
Windows
Right-click your desktop → New → Folder. Name it bankbird. Drag the folder into Claude Code, or open it via File → Open Folder.
🍎
Mac
Open Finder → navigate to where you want it → Cmd+Shift+N for a new folder. Open the folder in Claude Code via the menu or by dragging it in.
🐧
Linux
Run mkdir ~/bankbird in your terminal, then open the folder in your AI tool.
③ You're ready to install!

You have an AI tool and an empty project folder. Now follow the installation steps to get BankBird up and running.

Go to installation →
🛠️

What is Vibe Development?

Vibe Development means using AI — like Claude or ChatGPT — to add new features to BankBird yourself, without needing to be a seasoned PHP developer. You describe what you want, the AI writes the code, and you refine it until it works.

✅ What works well
  • Adding a new bank importer
  • Building extra report filters
  • Custom export formats
  • Integrations with other tools
⚠️ What to watch out for
  • Modifying core files
  • Changing database schemas
  • Touching authentication
  • Updates may overwrite your changes
🏦

Real-world example: build your own bank importer

Say ABN AMRO isn't supported in BankBird yet, but you have an ABN account. You can build the importer yourself. Here's how to tackle it with AI.

1
Download your bank statement
Go to your banking app and download a CSV or MT940 export of your transactions. Save the file — you'll use it as a sample in your prompt.
2
Give your AI the context
Open Claude (claude.ai) or ChatGPT (chatgpt.com) and give it some background. Use the prompt below as your starting point.
prompt for Claude / ChatGPT
Ik werk met BankBird, een Laravel 11 + Filament 5 applicatie
voor persoonlijke financiële administratie. Ik wil een nieuwe
bankimport toevoegen voor ABN AMRO CSV-bestanden.

Het ABN AMRO CSV-formaat heeft deze kolommen:
[plak hier de eerste 3-5 regels van je CSV-bestand]

De bestaande ING CSV-import staat in:
app/Services/Importers/IngCsvImporter.php

Maak een vergelijkbare klasse AbnAmroCsvImporter die:
- hetzelfde ImporterInterface implementeert
- de ABN AMRO kolomnamen correct mapt
- het bedrag omzet naar een positief/negatief getal

Geef mij de volledige PHP-klasse terug.
3
Put the file in the right place
Save the AI-generated class at app/Services/Importers/AbnAmroCsvImporter.php. BankBird auto-discovers importers as long as they implement ImporterInterface.
4
Test with a small file
In the admin panel, go to Imports > New and upload a small CSV (5–10 rows). Check that the transactions are read in correctly.
⚠️

Conflicts with future updates

🔔
Good to know: if you build your own ABN AMRO importer and we later ship an official one, the two can collide — resulting in duplicate or incorrect imports.
📌 Scenario: Your importer vs. the official version

Say you've built AbnAmroCsvImporter.php yourself. After an update we release an official version. You have three options:

Deactivate your version
Delete or rename your own importer. The official version takes over. Choose this if the official version does everything you need.
🔀
Keep your version
Rename your class to e.g. MyAbnAmroCsvImporter so there's no clash. Both importers live side by side.
🔧
Merge them
Compare your version with the official one and take the best of both. Use a diff tool or ask Claude or ChatGPT to merge the two versions for you.
💡 Tip: just ask Claude or ChatGPT
prompt
Ik heb zelf een ABN AMRO importer gebouwd [plak jouw code].
BankBird heeft nu ook een officiële versie uitgebracht [plak
nieuwe code]. Welke aanpak raad je aan? Zijn er conflicten?
Kun je de beste versie samenvoegen?
🔄

Git & updates — how does that work?

BankBird is updated via Git. If you've made a lot of custom changes, a git pull can cause trouble. Here are the three most common approaches:

🟢 Approach 1: New files only, core untouched
Low risk
The safest option. Only add new files (new importers, widgets, etc.) without modifying existing ones. BankBird updates won't overwrite your additions.
🟡 Approach 2: Fork on GitHub
Medium risk
Fork the BankBird repository on GitHub. Make your changes on your own fork. Pull in updates via git merge upstream/main and resolve conflicts in your own branch.
🔴 Approach 3: Direct changes without a fork
High risk
You edit core files without forking. Updates will overwrite your changes on a clean git pull, or block the update entirely if there are conflicts. Always back up first.
💡
Golden rule: the more you work with new files rather than editing existing ones, the smoother updates will be. Lean on Laravel's extension points: create new Service classes, new Filament pages, new Importers.
🔒

How is your IBAN kept safe in the database?

An IBAN is sensitive financial information. BankBird stores it encrypted using Laravel's built-in encryption. Here's the full picture — from database to PHP code.

1. What is literally stored in the database?
database · accounts table
-- Wat je ziet als je de database opengooit:
id  | name            | iban
----+-----------------+---------------------------------------------------
1   | ING Betaalrek.  | eyJpdiI6IkZwVXZGME...(lange versleutelde string)
2   | Spaarrekening   | eyJpdiI6InhkdDFQQ3...(lange versleutelde string)

-- Je echte IBAN (NL59INGB...) is nergens in klare tekst zichtbaar.
2. How does the encryption work in code?
app/Models/Account.php
protected function casts(): array
{
    return [
        'iban' => 'encrypted', // ← Laravel versleutelt automatisch
        'type' => AccountType::class,
        'balance' => 'decimal:2',
    ];
}

// Opslaan: Laravel versleutelt automatisch
Account::create([
    'iban' => 'NL59INGB0653592555',  // jij geeft klare tekst
]);

// Uitlezen: Laravel ontsleutelt automatisch
$account = Account::find(1);
echo $account->iban; // → 'NL59INGB0653592555' (klare tekst)
🔑 The key: APP_KEY

Encryption is driven by the APP_KEY in your .env file. This is a unique 32-byte key that Laravel generates at installation. Keep it safe — without it you cannot read your own data.

.env
APP_KEY=base64:jouw-unieke-sleutel-hier...

# Nieuwe sleutel genereren (bij eerste installatie):
php artisan key:generate
📋 Security summary
IBAN is stored encrypted — not readable in the database
Encryption happens automatically via Laravel's encrypted cast
Decryption is also automatic — you always work with plain text in code
Every installation has a unique APP_KEY (AES-256-CBC encryption)
⚠️ Lose your APP_KEY and you can no longer read your encrypted data
⚠️ Back up your .env file regularly and store it somewhere safe
🗂️

Backup as a data source for development

The backup feature (accessible via the user menu → Backup) exports all your data as a structured JSON file. For vibe-developers it's a goldmine: you see exactly how the data structure looks, can test locally with real data, and spin up a new installation in seconds.

// bankbird-backup-2026-05-05.json
{
"version": 1,
"created_at": "2026-05-05T...",
"accounts": [ ... ] // IBAN, naam, type
"categories": [ ... ] // hiërarchisch, met children[]
"merchants": [ ... ] // inclusief match_patterns[]
"transactions": [ ... ] // alle velden, refs op ID
}
🧪 Local testing
Download your backup and use it as test data when building a new parser or feature. No fake data needed.
🚀 Populate a new installation
Setting up BankBird on a new server? Import your backup and all your categories, merchants and transactions are immediately in place.
🔍 Inspect the data structure
Open the JSON in VS Code or a JSON viewer and see exactly which fields each entity has — a handy reference while writing code.
📤 Build custom exports
Use the backup as the foundation for your own export scripts. All data is there, in a predictable format.
⚠️
Note: the backup file contains sensitive data (account numbers, transactions). Treat it as private and do not store it in a public folder or Git repository.

Ready to build?

Browse the technical documentation for architecture and service interfaces, or open an issue on GitHub if you get stuck.