Changelog
All notable changes to Ricochet License Management are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[7.0.0] - 2025-03-07
Added
- Roles page – Edit role
- Edit popup (modal) on the Roles page to change role name and permissions.
- Modal pre-fills current name and comma-separated permissions; save sends PATCH /api/web/roles with roleId, name, and permissions.
- Success toast and page reload after a successful update.
- Roles page – Delete role
- Delete button per role with confirmation (iziToast overlay).
- New DELETE /api/web/roles/:roleId endpoint: removes the role only if no users have that role; returns 409 with a clear message if the role is still assigned.
- Optional web log channel notification when a role is deleted.
- Roles page – Actions column
- New Actions column with Edit and Delete buttons for each role.
- Row data passed via data-role-id and data-permissions for the edit modal.
- Download Panel config in database
- Discord download panel configuration is now stored in the database instead of config/download.yml.
- New Download Panel settings page at /settings/download-panel (owner-only): edit embed title/description and manage buttons (Name, Emoji, Custom ID, URL, Style) with add/remove and Save.
- New API: GET /api/web/download-panel-config and PUT /api/web/download-panel-config for reading and saving config (owner-only).
- One-time migration: if no config document exists, existing config/download.yml is imported into the DB; the YAML file is no longer read or written after that.
- Discord /download create and /download update commands now use the DB-backed config; the “update” subcommand uses a free-form CustomId string option instead of static choices.
- New Mongoose model DownloadPanelModel (collection downloadpanelconfig) and helper downloadPanelConfig.ts (getDownloadConfig, saveDownloadConfig). Removed yamlUtility.ts (download logic).
- Form select / dropdown styling
- Dark-theme styling for <select> elements (.form-select): dark background, border, custom chevron, and focus state.
- Styled dropdown options (.form-select option) with dark background and light text where supported by the browser.
- Added .form-control-sm and .form-select-sm for smaller inputs and selects in tables (e.g. Download Panel settings buttons table).
Changed
- PATCH /api/web/roles
- Request body is now { roleId, name?, permissions? } (role identified by roleId).
- Validates name length (min 3) and uniqueness when changing name; validates permissions as a non-empty array when provided.
- Returns 404 if no role exists for the given roleId.
- GET /login
- No longer redirects to /wizard when there are no owner users.
- After first-time setup (wizard) and app restart, visiting Login now shows the login page so the first Discord login can become owner, instead of being sent back to the wizard.
Fixed
- Build
- Resolved TypeScript error in the role delete handler: Property 'discordId' does not exist on type 'User' by using a type assertion for req.user when fetching the staff user for the web log.
Changelog
All notable changes to Ricochet are documented in this file.
[6.0.0] - 2026-03-03
Major Release: Full UX Remake
Complete user interface and experience overhaul for Ricochet License Management. The dashboard, all views, and design system have been rebuilt with a unified dark theme, modern components, and improved responsiveness.
New Features
Design System
- Unified CSS architecture: Reduced from ~5,000 lines to ~1,026 lines with a consolidated design system
- Design tokens: New CSS variables for consistent theming:
- --accent-color: #FF0000
- --surface, --surface-elevated, --border
- --radius-card, --radius-card-lg, --nav-h, --glow-soft
- Typography: DM Sans font family via Google Fonts
- Tailwind integration: Extended theme with custom colors (accent, dark), border radius, and font family
- Core components: .card-surface, .hero-bg, .hero-grid, .section-label, .nav-glass, .btn-primary, .form-fieldset, .input-icon, badge system
Navigation and Layout
- Glassmorphism navbar: Sticky navigation with backdrop blur and subtle border
- Role-based navigation: Home, Products, Download (authenticated), Licenses, Users (admin/owner), Roles (owner), API Docs
- Mobile menu: Collapsible hamburger with responsive breakpoint
- User dropdown: Avatar display, username, logout link with chevron animation
Pages
- Landing page: Hero section with “Secure License Management Made Simple”, feature cards (Enterprise Security, Real-Time Validation, Advanced Analytics, License Management, API-First Design), CTA buttons
- Login page: Centered card layout, “Welcome Back” headline, Discord OAuth button, grid background, terms of service link
- Dashboard: License Manager welcome banner, stat cards (Total Sales, Registered Users, Products, Total Requests), Traffic Summary and Sales Summary charts, Last 5 Transactions table, Last 5 Requests table, Your Licenses DataTable
- Products: Create Product, Upload Update, and Delete Update buttons; DataTable with Name, Description, Price, Version, Actions
- Product Create/Edit: Form with icon-enhanced inputs for Name, Description, Price, Version, Customer Role ID
- Downloads: Download System banner, product cards with ribbon status (green check = available, red X = unavailable), version dropdown for multi-version products
- Licenses: Create License button, table with User, Date, Reason, License Key, Product, Expires, Status, Actions (refresh, edit, delete)
- License Edit: License Details form (User, Discord ID, License Key, Product, Reason, Expires, IP Cap, HWID Cap); side panel for IP List, HWID List, Metadata
- Users: Table with avatar, role badges (User, Support, Developer, Admin, Owner, Test), Licenses, Requests, Total Spent; Update User Role modal
- Roles: Role table with Role ID, Name, Permissions; Create New Role form (Role Name, comma-separated permissions)
- API Docs: Layout and styling aligned with new design system
- 404 page: Updated styling
Modals
- Upload Product Update: Product radio selection, file picker, Save/Close actions
- Delete Product Update: Product selection, version dropdown, Delete action
- Update User Role: User avatar and name display, role radio buttons (Test, Developer, Owner, User, Admin, Support)
Footer
- Structure: Brand section (Ricochet logo and tagline), Navigation (Home, Download, Licenses, Products, API Docs, LuciRift), Legal (Privacy Policy, Terms of Service)
- Bottom bar: Copyright (LuciRift LLC), dynamic version badge from package.json, SSL Secured and Secure API indicators
- Back-to-top button: Floating button visible when scrolled past 300px
Changed
- Version: Bumped to 6.0.0 in package.json
- Development: validateLicense startup check commented out in index.ts
- All 24 view and partial files refactored to use the new design system
Technical Notes
- No breaking API changes; fully backward compatible with v5.0.0
- REST API (Client and Developer) unchanged
- License validation, product management, and user/role flows remain the same
Migration Guide
- Update to v6.0.0
- Run npm install
- Restart the application
- New UI/UX is applied automatically; no configuration changes required
[5.0.0] - 2026-02-23
Major Release: Complete UI Redesign & API Documentation
- Redesigned Dashboard UI with modern dark theme and red accent colors
- New API Documentation Portal with interactive endpoint reference
- Full request/response examples (Python, JavaScript, C#, Lua, Go)
- Dynamic version management from package.json
- Enhanced Downloads, License Management, and Product Catalog pages
