1. 17 Apr, 2026 23 commits
    • Your Name's avatar
      feat: add status and role filtering to get_users_paginated method · 829c0e37
      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
      829c0e37
    • Your Name's avatar
      Add user management enhancement phase 2 plan · 30e4719b
      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
      30e4719b
    • Your Name's avatar
      test: verify complete user management enhancement functionality · 79e801da
      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.
      79e801da
    • Your Name's avatar
      feat: add AJAX functionality for search, sorting, and pagination · 5fbd21e1
      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
      5fbd21e1
    • Your Name's avatar
      feat: add search input and sortable headers to users template · 0a970415
      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
      0a970415
    • Your Name's avatar
      feat: update /dashboard/users route for pagination and filtering · aa85681b
      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
      aa85681b
    • Your Name's avatar
      feat: add get_users_paginated method to database layer · 8c0fdd1f
      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
      8c0fdd1f
    • Your Name's avatar
      Add user management enhancement implementation plan · 52c2bd65
      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.
      52c2bd65
    • Your Name's avatar
      Add user management page enhancement design document · af76c07e
      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
      af76c07e
    • Your Name's avatar
      Analytics system · fe8b625a
      Your Name authored
      fe8b625a
    • Your Name's avatar
      fix: initialize providers list on page load · 823291c7
      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.
      823291c7
    • Your Name's avatar
      a2aaca0c
    • Your Name's avatar
      e48a89f5
    • Your Name's avatar
      feat: add subscription-based provider and custom pricing configuration · ae1fb479
      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
      ae1fb479
    • Your Name's avatar
      4fc0240b
    • Your Name's avatar
      fix: use actual token usage from Kiro API instead of hardcoded 0 · 17870cbf
      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
      17870cbf
    • Your Name's avatar
      1a3511ca
    • Your Name's avatar
      fix: only insert default tier if account_tiers table is completely empty · 0dbd07db
      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
      0dbd07db
    • Your Name's avatar
      docs: add comprehensive session summary · 37cf6349
      Your Name authored
      37cf6349
    • Your Name's avatar
      fix: improve migration logging to clarify data preservation · 66565a94
      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
      66565a94
    • Your Name's avatar
      docs: add analytics fix documentation · c4aa7ff6
      Your Name authored
      c4aa7ff6
    • Your Name's avatar
      fix: add comprehensive analytics recording for all request types · f2fe4c17
      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
      f2fe4c17
    • Your Name's avatar
      fix: add account_tiers and admin_settings tables to payment migrations · 11330e9b
      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
      11330e9b
  2. 16 Apr, 2026 17 commits
    • Your Name's avatar
      Update pyproject.toml to version 0.99.28 · ee9c9c2b
      Your Name authored
      ee9c9c2b
    • Your Name's avatar
      Bump version to 0.99.28 · 34a0d4e6
      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
      34a0d4e6
    • Your Name's avatar
      Improve notification visibility with prominent top-center alerts · 455e310e
      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
      455e310e
    • Your Name's avatar
      Fix template error: add os to settings save response context · 8e689156
      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
      8e689156
    • Your Name's avatar
      Use UPSERT for consolidation settings to handle missing records · e780ad68
      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
      e780ad68
    • Your Name's avatar
      Add logging and visual feedback for consolidation settings · 29d64814
      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
      29d64814
    • Your Name's avatar
      Fix consolidation settings not saving · eb05beac
      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
      eb05beac
    • Your Name's avatar
      Expand crypto price display to show BTC, ETH, USDT, USDC · f0f3d96f
      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
      f0f3d96f
    • Your Name's avatar
      Add live BTC price display in admin payment settings · 79a2e226
      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
      79a2e226
    • Your Name's avatar
      Fix payment system API endpoints to use correct table names · de387e96
      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
      de387e96
    • Your Name's avatar
      Add ENCRYPTION_KEY management UI in admin dashboard · b8011207
      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
      b8011207
    • Your Name's avatar
      fix: correct RenewalProcessor constructor arguments · 51d67426
      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
      51d67426
    • Your Name's avatar
      fix: add SubscriptionRenewalProcessor alias for backward compatibility · d2327db4
      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
      d2327db4
    • Your Name's avatar
      fix: run payment system migrations on startup · 906e6cf6
      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
      906e6cf6
    • Your Name's avatar
      docs: add critical fix documentation for missing template · 9928ebef
      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
      9928ebef
    • Your Name's avatar
      fix: add admin_payment_settings.html to setup.py data_files · 02f867af
      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
      02f867af
    • Your Name's avatar
      docs: add final implementation report for v0.99.27 · 405ccb34
      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
      405ccb34