Deploying a CMS Made Simple App
CMS Made Simple is an open-source content management system built with PHP and the Smarty templating engine. It keeps content, functionality, and design completely separated, providing a flexible and user-friendly platform for managing websites without requiring coding knowledge from content editors. Whether you’re building a corporate website, blog, portfolio site, or community platform, CMS Made Simple offers an intuitive interface for content management combined with powerful extensibility for developers.
The platform is designed for three key audiences: editors who need simple, straightforward tools to manage content; designers who want complete freedom to create custom designs; and developers who need a modular, extensible platform with a comprehensive API. With a large ecosystem of third-party modules and plugins, CMS Made Simple can be extended to support blogging, newsletters, e-commerce, member areas, content syndication, and many other features. The GPL-v3 license ensures it remains open-source and community-driven, with an active forum and Slack community providing support.
Key Features
- User-Friendly Admin Interface: Intuitive web-based interface for managing pages, content, and settings without technical knowledge
- Smarty Templating Engine: Powerful separation of content, logic, and presentation for maximum design flexibility
- No Design Restrictions: Any design created with HTML and CSS can be implemented as a CMS Made Simple theme
- Modular Architecture: Extensible plugin and module system for adding custom functionality
- Page Hierarchy: Organize content into parent-child page relationships for intuitive site structure
- Content Versions: Track and restore previous versions of pages and content with version history
- Permission System: Role-based access control for editors, administrators, and content managers
- SEO Friendly: Built-in support for metadata, URL aliases, and search engine optimization features
- Multi-language Support: Create and manage multi-language websites with translation management
- Content Tagging: Tag and categorize content for improved organization and discoverability
- User Management: Create editor accounts with granular permissions and access control
- Extensible API: Comprehensive API for developing custom modules and plugins
- Third-Party Modules: Large ecosystem of community modules for blogs, newsletters, galleries, and more
- Flexible Content Types: Create custom content types beyond standard pages
- URL Routing: Customize URL structure with friendly URLs and aliases
- Search Functionality: Built-in search capability with full-text indexing
- Media Management: Upload and manage images, documents, and other media files
- Template Caching: Performance optimization through template and output caching
- Backup and Restore: Export and backup site content for disaster recovery
- Security Features: Input validation, XSS protection, and CSRF token protection
Prerequisites
To deploy CMS Made Simple on Klutch.sh, ensure you have the following:
- An active Klutch.sh account with access to the dashboard at klutch.sh/app
- A GitHub repository for version control
- PHP 7.4+ runtime environment (provided by Klutch.sh Docker image)
- MySQL or PostgreSQL database for content storage
- Basic understanding of web servers and hosting concepts
- Access to manage persistent storage for uploaded media files
- Familiarity with Docker and containerization
Important Considerations
Deployment Steps
Create the Dockerfile
Create a
Dockerfilein the root directory of your repository:FROM php:8.1-apache# Enable required PHP extensionsRUN apt-get update && apt-get install -y \libmysqlclient-dev \libpq-dev \zlib1g-dev \libpng-dev \libjpeg-dev \&& docker-php-ext-install \mysqli \pdo_mysql \pdo_pgsql \gd \&& apt-get clean && rm -rf /var/lib/apt/lists/*# Enable Apache modulesRUN a2enmod rewriteRUN a2enmod headers# Set working directoryWORKDIR /var/www/html# Copy CMS Made Simple sourceCOPY . .# Create necessary directories for uploads and cacheRUN mkdir -p /var/www/html/uploads && \mkdir -p /var/www/html/tmp# Set proper permissionsRUN chown -R www-data:www-data /var/www/html && \chmod -R 755 /var/www/html && \chmod -R 775 /var/www/html/uploads && \chmod -R 775 /var/www/html/tmp# Create Apache configurationRUN cat > /etc/apache2/sites-available/000-default.conf << 'EOF'<VirtualHost *:80>ServerName localhostDocumentRoot /var/www/html<Directory /var/www/html>Options -Indexes +FollowSymLinksAllowOverride AllRequire all granted</Directory>ErrorLog ${APACHE_LOG_DIR}/error.logCustomLog ${APACHE_LOG_DIR}/access.log combined</VirtualHost>EOF# Expose HTTP portEXPOSE 80# Health checkHEALTHCHECK --interval=30s --timeout=10s --start-period=10s --retries=3 \CMD curl -f http://localhost/ || exit 1# Start ApacheCMD ["apache2-foreground"]This Dockerfile sets up a PHP environment with Apache and all necessary extensions for CMS Made Simple.
Create Installation Script
Create an
entrypoint.shfile to handle initialization:#!/bin/bashset -eecho "Preparing CMS Made Simple environment..."# Check if CMS Made Simple is already installedif [ ! -f "/var/www/html/config.php" ]; thenecho "CMS Made Simple appears to be uninitialized."echo "Please complete the installation through the web interface."elseecho "CMS Made Simple installation found, starting application."fi# Ensure proper permissionschown -R www-data:www-data /var/www/htmlchmod -R 775 /var/www/html/uploadschmod -R 775 /var/www/html/tmp# Start Apacheexec apache2-foregroundYou can update the Dockerfile CMD to use this script if custom initialization is needed.
Create Environment Configuration File
Create an
.env.examplefile with configuration variables:# CMS Made Simple ConfigurationCMS_SITE_NAME=My WebsiteCMS_ADMIN_EMAIL=admin@example.com# Database ConfigurationDB_TYPE=mysqlDB_HOST=database-hostDB_PORT=3306DB_NAME=cmsmadesimpleDB_USER=cms_userDB_PASSWORD=secure-password# Application SettingsAPP_DEBUG=falseAPP_ENV=production# TimezoneAPP_TIMEZONE=UTC# URL ConfigurationAPP_URL=https://example-app.klutch.sh# Admin Settings (set during installation)CMS_ADMIN_USERNAME=adminCMS_ADMIN_PASSWORD=secure-admin-password# Security SettingsSESSION_LIFETIME=1440COOKIE_SECURE=trueCOOKIE_HTTPONLY=true# Upload SettingsMAX_UPLOAD_SIZE=50 # In MBALLOWED_UPLOAD_TYPES=jpg,jpeg,png,gif,pdf,doc,docx,xls,xlsx# Email Configuration (optional)MAIL_DRIVER=smtpMAIL_HOST=smtp.example.comMAIL_PORT=587MAIL_USERNAME=notifications@example.comMAIL_PASSWORD=smtp-passwordMAIL_FROM_ADDRESS=noreply@example.comCreate a .gitignore File
Create a
.gitignorefile to exclude sensitive files:# Environment variables.env.env.local.env.*.local# CMS Made Simple configurationconfig.phpconfig-local.php# Uploaded files and cache/uploads//tmp//tmp_cms/# IDE and editor files.vscode/.idea/*.swp*.swo*~# OS files.DS_StoreThumbs.db# PHP.php-cs-fixer.cache# Logs*.loglogs/# Node (if using frontend tooling)node_modules/npm-debug.log# Composervendor/composer.lockPrepare Database
Before deploying CMS Made Simple, you need to create a database:
Option A: Deploy MySQL on Klutch.sh
- Go to klutch.sh/app
- Click Create App and select the MySQL Docker image
- Set up the database:
- Database Name:
cmsmadesimple - Root Password: Secure password
- Database User:
cms_user - Database Password: Secure password
- Database Name:
- Configure HTTP traffic on port 3306 for local connections, or use internal networking
- Note the database connection details
Option B: Use External Database Service
- Use your hosting provider’s managed MySQL or PostgreSQL service
- Note the connection credentials for configuration
Push to GitHub
Initialize and push your repository:
Terminal window git initgit add Dockerfile entrypoint.sh .env.example .gitignoregit commit -m "Initial CMS Made Simple deployment setup"git branch -M maingit remote add origin https://github.com/YOUR_USERNAME/YOUR_REPOSITORY.gitgit push -u origin mainReplace
YOUR_USERNAMEandYOUR_REPOSITORYwith your actual GitHub credentials.Deploy on Klutch.sh
- Log in to your Klutch.sh dashboard at klutch.sh/app
- Click Create App and select GitHub
- Connect your GitHub account and select your CMS Made Simple repository
- Configure deployment settings:
- App Name:
cms-website(or your preferred name) - Branch: Select
main
- App Name:
- Add environment variables:
DB_HOST: Your database hostDB_NAME:cmsmadesimpleDB_USER:cms_userDB_PASSWORD: Your database passwordAPP_URL: Your deployment URL- Other variables from
.env.example
- Click Deploy and wait for deployment to complete
Klutch.sh automatically detects the Dockerfile and uses it for building and deploying your CMS Made Simple instance.
Attach Persistent Storage
After deployment, attach a persistent volume for uploaded files:
- Navigate to your deployed CMS Made Simple app
- Go to Storage or Volumes section
- Click Add Persistent Volume
- Configure the volume:
- Mount Path:
/var/www/html/uploads - Size:
50GB(adjust based on expected media)
- Mount Path:
- Click Add Volume and restart the container
This ensures all uploaded media files persist across container updates and restarts.
Configure Network Traffic
Set up HTTP traffic for your CMS Made Simple website:
- In your app settings, navigate to Network section
- Set Traffic Type to
HTTP - Internal port should be set to
80(Apache default) - Your CMS Made Simple site will be accessible at
https://example-app.klutch.sh
Initial Setup and Configuration
After your CMS Made Simple deployment is running, follow these steps to complete the setup:
Access the Installation Wizard
- Open your browser and navigate to
https://example-app.klutch.sh - You should see the CMS Made Simple installation wizard
- Follow the installation steps to configure your site
Complete the Installation
- Welcome Screen: Review the installation requirements
- Database Configuration: Enter your database credentials:
- Database Type: MySQL or PostgreSQL
- Database Host: Your database hostname
- Database Name:
cmsmadesimple - Database User:
cms_user - Database Password: Your password
- Click Test Connection to verify
- Administrator Account: Create your admin user:
- Username: Administrator login
- Password: Strong admin password
- Email: Admin email address
- Site Configuration:
- Site Name: Your website title
- Site URL: Your deployment URL
- Time Zone: Select appropriate timezone
- Finish Installation: Click Complete Installation
Log In to Admin Panel
- After installation, navigate to
https://example-app.klutch.sh/admin - Log in with your administrator credentials
- You’re now in the CMS Made Simple admin panel
Create Your First Page
- Go to Pages in the admin menu
- Click Create New Page
- Enter:
- Page Title: Your page name
- Content: Page content (HTML allowed)
- URL Name: Unique identifier for the URL
- Click Save
Configure Basic Settings
- Go to Settings → Global Settings
- Configure:
- Site Name: Your website title
- Site Description: Meta description for SEO
- Time Zone: Server timezone
- Default Editor: WYSIWYG editor or HTML
- Go to Settings → Users to manage administrator and editor accounts
- Go to Modules to enable additional features
Environment Variables
Basic Configuration
DB_HOST=database-hostDB_NAME=cmsmadesimpleDB_USER=cms_userDB_PASSWORD=passwordAPP_URL=https://example-app.klutch.shCMS_SITE_NAME=My WebsiteThese variables control the database connection and basic site settings for your CMS Made Simple deployment.
Production Configuration
For production deployments, use these environment variables with Nixpacks customization:
# Advanced Production Configuration
# Database Configuration with Connection PoolingDB_TYPE=mysqlDB_HOST=database.example.comDB_PORT=3306DB_NAME=cmsmadesimpleDB_USER=cms_userDB_PASSWORD=very-secure-passwordDB_CHARSET=utf8mb4DB_COLLATION=utf8mb4_unicode_ci
# Application EnvironmentAPP_ENV=productionAPP_DEBUG=falseAPP_URL=https://data.example.com
# Site ConfigurationCMS_SITE_NAME=Corporate WebsiteCMS_ADMIN_EMAIL=admin@example.comCMS_SITE_DESCRIPTION=Your website description
# Session SettingsSESSION_LIFETIME=1440SESSION_DOMAIN=example.comCOOKIE_SECURE=trueCOOKIE_HTTPONLY=trueCOOKIE_SAMESITE=Strict
# SecurityENABLE_2FA=trueFORCE_HTTPS=trueSECURITY_KEY=your-secret-key-minimum-32-chars
# Upload ConfigurationMAX_UPLOAD_SIZE=100 # In MBALLOWED_UPLOAD_TYPES=jpg,jpeg,png,gif,pdf,doc,docx,xls,xlsx,zipUPLOAD_DIRECTORY=/var/www/html/uploads
# Cache ConfigurationCACHE_DRIVER=fileCACHE_TTL=3600
# LoggingAPP_LOG_LEVEL=infoERROR_LOG_EMAIL=errors@example.com
# Email ConfigurationMAIL_DRIVER=smtpMAIL_HOST=smtp.example.comMAIL_PORT=587MAIL_USERNAME=notifications@example.comMAIL_PASSWORD=smtp-passwordMAIL_FROM_NAME=Website NotificationsMAIL_FROM_ADDRESS=noreply@example.com
# Apache ConfigurationAPACHE_LOG_LEVEL=warnAPACHE_TIMEOUT=300APACHE_MAX_REQUESTS=1000
# PHP ConfigurationPHP_MEMORY_LIMIT=256MPHP_UPLOAD_MAX_FILESIZE=100MPHP_POST_MAX_SIZE=100MPHP_EXECUTION_TIMEOUT=300
# SEO SettingsENABLE_PRETTY_URLS=trueURL_ALIAS_PREFIX=/page/
# Language SettingsDEFAULT_LANGUAGE=enSUPPORTED_LANGUAGES=en,es,fr,de
# Backup and RecoveryENABLE_AUTOMATED_BACKUPS=trueBACKUP_RETENTION_DAYS=30BACKUP_STORAGE_PATH=/var/lib/cmsms-backupsTo apply these variables:
- Go to your app settings in the Klutch.sh dashboard
- Navigate to Environment Variables
- Add or update each variable
- Click Save and redeploy if necessary
Code Examples
Bash: Automated Backup Script
This script creates regular backups of your CMS Made Simple database and uploads:
#!/bin/bash
# CMS Made Simple Automated Backup Script
set -e
# ConfigurationCMS_DIR="/var/www/html"BACKUP_DIR="/var/backups/cmsms"DB_HOST="${DB_HOST:-localhost}"DB_NAME="${DB_NAME:-cmsmadesimple}"DB_USER="${DB_USER:-cms_user}"DB_PASSWORD="${DB_PASSWORD}"BACKUP_RETENTION_DAYS=30TIMESTAMP=$(date +%Y%m%d_%H%M%S)
echo "Starting CMS Made Simple backup at $(date)..."
# Create backup directory if it doesn't existmkdir -p "$BACKUP_DIR"
# Backup databaseBACKUP_FILE="$BACKUP_DIR/cmsms_database_${TIMESTAMP}.sql.gz"echo "Backing up database to $BACKUP_FILE..."
mysqldump \ -h "$DB_HOST" \ -u "$DB_USER" \ -p"$DB_PASSWORD" \ "$DB_NAME" | gzip > "$BACKUP_FILE"
chmod 600 "$BACKUP_FILE"echo "Database backup completed: $BACKUP_FILE"
# Backup uploads directoryUPLOADS_BACKUP="$BACKUP_DIR/cmsms_uploads_${TIMESTAMP}.tar.gz"echo "Backing up uploads to $UPLOADS_BACKUP..."
tar -czf "$UPLOADS_BACKUP" -C "$CMS_DIR" uploads/
chmod 600 "$UPLOADS_BACKUP"echo "Uploads backup completed: $UPLOADS_BACKUP"
# Backup configuration filesCONFIG_BACKUP="$BACKUP_DIR/cmsms_config_${TIMESTAMP}.tar.gz"echo "Backing up configuration to $CONFIG_BACKUP..."
tar -czf "$CONFIG_BACKUP" \ -C "$CMS_DIR" \ config.php \ 2>/dev/null || true
chmod 600 "$CONFIG_BACKUP"echo "Configuration backup completed: $CONFIG_BACKUP"
# Clean up old backupsecho "Cleaning up backups older than $BACKUP_RETENTION_DAYS days..."find "$BACKUP_DIR" -type f -mtime +$BACKUP_RETENTION_DAYS -delete
echo "CMS Made Simple backup completed successfully at $(date)"PHP: Custom CMS Made Simple Module
This example shows how to create a simple custom module in CMS Made Simple:
<?php// Custom CMS Made Simple Module Example
class ModuleExampleModule extends CMSModule {
public $module_name = 'Example Module'; public $module_version = '1.0'; public $author = 'Your Name'; public $description = 'Example CMS Made Simple Module';
/** * Display the module in the admin panel */ public function GetAdminSection() { ob_start(); ?> <div class="form"> <h3>Example Module Settings</h3> <form method="POST"> <div class="form-group"> <label for="example_setting">Example Setting:</label> <input type="text" id="example_setting" name="example_setting" value="<?php echo $this->GetPreference('example_setting'); ?>" /> </div> <input type="submit" name="submit" value="Save Settings" /> </form> </div> <?php return ob_get_clean(); }
/** * Process admin form submissions */ public function ProcessAdminSection(&$parms) { if (isset($_POST['submit'])) { $this->SetPreference('example_setting', $_POST['example_setting']); echo '<div class="success">Settings saved successfully.</div>'; } }
/** * Template tag for displaying module content * Usage: {Example_Module field='content'} */ public function SmartTag(&$params) { $field = isset($params['field']) ? $params['field'] : 'content';
switch ($field) { case 'content': return $this->GetPreference('example_setting'); case 'info': return 'Example Module v' . $this->module_version; default: return 'Unknown field: ' . $field; } }
/** * Get content for the front end */ public function GetContent(&$params) { return '<div class="example-module">' . $this->GetPreference('example_setting') . '</div>'; }
/** * Initialize module hooks */ public function InstallPostModule() { // Create any necessary database tables $db = cmsms()->GetDb();
// Example: Create preferences table if needed $this->SetPreference('example_setting', 'Hello World');
return true; }}
// Register the moduleif (!function_exists('GetModuleInfo')) { function GetModuleInfo($gCMS) { $mod = new ModuleExampleModule(); return array( 'name' => $mod->module_name, 'version' => $mod->module_version, 'installed' => true, 'help' => 'This is an example CMS Made Simple module.' ); }}?>HTML/Smarty: Custom CMS Made Simple Template
This example shows how to create a custom CMS Made Simple theme template:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>{$page_title} - {cms_config_var key='sitename'}</title> <meta name="description" content="{$page_description}"> {cms_meta} <link rel="stylesheet" href="{cms_template_dir}/css/style.css"></head><body> <!-- Header --> <header class="site-header"> <div class="container"> <h1>{cms_config_var key='sitename'}</h1> <p class="tagline">{cms_config_var key='sitedescription'}</p> </div> </header>
<!-- Navigation --> <nav class="main-navigation"> <ul> {cms_breadcrumbs} {cms_menu depth='1'} </ul> </nav>
<!-- Main Content --> <main class="main-content"> <div class="container"> <article class="page-content"> <h1>{$page_title}</h1>
{if isset($editbutton)} <div class="edit-button"> {$editbutton} </div> {/if}
<div class="page-body"> {$content} </div>
{if isset($page_keywords)} <footer class="page-footer"> <p class="keywords"> <strong>Tags:</strong> {$page_keywords} </p> </footer> {/if} </article>
<!-- Sidebar --> <aside class="sidebar"> <section class="widget"> <h3>Recent Pages</h3> <ul> {cms_menu depth='2'} </ul> </section> </aside> </div> </main>
<!-- Footer --> <footer class="site-footer"> <div class="container"> <p>© {$year} {cms_config_var key='sitename'}. All rights reserved.</p> <p>Powered by <a href="https://www.cmsmadesimple.org" target="_blank">CMS Made Simple</a></p> </div> </footer>
<script src="{cms_template_dir}/js/main.js"></script></body></html>Best Practices
Content Management
- Organized Page Structure: Create a logical page hierarchy with parent pages and child pages
- Consistent Naming: Use descriptive, consistent names for pages and files
- SEO Optimization: Fill in page titles, descriptions, and keywords for search engines
- URL Aliases: Create friendly URLs with meaningful slugs instead of numeric IDs
- Template Selection: Choose appropriate templates for different page types
- Media Organization: Organize uploaded files into logical folders
- Content Versioning: Take advantage of version history before major edits
Security and Performance
- Regular Backups: Schedule automatic backups of database and uploads
- Access Control: Limit editor permissions based on roles and responsibilities
- Keep Updated: Update CMS Made Simple and modules regularly for security patches
- SSL/HTTPS: Ensure your site uses HTTPS for secure communication
- Strong Passwords: Use strong passwords for administrator and editor accounts
- Cache Optimization: Enable caching to improve site performance
- Database Optimization: Regular database maintenance and optimization
User and Editor Management
- Clear Permissions: Define clear permission levels for different user roles
- Editor Training: Provide documentation and training for content editors
- Approval Workflow: Implement review and approval processes for content
- Audit Logging: Monitor and track changes made by different editors
- Account Security: Enforce strong passwords and regular password updates
Module and Extension Management
- Quality Modules: Use trusted modules from the community directory
- Test First: Test modules in development before deploying to production
- Module Updates: Keep modules updated with latest versions and patches
- Avoid Conflicts: Test module compatibility before installing multiple modules
- Documentation: Keep documentation of installed modules and configurations
Troubleshooting
Issue: White Screen of Death (WSOD)
Solution: Check Apache error logs in the container. Enable debug mode by setting APP_DEBUG=true in environment variables. Check PHP error logs for fatal errors. Verify database connection with correct credentials and host accessibility.
Issue: Database Connection Failed
Solution: Verify database credentials and hostname are correct. Ensure database server is running and accessible from the CMS Made Simple container. Check firewall rules and network policies. Test the connection manually using MySQL client tools if needed.
Issue: Uploaded Files Lost After Restart
Solution: Confirm persistent volume is properly mounted at /var/www/html/uploads. Verify volume size is sufficient. Check that the volume persists in Klutch.sh settings and is attached to the container.
Issue: Slow Performance or Timeouts
Solution: Enable caching in CMS Made Simple settings. Optimize database queries. Increase PHP execution timeout via PHP_EXECUTION_TIMEOUT environment variable. Monitor resource usage and consider upgrading instance size. Archive old content to reduce database size.
Issue: Permission Denied for File Upload
Solution: Verify that the /var/www/html/uploads directory has write permissions for the www-data user. Check persistent volume is writable. Ensure Apache is running with correct user permissions.
Updating CMS Made Simple
To update to a newer version:
- Go to your Klutch.sh app dashboard
- Navigate to Deployments
- Pull the latest CMS Made Simple release from GitHub:
Terminal window git pull origin main - Commit any updates to your repository
- Push to GitHub
- Klutch.sh automatically redeploys with the new version
- Visit the admin panel to run any necessary database upgrades
- Test your site functionality
Always back up your database and uploads before updating.
Use Cases
Corporate Website
Deploy CMS Made Simple for corporate websites with multiple pages, team profiles, news sections, and event calendars managed by non-technical staff.
Blogging Platform
Create a multi-author blogging platform with categories, tags, comments, and scheduled publishing using CMS Made Simple’s flexible content management.
Community Portal
Build community websites with member areas, forums, event management, and resource libraries for local organizations and associations.
Portfolio Website
Design portfolio sites showcasing projects and work with flexible page layouts and media galleries managed through the admin interface.
Local Business Website
Create websites for local businesses with service pages, contact information, appointment booking, and customer testimonials.
Educational Platform
Deploy educational websites with course information, resource libraries, news, and event management for schools and training organizations.
Additional Resources
- Official CMS Made Simple Website: https://www.cmsmadesimple.org
- GitHub Repository: https://github.com/cmsmadesimple/cmsmadesimple
- Community Forum: https://forum.cmsmadesimple.org
- Documentation: https://www.cmsmadesimple.org/support/documentation
- Slack Community: https://www.cmsmadesimple.org/support/documentation/chat
- Module Directory: https://www.cmsmadesimple.org/downloads
- Development Guide: https://www.cmsmadesimple.org/support/documentation/developers
- Bug Reports: https://dev.cmsmadesimple.org/bug/list/6
Conclusion
CMS Made Simple empowers organizations to manage websites without requiring technical expertise while providing developers with a flexible, extensible platform for custom development. By deploying CMS Made Simple on Klutch.sh, you gain a scalable content management solution backed by a mature, proven platform used by businesses, organizations, and communities worldwide.
The combination of CMS Made Simple’s intuitive interface for content editors, design freedom for template designers, and extensive API for developers makes it an ideal choice for sites requiring flexible content management. Whether you’re building a corporate website, blogging platform, community portal, or business site, CMS Made Simple provides the tools and flexibility needed for effective content management.
Start with the deployment steps outlined in this guide, configure your database and persistent storage, and gradually expand your website with pages, media, and custom modules. Leverage the active community forum for support, explore the module directory for extending functionality, and utilize the comprehensive documentation for implementing custom features and designs.