Manage your monthly household budget, a holiday, a project or any budget using an intuitive web app.
View list of user stories: User Stories
- Multiple Budget Types: Create specialized budgets for household expenses, vacations, projects, or any financial goal
- Budget Duplication: Save time by cloning existing budgets as templates for new ones
- Priority Pinning: Keep important budgets easily accessible at the top of your dashboard
- Custom Categories: Organize spending with personalized categories that match your lifestyle
- Real-time Progress Tracking: Visual indicators show exactly how your spending compares to your plan
- Color-coded Budget Health: Instantly understand your financial status with intuitive color cues
- Savings Projections: Automatically calculate and visualize potential savings when income is set
- Timeline Awareness: Clear indicators of budget duration help you stay on track
- Drag-and-Drop Organization: Reorder categories effortlessly on desktop
- In-line Editing: Quickly rename categories with a simple click
- Responsive Design: Seamless experience across desktop and mobile devices
- Clean, Modern Interface: Thoughtfully designed with focus on simplicity and efficiency
The backend is a RESTful API built using TypeScript, Node.js, Express.js, and TypeOrm with PostgreSQL database, while the frontend is built using Angular
Testing was done using Jest.
Continuous Integration (CI) is done using GitHub Actions.
Quentra can be deployed using Docker and Docker Compose in both development and production environments.
- Docker and Docker Compose are installed on your system
- Git for cloning the repository
We provide a convenient script to manage development and production environments:
# Start
./compose.sh [dev|prod] up -d
# Run tests
./compose.sh test run
# View logs
./compose.sh [dev|prod] logs -fCreate a .env file in the root directory with the following variables:
# Database Configuration
POSTGRES_USER=your_db_user
POSTGRES_PASSWORD=your_db_password
POSTGRES_DB=quentra
# JWT Configuration
JWT_SECRET=your_jwt_secret_key
JWT_EXPIRES_IN=7dFor development, default values are provided if these variables are not set.