For more details on this update, please check the changelogs.
🛡️ Warracker
Warracker is an open-source warranty tracker application designed to help you effortlessly keep track of product warranties, expiration dates, and related documentation.
🌟 Overview
Warracker is a web-based application that provides a centralized system for managing all your product warranties. Key features include:
- Centralized Warranty Management: Track all product warranties in one place.
- Detailed Records: Store key warranty information like purchase date and duration.
- Document Storage: Upload and securely store warranty documentation and receipts.
- Proactive Alerts: Get visual notifications for active, expiring (customizable from 1 to 365 days), and expired warranties.
- Quick Search: Easily find specific warranties within your collection.
- Secure Access: User authentication and support for multiple users.
- System Status: Real-time system status page.
- Data Export: Export warranty data to CSV format.
- Data Import: Import warranty data in CSV format.
- Email notifications: Stay informed about expiring warranties with email reminders, based on your preference delivered daily, weekly, or monthly.
- Tagging: Add tags to help categorize and group warranties.
📸 Screenshots
Home Page
Status Dashboard
✨ Features
- Warranty Management: Add, edit, and delete warranty information.
- Document Storage: Upload and securely store receipts and warranty documentation.
- Status Tracking: Visual indicators for warranty status (active, expiring soon, expired).
- Search: Easily find warranties by product name or tags.
- Tag: Group your warranties by using multiple tags.
- Responsive Design: A seamless experience on both desktop and mobile devices.
🛠️ Technology Stack
- Frontend: HTML, CSS, JavaScript
- Backend: Python with Flask
- Database: PostgreSQL
- Containerization: Docker and Docker Compose
- Web Server: Nginx
🚀 Setup
Prerequisites
- Docker and Docker Compose installed on your system.
- Git (for cloning the repository).
Fresh Installation 🆕
- Clone the repository:
git clone https://github.com/sassanix/Warracker.git - Navigate to the project directory:
cd Warracker - Start the application using Docker:
docker compose up
Updating from a Previous Version ⬆️
-
Pull the latest changes:
git pull origin main -
Rebuild and restart the containers:
docker compose down docker compose up --build -
Access the Application:
Open your browser and navigate to
http://localhost:8005.
🐋 Pull Docker
services:
warracker:
image: ghcr.io/sassanix/warracker/main:latest
ports:
- "8005:80"
volumes:
- warracker_uploads:/data/uploads
environment:
- DB_HOST=warrackerdb
- DB_NAME=warranty_db
- DB_USER=warranty_user
- DB_PASSWORD=${DB_PASSWORD:-warranty_password}
- SMTP_HOST=smtp.email.com
- SMTP_PORT=465
- SMTP_USERNAME=youremail@email.com
- SMTP_PASSWORD=password
depends_on:
warrackerdb:
condition: service_healthy
restart: unless-stopped
warrackerdb:
image: postgres:15-alpine
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
- POSTGRES_DB=warranty_db
- POSTGRES_USER=warranty_user
- POSTGRES_PASSWORD=${DB_PASSWORD:-warranty_password}
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"]
interval: 5s
timeout: 5s
retries: 5
volumes:
postgres_data:
warracker_uploads:
To get the docker compose file please go here
📝 Usage
Adding a Warranty
- Fill in the product details on the left panel.
- Enter the purchase date and warranty duration.
- Optionally upload receipt/documentation.
- Click the "Add Warranty" button.
Managing Warranties
- Use the search box to filter warranties.
- Click the edit icon to modify warranty details.
- Click the delete icon to remove a warranty.
📦 Product Information Entry Requirements for import
| Field Name | Format / Example | Required? | Notes |
|---|---|---|---|
| ProductName | Text | ✅ Yes | Provide the name of the product. |
| PurchaseDate | Date (YYYY-MM-DD, e.g., 2024-05-21) |
✅ Yes | Use ISO format only. |
| WarrantyYears | Whole Number (1, 3, 10) |
✅ Yes, unless IsLifetime is TRUE |
Must be between 1 and 100 if provided. |
| IsLifetime | TRUE or FALSE (case-insensitive) |
❌ No (Optional) | If omitted, defaults to FALSE. |
| PurchasePrice | Number (199.99, 50) |
❌ No (Optional) | Cannot be negative if provided. |
| SerialNumber | Text (SN123, SN123,SN456) |
❌ No (Optional) | For multiple values, separate with commas. |
| ProductURL | Text (URL format) | ❌ No (Optional) | Full URL to product page (optional field). https://producturl.com |
| Tags | Text (tag1,tag2) |
❌ No (Optional) | Use comma-separated values for multiple tags. |
💻 Development
Local Development Environment
-
Clone the repository.
-
Make your changes.
-
Build and run with Docker Compose:
docker-compose build docker-compose up -d
Project Structure
warracker/
├── backend/ # Python Flask backend
│ ├── app.py # Main application logic
│ ├── requirements.txt # Python dependencies
│ └── init.sql # Database initialization
├── frontend/ # Web frontend
│ ├── index.html
│ ├── script.js
│ └── style.css
├── docker-compose.yml # Docker configuration
├── Dockerfile # Container definition
└── nginx.conf # Web server configuration
🗺️ Roadmap
- User Authentication - Completed ✅
- Settings Page - Completed ✅
- Status Page - Completed ✅
- Customizing Reminders to any day needed - Completed ✅
- Email Reminders for Expiring Warranties - Completed ✅
- Warranty Categories/Grouping through tags - Completed ✅
- Warranty Data Import (CSV) - Completed ✅
- Improved Search and Filtering - Planned
- Warranty claim tracking - Planned
- Calendar Integration - Planned
🛠️ Troubleshooting
Common Issues
- Connection Refused Error: Ensure all containers are running (
docker-compose ps). Verify the backend is correctly connected to the database. - Database Errors: If schema issues arise, double-check that the database initialization script (
init.sql) matches the expected schema inapp.py.
🤝 Contributing
Contributions are welcome! We encourage you to submit a Pull Request.
- Fork the repository.
- Create your 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.
📜 License
This project is licensed under the GNU Affero General Public License v3.0 - see the LICENSE file for details.
🙏 Acknowledgements
- Flask
- PostgreSQL
- Docker