Release history
Changelog
Every new feature, fix and speed-up on s&box Explorer, newest first.
- Last 30 days
- 90
- Features shipped
- 233
- Fixes
- 218
- Days with changes
- 66
508 changes Clear filters
November 2025
4
-
Performance
9:17 PM
Remove verbose CSS comments and add will-change optimizations
Details
Removed large header comments and section markers from multiple CSS bundles for community, profiles, admin, and utilities to reduce file size and improve readability. Added 'will-change' property to several animated elements in profiles.css for better rendering performance. Updated featured package image to use 'loading="lazy"' in user-profile-redesign.js. In index.php, added Font Awesome stylesheet for organization profile pages.
f6afdbc -
Fix
8:09 PM
Fix profile layout and widgets system
Details
- Remove duplicate getDatabase() function conflict
- Add profile-widgets API routes (GET/POST) to profile-api.php
- Add profile-widgets routing in router.php
- Add debug logging for profile layout loading
- Profile custom layouts now load and save correctly
- Widgets system now functional with default widgets support
fb94776 -
Feature
3:47 PM
Add consolidated database support and manager
Details
Introduces DatabaseManager for unified SQLite access and adds MigrationManager for data migration. Refactors multiple backend modules and APIs to use the consolidated database when enabled, improving maintainability and scalability. Updates .gitignore to exclude .zip files.
b265cca -
Feature
2:31 PM
Add API documentation generator and route metadata
Details
Introduces API documentation generation via new backend endpoints and helpers, including docs.php and api-doc-generator.php. Refactors Router to support route metadata for documentation, updates API response formatting, and removes obsolete scripts and tools. Also updates frontend scripts to use new API endpoints and improves code consistency.
23e3af2
11
-
Fix
6:37 PM
Css cleanup
Details
just some css cleaning
8b1f7c9 -
Fix
5:51 PM
Notification bell fixes
Details
hopefully
365f485 -
Performance
5:10 PM
Optimize caching strategy: Stale-While-Revalidate and SQLite tuning
4cee3af -
Fix
4:54 PM
Fix template variables, profile links, and notifications footer
1ef0ea3 -
Feature
4:42 PM
Implement search analytics, indexing, and frontend updates
f80d1e2 -
Fix
2:46 PM
Fix double HTML encoding in widget content
Details
Remove htmlspecialchars from storage layer - encoding should only happen at output time to prevent & issues
ab7e5ff -
Fix
2:41 PM
Fix profile layout persistence issue
Details
- Wrap layout data in {'layout': ...} format in POST endpoint to match GET format
- Remove auto-initialization that was overwriting custom layouts
- Add detailed logging for debugging layout load issues
ff7e366 -
Fix
2:30 PM
Load bootstrap.php for i18n in favorites and followed pages
6fc8d74 -
Performance
2:22 PM
Improve Rust theme and fix search bar styling
Details
- Fixed package card text visibility and backgrounds
- Improved action button styling (favorite/compare)
- Changed favorited items to rust green
- Fixed search bar blue glow effects
- Removed localStorage theme caching, use database as source of truth
- Added server-side theme CSS loading to eliminate flash
- Override all blue/purple colors with rust palette
2cc20d8 -
Fix
1:42 PM
Filter hex codes from issue display and remove float animation
a0a1dd1 -
Fix
1:31 PM
Navbar dropdown clipping issue
Details
Changed overflow from hidden to visible on .site-nav to allow dropdown menu to display properly
55513e3
3
-
Feature
10:42 PM
Add profile layout API endpoint and update JS modules
948d344 -
Feature
10:01 PM
Add comprehensive i18n system with 23 language support
Details
- Implement i18n.php with translation loading and caching
- Add language switcher in footer with flag icons
- Create locale files for 23 languages
- Update all frontend pages to use translation functions
- Add locale notification system for missing translations
- Remove deprecated language-switcher component
- Update translation tools
6d9cedc -
Feature
12:01 PM
Add multi-language support with 29 languages
Details
- Added i18n system with language detection and routing
- Created translation infrastructure with 9 locale namespaces
- Added language switcher in header with search and grouping
- Integrated language settings tab in user settings
- Added 29 language support: European, Asian, Middle Eastern languages
- Created translation tools (translate-simple.py, check-translation-keys.py)
- Added localized URL routing for major languages
- Implemented persistent translation cache for performance
- Added Kiro hook for automatic translation key checking
- Updated all pages to use translation system
1a5bb55
14
-
Fix
4:08 PM
Fix favorites section padding on live server with higher CSS specificity
994a5bc -
Fix
3:57 PM
Fix profile layout for logged-out users - apply custom layout order and visibility
c0e23dc -
Fix
3:35 PM
Fix profile layout persistence and move Steam presence to hero links
3d32418 -
Performance
2:40 PM
Improve donate page layout and stats card design
c7279b5 -
Fix
2:01 PM
Fix notifications routing and update deployment script
1df07b4 -
Feature
1:18 PM
Add social link validation with platform selector and Font Awesome icons
Details
- Implement Discord-style platform selector with 19 verified platforms
- Add handle-based input (users enter username only, URL auto-generated)
- Integrate Font Awesome 6.7.2 for brand icons (Twitter, GitHub, Discord, etc.)
- Add domain validation with whitelist/blacklist from online sources
- Create tool to fetch blocked domains from UT1 blacklists
- Display social links as icon-only circular buttons on profiles
- Improve modal layout with better spacing and visual hierarchy
- Add green gradient to Save Widget button
- Enhance social link icons with hover effects and animations
c3979e4 -
Fix
12:08 PM
Profile widgets display and management
Details
- Fixed widget loading race condition causing widgets to disappear on page load
- Fixed org-page.js loading conflict on player profiles
- Improved widget editor modal styling with modern gradients and animations
- Redesigned Featured Package widget with separate org/package fields
- Added auto-fetch for package title and thumbnail from API
- Made package metadata fields read-only to prevent malicious content
- Fixed API response parsing (data.data.widgets structure)
- Added widgetsLoaded flag to prevent premature rendering
- Improved form field styling with better focus states and spacing
b1f09cd -
Polish
10:49 AM
Refined reputation UI with subtle effects and improved layout
Details
- Moved featured badges to bottom right of profile hero
- Enhanced badge backgrounds with gradient overlays and radial glows
- Improved stats breakdown cards with better spacing and sizing
- Removed shimmer animation from progress bar
- Removed excessive glow animations for cleaner look
- Added subtle hover effects without overdoing transforms
- Improved icon backgrounds with consistent styling
- Better gradient usage throughout for visual depth
0bd47e4 -
Fix
10:39 AM
Corrected level calculation and improved admin reputation management
Details
- Fixed exponential level calculation (now properly scales to 100 levels)
- Added badge count display in leaderboard
- Fixed recalculate API to use same database connection
- Added getPdo() method to ReputationSystem for API access
- Display actual usernames instead of Steam IDs in admin panel
- Added test-badges.php for debugging reputation calculations
233f9bf -
Feature
10:23 AM
Enhanced reputation & badges system with 100 levels, featured badges, and Material Symbols
Details
- Upgraded to 100-level system with exponential scaling (15% per level)
- Replaced all emoji icons with Material Symbols for consistency
- Added Steam playtime integration for accurate tracking
- Implemented featured badges system (max 5) displayed in profile hero
- Color-coded badges by category (gold/purple/green/pink/blue/etc)
- Added badge management modal with blur backdrop and animations
- Extended badge tiers: creator (5000 packages), downloads (100M), playtime (50k hours)
- Improved badge sorting by category color for visual organization
- Added API endpoint for featured badge management
- Enhanced UI with hover effects, checkmarks, and color-coded borders
7a72192 -
Feature
9:25 AM
Implement Tippy.js tooltips and remove counter animations
Details
- Add Tippy.js with Popper.js for tooltips
- Create tippy-init.js for centralized tooltip management
- Add custom Tippy CSS with theme support
- Auto-convert title attributes to Tippy tooltips
- Remove duplicate tooltip implementations (microtip, custom CSS)
- Clean up theme-manager.js tooltip code
- Disable footer stats counter animation
6b01757 -
Fix
8:39 AM
Fix tooltips and org page full-width layout
Details
- Add Tippy.js with Popper.js for proper tooltips
- Initialize tooltips globally in footer
- Fix org pages to use full width (no sidebar)
- Add org-profile-wrapper class for org-specific styling
- Remove verbose comments from PHP and CSS files
188e60f -
Fix
8:07 AM
Fix profile system: sticky sidebar, widget/layout save, and data persistence
714316d -
Feature
7:03 AM
Remove GLightbox, fix package detail lightbox implementation
300e5f1
8
-
Feature
11:33 AM
Unify public pages layout and styling
Details
- Add breadcrumb navigation to new-user-guide page
- Add lazy loading to leaderboard avatar images
- Update api-doc page to use .public-page-container
- Remove inline styles from api-doc and about pages
- Add utility CSS classes for consistent styling
- Create comprehensive property-based test suite
- Achieve 92% test pass rate (66/72 tests passing)
All public pages now share consistent header, footer, breadcrumbs, typography, spacing, and theme support.
ba70971 -
Feature
3:39 AM
Unify layout structure for all informational pages
Details
- Add consistent about-container wrapper to all pages
- Add breadcrumb navigation where missing
- Standardize header/footer includes
- Ensure theme-manager.js loaded on all pages
- Unified spacing, typography, and responsive behavior
Pages updated: leaderboard, api-doc, changelog, release-notes
dd69014 -
Fix
2:53 AM
Sync API endpoints and fix bugs in reputation/version comparison
Details
- Fix ReputationSystem endpoint (removed non-existent getLevel/getNextLevelInfo)
- Fix VersionHistoryService fetchPackageVersions argument count
- Fix CacheManager::set argument order in VersionHistoryService
- Add missing package type endpoints to tests (addons, maps, models)
- Add user reputation/badges endpoints to test suite
- Remove invalid package compare test
- All 42 endpoints now passing
25f0744 -
Performance
2:38 AM
Standardize API routing and fix notifications caching
Details
- Centralized all API endpoints through /api.php/* router
- Updated 15+ frontend JS files to use standardized routing pattern
- Added 20+ missing routes: themes, profile-widgets, profile-analytics, etc.
- Fixed response format consistency across all endpoints
- Added proper error handling and table auto-creation
- Simplified .htaccess routing rules
- Fixed notifications cache issue with no-cache headers
- Created browser-based API endpoint tester tool
- All 29 endpoints now passing validation
Breaking changes:
- Removed direct /backend/api/*.php access patterns
- Standardized on /api.php/* for all API calls
12f052f -
Feature
1:46 AM
Add followed packages system with automatic notifications
Details
- Created /followed page mirroring favorites functionality
- Added followed_packages table and API endpoints
- Integrated with notification system for package updates
- Added follow/unfollow buttons on package pages
- Navigation links in header and settings page
- Automated background tasks for update detection
- WSL cron setup for scheduled tasks
- Updated .gitignore for dev setup files
0c6863c -
Fix
1:02 AM
Fix admin routing and preload warnings - Add proper /admin/ route handling - Set isAdminPage flag before head.php inclusion - Conditionally preload bundle-init.js and main.js only on non-admin pages
fa5cdc3 -
Fix
12:53 AM
Fix PWA install for desktop browsers with manual instructions fallback
08e330c -
Fix
12:34 AM
Fix notification system for favorited/followed package updates
Details
- Add PackageChangeDetector to detect package updates (Title, Version, Description, etc.)
- Add NotificationDispatcher to query both favorites and followed_packages tables
- Integrate change detection into refresh-worker.php cache refresh workflow
- Update frontend polling interval from 60s to 10s for real-time notifications
- Add toast notifications for new package updates with click-to-navigate
- Implement cache invalidation after notification creation
- Deduplicate users appearing in both favorites and follows tables
Fixes notification system to reliably fire when favorited or followed packages are updated.
1bd2f91
27
-
Performance
11:56 PM
Optimize page load performance
Details
- Extract 300+ lines of inline navigation JS to external file
- Add defer attribute to all non-critical scripts
- Reduce preload hints from 13+ to 8 critical resources
- Defer vendor CSS loading with async pattern
- Add font-display: swap to Google Fonts
- Remove Tools dropdown from header, simplify navigation
- Move leaderboard link to footer
- Clean up unused files (ajax-navigation, lazy-init, script-loader)
- Optimize vendor script loading order (chart.js before zoom plugin)
Performance improvements:
- LCP: 1.46s (target <1.2s)
- TTI: 910ms (target <1.5s)
- Eliminated render-blocking inline scripts
26718de -
Feature
10:47 AM
Complete admin panel overhaul with routing fixes and UI improvements
Details
- Fix admin routing to use clean URLs with trailing slashes
- Add proper HTML structure and favicons to all admin pages
- Integrate Cal-Heatmap library for professional activity visualization
- Fix cache health chart display and API response handling
- Fix user lookup to fetch from s&box API when needed
- Add log deletion functionality with confirmation
- Fix timestamp handling across admin tools
- Improve activity heatmap with modern card-based design
- Fix SQL queries to handle DATETIME format correctly
- Add comprehensive styling improvements across all admin pages
c71d937 -
Fix
9:22 AM
Fix admin auth check and improve moderation logs UI
Details
- Fixed moderation-logs.php to use isAdmin() function instead of checking session directly
- Added structured log parsing with timestamp, Steam ID, action, and reason extraction
- Improved UI with color-coded badges, collapsible JSON content, and better layout
- Added clear logs button with confirmation dialog and success/error messages
30f26c8 -
Feature
9:11 AM
Add widget content moderation and sidebar layout
Details
- Implement Steam-style profanity censorship ( symbols)
- Add external profanity word lists (1251+ words from trusted sources)
- Create widget validation system with URL auto-fixing
- Move widgets to dedicated sticky sidebar on right side
- Add 7 modern layout templates (Default, Creator, Gamer, etc.)
- Fix widget size persistence and auto-save
- Fix layout loading on page refresh
- Fix hidden containers staying hidden
- Add moderation logging for admin review
- Create profanity list update tool
- Add validation API endpoints
ad03679 -
Fix
7:23 AM
Fix d-none class conflicts in profile layout customization
Details
- Remove d-none class before setting inline display styles
- Add d-none class when hiding elements
- Fixes layout controls bar, drag handles, visibility button, theme controls, and modal visibility
- Resolves issue where !important CSS rule was overriding JavaScript inline styles
6ef36bf -
Feature
5:52 AM
Remove Activity Timeline feature completely
Details
- Deleted activity timeline page, JS, CSS, and manager class
- Removed all activity tracking from favorites, follows, and package views
- Cleaned up settings page, profile page, and navigation
- Removed API routes and documentation
- Dropped user_activity table and activity_timeline_enabled column
- Fixed 'Favorited Unknown Package' issue by passing package names
- Kept Recently Viewed feature as simpler alternative
7c5fbde -
Fix
5:20 AM
Fix βeta Tester badge styling - correct character encoding
38b034c -
Fix
5:17 AM
Fix Steam presence not showing on profiles
Details
- Add classList.remove('d-none') when rendering presence indicator
- Add classList.add('d-none') when hiding presence indicator
- Add .d-none and display utility classes to base.css
- Run steam_presence_settings table migration
985e3de -
Fix
5:08 AM
Fix all UI/UX issues: accessibility, touch targets, animations, forms, and loading states
98b1d63 -
Feature
4:29 AM
Complete API endpoint synchronization and consolidation
Details
Major Changes:
- Consolidated notifications, favorites, and package-info endpoints into main API router
- Fixed follow button persistence issue (data.data.is_following access)
- Added missing delete_all action for notifications
- Updated .htaccess and router.php for consistent routing
API Endpoints Added to Main Router (backend/api/api.php):
- GET/POST /api.php/notifications - Follow/unfollow packages/orgs, manage notifications
- GET/POST /api.php/favorites - Add/remove favorites with activity tracking
- GET /api.php/package-info - Package details proxy for notifications
Frontend Updates:
- Fixed 11 JavaScript files to use consistent /api.php/ paths
- Added initial follow status check on page load
- Fixed response property access (data.data.is_following)
- Removed debug logging after fixes verified
Routing Updates:
- Consolidated .htaccess rules for cleaner routing
- Updated router.php for dev server consistency
- Removed redundant routing rules
Documentation:
- Added 20 new endpoints to api-doc.php
- Documented notifications, favorites, reputation, and package-info APIs
- Total documented endpoints: 70+
Bug Fixes:
- Follow button now persists correctly across page reloads
- Delete all notifications now works (400 error fixed)
- Response structure consistent across all endpoints
Total Routes in Main Router: 50 endpoints Files Modified: 15 files
8ab7c41 -
Fix
4:03 AM
Fix all reference validation issues
Details
- Add missing includes/error.php template for auth error pages
- Generate missing Microsoft tile images (mstile-70x70, mstile-150x150, mstile-310x310)
- Standardize manifest references to /manifest.json across all files
- Remove duplicate favicon/site.webmanifest file
- Clean up commented-out auto-refresh.php include in index.php
- All file references now validated and working correctly
78eb4e9 -
Feature
3:50 AM
Cache system v2 - Complete overhaul with critical fixes
Details
Major Improvements:
- Unified cache system (migrated from dual file/SQLite to single SQLite)
- Cache stampede protection with probabilistic early expiration
- Cascade invalidation system with tag-based cache clearing
- Cache versioning with automatic schema migration
- Backoff strategy integration for intelligent retry logic
- Orphan detection and cleanup tool
- Enhanced monitoring with comprehensive metrics
Core Changes:
- backend/includes/cache_manager.php: Added getOrSet(), cascade methods, versioning
- backend/api/api.php: Migrated Cache class to use CacheManager
- backend/api/refresh-worker.php: Integrated BackoffStrategy with error handling
- backend/includes/api_functions.php: Updated to use getOrSet() and tags
- backend/api/package-info.php: Added stampede protection
New Features:
- admin/cache-management.php: Admin UI for cache invalidation
- backend/api/cache-invalidation-api.php: API endpoint for cache management
- tools/cleanup-orphaned-cache.php: Automated orphan detection tool
- tools/migrate-cache-schema.php: Schema migration script
Monitoring:
- backend/includes/CacheHealthMonitor.php: Enhanced metrics (miss rate, refresh stats, lock contention)
Documentation:
- CACHE_UPGRADE.md: Quick start guide
- CACHE_IMPROVEMENTS.md: Complete technical documentation
Cleanup:
- Removed test files (api-test.php, test.php, pwa-test.html, test-org-page.html)
- Consolidated documentation into comprehensive guides
Performance Targets:
- Cache hit rate: >80%
- Stale entries: <5%
- Refresh success rate: >95%
- Average response time: <100ms
Breaking Changes:
- Requires schema migration: php tools/migrate-cache-schema.php
f4f204f -
Fix
3:23 AM
Fix database schema integrity issues
Details
- Enhanced cache_tags table schema with proper id and created_at columns
- Fixed cache_tags table creation to handle existing tables correctly
- Verified all schema migrations are complete and working
- All database operations tested and passing (10/10 tests)
- Schema integrity verified (29/29 checks passed)
d356f10 -
Feature
3:15 AM
Add profile inactive detection system
Details
Implement comprehensive system to detect and display placeholder for profiles that have never been logged into or customized.
cd65f5d -
Fix
2:50 AM
Fix API endpoint synchronization and profile layout persistence
Details
- Added missing API routing rules to router.php for dev server
- /api/user/* -> profile-api.php
- /api/user-experience-api.php/* -> user-experience-api.php
- /api/community-api.php/* -> community-api.php
- /api/announcement-api.php/* -> announcement-api.php
- /api/theming-api.php/* -> theming-api.php
- /api/reputation/* -> api.php
- Added corresponding routing rules to .htaccess for production
- Fixed profile-api.php to use user_settings.profile_layout instead of profile_layouts table
- Updated profile-api.php route patterns to handle both /user/* and /* paths
- Fixed frontend JavaScript API calls:
- user-profile-redesign.js: Updated profile-layout endpoints
- version-history.js: Fixed package versions and compare endpoints
- Fixed saved_searches table creation in AdvancedSearchEngine.php
- Fixed profile welcome message to only show for truly empty profiles
- Fixed profile layout customization to persist correctly across reloads
- Layout now gracefully handles sections that don't exist on the page
0cf02df -
Fix
2:20 AM
Activity Timeline setting persistence and missing fetchUserProfile function
Details
- Added fetchUserProfile() function to api_functions.php for resolving usernames to Steam IDs
- Added CacheManager require to api_functions.php to fix undefined class error
- Fixed ActivityTimelineManager setEnabled() to use UPDATE instead of INSERT OR REPLACE
- Added activity_timeline_enabled column to user_settings schema and migration list
- Fixed saveUserSettings() to preserve activity_timeline_enabled when saving other settings
a4d43e3 -
Feature
2:09 AM
Activity Timeline opt-in, Recently Viewed fixes, and profile improvements
Details
- Activity Timeline now OFF by default (user must enable in Settings)
- Added database migration for activity_timeline_enabled setting
- Activity Timeline checks enabled status before recording/displaying
- Fixed Recently Viewed tracking and added missing DELETE endpoint
- Added new user welcome message for profiles with no custom layout
- Fixed profile layout container visibility toggles in Manage Containers
- Unavailable containers now clearly marked (no data available)
- Fixed Reputation & Badges section responsive layout
- Published Packages now shows packages from claimed orgs (up to 12 total)
- Added comprehensive logging to profile layout save/load
- Fixed 'Start Customizing' button to properly enable edit mode
79ae688 -
Feature
1:36 AM
Add activity tracking for follow features and enhance error logging
Details
- Add activity tracking for package follow/unfollow operations
- Add activity tracking for organization follow/unfollow operations
- Add TYPE_PACKAGE_FOLLOW constant to ActivityTimelineManager
- Enhance error logging in notifications, favorites, and profile analytics APIs
- Create log rotation utility (tools/rotate-logs.php)
- All follow actions now properly recorded in user activity timeline
4b0d340 -
Fix
1:28 AM
Fix API endpoint synchronization with enhanced error handling and rate limiting
Details
- Enhanced error handling in admin panels (reputation-management, index, org-claims-full)
- Added content-type checking before JSON parsing to prevent crashes
- Handle both JSON and plain text error responses (403, 429, 500)
- Added loading states and button state management
- Improved console error logging for debugging
- Added rate limit headers to recalculate-all-users-reputation endpoint
- Retry-After header for client retry guidance
- X-RateLimit-Remaining and X-RateLimit-Reset headers
- Better 429 response handling
- Enhanced API documentation (api-doc.php)
- Added response schema tables with field descriptions
- Added JSON response examples for endpoints
- Improved endpoint rendering with schema display
- Created centralized API client library (api-client.js)
- Consistent error handling across all API calls
- Automatic JSON parsing and validation
- Rate limit detection with retry information
- Custom ApiError class with helper methods (isAuthError, isRateLimitError, etc)
- Support for GET, POST, PUT, DELETE methods
- Query parameter building and header configuration
Impact: Prevents crashes, improves error handling, better developer experience
ece1104 -
Fix
1:12 AM
Fix reputation recalculation endpoint with batch processing and error handling
Details
- Add batch processing (100 users at a time) to prevent HTTP timeouts
- Fix JSON output by clearing output buffers and disabling error display
- Add proper error handling for failed API calls and null player data
- Suppress 404 errors for player endpoints (expected when users don't have s&box)
- Fix database locking issues by catching cache deletion errors
- Update frontend to show progress and process batches automatically
- Add offset/batch_size parameters for incremental processing
dad2167 -
Fix
12:27 AM
Fix active-users.php tab switching and error handling
89a00bf -
Fix
12:15 AM
Fix missing avatar images on leaderboard
Details
ISSUE: Users without avatars or with animated Steam avatars showed 404 errors
FIXES:
- Changed default avatar from /assets/default-avatar.png to /assets/placeholder.png (existing file)
- Added onerror handler to fallback to placeholder.png if avatar fails to load
- Created default-avatar.svg as additional fallback option
- Updated both leaderboard.php and reputation.js to handle missing avatars
Now all users display properly on the leaderboard even without profile pictures!
4cf1b29 -
Fix
12:13 AM
Fix reputation leaderboard API 500 error
Details
ISSUE: Leaderboard API was failing with 500 error due to missing columns
FIXES:
- Removed JOIN with user_settings table (doesn't have display_name/avatar)
- Modified getLeaderboard() to fetch user data from s&box API
- Added try-catch error handling to leaderboard endpoint
- Now fetches display names and avatars via fetchPlayerData()
- Falls back to steam_id if player data unavailable
The leaderboard now properly loads user data from the API instead of expecting it in the database.
6914793 -
Fix
12:11 AM
Fix leaderboard.php to properly load styles.css
Details
- Added proper HTML structure with head section
- Included styles.css using css() helper function
- Added meta tags and Google Analytics includes
- Follows same pattern as other standalone pages (news.php, changelog.php)
- Properly closes body and html tags
245f9b6 -
Feature
12:09 AM
Add leaderboard CSS to styles.css and clean up inline styles
Details
- Created frontend/css/leaderboard.css with all leaderboard page styles
- Added leaderboard.css import to styles.css
- Removed inline styles from leaderboard.php
- Proper CSS organization following project conventions
9c750bd -
Feature
12:07 AM
Add routing for leaderboard page
Details
- Added /leaderboard route to routing_logic.php
- Leaderboard page now accessible at http://5.66.186.198:8001/leaderboard
d5b8b11 -
Feature
12:06 AM
Implement Reputation System with full integration
Details
FULLY FUNCTIONAL REPUTATION SYSTEM:
- Integrated Reputation System into user profiles and site navigation
- Added comprehensive API endpoints for reputation data
- Created leaderboard page to showcase top contributors
- Enhanced profile display with badges and stats
API ENDPOINTS:
- GET /api.php/user/{steamId}/reputation - Get user reputation data
- GET /api.php/user/{steamId}/badges - Get user badges
- GET /api.php/user/{steamId}/reputation/history - Get reputation history
- GET /api.php/reputation/leaderboard - Get top users by reputation
- All endpoints include proper validation and error handling
LEADERBOARD PAGE:
- Created /leaderboard page with top 50/100 users
- Real-time data loading from API
- Medal indicators for top 3 users (gold, silver, bronze)
- User avatars, levels, and reputation scores
- Responsive design with mobile support
- Information section explaining how reputation works
PROFILE INTEGRATION:
- Reputation section already integrated in profile-reputation-section.php
- Displays reputation score, level, and progress bar
- Shows earned badges with categories and icons
- Stats breakdown (packages, downloads, playtime, achievements)
- Automatic reputation calculation on profile load
JAVASCRIPT ENHANCEMENTS:
- Created reputation.js module for interactive features
- Badge tooltip system with hover effects
- Progress bar animations
- Leaderboard rendering and filtering
- API integration for real-time data
NAVIGATION:
- Added Reputation Leaderboard link to Tools dropdown menu
- Easy access from any page on the site
REPUTATION CALCULATION:
- Based on packages created, downloads, favorites, ratings
- Includes s&box playtime, sessions, achievements, games played
- 12 level progression system (Newcomer to Legend)
- Multiple badge categories (creator, player, milestones, etc.)
- Automatic updates when user data changes
TESTING:
- Created comprehensive test script: tools/test-reputation-system.php
- Tests reputation retrieval, badge system, level calculation
- Verifies leaderboard and history functionality
- Validates API endpoints and database operations
FEATURES:
- Real-time reputation tracking and display
- Badge system with 50+ unique badges
- Level progression with visual indicators
- Leaderboard rankings with filtering
- Reputation history tracking
- Stats breakdown by category
- Responsive design for all devices
The Reputation System now provides gamification and recognition for community contributors!
91cf50d
7
-
Performance
11:15 PM
Improve admin tools UX with button states and accessibility
Details
- Add hover states for btn-secondary, btn-warning, and btn-danger
- Add focus-visible outline for keyboard navigation
- Fix truncated footer include in cache-health.php
- Fix API cache_size conversion from MB to bytes
- Ensure all admin pages use styles.css for consistent styling
7fee8a9 -
Feature
11:04 PM
Complete rebuild of admin tools section with modern design
Details
- Rebuilt all 5 admin pages from scratch (user-lookup, log-viewer, activity-heatmap, bulk-actions, cache-health)
- Implemented modern card-based layout with gradient headers and Material Symbols icons
- Added real-time updates with auto-refresh capabilities
- Created comprehensive admin-tools.css with smooth animations and transitions
- Redesigned activity heatmap to horizontal GitHub-style layout (days across top, hours down side)
- Added toast notifications for user feedback
- Implemented loading states, empty states, and error handling
- Added hover effects, shimmer animations, and visual polish
- Fixed API type mismatch errors in activity heatmap
- All pages now use unified styles.css for consistent theming
- Responsive design with mobile-optimized layouts
- Better data visualization with charts and progress bars
- Improved UX with debounced search, keyboard shortcuts, and smooth scrolling
a48a5ce -
Performance
4:48 AM
Precaching gubbins
dc2ac42 -
Feature
3:54 AM
Quirk Chungus
Details
Loadsa stuff
4ab2d25 -
Feature
2:20 AM
Improve package pages and organization hero sections
Details
- Add favorite button to package detail pages alongside follow button
- Update button text to 'Favorited' with dimmed styling when active
- Modernize package detail meta layout with left-aligned design
- Use organization avatar as hero background instead of gradient
- Improve visual consistency across all action buttons and stats
- Ensure all elements are properly aligned (44px height standard)"
4799cd3 -
Feature
1:51 AM
Complete organization pages overhaul with AJAX filtering and pagination
Details
Major improvements to organization pages for better UX and performance:
Features:
- AJAX-based filtering for smooth content loading without page reload
- AJAX-based pagination with page numbers (1, 2, 3, ..., 151)
- Browser back/forward button support with AJAX
- Follow button now works correctly and persists state
- Increased items per page from 9 to 12
- Favorite buttons work on dynamically loaded content
Bug Fixes:
- Fixed filter button selector (.filter-btn vs .org-filter-btn)
- Fixed follow button selector (.profile-follow-btn vs .follow-org-btn)
- Fixed follow button text update when no .btn-text element exists
- Added null checks to prevent JavaScript errors
- Filter parameter now preserved in pagination links
UI Improvements:
- Added styled page numbers to pagination
- Active page highlighted with gradient
- Smooth fade transitions during content load
- Clean pagination layout with Previous/Next buttons
- Ellipsis (...) for large page ranges
Performance:
- Only replaces .profile-packages-section instead of full page reload
- Reinitializes favorites, comparison, and lazy loading after AJAX
- Maintains scroll position and URL state
- Smooth animations and transitions
Files Modified:
- frontend/js/org-page.js - AJAX filtering and pagination
- frontend/js/org-follow.js - Follow button fixes
- frontend/js/favorites.js - Event capture phase
- frontend/js/package-comparison.js - Event capture phase
- frontend/user-profile-redesign.php - Pagination with page numbers
- frontend/css/user-profile-redesign.css - Page number styles
- backend/includes/routing_logic.php - 12 items per page, filter logic
- index.php - Cache-busting, follow button selector
Documentation:
- Added FINAL_FIX_SUMMARY.md
- Added DEBUGGING_GUIDE.md
- Added ORG_PAGE_FIX_SUMMARY.md
- Added QUICK_REFERENCE.md
d228b15 -
Feature
1:07 AM
Add profile activity feed implementation (disabled) and test tool
84503a7
28
-
Feature
9:45 PM
Add premium visual enhancements: animations, gradients, hover effects, and polish
a2cb21a -
Feature
9:32 PM
Add automatic s&box ownership badge detection on Steam login
d7eb864 -
Feature
9:18 PM
Add early adopter badge detection and implement all new badge tier checks
6fa3240 -
Feature
9:15 PM
Add badge rarity system and sort badges by rarity (rarest first)
47c8c88 -
Feature
9:12 PM
Add 70+ new achievement badges across 15 categories for future-proofing
e68dcef -
Fix
9:08 PM
Fix getBadges to return full badge metadata (name, description, icon)
eab0b78 -
Feature
9:05 PM
Add Steam API playtime integration for accurate s&box playtime stats
cff66b7 -
Fix
8:58 PM
Fix 500 error in manual org assignment - add missing api_functions.php dependency and timeout protection
b032eea -
Performance
8:50 PM
Expand badge and reputation system with new tiers and sbox stats
Details
- Extended level progression from 7 to 12 levels (up to 100K+ points)
- Added 30+ new badges across 8 categories (player, achievements, collection, playtime, exploration, skill)
- Integrated 6 new sbox stats: sessions, achievements, favorites, playtime, games played, score
- Implemented balanced scoring system with proper weighting for all stats
- Removed org requirement - all users can now earn badges and reputation
- Added stats breakdown display on user profiles
- Created admin reputation management dashboard with leaderboard
- Added API endpoints for all-user recalculation and individual user init
- Implemented schema migration tool for database updates
- Enhanced CSS with badge categories and responsive layouts
- All features accessible to users with or without claimed organizations
fbf783f -
Feature
8:36 PM
Add reputation system with org-specific badges and notification improvements
Details
- Add reputation calculation system based on claimed organization packages
- Add special badges for organization ownership (Facepunch Staff, Valve Staff, etc.)
- Add automatic reputation updates when orgs are claimed/assigned
- Add manual reputation recalculation API endpoint and admin buttons
- Add 'Remove All' notifications button with deleteAllNotifications API
- Add comprehensive API tools section to admin panel with all backend endpoints
- Fix missing api_functions.php include in reputation calculation
- Enhance notification system with Material Symbols icons
- Add reputation update triggers in org claims moderation workflow
9c2f1fe -
Feature
6:27 PM
Add advanced analytics API modules
Details
- analytics-advanced.php: Core advanced metrics including cache efficiency, cohort analysis, funnel metrics, user journey, and predictive analytics
- analytics-advanced2.php: User segmentation, performance percentiles, cache lifecycle, behavior patterns, session quality, peak analysis, and churn metrics
- analytics-advanced3.php: Engagement scoring, cache optimization suggestions, anomaly detection, user lifetime value, session flow, and comparative analysis
These modules provide comprehensive analytics capabilities for the admin dashboard with detailed insights into user behavior, system performance, and cache optimization.
c62a993 -
Feature
6:21 PM
Update new user guide with current features and org claiming info
Details
- Moved Reputation & Badges to main features section
- Added emphasis on claiming organizations to unlock reputation tracking
- Removed admin-only features (Admin Tools, Broadcast Notifications)
- Added UGC Charts, Changelog, Version History, and Dependency Visualization features
- Updated pro tips to highlight organization claiming for reputation system
- Improved feature descriptions to be more accurate and user-focused
6889cfc -
Feature
6:11 AM
Add comprehensive analytics dashboard system with advanced features
Details
## New Features
### Standard Analytics Dashboard (/admin/analytics.php)
- Real-time metrics with auto-refresh (60s)
- Executive summary with AI-generated insights
- 12+ core metric cards (users, sessions, cache, performance)
- Interactive time range selection (24h, 7d, 30d, all-time)
- Activity timeline visualization
- Popular packages tracking
- Cache type breakdown
- User engagement analysis (new vs returning users)
- Retention metrics (multi-session vs single-session)
- Session duration analysis (short/medium/long)
- Hourly activity distribution chart
- Top 20 active users leaderboard
- Cache efficiency metrics with compression rates
- Trend analysis vs previous period
- Cache operation performance breakdown
- Export to JSON functionality
- Print-friendly layout
- Keyboard shortcuts (Ctrl+R refresh, Ctrl+E export)
### Advanced Analytics Dashboard (/admin/analytics-advanced.php)
- **Real-Time Monitoring Tab:**
- Live data updates every 5 seconds
- Active users (1min & 5min windows)
- New sessions tracking
- Cache operations counter
- Response time monitoring
- Recent activity feed with avatars
- System memory usage
- **Predictions Tab:**
- Machine learning-based user growth forecasts (7d & 30d)
- Daily growth rate calculations
- Trend detection (growing/declining/stable)
- Volatility analysis with confidence scoring
- Best days for traffic identification
- Peak hours analysis (top 3)
- Cache growth predictions
- AI-generated recommendations
- **Comparison Tab:**
- Flexible period-over-period comparison
- Side-by-side metrics visualization
- Percentage and absolute change tracking
- Trend indicators (up/down/stable)
- Visual comparison grids
- **Behavior Tab:**
- User segmentation (power/regular/casual/inactive)
- Churn analysis (active/at-risk/churned)
- User journey metrics
- Session distribution analysis
- Lifetime value calculations
- Cohort analysis
## Backend APIs
### analytics-api.php
- Main analytics endpoint with comprehensive metrics
- User statistics with growth tracking
- Cache performance metrics
- Session analytics
- Performance monitoring
- Popular packages tracking
- Activity timelines
- User engagement calculations
- Retention metrics
- Hourly distribution
- Top users ranking
- Cache efficiency analysis
- Trend analysis
- Geographic distribution
### analytics-realtime.php
- 5-second refresh real-time data
- Active user tracking
- New session monitoring
- Cache operations counting
- Response time tracking
- Recent activity logging
### analytics-predictions.php
- Predictive analytics engine
- Growth rate calculations
- Trend detection algorithms
- Volatility analysis
- Confidence scoring
- Pattern recognition (best days/hours)
- Cache growth forecasting
- Automated recommendations
### analytics-comparison.php
- Period-over-period comparison
- Flexible time range selection
- Metric change calculations
- Trend direction analysis
### analytics-behavior.php
- Cohort analysis
- User journey tracking
- Churn rate calculations
- User segmentation
- Lifetime value metrics
## Technical Improvements
- Efficient database queries with proper indexing
- No new database tables required
- Uses existing infrastructure
- Optimized for large datasets
- Admin-only access with proper authentication
- Privacy-safe IP hashing
- Responsive design for all screen sizes
- Print-friendly CSS
- Loading states and error handling
- Empty state messages
- Smooth animations and transitions
- Color-coded metrics
- Professional UI/UX
## Security
- Admin authentication on all endpoints
- CSRF protection inherited from existing system
- Safe data handling
- No SQL injection vulnerabilities
- Privacy-compliant data processing
## Performance
- Minimal server overhead
- Caching where appropriate
- Optimized queries
- Efficient data processing
- Auto-refresh with configurable intervals
## Access Points
- Standard Analytics: /admin/analytics.php
- Advanced Analytics: /admin/analytics-advanced.php
- Links added to admin panel Quick Actions
This comprehensive analytics system provides enterprise-grade insights, predictive forecasting, and actionable business intelligence for the s&box Explorer platform.
2606130 -
Feature
5:07 AM
Add comprehensive org claiming security improvements document
Details
Created detailed design doc for preventing reputation abuse:
Quick Wins (Implement Soon):
- Protect top 20 organizations
- Rate limiting: 1 claim per day
- Claim limits: Max 5 orgs per user
- Audit logging for all claims
Proposed Solutions: 1. Admin approval system (recommended) 2. Email verification 3. s&box API integration 4. Reputation limits 5. Community reporting 6. Proof of ownership
Implementation Plan:
- Phase 1: Rate limits, protected orgs, logging
- Phase 2: Admin approval system
- Phase 3: Automated verification
Database schema updates included for audit logs and approval workflow.
Priority: HIGH - Should be implemented before public launch to prevent fraud.
12c586e -
Feature
5:03 AM
Add unclaim support to debug API and use it for unclaim button
Details
- Added unclaim action to claimed-orgs-debug.php
- Updated unclaim button to use debug version
- Will log unclaim attempts to help debug the 500 error
Try removing an org now and check data/claim-debug.log to see what happens.
350baa6 -
Fix
5:01 AM
Fix claimed-orgs API by removing problematic output buffering
Details
Root Cause:
- Output buffering (ob_start/ob_clean/ob_end_flush) was causing issues
- The debug version without buffering works perfectly
- Log shows successful claim: voxels org with 12 packages
Fix:
- Removed all output buffering code
- Simplified to just require bootstrap and set header
- Matches the working debug version structure
Verified Working:
- Debug log shows successful claim of 'voxels' organization
- Authentication working
- Database connected
- 12 packages found
- Org claimed successfully
The API should now work properly without the 500 error.
7e0447f -
Feature
5:00 AM
Add debug version of claimed-orgs API with detailed logging
Details
Created claimed-orgs-debug.php:
- Logs every step of the process to data/claim-debug.log
- Shows exactly where the error occurs
- Logs all request data, authentication status, database queries
- Captures full exception details with stack trace
Temporarily updated settings.php to use debug version
To check logs after attempting to claim:
- Look at data/claim-debug.log
- Shows timestamp, action, and any errors
This will help identify the exact cause of the 500 error.
be48218 -
Fix
4:59 AM
Fix output buffering issue in claimed-orgs API
Details
Issue:
- ob_clean() was clearing ALL output including session data
- This caused authentication to fail silently
- Result: 500 error with empty JSON response
Fix:
- Only clean buffer if there's unwanted output
- Check if output starts with '{' (JSON) before cleaning
- Suppress notices and warnings instead of displaying them
- Keep output buffer but don't blindly clear it
Added Test Scripts:
- test-claim.php: Tests all dependencies
- test-claim-simple.php: Minimal API test
This should resolve the 500 error by preserving session data while still catching unwanted output.
0466e1a -
Feature
4:56 AM
Add protection for Facepunch and Valve organizations
Details
Protected Organizations:
- Facepunch: Requires 'facepunch_staff' user tag
- Valve: Requires 'valve_employee' user tag
How It Works: 1. User attempts to claim protected org 2. System checks if user has required tag via steam_tags.php 3. If user doesn't have tag, returns 403 Forbidden 4. Clear error message explains why claim was denied
Error Messages:
- 'You cannot claim the Facepunch organization. Only verified Facepunch staff can claim this organization.'
- 'You cannot claim the Valve organization. Only verified Valve employees can claim this organization.'
Benefits:
- Prevents reputation fraud
- Protects official organizations
- Uses existing user tag system
- Easy to add more protected orgs
- Clear feedback to users
To Add More Protected Orgs: Just add to the \ array: 'orgname' => 'required_tag'
dcb64e4 -
Feature
4:55 AM
Add output buffering and better error handling to claimed-orgs API
Details
Debugging Improvements:
- Added output buffering to catch any warnings/errors before JSON output
- Clear buffer before sending JSON response
- Added database null check
- Enhanced error logging with file and line number
- Added stack trace logging
- Added test endpoint for debugging
Test Endpoint:
- GET/POST with action=test
- Returns API status, database connection, and function availability
- Useful for debugging 500 errors
Error Response Now Includes:
- Error message
- File name where error occurred
- Line number
- Stack trace in logs
This should help identify what's causing the 500 error by ensuring clean JSON output and providing detailed error information.
357ab40 -
Feature
4:54 AM
Add cache check and background refresh for claimed orgs
Details
New Features:
- Checks if organization is in cache when claiming
- Triggers background refresh if org not cached
- Uses async curl request with 100ms timeout (non-blocking)
- Informs user if data is being cached in background
- Returns 'cached' flag in response
How It Works: 1. User claims an organization 2. System checks if org data is in cache 3. If not cached, triggers background refresh worker 4. User gets immediate success response 5. Message indicates if data is being cached 6. Reputation updates once cache is populated
Benefits:
- Ensures fresh data for newly claimed orgs
- Non-blocking - doesn't slow down claim operation
- User knows if they need to wait for data
- Automatic cache population for better performance
Example Response: { 'success': true, 'message': 'Organization claimed successfully. Data is being cached in the background - reputation will update shortly.', 'org_ident': 'myorg', 'claimed_at': 1234567890, 'cached': false }
88c9dcd -
Fix
4:53 AM
Fix 500 error in claimed-orgs API with better error handling
Details
Improvements:
- Added file existence check for user_packages.php
- Added function existence check for fetchUserPackages
- Wrapped fetchUserPackages calls in try-catch blocks
- Made reputation calculation non-blocking (won't fail claim/unclaim if it errors)
- Added detailed error logging for debugging
- Each org fetch is wrapped individually so one failure doesn't stop others
- Claim/unclaim operations succeed even if reputation update fails
This prevents the 500 error and ensures the core functionality (claiming/unclaiming orgs) always works, even if reputation calculation has issues.
f6550b6 -
Feature
4:48 AM
Implement organization claiming system for reputation
Details
New Feature: Claim Organizations
- Users can now claim their s&box organizations in Settings
- Claimed orgs link to user profiles for reputation calculation
- Reputation points earned from all claimed organizations
Database:
- Added claimed_orgs table with steam_id and org_ident
- Indexes for fast lookups
- Unique constraint prevents duplicate claims
Settings Page:
- New 'Claimed Organizations' section in Account tab
- Input field to claim organizations by name
- List of currently claimed orgs with remove buttons
- Validates org exists on s&box.game before claiming
API Endpoint (/backend/api/claimed-orgs-api.php):
- claim: Add organization to user's claimed list
- unclaim: Remove organization and recalculate reputation
- list: Get all claimed orgs for a user
- Validates org exists via s&box API
- Auto-recalculates reputation on claim/unclaim
Reputation Calculation:
- Aggregates stats from ALL claimed organizations
- Counts total packages, downloads, favorites, upvotes
- Updates reputation automatically when orgs are claimed/unclaimed
- Profile reputation section now uses claimed orgs data
How It Works: 1. User enters org name (e.g., 'pcjr') in Settings 2. System validates org exists on s&box.game 3. Org is linked to user's Steam ID 4. Reputation calculated from all claimed org packages 5. Badges awarded based on combined stats
Example:
- User claims 'pcjr' org with 10 packages
- Each package has downloads, favorites, upvotes
- All stats combined for reputation calculation
- User earns badges based on total achievements
This solves the issue where users couldn't get reputation credit for their organization's packages!
8be15d2 -
Fix
4:42 AM
Fix reputation system 500 error
Details
Issues Fixed:
- Changed from \['steamId'] to \['resolvedSteamId']
- Added fallback to username if resolvedSteamId not available
- Added null check before attempting to load reputation
- Wrapped reputation system calls in try-catch for error handling
- Added error logging for debugging
The reputation system now properly handles the user profile data structure and won't crash if there are any issues loading reputation data.
a68d5d2 -
Feature
4:40 AM
Implement reputation and badge system on user profiles
Details
New Features:
- Reputation system now fully integrated into player profiles
- Displays reputation score, level, and progress to next level
- Shows earned badges with icons and descriptions
- Automatic reputation calculation based on:
- Packages created (10 points each)
- Total downloads (1 point per 100 downloads, max 1000)
- Favorites received (5 points each)
- Ratings received (2 points each)
Badge System:
- First Package: Created your first package
- Package Creator: Created 5 packages
- Prolific Creator: Created 20 packages
- Popular: 1,000+ downloads
- Viral: 10,000+ downloads
- Community Favorite: 100+ favorites
- Rising Star: 500+ reputation
- Veteran: 2,500+ reputation
- Legend: 10,000+ reputation
Level System:
- Level 1: 0-99 points
- Level 2: 100-499 points
- Level 3: 500-999 points
- Level 4: 1,000-2,499 points
- Level 5: 2,500-4,999 points
- Level 6: 5,000-9,999 points
- Level 7: 10,000+ points (max level)
Implementation:
- Created profile-reputation-section.php component
- Added reputation.css with beautiful gradient designs
- Integrated into user profile pages (player profiles only)
- Progress bar shows advancement to next level
- Responsive design for mobile devices
- Badges displayed in grid with hover effects
The ReputationSystem class was already built but unused - now it's fully integrated and visible to users!
cffbefc -
Feature
4:38 AM
Remove unimplemented features from new user guide
Details
Removed:
- Reputation & Badges system (class exists but not used anywhere)
- Dependency Graph visualization (not implemented in UI)
Replaced with:
- UGC Charts (actually functional with link to /ugc-charts)
- Detailed Package Info (describes existing package detail pages)
This ensures the guide only shows features that actually work, preventing user confusion and disappointment when they try to use non-existent features.
7ea9d79 -
Feature
4:27 AM
Complete notifications system implementation
Details
Features Added:
- NotificationManager: Core PHP class for notifications and following
- Follow system for packages and organizations
- Notification center with all user notifications
- Bell icon with real-time unread count in header
- Followed packages/orgs page with unified view
- Admin broadcast notification system
- Toast notifications for user feedback
- Organization follow buttons with status tracking
API Endpoints:
- /api/notifications/* - CRUD operations for notifications
- /api/follow/* - Follow/unfollow packages and organizations
- Package info proxy for thumbnail fetching
Frontend Components:
- notifications.js - Notification center manager
- org-follow.js - Organization follow functionality
- notification-bell.js - Header bell with unread count
- toast-manager.js - Global toast system
- Enhanced CSS for all notification components
Admin Tools:
- broadcast-notification.php - Send site-wide announcements
- Test notification creation tool
Database:
- followed_packages table
- followed_orgs table
- notifications table with types and read status
Routing:
- /notifications/all - View all notifications
- /notifications/following - View followed items
- Proper API routing for all endpoints
31404fd -
Feature
4:27 AM
Update new user guide to reflect current features
Details
- Replace Collections feature with Admin Tools section
- Update Admin Dashboard card to highlight Broadcast Notifications
- Clarify notification system with specific URLs and bell icon details
- Refine tips for follow system, PWA installation, and lazy loading
- Remove references to unimplemented features
- Ensure guide accurately represents production-ready functionality
3b7595c
Generated from the project's commit history whenever the site is deployed. Times are server time.