A personal financial management application built with Fastify, following SOLID principles.
Spendify is a complete API for personal finance management, allowing users to track expenses and income, categorize transactions, generate reports, and gain financial insights. Built with a focus on development best practices and security.
- ✅ User registration with email and password
- ✅ User login
- ✅ Password recovery via email
- ✅ Profile updates (name, email, and password)
- ✅ Create expenses (description, date, value, category, payment method)
- ✅ View all expenses with pagination
- ✅ Filter expenses (by date, category, payment method, amount)
- ✅ View specific expense details
- ✅ Update existing expenses
- ✅ Delete expenses
- ✅ Add income (description, date, value, category, income source)
- ✅ View all revenue with pagination
- ✅ Filter revenue (by date, category, income source, amount)
- ✅ View specific revenue details
- ✅ Update existing revenue
- ✅ Delete revenue
- ✅ Create categories for both expenses and revenue
- ✅ View all available categories
- ✅ Update categories
- ✅ Delete unused categories
- ✅ Financial summary with selectable period
- ✅ Categorized reports (monthly expenses, expense categories, income sources)
- ✅ Export financial data to CSV or JSON
- ✅ JWT authentication for protected endpoints
- ✅ Restricted access to users' own financial data
- ✅ Revenue cannot have negative values
- ✅ Revenue cannot be created without a category
- ✅ Expenses cannot have negative values
- ✅ Expenses cannot be created without a category
- ✅ Categories in use cannot be deleted
- 🔄 Financial records older than 6 months cannot be edited or deleted (in development)
- 🔄 Notification when monthly expenses exceed 80% of income (in development)
- 🔄 Calculation and display of remaining monthly budget (in development)
- Node.js
- Fastify
- TypeScript
- Vitest (for testing)
- SOLID principles, Clean Architecture, and DDD
- High concurrency (efficiently handling multiple requests)
- Pagination for expense and revenue listings
- Optimization with caching for repeated queries
- ACID-compliant database
- Error handling for failed requests
- Encryption of sensitive data
- Rate limiting to prevent abuse
- Logging of failed login attempts
- Modular code following SOLID principles and DDD
- Unit and integration tests
- Node.js (v14+)
- NPM or Yarn
- Database (PostgreSQL, MySQL, etc.)
- Clone the repository:
git clone https://github.com/yuribodo/spendify.git
cd spendify
- Install dependencies:
npm install
# or
yarn install
- Configure environment variables:
cp .env.example .env
# Edit the .env file with your settings
- Run database migrations:
npm run migrate
# or
yarn migrate
- Start the development server:
npm run dev
# or
yarn dev
Run tests with the command:
npm run test
# or
yarn test
- Fork the project
- Create a new branch (
git checkout -b feature/new-feature
) - Commit your changes (
git commit -m 'Add new feature'
) - Push to the branch (
git push origin feature/new-feature
) - Open a Pull Request following the project pattern
- 🍕 Feature
- 🐛 Bug Fix
- 🎨 Style
- 🧑💻 Code Refactor
- 🔥 Performance Improvements
- ✅ Test
- 🤖 Build
- 📦 Chore
- ⏩ Revert