A full-stack personal finance management application built with ASP.NET Core and React TypeScript.
Built by Ioannis Kontogiannis · Wingman: Claude 🤖
- JWT Authentication with BCrypt password hashing
- Role-based access control (Admin / User)
- User registration and login
- Profile editing
- Account self-deactivation (soft delete — data preserved)
- Session timer with token refresh
- Create and manage financial accounts
- Co-ownership — invite up to 4 members per account
- Real-time balance tracking
- Account summary with total balance
- Income / Expense categorization
- Subcategories for detailed tracking
- Cascading soft-delete (transactions become "Uncategorized")
- Full CRUD with automatic sign based on category type
- Filter by account
- Track who created each transaction (co-ownership support)
- Scrollable transaction history sorted by date
- Date picker with dd/MM/yyyy format
- Summary cards (Total Balance, Income, Expenses, Transaction Count)
- Monthly Income vs Expenses bar chart
- Spending by Category pie chart
- Filter by account and custom date range
- Debounced loading for smooth UX
- Platform-wide statistics
- User management (view, deactivate, reactivate)
- View any user's accounts, categories and transactions
| Technology | Purpose |
|---|---|
| ASP.NET Core Web API (.NET 10) | REST API |
| Entity Framework Core 10 | ORM & Migrations |
| SQL Server | Database |
| JWT Bearer Authentication | Auth tokens |
| BCrypt.Net | Password hashing |
| Swagger | API documentation |
| Technology | Purpose |
|---|---|
| React 19 + TypeScript | UI Framework |
| Vite | Build tool |
| Tailwind CSS v4 | Styling |
| Recharts | Charts |
| React DatePicker | Date inputs |
| Zod | Form validation |
smartmoney/
├── smartmoney-back/ # ASP.NET Core Web API
│ ├── Controllers/ # HTTP endpoints (thin layer)
│ ├── Services/ # Business logic
│ │ └── Interfaces/
│ ├── Repositories/ # Data access layer
│ │ └── Interfaces/
│ ├── Models/ # Domain models
│ ├── DTOs/ # Data transfer objects
│ ├── Data/ # AppDbContext.cs
│ └── Migrations/ # EF Core migrations
│
└── smartmoney-front/ # React TypeScript SPA
└── src/
├── features/ # Feature-based components
│ ├── Accounts/
│ ├── Categories/
│ ├── Transactions/
│ ├── Stats/
│ ├── Admin/
│ └── Auth/
├── components/ # Shared UI components
│ └── Layout/
│ ├── Header.tsx
│ ├── Layout.tsx
│ ├── SessionTimer.tsx
│ ├── Sidebar.tsx
│ └── ThemeToggle.tsx
├── api/ # API functions
├── types/ # TypeScript interfaces
├── context/ # React context (theme)
└── utils/ # Utility functions
- Docker Desktop
# Clone the repository
git clone https://github.com/Kontgiannis/Smart-Money.git
cd smartmoney
# Copy the example env file and configure it
cp .env.example .env
# Update .env with your values:
# - DB_PASSWORD: choose a strong password
# - JWT_KEY: random string minimum 32 characters
# Start everything
docker-compose up --buildThen navigate to http://localhost:3000 🚀
- Navigate to
http://localhost:3000 - Register a new account
- To create an Admin user, connect to the database and run:
UPDATE Users SET Role = 'Admin' WHERE Username = 'yourusername'To inspect the database directly, connect via SSMS or Azure Data Studio:
- Server:
localhost,1433 - Authentication: SQL Server Authentication
- Username:
sa - Password: value of
DB_PASSWORDfrom your.envfile
- .NET 10 SDK
- Node.js 18+
- SQL Server
- Visual Studio 2026 or VS Code
cd smartmoney-back
cp appsettings.example.json appsettings.json
# Update connection string and JWT key in appsettings.json
dotnet ef database update
dotnet runcd smartmoney-front
npm install
npm run dev
Icarus's accounts with co-ownership member list
Transaction history with account filter and running balance
Monthly income vs expenses and spending by category
Maverick's admin view with platform stats and user management
This project was developed as a final project for the Coding Factory program at Athens University of Economics and Business (AUEB).
