π 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
gevent
workers in Gunicorn, eliminating themaximum recursion depth exceeded
error during SSL operations. - HTTPS Callback Fix: Configured the application to correctly trust
X-Forwarded-Proto
headers 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/preferences
endpoint 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.py
backend/auth_routes.py
backend/auth_utils.py
backend/oidc_handler.py
backend/apprise_handler.py
backend/notifications.py
backend/gunicorn_config.py
backend/migrations/031_add_owner_role.sql
backend/migrations/032_add_apprise_notification_mode.sql
backend/migrations/033_add_apprise_warranty_scope.sql
backend/migrations/034_add_currency_position_column.sql
Frontend JS:frontend/script.js
frontend/settings-new.js
frontend/status.js
Frontend HTML:frontend/index.html
frontend/login.html
frontend/settings-new.html
frontend/about.html
frontend/debug-export.html
Frontend CSS:frontend/style.css
Config/Other:Dockerfile
π Known Issues
- Resolved! The critical OIDC bugs preventing logins with providers like Authentik have been fixed in this release.