Skip to content
MK
Work / 01

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.app

Coinest

Laravel 11 Inertia + React FastAPI Flutter

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

01 Dashboard for balances, cash flow and spending breakdown
02 Income/expense entries and transfers between cards
03 Split bills and debts with partial settlement
04 Savings, investments and monthly budgets
05 Google sign-in (OAuth 2.0 + PKCE) and a notification on every login
06 Superadmin panel: users, per-menu roles & permissions, security log, integrity audit
Architecture
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