Salah satu hal yang sulit untuk gue lakukan sampai hari ini adalah mengatur uang. Meskipun gue sudah melakukan budgeting setiapbulannya menggunakan pendekatan zero-based budgeting ala-ala tapi gue tidak memiliki pencatatan untuk setiap transaksi yang gue lakukan dan sayangnya melihat riwayat Mutasi Rekening hanya berlaku untuk 7 hari (I know about myBCA and don’t tell me about how cryptocurrencycan fix that).

Ambil contoh, misal gue ada budget bernama “gopay” dengan batas 3jt per-bulan. Ini harus gue urai lagi, karena terkadang gue pakai layanan GoRide; GoCar, GoTagihan, GoPulsa, dan si brengsek GoFood. Sedangkan sumber akunnya masih sama: GoPay. Disamping itu gue menggunakan GoPay untuk sumber dana di akun Apple gue plus untuk melakukan topup dana ke salah satu *exchange *juga.

Riwayat transaksi tersebar dimana-mana dan tidak *centralized *sehingga mempersulit untuk pelacakan.

Gue sudah menjalankan *instance *Firefly III sejak akhir 2020 di *server *rumah gue dan sayangnya belum pernah gue sentuh kecuali sampai ke proses pembuatan akun karena sebelumnya catatan keuangan gue lumayan berantakan. Dan pada bulan ini gue dedikasikan akhir pekan gue untuk merapihkan catatan keuangan gue sekaligus untuk mempermudah pelacakan transaksi masuk/keluar yang gue lakukan sekalipun untuk membeli telor gulung 10rb (thanks to Apple Shortcuts).

Dan karena gue buruk dalam matematika sekaligus gue tidak terlalu tertarik menulis menggunakan buku fisik dan pulpen, gue menggunakan aplikasi Firefly III untuk melakukan pencatatan keuangan gue.

Jika lo belum/kurang familiar dengan aplikasi Firefly III, inilah alasan mengapa gue menerbitkan tulisan ini: untuk membantu lo mengenal dan memahami aplikasi tersebut. Markicob?

Firefly III at a glance

Firefly III adalah aplikasi web yang ditulis menggunakan PHP, menggunakan RDBMS seperti MySQL/MariaDB/Postgres untuk menyimpan datanya dan Redis untuk menyimpan data ephemeral.

Tampilan utama (dasbor) nya adalah seperti ini: Ada beberapa terminologi utama yang perlu diketahui yang mungkin sudah familiar di kehidupan nyata, yakni:

  • Accounts
  • Transactions
  • Budgets
  • Bills
  • Piggy Banks

Dan juga ada yang opsional seperti Automation dan Classification yang akan kita bahas sedikit nanti. Jika sudah memiliki/mendaftar akun di Firefly III, akan ada 3 akun (rekening) yang terbuat secara otomatis:

  • Asset accounts (default)
  • Asset accounts (savings)
  • Cash accounts

Misal lo menggunakan rekening BCA sebagai rekening utama, berarti asset accounts (default) tersebut adalah BCA dan yang savings nya adalah BCA savings account. Jika lo misalnya tidak menggunakan rekening berbeda untuk menabung (misal seperti tidak menggunakan BCA Tabunganku) di banyak kasus rekening yang akan sering digunakan adalah savings account.

Jika sudah sedikit terbayang tentang akun (rekening) ini, mari kita bahas lebih dalam tentang penggunaan akun ini yang nantinya akan gue pakai kata “rekening” aja biar lebih gampang.

Accounts (rekening)

Setidaknya ada 4 jenis akun yang ada di Firefly III:

  • Asset accounts
  • Expense accounts
  • Revenue accounts
  • Liabilities

Khusus untuk asset accounts sudah kita bahas sedikit, intinya, tentang rekening-rekening yang digunakan untuk “menyimpan”.

Expense accounts adalah untuk rekening yang digunakan untuk “pengeluaran”.

Revenue accounts adalah untuk rekening yang digunakan untuk “pemasukan”.

Liabilities ini rekening opsional, katanya sih digunakan untuk hal-hal yang spesifik seperti beasiswa misalnya.

