A full-stack web application to track your daily expenses, income, and money lent/borrowed โ built with Spring Boot and Angular.
DailySpend is a personal finance tracking app designed to help you take control of your money. Whether you're recording a grocery bill, tracking money you lent to a friend, or monitoring your monthly income, DailySpend keeps it all organized in one place.
The app is built for everyday use โ it's simple enough for beginners yet powerful enough to give you real financial insights through charts and reports.
Why does it exist? Most people struggle to keep track of where their money goes. DailySpend solves this by giving you a clean dashboard, smart categorization, and a people ledger so you always know who owes you (and who you owe).
- ๐ User Authentication โ Secure registration and login with JWT tokens
- ๐ฆ Account Management โ Create and manage multiple accounts (Cash, Bank, Credit)
- ๐ณ Transaction Tracking โ Record three types of transactions:
- Expense โ Money you spent
- Money Given โ Money you lent to someone
- Money Taken โ Money you received from someone
- ๐ฅ People Ledger โ Track balances with individual people (who owes whom)
- ๐๏ธ Categories โ Organize expenses with built-in and custom categories
- ๐ Reports & Charts โ Visual spending trends and category breakdowns
- ๐ Filter & Search โ Filter transactions by type, account, and date range
- ๐ฅ Export to CSV โ Download your transaction history
- ๐ฑ Responsive Design โ Works on desktop and mobile
| Technology | Purpose |
|---|---|
| Java 17 | Programming language |
| Spring Boot 3.x | Backend framework |
| Spring Security | Authentication & authorization |
| Spring Data JPA | Database access layer |
| PostgreSQL | Primary database |
| Flyway | Database migrations (version control for DB) |
| JWT (jjwt) | Secure token-based authentication |
| Maven | Build tool |
| Technology | Purpose |
|---|---|
| Angular 17 | Frontend framework |
| TypeScript | Programming language |
| Angular Material | UI component library |
| ApexCharts | Interactive charts |
| SCSS | Styling |
Before you begin, make sure you have the following installed on your computer:
- Java 17+ โ Download and install JDK 17 or higher
- Node.js 18+ โ Includes npm (needed for Angular)
- PostgreSQL 14+ โ The database
- Git โ To clone the project
- A code editor like VS Code (recommended)
git clone https://github.com/your-username/dailyspend.git
cd dailyspend- Open your PostgreSQL client (e.g., pgAdmin or the terminal).
- Create a new database:
CREATE DATABASE dailyspend;Flyway will automatically create all tables when the backend starts โ you don't need to create them manually!
- Navigate to the backend folder:
cd dailyspend-backend- Create a local configuration file to store your secrets. Create the file:
src/main/resources/application-local.yml
- Paste the following content and update the values:
spring:
datasource:
url: jdbc:postgresql://localhost:5432/dailyspend
username: your_postgres_username # e.g., postgres
password: your_postgres_password # e.g., postgres
jwt:
secret: your_super_secret_key_at_least_32_characters_long
expiration: 864000000 # 10 days in milliseconds
โ ๏ธ Never commit this file to Git! It's already listed in.gitignore.
From inside the dailyspend-backend folder, run:
# On Mac/Linux
./mvnw spring-boot:run -Dspring-boot.run.profiles=local
# On Windows
mvnw.cmd spring-boot:run -Dspring-boot.run.profiles=localYou should see the server start on http://localhost:8080
The first run will take a few minutes as Maven downloads all dependencies.
Open a new terminal and navigate to the frontend folder:
cd dailyspend-frontendInstall dependencies (first time only):
npm installStart the development server:
npm startThe app will open at http://localhost:4200 ๐
-
Register โ Go to
http://localhost:4200/registerand create an account. -
Login โ Sign in with your username and password.
-
Create an Account โ On the Dashboard, add your first financial account (e.g., "My Wallet" โ CASH, "SBI Savings" โ BANK).
-
Add Transactions โ Go to Transactions โ Add Transaction:
- Choose Expense to record spending
- Choose Money Given to record money you lent someone
- Choose Money Taken to record money you received
-
Manage People โ Go to the People section to see balances with each person you've transacted with.
-
View Reports โ Go to Reports to see charts showing your spending trends and category breakdowns.
dailyspend/
โ
โโโ dailyspend-backend/ # Spring Boot backend
โ โโโ src/main/java/com/example/dailyspend/
โ โ โโโ controller/ # REST API endpoints
โ โ โโโ service/ # Business logic
โ โ โโโ repository/ # Database queries
โ โ โโโ entity/ # Database table models
โ โ โโโ dto/ # Data transfer objects
โ โ โโโ config/ # Security & app configuration
โ โ โโโ exception/ # Error handling
โ โ โโโ util/ # Helper utilities
โ โโโ src/main/resources/
โ โ โโโ application.yaml # Main configuration
โ โ โโโ db/migration/ # Flyway SQL migration files
โ โโโ pom.xml # Maven dependencies
โ
โโโ dailyspend-frontend/ # Angular frontend
โ โโโ src/app/
โ โ โโโ core/ # Services, interceptors, guards
โ โ โโโ features/ # Pages (dashboard, transactions, people, reports)
โ โ โโโ layout/ # App shell / sidebar
โ โ โโโ models/ # TypeScript interfaces
โ โ โโโ shared/ # Reusable imports
โ โโโ src/environments/ # Environment configuration
โ โโโ package.json # Node dependencies
โ
โโโ docs/ # Architecture and rules documentation
Screenshots coming soon!
| Page | Preview |
|---|---|
| Dashboard | ![]() |
| Transactions | ![]() |
| People Ledger | ![]() |
| Reports | ![]() |
The backend exposes a REST API. Here are the main endpoints:
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/auth/register |
Register a new user |
| POST | /api/auth/login |
Login and receive a JWT token |
| GET | /api/v1/accounts |
List all accounts |
| POST | /api/v1/accounts |
Create a new account |
| POST | /api/v1/transactions/expense |
Record an expense |
| POST | /api/v1/transactions/money-given |
Record money given |
| POST | /api/v1/transactions/money-taken |
Record money taken |
| GET | /api/v1/transactions/filter |
Filter transactions with pagination |
| GET | /api/v1/people/with-balances |
List people with balances |
| GET | /api/v1/reports/monthly |
Monthly financial summary |
All endpoints (except auth) require a
Bearer <token>header.
Here are some features planned for future versions:
- ๐ง Email notifications for large transactions
- ๐ Dark mode support
- ๐ฑ Mobile app (React Native or Flutter)
- ๐ Recurring transaction support (e.g., monthly rent)
- ๐ฑ Multi-currency support
- ๐ Budget alerts when spending exceeds a limit
- ๐จโ๐ฉโ๐ง Shared accounts for families
Contributions are welcome! Here's how to get started:
- Fork the repository on GitHub
- Clone your fork locally:
git clone https://github.com/your-username/dailyspend.git
- Create a new branch for your feature:
git checkout -b feature/your-feature-name
- Make your changes and commit them:
git commit -m "Add: description of your change" - Push to your fork:
git push origin feature/your-feature-name
- Open a Pull Request on GitHub
- Follow the existing code style
- Write clear commit messages
- Test your changes before submitting
- For database changes, always add a new Flyway migration file โ never edit existing ones
- Keep pull requests focused on one feature or fix
"Cannot connect to server" on login โ Make sure the backend is running on port 8080 and PostgreSQL is running.
"Access Denied" errors โ Your JWT token may have expired. Log out and log back in.
Build fails with Java version error
โ Make sure you have Java 17 or higher installed. Run java -version to check.
npm install fails
โ Try deleting the node_modules folder and running npm install again.
This project is licensed under the MIT License โ see the LICENSE file for details.
You are free to use, modify, and distribute this project for personal or commercial use.
Tanmay Thakare
- GitHub: @tanmaythakare
- Email: tanmayrthakare@gmail.com
- LinkedIn: www.linkedin.com/in/tanmaythakare
Made with โค๏ธ and โ | If you find this project useful, please โญ star the repository!



