SubTrackr is a subscription tracking application designed to help users manage and optimize their recurring expenses. With the increasing number of subscription services in our daily lives, SubTrackr provides a centralized platform to monitor costs, track usage, and receive timely reminders.
- Dashboard: Get a quick overview of your subscription expenses and upcoming payments
- Subscription Management: Add, edit, and delete subscription services
- Financial Analytics: Visualize your spending by category or month
- Bank Integration: Connect your bank account via Plaid for automatic subscription detection
- Usage Logging: Track how often you use your subscriptions to identify underutilized services
- Payment History: Keep records of past payments and predict future expenses
- Framework: Angular 19
- UI Components: Angular Material
- Charts: ng2-charts with Chart.js
- HTTP Client: Angular HttpClient
- Styling: Custom CSS with Angular Material theming
- Server: Node.js with Express
- Database: MySQL with MySQL Workbench
- Financial Data: Plaid API (Sandbox environment)
- Scheduling: node-cron for automated tasks
This project is currently in development/prototype stage and is primarily a learning exercise. Key limitations include:
- No Authentication: The application currently has no user authentication system or account management
- Plaid Implementation: The Plaid integration is implemented for sandbox use only and would require additional security and compliance work for production use
- Limited Error Handling: Error handling is minimal and would need enhancement for production
- Educational Purpose: This was created as a learning project to explore full-stack development with Angular, Node.js, and third-party API integration
- Node.js (v16 or higher)
- MySQL (v8.0 or higher)
- MySQL Workbench (recommended for database management)
- Angular CLI (v19 or higher)
- Create a MySQL database using MySQL Workbench or the command line:
CREATE DATABASE subtrackr;- Run the schema script:
mysql -u yourusername -p subtrackr < db/schema.sql- Navigate to the backend directory:
cd backend- Install dependencies:
npm install- Create a
.envfile:
DB_HOST=localhost
DB_USER=yourusername
DB_PASS=yourpassword
DB_NAME=subtrackr
PORT=5000
PLAID_CLIENT_ID=your_plaid_client_id
PLAID_SECRET=your_plaid_secret
PLAID_ENV=sandbox
- Start the server:
npm start- Navigate to the frontend directory:
cd frontend- Install dependencies:
npm install- Start the development server:
npm start- The application will be available at
http://localhost:4200
- MySQL Workbench: Used for database design, schema creation, and data management
- VS Code: Recommended editor with Angular and Node.js extensions
- Plaid Developer Dashboard: Required for obtaining API credentials for the banking integration
GET /api/subscriptions- Get all subscriptionsGET /api/subscriptions/:id- Get a specific subscriptionPOST /api/subscriptions- Create a new subscriptionPUT /api/subscriptions/:id- Update a subscriptionDELETE /api/subscriptions/:id- Delete a subscription
GET /api/payments- Get all paymentsPOST /api/payments- Record a new payment
GET /api/subscriptions/:id/usage-logs- Get usage logs for a subscriptionPOST /api/usage-logs- Add a usage log
POST /api/plaid/create_link_token- Create a Plaid Link tokenPOST /api/plaid/exchange_public_token- Exchange public token for access tokenPOST /api/plaid/transactions- Fetch transactions from connected bank
cd frontend
npm run buildThe production build will be available in the frontend/dist/frontend directory.
Future enhancements that could be added to the project:
- User authentication and account management
- More robust error handling and validation
- Email notifications for upcoming payments
- Secure storage of financial data
- Multi-currency support
- Mobile app version
subtrackr/
├── backend/ # Node.js Express backend
│ ├── controllers/ # Business logic
│ ├── routes/ # API endpoints
│ ├── db.js # Database connection
│ ├── plaid.js # Plaid API client
│ ├── server.js # Express server setup
│ └── cron.js # Scheduled tasks
├── db/ # Database scripts
│ └── schema.sql # MySQL schema created with MySQL Workbench
└── frontend/ # Angular frontend
├── src/
│ ├── app/ # Application components
│ │ ├── components/ # UI components
│ │ ├── models/ # Data models
│ │ └── services/ # API services
│ ├── environments/ # Environment configurations
│ └── assets/ # Static assets
└── angular.json # Angular configuration
This project is licensed under the MIT License - see the LICENSE file for details.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request