A modern, full-stack finance application built with Next.js 15, specialized in multi-currency tracking, AI-powered insights, and automated transaction categorization.
- Multi-Currency Support: Track accounts and transactions in any currency (USD, AUD, EUR, etc.) with automatic base currency conversion.
- Account Types: Manage Bank Accounts, Cash, Mobile Wallets, Credit Cards, Savings, and Investments.
- Transaction Handling: Record Income, Expenses, and Transfers between accounts.
- Category Management: Hierarchical categories with custom icons and types.
- Payee Management: Track who you pay or receive money from.
- Smart Categorization: Automatically suggests categories for new transactions based on description and history.
- Natural Language Input: "Lunch 12.85 AUD at KFC" automatically parses into a structured transaction.
- Financial Insights: AI analysis of spending patterns, anomalies, and monthly summaries.
- Chat Assistant: Integrated AI chat to query your financial data and ask questions about your spending.
- Real-time Dashboard: Overview of net worth, recent activity, and spending trends.
- Visual Reports: Charts and graphs for income vs expenses, category breakdowns, and more.
- Savings Goals: Track progress towards financial targets.
- Subscription Tracker: Manage recurring payments and billing cycles.
- Secure Authentication: Powered by Better-Auth with Google OAuth support.
- Cloudflare Turnstile: Bot protection on sign-in and registration forms.
- Data Privacy: Granular control over user data with export and wipe options.
- Framework: Next.js 15 (App Router)
- Language: TypeScript
- Database: PostgreSQL
- ORM: Drizzle ORM
- Styling: Tailwind CSS + Shadcn UI
- Authentication: Better-Auth
- Forms: React Hook Form + Zod
- State Management: TanStack Query
- Charts: Recharts
cp .env.docker.example .env.docker
# Set POSTGRES_PASSWORD and BETTER_AUTH_SECRET to independently generated secrets.
docker compose --env-file .env.docker up --build -dOpen http://localhost:3000. Compose provisions PostgreSQL, runs migrations, and starts the app with persistent database storage. Configure Resend for signup verification and password resets. Add an OpenRouter key to enable the copilot.
See the self-hosting guide for setup, public hosting, configuration, updates and backups.
- Node.js 18+
- PostgreSQL database
- Yarn or NPM
-
Clone the repository
git clone https://github.com/InnvoTechnologies/expenseflow.git cd expenseflow -
Install dependencies
yarn install
-
Set up environment variables Copy the
.env.examplefile to.envand fill in the values -
Run Database Migrations
yarn drizzle-kit migrate
-
Start Development Server
yarn dev # To start the Drizzle Studio on port 3001 yarn drizzle-kit studio --port 3001 --verbose
Open http://localhost:3000 to view the app.
src/
├── app/ # Next.js App Router pages and API routes
├── components/ # Reusable UI components (Shadcn + Custom)
├── db/ # Drizzle schema and database connection
├── hooks/ # Custom React hooks
├── lib/ # Utility functions, auth client, and API helpers
└── server/ # Server-side logic and actions
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the project
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
