CyFi is a manual personal finance tracker built with the purpose of keeping budgeting simple: create your own accounts, enter transactions by hand, track recurring bills, and review totals from a single dashboard.
You can access the application here:
CyFi is currently under maintenance to implement version 1.1. This is set to include a demo mode and the general maintanence ability.
Documentation for this application, which goes into more specifics about both general development & cybersecurity, can be found here:
- User accounts with secure password hashing
- Per-user bank account tracking
- Temporary demo mode with sample data
- Manual deposits and expenses
- Recurring bill management
- Recent activity & full transaction history
- Security elements like session protection, CSRF protection, and login rate limiting
- Interactive & responsive UI for desktop and mobile
- Passwords are hashed with Werkzeug before storage
- Session cookies are hardened with
HttpOnly,SameSite, and production-onlySecure - CSRF tokens protect form submissions and API requests
- Account's are exclusive only to the user
- Rate limitd login attempts, due to brute forcing
- Backend: Flask, Flask-Migrate, Flask-SQLAlchemy
- Database: PostgreSQL in production; SQLite for local development
- Frontend: HTML, CSS, & JavaScript
- Deployment: Render
This can be run from the link above, or it can be deployed from your localhost.
- Create and activate a virtual environment.
- Install dependencies with
pip install -r requirements.txt. - Create a
.envfile..env.exampleis provided. - Run database migrations with
flask db upgrade. - Start the app with
flask run.
Create a .env file with the following values:
SECRET_KEYDATABASE_URLMAINTENANCE_MODEMAINTENANCE_MESSAGE
Local Development: SQLite is used automatically if DATABASE_URL is not set.
CyFi is set up to deploy from GitHub to Render. Whenever main is updated, Render pulls all changes and updates it to the build.
- The app is intentionally manual and does not connect to a bank.
- The security documentation in
documentation/security.mdexplains the implementation details in more depth.
This project is for personal and educational use.
setzexe