Finance is a tool for managing personal and shared finances. It allows users to create vaults where they can track payments, manage products, and categorize expenses. Users can invite others to their vaults to collaborate. The app provides detailed statistics, such as total income and expenses, and allows users to export transactions to a .CSV file. With currency conversion and a design optimized for mobile devices, Finance makes it easy to manage finances on any device. The backend is built with Kotlin and offers a REST API, while the frontend uses Next.js with TypeScript. Data is securely stored in a PostgreSQL database.
- A Vault is a central place for managing:
- Members
- Transactions
- Recurring transactions
- Products
- Categories
- Users can create multiple vaults and automatically become members with owner roles
- Create and manage products and categories for easy reuse when adding transaction records
- Each product that has assigned category will have a label next to its name
- Create detailed transactions, with the ability to:
- Specify description, currency, transaction method and type of transaction
- Add existing products to transactions
- Manage existing transactions
- Schedule recurring transactions to automate transactions
- Easily export transactions to a .CSV file for offline access and analysis
- Import transactions from a .CSV file to quickly add multiple transactions by mapping columns to fields
- View various statistics, including:
- Total amount of transactions
- Total income and expenses over specific periods
- Invite new users to vaults
- Setup two-factor authentication for security
- Verify accounts via email
- Change avatar, username, email and password
- Manage existing vault members and assign roles
- Customize settings for each vault to suit your needs
- Change vault name, currency and default transaction method
- Delete vaults and all associated data
- View real exchange rates to display financial data in different currencies
- Exchange rates are displayed based on currency set in vault settings
- The application follows a mobile-first approach, ensuring full responsiveness and accessibility on all devices
- The backend provides access to other infrastructure elements, such as the database, and offers a REST API for clients.
- The frontend consists of a dashboard accessible via a website.
- Language: TypeScript
- Framework: Next.JS
- Default port: 3010
- The database stores all data required for the application to function.
- Management System: PostgreSQL
- Migration Files: View schema
- The storage system is used to store files, such as user avatars.
- Service: Amazon S3
- Client: MinIO
- Test client: LocalStack
- The mail system is used to send emails to users, such as verification emails.
- Client: MailHog
SERVER_PORT
- Port on which server will be runningCLIENT_URL
- Frontend URLDATABASE_URL
- Database JDBC URLDATABASE_USERNAME
- Database usernameDATABASE_PASSWORD
- Database passwordNEXT_PUBLIC_API_URL
- Backend URLMAIL_HOST
- SMTP server hostMAIL_PORT
- SMTP server portMAIL_USERNAME
- SMTP server usernameMAIL_PASSWORD
- SMTP server passwordMAIL_FROM
- Email address from which emails will be sentSTORAGE_ACCESS_KEY
- S3 access keySTORAGE_SECRET_KEY
- S3 secret keySTORAGE_REGION
- S3 regionSTORAGE_ENDPOINT
- S3 endpoint
1. Pull images from Docker Hub
docker pull zrdzn/finance-backend:latest
docker pull zrdzn/finance-frontend:latest
2. Configure .env
file to your needs
3. Run images
docker run -d --name finance-backend -p 8080:8080 --env-file .env zrdzn/finance-backend:latest
docker run -d --name finance-frontend -p 3010:3010 --env-file .env zrdzn/finance-frontend:latest
- You can access the Swagger UI for detailed API documentation at
<backend-url>/swagger-ui.html
. - Additionally, an OpenAPI specification is available at
<backend-url>/v3/api-docs
for integration and development purposes.
To build the backend from source, you can follow these simple steps:
1. Clone the repository:
git clone https://github.com/zrdzn/finance.git
cd finance/finance-backend
2. Build the backend using Gradle:
./gradlew bootJar
- This project is licensed under the MIT License - see the LICENSE