Coinest
A personal finance tracker that stays in sync across web and Android.
- Role
- Full stack — web, API, Android
- Context
- Personal product
- Year
- 2026
- Stack
- Laravel 11 · Inertia + React · FastAPI · Flutter · PostgreSQL · Tailwind CSS
Coinest
Overview
Cards, transactions, savings, budgets, split bills and debts in one system. The Laravel web app and the Android app share one database, so every change shows up on every device immediately.
Problem
Personal finance records easily drift between phone and laptop, and balances can change without a trace if someone edits the database directly. The system had to guarantee balances never go negative and every change can be audited.
Solution
Three apps share one PostgreSQL database: Laravel + Inertia React on the web, a FastAPI service and a Flutter Android app. Every transaction and card balance is signed with HMAC-SHA256 using a canonical format that is identical in PHP and Python, then audited nightly. Outgoing money is checked under a row lock (SELECT … FOR UPDATE), so balances can never go negative.
Features
Browser ──session──► coinest-app (Laravel 11 + Inertia React) ──┐
├──► PostgreSQL
Android ──JWT──────► coinest-api (FastAPI) ─────────────────────┘
HMAC-SHA256 per transaksi & saldo kartu — kunci sama di Laravel dan FastAPI
Audit integritas terjadwal: php artisan coinest:integrity (03:00)
Next project
Smartend