Lewati ke konten

2026Sendiri, ketiga platformFull-stack

Personal Finance Tracker

Satu produk, tiga klien: API Go, web React, dan app Flutter. ~31.000 baris, dikerjakan sendirian.

Personal Finance Tracker

Ringkasan

Pencatat keuangan pribadi dan kelompok yang saya bangun utuh untuk tiga platform: REST API dengan Go 1.25 dan Fiber di atas PostgreSQL, klien web dengan React 19 dan Redux Toolkit, serta app mobile dengan Flutter dan Riverpod. Totalnya sekitar 31.000 baris. Layer repository-nya di-generate dari SQL pakai sqlc, bukan ditulis tangan dan bukan disembunyikan di balik ORM. Autentikasi memakai JWT access dan refresh token, dan manifest Kubernetes-nya punya liveness serta readiness probe yang sungguhan. Fitur AI insight memanggil Google Gemini secara terjadwal untuk membaca pola pengeluaran — dibuat dengan feature flag, timeout, dan prompt yang diberi versi, serta ditutup unit test. Seluruh stack menyala dengan satu perintah Docker Compose: PostgreSQL, API, Vite dev server, reverse proxy nginx, dan Adminer.

Masalahnya

Bagian sulitnya bukan kodenya, tapi satu pertanyaan pemodelan: waktu seseorang menabung Rp 500.000, apakah uang itu keluar dari saldonya? Kalau dicatat sebagai pengeluaran, laporan pengeluaran bulanan jadi bohong — uangnya tidak pergi ke mana-mana, cuma pindah tempat. Salah mencatatnya, dan setiap saldo, setiap laporan, dan tiga antarmuka berbeda mewarisi kesalahan itu.

Yang saya kerjakan

Saya menulis dokumen desainnya lebih dulu dan menuntaskan pertanyaan itu di awal: tabungan adalah transfer antar kantong, bukan pengeluaran. Saldo total tetap utuh dan laporan pengeluaran tetap jujur. Keputusan tunggal itu lalu dirilis terkoordinasi di ketiga repo, dengan commit yang bersesuaian di Go, React, dan Flutter. Di sisi rekayasa, sqlc menjaga layer data tetap type-safe, sembilan Redux slice di frontend diuji terpisah lewat empat belas file Vitest, dan nginx menyatukan semuanya jadi satu origin saat pengembangan supaya CORS tidak pernah jadi kelas bug yang perlu ditelusuri.

Isi pengerjaannya

  • Satu API melayani klien web React dan app mobile Flutter
  • Tabungan dimodelkan sebagai transfer, jadi saldo tetap jujur
  • Layer repository type-safe di-generate dari SQL pakai sqlc
  • Insight Gemini terjadwal dengan feature flag, timeout, versi prompt
  • JWT access dan refresh token, hashing password bcrypt
  • Keuangan kelompok, cicilan, kalender, dan laporan bergrafik
  • 14 file Vitest menutupi 9 Redux slice
  • Stack lokal lima service dalam satu perintah Docker Compose

Pertanyaan tentang proyek ini

Apa itu Personal Finance Tracker?

Aplikasi keuangan pribadi dan kelompok yang dibangun Jalu Pradipta sendirian untuk tiga platform: REST API dengan Go, aplikasi web dengan React, dan aplikasi mobile dengan Flutter — sekitar 31.000 baris.

Bagaimana aplikasi ini mencatat tabungan?

Tabungan dicatat sebagai transfer antar kantong, bukan pengeluaran, sehingga saldo total tetap utuh dan laporan pengeluaran bulanan tetap jujur di ketiga klien.

Aplikasi ini dibangun dengan teknologi apa?

Go 1.25 dengan Fiber, PostgreSQL, dan sqlc di backend; React 19 dengan Redux Toolkit di web; Flutter dengan Riverpod di mobile; ditambah manifest Kubernetes dan insight pengeluaran terjadwal dari Google Gemini.

Stack

  • Go 1.25
  • Fiber
  • PostgreSQL
  • sqlc
  • React 19
  • Redux Toolkit
  • Flutter
  • Kubernetes
  • Google Gemini