Oke, sebagai gambaran, misal ada transaksi “gajian Feb 2020”. Berarti, ada transaksi dari Revenue accounts (let’s say “BCA (kantor)” ke Asset accounts (BCA savings account). Diagramnya misal seperti ini: Lalu gue ingin topup GoPay, berarti ada transaksi dari Asset accounts ke Expense accounts: Jika gue mau wd dari Trakteer/Saweria ke GoPay, harusnya diagramnya menjadi seperti ini: Jika berpikiran sama, harusnya lo lumayan mengerti tentang penggunaan accounts ini. Sebagai pelengkap, berikut contoh tentang Asset; Expense, dan Revenue accounts:

  • BCA: Asset
  • BCA savings: Asset
  • Exchange: Asset
  • GoPay: Expense
  • Paypal: Expense
  • BCA (kantor): Revenue
  • Trakteer: Revenue
  • Ko-fi: Revenue

Dan berikut halaman Accounts di aplikasi Firefly III:

Transactions

Ada 3 jenis transaksi yang ada di Firefly III:

  • Expenses
  • Revenue/income
  • Transfers

Yang harusnya mudah dipahami.

Transfers ini sederhananya “pindah buku” antar rekening internal. Misal, jika ingin transfer 3,000,000.00 dari BCA (source account) ke Jenius (destination account), transaksi tersebut jenisnya adalah “transfers” dan sedangkan biaya admin 5,000.00 masuknya adalah ke expenses. Kabar baiknya adalah jika lo bingung kapan pakai Expenses/Transfers, kalo lo melakukan expenses dari rekening internal lo ke rekening internal lo yang lain, Firefly III akan mendeteksinya sebagai “transfers”. Begitupula bila lo melakukan transfer tapi dari rekening lo ke rekening lain (expenses account) maka dia akan mendeteksinya sebagai “withdraw/expense”.

Budgets

Ini bagian favorit gue!

Dalam zero-based budgeting berarti sederhananya semua dana yang ada di rekening utama harus menjadi nol bagaimanapun caranya, dan ini bukan hal yang relatif sulit khususnya untuk yang pemasukannya memenuhi UMR hahaha.

Contoh budgets yang gue gunakan adalah:

  • Rokok
  • Kopi
  • Investasi
  • Nabung
  • Makan
  • Jajan
  • Belanja
  • Bisnis
  • Hiburan
  • Edukasi
  • Kosan
  • Misc

Yang mana ada yang disandingkan denga “Bills” seperti bayar sewa kos (Kosan), listrik (Kosan), Apple Music (Hiburan), DigitalOcean (bisnis), dsb.

Ummmm untuk Misc anggap aja salah satunya adalah “pacaran” hahaha ataupun hal-hal lain yang kurang efektif untuk dibuat budget seperti keperluan “meminjamkan uang” dan “traveling” misalnya.

Bills

Awal gue mengurangi berlangganan terhadap internet services yang pernah gue gunakan adalah ketika gue mengumpulkan daftar tagihan bulanan gue. Bills disini untuk transaksi (ehm, tagihan) yang bersifatnya berkala, baik bulanan seperti bayar sewa kos dan hosting ataupun tahunan seperti perpanjang alamat domain dan iuran kartu kredit.

Selain untuk yang berkala, bisa juga untuk yang jenisnya “upcoming” namun tidak berkala seperti pelunasan misalnya.

Kunci dari bills ini adalah untuk melakukan Automations dan pengingat akan angka yang harus dibayar. Misal untuk transaksi bayar 80,000/bulan untuk sewa VPS di IDCloudHost.

Ketika membuat Bills, secara otomatis akan membuat Rules juga untuk mendeteksi apakah “tagihan untuk X pada bulan Y” sudah terbayar.

Misal, gue membuat Expense transactions “IDCloudHost” dengan nilai budget “bisnis”. Rules yang paling inti adalah ketika jumlah uang yang gue keluarkan sekitaran 80,000-100,000 (spend limit bulanan gue 100,000 di IDCloudHost dan 80,000 adalah fixed price nya) dan di deskripsi transaksinya ada tulisan “IDCloudHost” berarti tagihan untuk bulan tersebut akan dianggap sudah terbayar tanpa perlu secara manual seperti melakukan centang di checkbox!

Piggy Banks

Ini sederhananya adalah seperti “celengan” untuk mengumpulkan dana untuk tujuan tertentu menggunakan rekening tertentu, let’s say misalnya untuk… ehm, menikah. Disitu gue menggunakan rekening BCA savings account sebagai rekening sumbernya.

Untuk menambahkan dana ke Piggy Banks, cukup klik tombol + disamping progress bar, dan dana yang bisa dimasukkan batasnya adalah maksimal dana yang ada di rekening sumber. Disitu ada indikator sudah berapa persen progress yang lo lakuin (anjay), berapa dana yang sudah terkumpul, dan tersisa berapa lagi dana yang harus dikumpulkan.

Kesimpulan

Gambaran besar penggunaan Firefly III untuk seseorang yang hidupnya bergantung dengan gaji, kurang lebih diagramnya seperti ini: Perlu diingat bahwa transaksi Asset -> Asset akan dianggap sebagai Transfers yang berarti tidak memengaruhi data Balance.

Dan karena Firefly III bukanlah aplikasi untuk Stock/portfolio management, jadi untuk perhitungan keuntungan/kerugian dari asset lain yang dimiliki tidak bisa dilakukan disini.

Catatan tambahan

Salah satu hal yang membuat gue sulit memahami dalam menggunakan Firefly III pertama kali adalah konsep “Double-entry bookkeeping” yang sederhananya:

  • Lo dapet duit, orang lain (i.e: kantor) kehilangan duit
  • Lo keluarin duit, orang lain (i.e: Starbucks) mendapatkan duit

Proses pencatatan yang melibatkan dua pihak (rekening) tersebut sebelumnya lumayan sulit dimengertiuntuk gue terlebih karena gue tidak memiliki latar belakang apapun di akuntansi.

Anyway tujuan gue menerbitkan ini adalah untuk memperkenalkan Firefly III ke lebih banyak peminatnya khususnya bagi yang ingin serius mengatur keuangan pribadinya karena gue rasa aplikasi ini sangat membantu (and maybe you can consider sponsoring the maintainer like I used to!).

Penutup

Hal utama yang perlu diketahui yakni Firefly III adalah sebuah aplikasi web dinamis yang membutuhkan basis data untuk menyimpan datanya. Sejauh yang gue tahu tidak ada versi “cloud” nya yang alias versi aplikasi yang dijalankan oleh orang lain yang bisa diakses melalui jaringan internet.

Firefly III ber-lisensi AGPL-3.0, sumber terbuka, dan sangat mudah untuk dijalankan sendiri (self-host) khususnya bila menggunakan Docker. Hanya butuh 2 container utama (fireflyiii/core dan database) untuk menjalankan aplikasinya. Memory footprint nya pun relatif ringan, rata-rata hanya memakan ~99M dengan peak CPU usage <80% yang kebanyakan idle nya. Dan harusnya tidak masalah jika dijalankan di Raspberry Pi 4 yang memiliki RAM 8GB dan CPU quad core.

Jika lo hanya ingin menggunakan Firefly III hanya dari laptop/komputer secara on-demand, menjalankannya via localhost pun gue rasa tidak masalah selagi lo komputer lo menjalankan reverse proxy dan DNS yang lo pakai bisa resolve domain yang lo maksud (i.e: firefly.home).

Jika ingin self-hosting dan butuh bantuan, feel free to contact me dan gue akan bantu sebisa mungkin. Ini gue seperti kontrak secara tidak langsung dengan Firefly III dengan memberikan support cuma-cuma ke penggunanya hahaha and I’m actually fine with that.

Dan jika ingin menggunakan instance yang berjalan di server rumah gue, bisa kontak gue juga walau gue tidak terlalu merekomendasikannya karena data yang disimpan di database tidak sepenuhnya ter-enkripsi yang berarti gue harusnya bisa tau transaksi-transaksi yang terjadi terkait dengan akun lo. Privasi (dan keamanan) adalah alasan utama gue kenapa gue self-hosting Firefly III dan tidak menggunakan solusi yang ditawarkan oleh alternatif yang menyediakan versi “cloud” nya (SaaS) yang harusnya gue tidak perlu ribet-ribet setup dan maintain. Jika lo untuk saat ini tidak terlalu memusingkan hal itu, feel free to contact me. Akan dengan senang hati gue buatkan akun, gratis, no string attached.

Sebagai penutup, Firefly III hanyalah sebuah tools. Dan tidak ada “real money” yang digunakan di Firefly III karena ini pada dasarnya hanyalah aplikasi pencatatan.

Firefly III tidak memiliki kontrol penuh untuk mengubah cara lo dalam mengatur keuangan melainkan diri lo sendiri, eventually.

Tujuan utama gue menggunakan Firefly III bukanlah untuk menghemat pengeluaran ataupun untuk mengurangi keborosan, melainkan untuk mencatat keuangan gue.

And they did it very well.


Sebagai catatan tambahan, berikut berkas docker-compose.yml gue untuk menjalankan Firefly III:

version: "3"

services:
  fireflyiii:
    restart: always
    image: fireflyiii/core:latest
    environment:
      - APP_KEY= # you can generate with `openssl rand -hex 24`
      - DB_HOST=postgres
      - DB_PORT=5432
      - DB_CONNECTION=pgsql
      - DB_DATABASE=db_name
      - DB_USERNAME=db_username
      - DB_PASSWORD=db_password
      - APP_ENV=production
      - APP_DEBUG=false
      - SITE_OWNER= # fill with your email address, i guess?
      - TZ=Asia/Jakarta
      - TRUSTED_PROXIES=**
    networks:
      - npm # reverse proxy
      - postgres
    volumes:
      - fireflyiii:/var/www/html/upload

  postgres:
    restart: always
    image: postgres:13-alpine
    environment:
      - POSTGRES_PASSWORD=db_root_password
    volumes:
      - postgres:/var/lib/postgresql/data
    networks:
      - postgres
      
volumes:
  fireflyiii:
  postgres:
  
networks:
  npm:
  postgres

Buat database di postgres:

$ docker-compose exec postgres psql -U postgres

postgres=# create database fireflyiii;
postgres=# create user fireflyiii with encrypted password 'your password here';
postgres=# grant all privileges on database fireflyiii to fireflyiii;

Setup reverse proxy (misal pakai Nginx):

location / {
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-Host $host;

  // $forward_scheme = http
  // $server = fireflyiii
  // $port = 8080
  proxy_pass $forward_scheme://$server:$port;
}

Dan jalankan:

$ docker-compose up -d fireflyiii