PLEASE NOTE, YOU NEED TO ENABLE THE FOLLOWING APACHE MODULES AND ADD THE APPROPRIATE CONFIGURATIONS AND ALSO DOWNLOAD PHP_APCU EXTENSION IN ORDER TO USE THIS CMS!!!!!!!
In apache's httpd.conf: remove the '#' from these three loadmodule configs in 80.conf and httpd.conf (some might already be enabled by default):
LoadModule expires_module modules/mod_expires.so
LoadModule filter_module modules/mod_filter.so
LoadModule http2_module modules/mod_http2.so
LoadModule headers_module modules/mod_headers.so
at the bottom (anywhere at the bottom of httpd.conf) add:
Protocols h2 http/1.1
<IfModule mod_expires.c>
ExpiresActive On
# Safe default
ExpiresDefault "access plus 1 hour"
# Long cache for versioned static assets
ExpiresByType text/css "access plus 1 year"
ExpiresByType application/javascript "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/webp "access plus 1 year"
ExpiresByType font/woff2 "access plus 1 year"
# HTML short so deploys are not a lottery
ExpiresByType text/html "access plus 5 minutes"
</IfModule>
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE \
text/html text/plain text/xml text/css \
application/javascript application/json application/xml \
application/rss+xml application/ld+json
# Don’t recompress things that are already compressed or binary blobs
SetEnvIfNoCase Request_URI "\.(?:gif|jpe?g|png|webp|avif|mp4|mp3|avi|mov|pdf|ico|zip|gz|bz2|7z|woff2?)$" no-gzip dont-vary
Header append Vary Accept-Encoding
</IfModule>
A comprehensive content management system that recreates the historical steampowered.com website from 2002 to 2010, pixel for pixel and link for link. This CMS supports multiple themes representing different years and provides a modern admin interface for managing content.
- Pixel-perfect recreation of Steam websites from 2002-2010
- Multiple theme support with year-specific variants (2002, 2003, 2004, 2005, 2006, 2007, 2008)
- Original asset preservation including images, CSS, and JavaScript
- Authentic navigation and user interface elements
- Twig templating engine with extensive custom tags
- MariaDB/MySQL database with normalized schema
- Admin interface with role-based permissions
- Content management for news, pages, storefront items, and more
- Cache system with automatic invalidation
- Plugin architecture for extensibility
- News articles with multiple display formats
- Custom pages with theme-specific layouts
- Storefront capsules and game information
- Sidebar sections and promotional content
- Random and scheduled content blocks
- Tournament calendars and event management
- PHP 8.x with PDO support
- MariaDB/MySQL 8.x
- Web server (Apache/Nginx)
- At least 1GB disk space for themes and assets
- Extract files to your web server document root
- Import the database schema from
sql/directory - Copy
cms/config.sample.phptocms/config.phpand configure database settings - Set proper file permissions for cache directories
- Access
/cms/admin/to begin configuration
The CMS provides an extensive library of template tags for creating theme templates. See TAGS.md for complete documentation.
{{ header() }} {# Site header with navigation #}
{{ news('full_article', 5) }} {# Display 5 full news articles #}
{{ sidebar_section('search') }} {# Sidebar search section #}
{{ footer() }} {# Site footer #}{# 2006 theme features #}
{{ join_steam_block('2006') }}
{{ capsule_block('large') }}
{# 2008 theme features #}
{{ header_2008() }}
{{ sidebar_2008_search() }}
{{ large_capsule_flash_2008() }}{{ random_sidebar }} {# Random content from 'sidebar' group #}
{{ scheduled_feature }} {# Scheduled content with 'feature' tag #}- News Management (
/cms/admin/news.php) - Create and edit news articles - Custom Pages (
/cms/admin/custom_pages.php) - Manage static pages - Storefront (
/cms/admin/storefront_main.php) - Configure game capsules and store content - Sidebar Sections (
/cms/admin/index_sidebar_management.php) - Customize sidebar content
- Settings (
/cms/admin/settings.php) - Global CMS settings - Theme Management (
/cms/admin/theme.php) - Switch between historical themes - Header/Footer (
/cms/admin/header_footer.php) - Configure navigation and branding - Performance (
/cms/admin/performance.php) - Cache and optimization settings
- Admin Users (
/cms/admin/admin_users.php) - Manage administrator accounts - Roles (
/cms/admin/roles.php) - Configure permissions and access levels
themes/
├── 2004/
│ ├── templates/ # Twig template files
│ ├── assets/ # CSS, JS, and images
│ └── config.php # Theme configuration
├── 2006_v1/
├── 2007_v2/
└── 2008/
Templates use Twig syntax with custom CMS tags:
<!DOCTYPE html>
<html>
<head>
<title>{{ html_title() }}</title>
<link rel="stylesheet" href="{{ CSS_PATH }}">
</head>
<body>
{{ header() }}
<div class="content">
{% block content %}{% endblock %}
</div>
{{ footer() }}
</body>
</html>Each theme includes a config.php file with settings:
<?php
return [
'news_count' => 10,
'sidebar_width' => 250,
'enable_flash' => false
];The CMS supports plugins for extending functionality without modifying core files.
plugins/
└── my_plugin/
└── plugin.php
<?php
// Register admin page
cms_register_admin_page('my_plugin', 'My Plugin', function() {
echo '<h2>My Plugin Settings</h2>';
});
// Register template tag
cms_register_template_tag('my_tag', function($text) {
return '<strong>' . htmlspecialchars($text) . '</strong>';
});
// Add event hook
cms_add_hook('template_post_render', function($html) {
return $html . '<!-- My plugin was here -->';
});The CMS includes an advanced caching system with:
- File timestamp validation - Cache automatically invalidates when source files change
- Automatic clearing - Cache clears on admin saves and updates
- Namespace support - Separate cache areas for different content types
- Source file tracking - Dependencies tracked for intelligent invalidation
Cache is managed automatically but can be controlled via:
- Performance Settings - Enable/disable caching globally
- Admin Interface - Cache status and manual clearing options
- API Functions -
cms_clear_all_caches()for programmatic control
news- News articles and contentcustom_pages- Static pages and custom contentsettings- Global configuration optionsadmin_users- Administrator accounts and permissions
theme_headers- Navigation and header contenttheme_footers- Footer content by themetheme_settings- Theme-specific configuration
store_apps- Game and application informationstorefront_capsules_all- Global storefront capsulesstorefront_capsules_per_theme- Theme-specific capsulesstore_categories- Product categories
sidebar_sections- Sidebar content blocksrandom_content- Random content poolscheduled_content- Time-based contenttournaments- Tournament and event data
- SQL injection protection via prepared statements
- XSS prevention through proper output escaping
- CSRF protection on admin forms
- Session management with secure tokens
- Role-based access control for admin functions
- Input validation and sanitization
- Template caching with source file dependency tracking
- CSS preprocessing and minification
- Database query optimization with indexed lookups
- Asset compression and browser caching headers
- Memory usage monitoring and optimization
├── cms/ # Core CMS files
│ ├── admin/ # Administrative interface
│ ├── utilities/ # Helper functions and tools
│ ├── cache/ # Cache storage directory
│ ├── db.php # Database abstraction layer
│ ├── template_engine.php # Twig integration and tags
│ └── plugin_api.php # Plugin system
├── themes/ # Theme files and assets
├── plugins/ # Plugin directory
├── sql/ # Database schema and migrations
├── tests/ # Test suite
└── tools/ # Development and maintenance tools
- Follow PSR-12 coding standards
- Use strict type declarations
- Implement comprehensive error handling
- Write tests for new functionality
- Document all public APIs
Run the test suite:
php tests/CacheInvalidationTest.php
phpunit --colors=alwaysWhen working on theme recreations:
- Reference original archive captures
- Maintain pixel-perfect layouts
- Preserve authentic user interactions
- Test across different screen resolutions
This project recreates historical Steam website designs for educational and preservation purposes. All Steam-related trademarks and assets belong to Valve Corporation.
For documentation, examples, and support:
- Review the TAGS.md for template tag reference
- Check FEATURES.md for implemented functionality
- See CHANGELOG.md for version history
- Visit the admin interface help sections
See CHANGELOG.md for detailed version history and feature additions.