Warracker
Open-source warranty tracker to monitor expirations and store receipts
Alternative to: sortly
0.10.1.1
2025-06-16🚀 Massive Update: Owner Role, OIDC-Only Mode, Currency Controls & More!
This massive release delivers powerful new customization and administration features, introducing an immutable Owner role with secure ownership transfer, a site-wide OIDC-only login mode, and flexible currency symbol positioning. It also brings a complete redesign of the About page, granular Apprise notification controls, and crucial bug fixes that resolve long-standing OIDC authentication issues with providers like Authentik.
A huge thank you to the community for reporting bugs, providing feedback, and helping shape this release!
✨ Added
Super-Admin (Owner) Role & Ownership Transfer
A comprehensive ownership management system to secure the primary administrator account.
- Immutable Owner: The first registered user is automatically designated as the 👑 Owner and cannot be deleted, deactivated, or have their admin rights removed.
- Secure Transfer: The current Owner can securely transfer ownership to another admin via a new, dedicated settings panel that requires explicit confirmation.
- Protected UI: Edit/delete controls for the Owner are disabled in the user management list, with a crown icon for clear visual identification.
Files:
backend/migrations/031_add_owner_role.sql,backend/app.py,backend/auth_routes.py,backend/auth_utils.py,frontend/settings-new.html,frontend/settings-new.js
OIDC-Only Login Mode
Administrators can now enforce Single Sign-On (SSO) across the entire application for enhanced security.
- Enforce SSO: When enabled, the traditional username/password login form is hidden, requiring all users to authenticate via the configured OIDC provider.
- Clean Interface: The register and forgot password links are also hidden, providing a streamlined “Login with SSO” experience.
- Admin Control: A new toggle in the OIDC settings section allows administrators to easily enable or disable this mode.
Files:
backend/app.py,backend/oidc_handler.py,frontend/settings-new.html,frontend/settings-new.js,frontend/login.html
Currency Position Control
Users can now customize how currency is displayed throughout the application to match their regional preference.
- Left or Right: A new “Currency Position” setting allows users to place the currency symbol to the left (e.g.,
$100.00) or right (e.g.,100.00$). - Universal Application: The chosen setting is respected everywhere—on warranty cards, in add/edit forms, and across all views.
- User-Specific & Persistent: The preference is saved per user and persists across sessions and devices.
Files:
backend/migrations/034_add_currency_position_column.sql,backend/auth_routes.py,frontend/settings-new.html,frontend/script.js,frontend/style.css
Product Age Tracking & Sorting
Track the age of your products and sort them by how long you’ve owned them.
- Age Display: Warranty cards now show the product’s age, calculated from the purchase date (e.g., “2 years, 3 months” or “15 days”).
- Sort by Age: A new “Age” option in the “Sort By” dropdown organizes warranties from oldest to newest.
Files:
frontend/index.html,frontend/script.js
About Page Redesign
A complete visual overhaul of the “About” page with a modern, informative, and community-focused design.
- Modern Card Layout: Information is organized into clean, easy-to-read cards for the project, community, and developer.
- Discord Community Link: A prominent link to join the official Discord community, complete with branding.
- Enhanced Social & Project Links: All links feature proper icons and brand-appropriate styling for a polished look.
- Responsive Design: Fully responsive layout with excellent support for both dark and light modes.
Files:
frontend/about.html
🛠 Fixes
Critical OIDC Login Failures (RecursionError & HTTPS Proxy)
Resolved two critical OIDC bugs that prevented logins, especially with self-hosted providers like Authentik and when running behind an HTTPS reverse proxy.
- RecursionError Fix: Implemented an early monkey-patching solution for
geventworkers in Gunicorn, eliminating themaximum recursion depth exceedederror during SSL operations. - HTTPS Callback Fix: Configured the application to correctly trust
X-Forwarded-Protoheaders from reverse proxies, ensuring it generateshttps://callback URLs instead ofhttp://, which resolves provider mismatches.
Files:
backend/gunicorn_config.py,backend/app.py
Critical User Settings Not Saving
Fixed a persistent bug where user preferences for currency symbol and date format would revert to defaults on page refresh.
- Backend API Fix: The
/api/auth/preferencesendpoint was corrected to properly read and write user settings to the database instead of returning hardcoded default values. - Result: All user display preferences are now saved and loaded correctly across sessions.
Files:
backend/auth_routes.py
CSV Import Currency Selection
Fixed an issue where warranties imported via CSV were incorrectly defaulting to USD instead of respecting the user’s preferred currency.
- Smart Detection: The backend import function now queries the user’s preferred currency and applies it to the imported items.
- Comprehensive Mapping: Includes symbol-to-code mapping for over 30 currencies to ensure accuracy.
Files:
backend/app.py
✨ Enhanced
Granular Apprise Notification Controls
Significantly enhanced the Apprise notification system with new modes and scopes for ultimate flexibility.
- Notification Mode: Choose between a single Global Summary notification or personalized Per User notifications.
- Warranty Scope: Select whether notifications should include warranties from All Users or only the Admin’s Warranties.
- Consistent Formatting: The message format for scheduled notifications is now unified with the manual test format, including urgency emojis (🚨, ⚠️, 📅).
- Individual Timing: Users can now set their own notification channel (
email,apprise, orboth) and delivery times, which the scheduler now fully respects.
Files:
backend/notifications.py,backend/apprise_handler.py,backend/migrations/032_add_apprise_notification_mode.sql,backend/migrations/033_add_apprise_warranty_scope.sql,frontend/settings-new.html,frontend/settings-new.js
Larger & Clearer Product Photos
Increased the size of product photo thumbnails across all views for better visibility at a glance.
- Larger Thumbnails: Photos are now larger and more prominent in Grid, List, and Table views.
- Better Identification: Makes it easier to quickly identify products without opening the full image.
Files:
frontend/style.css,frontend/script.js
Smart Currency Default in Add Form
The “Add Warranty” form is now smarter, automatically selecting the user’s preferred currency by default.
- Settings Integration: Reads the preferred currency from user settings, eliminating the need to change it from USD every time.
- Seamless Experience: Users can still override the currency for individual warranties.
Files:
frontend/script.js,frontend/settings-new.js
Persistent View Scope (Global/Personal)
The app now remembers and automatically loads your last-used view (Global or Personal) on page refresh for a more seamless experience.
Files:
frontend/script.js,frontend/status.js
🧹 Maintenance & Code Quality
Authentication System Refactoring
Restructured all authentication-related routes into a modular Flask Blueprint for improved code organization, maintainability, and scalability.
Files:
backend/auth_utils.py,backend/auth_routes.py,backend/app.py,Dockerfile
Legacy OIDC Code Cleanup
Removed over 290 lines of unused, commented-out, and orphaned legacy OIDC code from the main application file, making the codebase cleaner and easier to maintain.
Files:
backend/app.py
📁 Summary of Files Changed
Backend:
backend/app.pybackend/auth_routes.pybackend/auth_utils.pybackend/oidc_handler.pybackend/apprise_handler.pybackend/notifications.pybackend/gunicorn_config.pybackend/migrations/031_add_owner_role.sqlbackend/migrations/032_add_apprise_notification_mode.sqlbackend/migrations/033_add_apprise_warranty_scope.sqlbackend/migrations/034_add_currency_position_column.sqlFrontend JS:frontend/script.jsfrontend/settings-new.jsfrontend/status.jsFrontend HTML:frontend/index.htmlfrontend/login.htmlfrontend/settings-new.htmlfrontend/about.htmlfrontend/debug-export.htmlFrontend CSS:frontend/style.cssConfig/Other:Dockerfile
💔 Known Issues
- Resolved! The critical OIDC bugs preventing logins with providers like Authentik have been fixed in this release.