Warracker logo

Warracker

Open-source warranty tracker to monitor expirations and store receipts

Alternative to: sortly


About Versions (54)

0.10.1.7

2025-07-21

📦 Release 0.10.1.7 – Config Made Right, Modular Codebase, Zero-Hassle Setup

Thanks again for all your feedback! This release is a major step forward in configuration reliability, code maintainability, and PostgreSQL compatibility. From fixing tricky environment variable issues to restructuring the backend into clean Flask Blueprints, this version is all about making the system smarter, leaner, and easier to deploy.


⚙️ Configuration Just Works Now

🧬 Environment Variables Now Take Precedence

  • Fixed critical bug where environment variables (e.g., OIDC, Apprise, email settings) were ignored on fresh setups.
  • Respected priority order:
    • Env Variable > DB Setting > Hardcoded Default
  • Applied across:
    • OIDC (OIDC_ENABLED, etc.)
    • Apprise (APPRISE_URLS, etc.)
    • Base URL (APP_BASE_URL)

Impact: Fresh Docker-based setups can now be fully configured via .env files without touching the DB. Frontend correctly reflects OIDC state.


🧪 PostgreSQL That Doesn’t Fight Back

🔐 Graceful Migration Handling for Limited DB Privileges

  • Fixed startup-blocking errors caused by missing CREATEROLE privileges.
  • Migrations now use safe DO blocks with exception handling.
  • Advanced role grants are attempted but skipped with warnings if not permitted.

Impact: Works out of the box with non-superuser PostgreSQL roles. No more blocked migrations!


🧩 Modular Backend with Flask Blueprints

🧼 Clean Code, Isolated Features

Massive refactor: extracted major backend routes into dedicated Blueprint modules:

Feature AreaNew ModuleLines Extracted
Warranty Logicwarranties_routes.py~1,500 lines
Admin Managementadmin_routes.py~635 lines
Statisticsstatistics_routes.py~390 lines
Tag Managementtags_routes.py~323 lines
File Handling & Paperlessfile_routes.py~781 lines

Impact: Smaller app.py, easier maintenance, no behavior changes.


🏗️ Flask Application Factory Implemented

  • Converted to modular app creation using create_app() method.
  • Added:
    • config.py for environment-aware settings
    • Centralized extensions.py for clean extension loading
  • Updated:
    • Dockerfile now runs with gunicorn "backend:create_app()"

Impact: Production-ready architecture. Easier testing. Real separation of config, extensions, and entry logic.


🧩 Critical Endpoint Restorations

  • Fixed accidental removal of key endpoints:
    • /api/currencies (for frontend dropdowns)
    • /api/settings/global-view-status (for user permissions)

Impact: Frontend UI loads correctly again, no more 404s on currencies or permissions.


🔍 Status Page + Document Fixes

📋 Status Page Now Shows Full Warranty Details

  • Added missing /api/debug/warranty/<id> endpoint
  • Fixed JavaScript bug in toast notifications

Impact: Clicking a row now shows full details + documents, without console errors.

📄 Paperless-ngx Documents Now Visible

  • Updated logic to include Paperless-ngx docs in:
    • Warranty cards
    • Status page
  • Clearly distinguishes local vs cloud storage with icons

Impact: Users now see all attached docs, no matter the source.


Modified Files:

  • backend/__init__.py, app.py, config.py, extensions.py
  • backend/auth_routes.py, notifications.py, oidc_handler.py, apprise_handler.py
  • backend/admin_routes.py, warranties_routes.py, statistics_routes.py, tags_routes.py, file_routes.py
  • backend/migrations/009z_*.sql, 010_*.sql, 011_*.sql
  • frontend/script.js, frontend/status.js, frontend/settings-new.js
  • Dockerfile