Mankeu is a modern, tactile personal finance management application featuring an elegant Neumorphic (Soft UI) design system. Designed to help you track income, expenses, budgets, savings, and debts with ease, Mankeu delivers a satisfying, sensory, and clean physical aesthetic in both Light and Dark modes.
- 🎨 Tactile Neumorphic UI (Soft UI): Crafted with extruded surfaces, inset wells, and subtle light play that simulate real physical controls without harsh borders or distracting visual noise.
- 🌓 Calibrated Dark & Light Modes:
- Light Mode: Soothing monochromatic cool grey (
#E0E5EC) with smooth ambient shadows. - Dark Mode: Deep modern slate (
#13161c) with soft, low-glare depth highlights tailored for nighttime usage.
- Light Mode: Soothing monochromatic cool grey (
- ⚡ Keyboard-First Navigation: Global Command Palette (
Cmd+K/Ctrl+K) for lightning-fast page switching and quick actions.
- 📊 Interactive Dashboard: Real-time overview of your financial health, net worth, cash flow trends, and budget health pulse.
- 💰 Flexible Budgeting: Set spending limits per category with versatile duration options:
- Bulan Ini (Single Month): Track budgets for a specific month.
- Rentang Bulan (Multi-Month Range): Set budgets spanning 1 to 10+ months (e.g. 3, 6, 10, 12 months) with automated progress indicators.
- Tahunan (Full Year): Set annual limits active throughout the calendar year.
- Selamanya (Forever / Recurring): Set-and-forget recurring monthly budget rules.
- 💳 Transaction Tracking: Easily log, categorize, and filter transactions with custom date ranges, bulk delete, and swipe gestures.
- 📉 Visual Analytics: Deep-dive spending analytics with interactive Recharts area charts, category pie breakdowns, and month-over-month trend insights.
- 🎯 Savings & Goals: Create target savings funds with deposit and withdrawal histories.
- 🤝 Debts & Loans: Track payables (debts) and receivables (loans to others) with partial payment logging.
- 🏷️ Category & Account Management: Organize multiple wallets/bank accounts and customize income/expense/saving categories.
- 🔐 Secure Authentication & Session: JWT-based authentication and Google Login (GIS) support.
- 🌐 Internationalization (i18n): Full multi-language support (English & Indonesian) with customizable currency formatting (
IDR,USD). - 📱 Mobile & PWA Ready: Optimized responsive mobile experience with Capacitor Android build support.
| Dashboard | Transactions |
|---|---|
![]() |
![]() |
| Savings & Goals | Accounts |
![]() |
![]() |
| Debts | |
![]() |
- Framework: React (Vite)
- Styling: TailwindCSS, Vanilla CSS (for custom animations/effects)
- Icons: Lucide React
- Charts: Recharts
- Authentication: Google Identity Services (GIS)
- State Management: Zustand (Auth/Theme), TanStack Query (Data Sync)
- Runtime: Bun
- Framework: Express (TypeScript)
- Database: MySQL
- ORM: Drizzle ORM
- Validation: Zod
For those who prefer to use a hosted server instead of setting up their own backend, you can use the following URL: https://api-finance.noma.my.id
- Runtime: Bun (v1.0+)
- Database: MySQL Server
- Android Support: Java SDK 21 (for building APKs)
git clone https://github.com/itsmefdil/mankeu.git
cd mankeuThe backend is built with Express and runs on Bun.
cd backend
# Install dependencies
bun install
# Configure Environment
cp .env.example .envYou need to generate secure keys for the application.
# Generate a random 32-byte hex string for SECRET_KEY and ENCRYPTION_KEY
openssl rand -hex 32Edit your .env file and update the following:
MYSQL_DATABASE_URL: Your MySQL connection string (e.g.,mysql+asyncmy://user:pass@localhost:3306/mankeu)SECRET_KEY: The generated hex string from above.ENCRYPTION_KEY: Another generated hex string (must be 32 bytes hex).
# Push database schema changes
bun run db:migrate
# Start the development server
bun devBackend API URL: http://localhost:8000
The frontend uses React (Vite) and Bun.
cd frontend
# Install dependencies
bun install
# Configure Environment
cp .env.example .env
# [Action Required] Edit .env and set VITE_GOOGLE_CLIENT_ID
# Start Development Server
bun devFrontend URL: http://localhost:5173
Easily deploy the full stack (Frontend, Backend, Database) using Docker Compose.
# From the project root
docker compose up -d --buildServices:
- Frontend:
http://localhost:3088 - Backend:
http://localhost:8088(Internal port 8000) - Database:
mankeu_db(Internal port 3306)
Note: Data is persisted in the db_data volume.
You can build the Android APK without Android Studio using the provided CLI tools.
Ensure you have Java 21 installed and the Android Command Line Tools set up.
See ANDROID_BUILD.md for detailed environment setup instructions.
Use the helper script to sync the frontend and build the debug APK.
# Make the script executable
chmod +x build-android.sh
# Run the build script
./build-android.shOutput:
The APK will be generated at:
frontend/android/app/build/outputs/apk/debug/app-debug.apk
This project is licensed under the MIT License.




