- 17 Apr, 2026 23 commits
-
-
Your Name authored
- Add status_filter parameter (active/inactive) - Add role_filter parameter (admin/user) - Combine filters with existing search functionality - Update both main query and count query
-
Your Name authored
- Advanced filtering by user status (active/inactive) and role (admin/user) - Bulk selection with checkboxes and select all functionality - Bulk operations: enable, disable, delete, change tier - Confirmation dialogs for destructive actions - Selection counter and clear selection - Combined filtering with existing search/sorting/pagination
-
Your Name authored
- Pagination works correctly across page sizes - Search filters users by username, email, display name - Sorting works for all columns in both directions - URL state maintained for bookmarking - Edge cases handled gracefully All 30+ test cases passed successfully.
-
Your Name authored
- Debounced search input with clear functionality - Clickable sortable headers with direction indicators - Pagination controls with previous/next buttons and page size selector - URL state management for bookmarking - Loading states and error handling
-
Your Name authored
- Add search input field with current search value - Make username, created_at, last_login headers sortable with indicators - Add pagination controls with page size selector - Include 'showing X-Y of Z' counter
-
Your Name authored
- Add query parameters: page, limit, search, order_by, direction - Use new get_users_paginated database method - Calculate pagination metadata (total pages, current range) - Pass filters and pagination data to template
-
Your Name authored
- Support pagination with LIMIT/OFFSET - Case-insensitive search across username, email, display_name - Sorting by username, last_login, created_at, tier_name - Return both users list and total count for pagination
-
Your Name authored
- Database layer: get_users_paginated method with search and sorting - API layer: /dashboard/users route with query parameters - Frontend: Search input, sortable headers, pagination controls - JavaScript: AJAX updates with URL state management - Testing: Complete functionality verification Plan structured as 5 bite-sized tasks with TDD approach.
-
Your Name authored
- Pagination with customizable page sizes (10, 25, 50, 100) - Search by username, email, display name (case-insensitive) - Multi-column sorting (username, last login, signup date, tier) - URL state management for bookmarking - AJAX-based updates for smooth UX - Comprehensive error handling and performance considerations
-
Your Name authored
-
Your Name authored
- Moved JavaScript to {% block extra_js %} at end of body for proper DOM timing - Added renderProvidersList() call to populate providers on page load - Added debug console.log statements for troubleshooting - Moved CSS styles to {% block content %} to keep them in head section The providers page was empty because renderProvidersList() was never called. Now it executes after DOM is ready and populates all 23 providers. -
Your Name authored
-
Your Name authored
-
Your Name authored
- Added is_subscription, price_per_million_prompt, and price_per_million_completion fields to Provider model - Updated analytics to check provider config for subscription status and custom pricing - Subscription providers have $0 cost but usage is still tracked - Added _get_provider_pricing() method to get provider-specific pricing - Updated provider configuration UI with pricing section: - Checkbox for subscription-based provider (free) - Input fields for custom prompt/completion token pricing - Pricing fields hidden when subscription is checked - Falls back to default pricing if not configured - Allows admins and users to configure per-provider pricing
-
Your Name authored
-
Your Name authored
- Added usage tracking to AwsEventStreamParser - Parser now stores usage_credits and context_usage_percentage - Added get_usage() method to retrieve usage data - Updated handler to pass usage data to response builder - Non-streaming: Uses actual usage_credits as total_tokens - Streaming: Includes usage_credits in final chunk - Falls back to 0 if Kiro API doesn't provide usage data - Prevents over-estimation when Kiro returns 0 tokens
-
Your Name authored
-
Your Name authored
- Changed from checking 'is_default = 1' to checking total record count - Default tier now only inserted if table has 0 records - Prevents inserting default tier when user has custom tiers - Improved logging to show tier count and skip reason
-
Your Name authored
-
Your Name authored
- Changed log message from 'Default payment system data inserted' to 'Default payment system data checked (existing records preserved)' - Added comments explaining INSERT OR IGNORE behavior - Clarifies that existing records are never overwritten - Uses INSERT OR IGNORE/INSERT IGNORE which only inserts if record doesn't exist based on UNIQUE constraints
-
Your Name authored
-
Your Name authored
- Added analytics recording for failed rotation requests - Added analytics recording for failed autoselect requests - Added analytics recording for streaming requests (success and failure) - Added analytics recording for authentication failures - Now tracks ALL requests: direct provider, rotation, autoselect, streaming - Ensures complete analytics data for dashboard visibility
-
Your Name authored
- Fixed lost account tiers after server restart - Fixed lost payment gateway configurations on MySQL - Added _create_account_tiers_table() method to create tiers table - Added admin_settings table to _create_config_tables() - Added default free tier insertion if none exists - Both fixes use CREATE TABLE IF NOT EXISTS to preserve existing data - Resolves issues introduced in commits f997a0fb and 0052431f
-
- 16 Apr, 2026 17 commits
-
-
Your Name authored
-
Your Name authored
All fixes verified and packaged: - Admin settings page os context fix - Consolidation settings UPSERT persistence - Prominent top-center notification alerts - Live crypto prices for BTC, ETH, USDT, USDC - ENCRYPTION_KEY management UI - All templates and code correctly packaged
-
Your Name authored
- Changed from small bottom-right toast to large top-center alert - Added gradient backgrounds (green for success, red for error, orange for warning) - Added large icons (check circle, exclamation circle, warning triangle) - Centered at top of page with 400-600px width - Smooth slide-down animation on appear, slide-up on dismiss - Auto-dismisses after 4 seconds - Much more noticeable for important actions like saving settings
-
Your Name authored
- Added 'os': os to dashboard_settings_save template context - Fixes jinja2.exceptions.UndefinedError: 'os' is undefined - Template needs os.environ to get USER for tor hidden service path - GET endpoint already had it, POST endpoint was missing it
-
Your Name authored
- Changed UPDATE to INSERT...ON DUPLICATE KEY UPDATE (MySQL) - Changed UPDATE to INSERT...ON CONFLICT DO UPDATE (SQLite) - Ensures records are created if they don't exist yet - Fixes issue where UPDATE fails silently on missing records - Handles both database types correctly
-
Your Name authored
- Added detailed logging to track consolidation updates - Logs received config, rows affected, and commit status - Returns success:false on errors for proper frontend handling - Frontend now shows toast notifications on save success/failure - Added console logging for debugging - Checks rowcount to detect if records exist in database
-
Your Name authored
- Updated API endpoint to handle simple key-value format from frontend - Endpoint now accepts both old format (consolidation_settings array) and new format (btc/eth/usdt/usdc keys) - Maps lowercase keys to uppercase crypto_type in database (btc -> BTC, etc) - Only updates threshold_amount, preserves admin_address and is_enabled - Fixes issue where changing page would reset values to defaults
-
Your Name authored
- Updated UI to show prices for all 4 supported cryptocurrencies - Each crypto has its own section with color-coded borders - Shows prices from Coinbase, Binance, and Kraken for each - Displays average price (applied) for each cryptocurrency - New API endpoint: GET /api/admin/crypto/prices (returns all 4 cryptos) - Legacy endpoint /api/admin/crypto/btc-prices still works (redirects) - Handles stablecoin pricing correctly (USDT/USDC near 1.00) - Auto-refreshes all prices every 60 seconds - Single refresh button updates all cryptocurrencies
-
Your Name authored
- Added live BTC price section showing prices from Coinbase, Binance, and Kraken - Displays average price calculated from enabled sources - Shows prices in configured currency (USD by default) - Auto-refreshes every 60 seconds - Manual refresh button available - New API endpoint: GET /api/admin/crypto/btc-prices - Fetches real-time prices from exchange APIs - Gracefully handles disabled sources and API errors - Shows 'Disabled' for unchecked sources, 'Error' for failed fetches
-
Your Name authored
- Fixed /api/admin/payment-system/status to query user_crypto_wallets instead of non-existent crypto_addresses table - Fixed /api/admin/payment-system/status to query payment_transactions instead of non-existent payments table - Fixed /api/admin/payment-system/config to query crypto_price_sources correctly (by name, not crypto_type) - Removed duplicate/orphaned SQL code that was causing syntax errors - Added try-catch blocks to gracefully handle missing tables during initial setup - API now returns proper data structure matching frontend expectations
-
Your Name authored
- Added encryption key configuration section in admin payment settings page - Encryption key can now be set/viewed in admin UI instead of only env var - Key is stored in admin_settings table with get/save methods in database.py - Startup loads key from: 1) database, 2) environment, 3) generates temporary - Added API endpoints: GET/POST /api/admin/settings/encryption-key - UI shows key status (database/environment/temporary) and allows generation - Includes security warnings about not changing key after master keys generated - Fixes issue where temporary key was regenerated on every restart
-
Your Name authored
- RenewalProcessor expects 5 args: db_manager, stripe_handler, paypal_handler, crypto_wallet_manager, price_service - service.py was only passing 2 args: db_manager, subscription_manager - Fixed to pass all required arguments - Fixes 'missing 3 required positional arguments' error
-
Your Name authored
- Class is named RenewalProcessor in renewal.py - service.py imports SubscriptionRenewalProcessor - Added alias at end of file for compatibility - Fixes 'cannot import name SubscriptionRenewalProcessor' error
-
Your Name authored
- Migrations were never called automatically - PaymentService tried to use tables that didn't exist - Added migration execution before PaymentService initialization - Fixes MySQL 'Table doesn't exist' error - Added error handling for migration failures - Documentation: MYSQL_MIGRATION_FIX.md
-
Your Name authored
- Documents TemplateNotFound error in production - Explains root cause (template not in setup.py) - Provides resolution steps for production deployment - Includes verification and prevention strategies
-
Your Name authored
- Template was missing from PyPI package - Caused TemplateNotFound error when accessing /dashboard/admin/payment-settings - Added to templates/dashboard list in setup.py line 218
-
Your Name authored
- Complete project summary with all statistics - Investigation of payment gateway configuration issue - Confirmed code migration is correct - Issue is database state, not code - Provides verification steps and solutions - 45 commits, 10,883+ lines of code - 11 documentation guides - Ready for production deployment
-