Expense Manager is a single-user personal finance app built with Laravel, Inertia, and React. The product direction is chat-first money management: fast expense capture, reliable category mapping, statement import cleanup, and auditable balances.
- Laravel 13
- PHP 8.4 in CI
- Inertia Laravel 3
- React 19
- Vite 7
- Tailwind CSS 4
- Bootstrap 5
- SQLite by default for local development and CI
- Prism PHP for AI-assisted chat and categorization workflows
- Manage accounts with opening and current balances.
- Manage parent and child categories for income and expense tracking.
- Create, edit, filter, export, and review transactions.
- Track budgets by category and period.
- Import and reconcile bank statement rows.
- Use AI-assisted categorization and chat-first money workflows as active product lanes.
- Sync data from a private external SQLite database with
php artisan expense:sync.
composer install
npm install
cp .env.example .env
php artisan key:generate
touch database/database.sqlite
php artisan migrate --seed
npm run build
composer testRun the backend, queue worker, and Vite dev server together:
composer run devFor front-end hot reload only:
npm run devInstall PHP dependencies, install JS dependencies, then compile the Vite/React front end:
composer install --no-dev --optimize-autoloader
npm ci
npm run buildUse npm run build any time you change files under resources/js or related assets before deploying. The compiled assets are written to public/build.
Use these commands before opening or merging a PR when practical:
npm run build
composer testGitHub Actions also runs the frontend build, migrations, and PHP test suite on pull requests to main.
The sync command accepts a local SQLite database path. Use your own private database path and keep it out of version control.
php artisan expense:sync --db-path="/path/to/private/expense-data.sqlite" --dry-run
php artisan expense:sync --db-path="/path/to/private/expense-data.sqlite"
php artisan expense:sync --db-path="/path/to/private/expense-data.sqlite" --forceYou can also set EXTERNAL_DB_PATH in your local .env. Do not commit local .env files, private databases, bank statements, machine-specific assistant context, or real financial data.
Expense Manager is in active development. The current priority is the core money-entry workflow: chat-based capture, trustworthy categorization, statement import cleanup, and balance auditability. Broader dashboard and portfolio polish are intentionally secondary until that core workflow is reliable.