Varient - Documentation

V
Varient
`⌘` `K`
Purchase Script
Version 3.0 is now available

# Varient
News & Magazine Script

The ultimate multi-purpose script designed for modern publishers. Fast, secure, and optimized for performance.

### Welcome Aboard!

Thank you for purchasing our script. If you have any questions that are beyond the scope of this documentation, please feel free to reach out to our dedicated support team.

Visit Help Desk

## Introduction

Varient is a powerful and flexible news and magazine script built for modern digital publishers. With its clean design and fully responsive layout, it delivers a smooth and consistent experience across all devices.
Its simple and well-structured admin panel makes it easy to manage content, users, and site settings without complexity. The built-in multi-author system allows each writer to create and manage content through their own dashboard, making team collaboration seamless.
With its built-in premium membership system, you can offer exclusive content and paid subscriptions, turning your website into a sustainable and scalable business.
Built with performance, security, and SEO in mind, Varient ensures fast loading times and better visibility in search engines. Whether you're running a blog, an online magazine, or a full-scale news platform, Varient gives you everything you need to launch, manage, and grow your project with confidence.

### Technologies Stack

CodeIgniter 4
HTML5
Bootstrap 5
jQuery & AJAX

### Key Features

The system is engineered with cutting-edge web technologies, focusing on extreme performance, robust security, and a seamless user experience. Below is the comprehensive list of features included in the platform.

### Design & Customization

- Multi-Theme Architecture: Choose from multiple themes directly from the admin panel to instantly change the look of your platform.
- Responsive Design: Built using the Bootstrap 5 framework to work perfectly on mobile, tablet, and desktop devices.
- Light & Dark Mode Layouts: Includes default state controls allowing you to force specific visual modes (Light or Dark) based on your preference.
- Layout Color Customization: Easily adjust the primary and secondary branding colors to match your exact corporate identity.
- Typography Management: Adjust precise font scales and upload custom local fonts for better offline rendering and performance.
- Navigation Builder: A drag-and-drop tool to seamlessly organize your main menus, complete with mega menu capabilities and external link support.
- Multilingual & RTL Support: A fully translatable system supporting right-to-left languages and SEO-friendly multilingual URL structures.
- Sidebar Widget System: Add, sort, and customize polls, popular posts, and custom HTML widgets without coding.
- Visual Settings: Update your dynamic logo, favicon, site title, breadcrumb styles, and layout visibility directly from the admin panel.

### Core Architecture & Performance

- Modern Framework: Built on CodeIgniter 4 and fully optimized for PHP 8.2+, ensuring high security, stability, and speed.
- Hybrid Cache System: Uses advanced content and application caching to guarantee fast page load times and reduce database queries.
- Database Optimization: Engineered with optimized indexing for fast search results and data retrieval.
- Auto WebP Image Conversion: Automatically compresses and converts user uploads into WebP formats to save server bandwidth.
- Lazy Image Loading: Defers offscreen images to ensure better Core Web Vitals and instant initial page renders.
- Progressive Web App (PWA): Delivers an installable, app-like experience directly to your mobile visitors' home screens.
- Cloud Storage Integrations: Natively supports AWS S3, Cloudflare R2, and Backblaze B2, allowing you to scale your media storage off your main server.
- Token-Based Cron System: A secure background automation engine for managing scheduled tasks, RSS feeds, and emails.

### Publishing & Media Management

- Multiple Post Formats: Dedicated builders for Article, Gallery, Sorted List, Table of Contents, Video, Audio, Trivia Quiz, Personality Quiz, Poll, Recipe and Event.
- Advanced Post Management: Workflow support including scheduled publishing, drafts, and a pending post approval system for editorial teams.
- Per-Post FAQ Section: Add dedicated FAQ schemas to individual posts.
- Centralized File Manager: A fast hub to easily manage your entire server's media assets.
- Media Management Modal: Browse, search, and attach files from your storage directly while writing and formatting posts.
- Dedicated Media & Gallery Page: Full administrative control over all uploads and a standalone page to showcase your visual albums.
- Rich Media Support: Allows multiple image uploads per post, GIF support, and downloadable files (PDF, ZIP, DOC) mapped directly to styled buttons.
- Dynamic Tagging & Reading Lists: Allows users to bookmark their favorite articles and navigate content via a keyword tagging system.

### AI & Content Engine

- AI Content Generator: Draft articles and generate ideas instantly using native integrations with OpenAI (ChatGPT) and Google Gemini.
- Infinite Category Hierarchy: A robust category system supporting unlimited nested levels (Parent > Child > Grandchild).
- Advanced Category Selector: An intuitive interface for assigning deep-level categories effortlessly.
- Bulk Post Upload: A CSV import tool to seamlessly upload multiple articles and migrate content in seconds.
- Featured Content Controls: Manage your homepage sliders, breaking news, and recommended blocks from a dedicated management section.
- Advanced Meta Options: Set independent, customizable SEO and meta settings for individual pages, posts, and categories.

### Monetization & Subscriptions

- Premium Membership System: Create, manage, and sell custom subscription plans to generate recurring revenue.
- Smart Paywalls: Restrict article access using your choice of strict, hard, or elegant fade-out paywall effects.
- Pay-Per-Post: Sell individual premium articles without forcing users into a full subscription plan.
- Author Reward System: A revenue-sharing model that calculates earnings based on verified unique page views to encourage quality writing.
- Global Payment Gateways: Seamlessly integrated with PayPal, Stripe, Razorpay, Mercado Pago, Iyzico, and PayTabs for secure and reliable transactions.
- Responsive Ad Spaces: Unlimited ad zone creation with separated desktop and mobile configurations, fully compatible with Google AdSense and custom banners.

### Technical SEO & Discoverability

- Google News Integration: Output a strictly formatted Publisher Center RSS feed and a 48-hour news sitemap to rank in the Google News tab.
- XML Sitemap Generator: Instantly maps your entire website for search engines with automated priority and frequency calculations.
- Enhanced Canonical URLs: A robust URL routing system to prevent duplicate content penalties.
- Smart Indexing Logic: Automated "noindex" handling for search result pages, empty profiles, and galleries to protect your crawl budget.
- JSON-LD Structured Data: Generates optimized schema markup for articles, recipes, quizzes, and FAQs.

### Security & Privacy Compliance

- Privacy-First Architecture: Operates with zero native tracking cookies and includes built-in GDPR compliance tools.
- Cookies Warning System: A modular consent management tool that halts third-party scripts until the user accepts.
- Captcha Support: Supports both Google reCAPTCHA and Cloudflare Turnstile, allowing you to choose and activate your preferred verification method directly from the admin panel.
- Email Blacklist System: A dedicated dashboard to block known abusers and spammers from registering or using contact forms.
- Brute-Force Protection: Intelligent login rate limiting and automated account lockouts to protect against credential stuffing.
- Strict Password Rules: Configurable administrative rules dictating minimum password length and character complexity.
- SEO-Safe Spam Protection: Automatically applies "nofollow" tags or completely strips external links from user content.
- Advanced Human Verification: An anti-cheat system for the author reward module that detects real users via behavior, scroll, and time on page.
- Core Security: Built-in protection against CSRF, XSS, and SQL injections.

### Community, Staff & User Management

- User Management: Comprehensive administrative control for banning, role switching, and manual account verifications.
- User Details Dashboard: Monitor individual user analytics, financial transactions, invoices, and subscription statuses.
- Contact Messages: A streamlined inbox featuring a direct, in-dashboard email reply option.
- Advanced Roles & Permissions: Create custom staff roles (e.g., Editor, Moderator) with specific, checkbox-based access rights to admin modules.
- Visual Badges System: Create custom badges to highlight VIPs, staff, or premium members across the site.
- Multi-Author Architecture: Provides writers with personal author dashboards, earning trackers, and dedicated public profile pages.
- Interactive Community Tools: Features an AJAX comment system with an optional admin approval workflow, emoji reactions, and a user follow/unfollow mechanism.
- Social Login: Secure and quick user onboarding via Google OAuth integration.

### Marketing & Automation

- Email API Integrations: Send emails reliably using native integrations with Mailgun and Brevo (Sendinblue), alongside standard SMTP support.
- Email Templates: Includes beautifully designed, responsive HTML email layouts available out of the box.
- Newsletter Import/Export: Easily migrate or back up your subscriber lists via CSV/JSON imports.
- Newsletter Popup: A customizable subscription popup to help grow your mailing list.
- RSS Aggregator: Import external news articles automatically in the background using cron jobs.

### System Setup & Tools

- Installation Wizard: A guided, step-by-step visual installer to get the platform running quickly without coding required.
- Comprehensive Documentation: Detailed instructions covering every aspect of setup, configuration, and daily management.
- Maintenance Mode: Safely lock out public visitors while retaining full administrative access during major system updates.

### Server Requirements

- PHP 8.2 or higher: Required for the core architecture.
- cURL: Required for external API connections, cloud storage (S3, R2), and payment gateways.
- Fileinfo: Required for secure file uploads and file type validation.
- Exif: Required for correct image processing and metadata reading.
- Mbstring: Required for multi-language content management and proper character handling (including RTL).

## Installation

Verify your server's PHP version before initiating the installation. A minimum of PHP 8.2 is required to proceed.

Ensure the cURL PHP extension is enabled in your hosting environment. If the installation wizard returns a "cURL is not available" error, you must activate it. You can do this by adding the `extension=php_curl.dll` directive to your `php.ini` configuration. If you lack access to this file, contact your hosting provider for assistance.

##### License Code Authentication

A valid license code is required to authenticate your installation. You can generate this key by pairing your domain name with your Envato purchase code. Log in to our Help Desk dashboard, and navigate to the Licenses section to issue your unique code.
Note: If you migrate your platform in the future, you can easily update your registered domain using the "Change Domain" utility within the dashboard.

##### Video Installation Guide

Due to continuous updates, minor file discrepancies may exist, but the core installation workflow remains identical.

##### Manual Installation Workflow:

For demonstration purposes, these instructions utilize cPanel as it is the industry standard. If you are operating on Plesk, DirectAdmin, or a custom control panel, the fundamental logic remains the same: establish a database, transfer the core files, and execute the web installer.

###### 1. Create Your Database and User

- Navigate to your cPanel dashboard and select MySQL® Databases.

- Generate a new database utilizing the `utf8mb4_general_ci` collation.

- Create a secure database user.

- Assign the newly created user to your database.

- Grant All Privileges to the user to ensure the application can read and write schema changes.

###### 2. Upload Core Files via File Manager or FTP

- Access the File Manager module within cPanel.
- Navigate to your primary web directory, typically named public_html.
- Upload the downloaded codecanyon-varient-news-magazine-script.zip package into this directory.
- Right-click the .zip file and select the Extract option to unpack it directly on the server.
- Move all extracted files from the inner `varient-v..` folder to your root directory.
- Delete these files/folders to maintain a clean environment: `documentation`, `varient-v..` folder, and the original `.zip` package.

Verify the presence of the `.htaccess` file in your root directory. If it is not visible, click the Settings button at the top right and enable the Show Hidden Files (dotfiles) option. Additionally, ensure cPanel has not overwritten its contents; it must match the default routing rules provided by the script.

If your hosting environment runs on NGINX, standard `.htaccess` directives will be ignored. You must manually configure your server blocks. Refer to our NGINX Configuration Guide for proper setup.

###### 3. Launch the Web Installer

Upon successfully uploading the files, navigate to your domain to launch the setup wizard. To begin the installation, click the "Start Installation" button.

###### 4. License Verification

To authenticate your purchase, input your valid license code. If you have not generated one yet, click Licenses to acquire it. Once entered, click Verify & Continue.

###### 5. System Requirements Validation

The wizard will evaluate your server configuration. Ensure all mandatory PHP extensions are active. Once all system checks pass, click Continue.

###### 6. Directory Permissions

Verify that the required system directories possess the correct write permissions. Resolve any permission conflicts and click Continue.

###### 7. Database Connection Setup

Input the MySQL credentials (Database Name, Username, and Password) established in Step 1 to link the application to your database. Click Next.

If you need to update your database credentials after installation, you can manually reconfigure them in the
`app/Config/Database.php` file.

###### 8. Application & Administrator Setup

Configure your primary application settings, including the Base URL, master administrator credentials, and default timezone. Click Finish Installation to finalize the installation.

Base URL Configuration Examples:

- Installing to Main directory: `https://abc.com`
- Installing to subdomain: `https://test.abc.com`
- Installing to folder: `https://abc.com/test`

Note: If your domain does not currently have an active SSL certificate, utilize the standard `http://` protocol instead.

###### 9. Final Security Cleanup

For critical security purposes, you must permanently delete the `install` directory from your server immediately after a successful setup.

#### Critical Troubleshooting: Post-Install 404 Errors

If you encounter a "404 Not Found" error or cannot access the admin dashboard after installation, verify that the `.htaccess` file is securely placed in your root directory. This file dictates URL routing; without it, internal links will fail. Depending on your OS or FTP client, dotfiles may be hidden by default. Ensure hidden files are visible and confirm the file was uploaded intact from the original package.

## Environment Configuration (.env)

The `.env` file acts as the primary configuration hub for your application. It controls critical environment states, absolute paths, security tokens, and licensing validation.

Variable | Description & Usage
--- | ---

`CI_ENVIRONMENT`

Defines the active execution environment. The default value is production, which suppresses detailed PHP stack traces and displays a generic error screen to protect sensitive system data from public view.

To enable detailed error reporting during debugging, change this value to development.

CI_ENVIRONMENT = development

`app.baseURL`

The absolute routing origin of your application. This must exactly match your installation path. An incorrect value here will result in broken assets, failed API requests, and routing errors.

Main directory:
app.baseURL = https://domain.com/
Subdomain:
app.baseURL = https://demo.domain.com/
Sub-folder:
app.baseURL = https://domain.com/new/

`PURCHASE_CODE` `LICENSE_KEY` | Your purchase code and license key.
`cookie.prefix` | A unique string prepended to all application cookies to prevent namespace collisions (highly useful when hosting multiple scripts on a single domain). The default prefix is `vr`. Important: Only use alphanumeric characters. Special characters or spaces are strictly prohibited.

#### Protocol Requirement

When defining your `app.baseURL`, ensure you define the correct protocol. If your server is not secured with an active SSL certificate, you must explicitly use `http://` instead of `https://` to avoid redirection loops.

## File Upload Configuration

To facilitate the uploading of large media files and ensure optimal image processing (which consumes active memory during optimization), specific PHP server configurations must be adjusted. Failing to meet these minimum parameters may result in upload rejections, timeouts, or memory exhaustion errors.

#### Recommended PHP Directives

Directive | Minimum Value | Description
--- | --- | ---
`upload_max_filesize` | `32M` | The maximum permitted size of an individual uploaded file.
`post_max_size` | `32M` | The maximum size of the entire POST request body. Must be equal to or greater than the upload_max_filesize.
`memory_limit` | `256M` | The maximum amount of memory a script may consume. Crucial for heavy image compression and optimization processes.

The baseline configuration above permits file uploads up to 32 MB. If you want to upload larger files, you need to increase both the `upload_max_filesize` and `post_max_size` values proportionally.

If you anticipate processing massive files or experience timeouts on slower network connections, it is highly recommended to also increase the `max_execution_time` directive.

#### Web Server Limitations

If you successfully modify the PHP limits but still encounter upload rejections, your server is likely enforcing a hard limit at the web-server level. For NGINX environments, you must explicitly increase the `client_max_body_size` parameter in your server block configuration.

#### Updating PHP Values via cPanel

- ###### 1. Access PHP Configuration

  Log in to your cPanel dashboard and navigate to the Select PHP Version module.

- ###### 2. Open PHP Options

  Click on the Switch to PHP Options (or simply "Options") tab to view the editable directives.

- ###### 3. Apply Directive Limits

  Locate and modify the `upload_max_filesize`, `post_max_size`, and `memory_limit` values to meet or exceed the recommended minimums.

If these specific configuration modules are locked or missing from your cPanel interface, your hosting provider has restricted manual overrides. You must contact their technical support team to apply these adjustments on your behalf.

## Quick Start

This quick reference guide outlines the fundamental operations you need to configure your account, manage content, and set up core modules efficiently.

#### Account & Access

###### Accessing Admin Panel

Log in with your administrator credentials. Click your username in the top navigation bar and select Admin Panel from the dropdown menu to access the dashboard.

###### Profile & Security

Navigate to Settings via the top user menu. Here, you can update your email, bio, and social links. Switch to the Change Password tab to securely update your credentials.

#### Content Management

- Categories & Posts You must establish a category structure before publishing content. Go to Categories > Add Category. Once created, navigate to Add Post, select your desired format, and publish.
- Static Pages & Polls Navigate to Pages > Add Page to create custom static content. To engage your audience with questions, use the Polls > Add Poll module. Existing items can be edited from their respective main menus.
- Gallery & Albums Media organization requires albums. First, navigate to Gallery > Albums to create a container. After creating an album, proceed to Gallery > Images to upload your visual assets.

#### Site Tools & Monetization

#### Newsletter Setup

Before dispatching newsletters, you must configure your mail server. Navigate to Settings > Email Settings to input your SMTP credentials. Once saved, use the Newsletter section to email your registered subscribers.

- Running Ads: Monetize your traffic by navigating to Ad Spaces. Paste your AdSense or custom banner codes into the designated layout zones and save.
- Managing Widgets: Enhance your sidebars and footers by navigating to Widgets > Add Widget. Edit existing widgets from the main Widgets menu.

#### User Administration

###### Managing Users

Monitor your community via the Users module. From this panel, you can modify user roles, ban abusive accounts, or permanently delete users.

###### Promoting Authors

Varient is a multi-author system. First, the new author must register a standard account on your website. Next, you need to go to the Users section and change their user role to Author. After this step, the user will automatically get access to their own author panel.

## Admin Panel

To access the Admin Panel, log in to your account, click your username on the top menu, and select the Admin Panel link. The dashboard (index page) provides some overview of your website's performance, user activities, and pending tasks.

#### Dashboard Metrics (Counters)

At the top of the dashboard, you will see quick counter blocks that summarize your site data in real-time:

###### Content

- Total Posts: Published posts.
- Pending Posts: Waiting for approval.
- Scheduled Posts: Planned for the future.

###### Users & Interactions

- Registered Users: Total members.
- Total Comments: Approved comments.
- Pending Comments: Waiting for approval.
- Contact Messages: Inquiries from visitors.

###### Finance & Marketing

- Pending Payouts: Money waiting to be paid.
- Newsletter: Total email subscribers.

#### Analytics & Visual Graphs

- Total Pageviews Chart A visual chart that displays the total traffic and pageviews of your website over time. This helps you track your visitor growth.
- Authors' Total Earnings Chart A financial graph showing the money earned by the authors on your platform. This helps you monitor your payout expenses.

#### Actionable Sections & Lists

Below the metrics and graphs, the dashboard displays lists to help you manage your daily administrative tasks quickly:

Section Name | Description
--- | ---
Pending Posts | Posts awaiting administrative approval.
Pending Comments | Comments awaiting administrative approval. You can approve or delete them to keep your site clean.
Latest Transactions | An overview of recent financial activities and platform transactions.
Upcoming Events | Overview of the upcoming schedule and calendar events.

## Themes

Varient includes a robust theme engine that allows you to transform the visual appearance of your website instantly. You can choose from multiple pre-designed themes and fine-tune their aesthetics through the centralized settings panel.

#### Theme Selection

To switch between available layouts, navigate to the Themes section in your Admin Panel. Select your preferred theme and click the Activate button. The system will immediately re-render your site's frontend with the new architectural style.

#### Theme Configuration

Each theme offers a set of customization options to align the interface with your brand's color palette and style requirements.

Setting Name | Function & Description
--- | ---

Default Theme Mode

Determines the initial visual state for all visitors.

- Light: A clean, traditional bright interface.
- Dark: A modern, low-light interface designed for high readability.

Theme Color | Sets the primary accent color used for buttons, links, and active UI elements across the entire website.
Top Header & Block Heads Color | Customizes the background color of the top navigation and the titles of individual content blocks.

#### Default Mode Explanation

The Default Theme Mode setting is permanent for guest users. If you select Dark, the site will always load in dark mode for first-time visitors. Users can still toggle their personal preference if the "Dark Mode Switcher" is enabled in your general settings.

## Navigation

The Navigation module provides full control over your website's main menu. From here, you can seamlessly organize categories, static pages, and custom URLs to create an intuitive browsing experience for your visitors.

#### Organizing Menu Items

All active menu links are listed in this panel. The system features an intuitive drag-and-drop interface, allowing you to easily reorder items without any coding.

- Drag & Drop Ordering Simply click and hold the drag icon next to any menu item, move it to your desired position, and drop it. The system will apply the new order immediately.
- Editing & Deleting Each menu item has an Edit and Delete button next to it. You can instantly update the link details or remove it entirely from the frontend menu.

#### Navigation Settings

You can customize global navigation behaviors using the settings panel located in this section.

Setting Name | Function & Description
--- | ---
Home Page Link | Use this toggle switch to show or hide the default Home link on your frontend navigation bar. Hiding it is useful if you prefer users to click your site logo to return to the homepage.

## Pages

The Pages module allows you to create and manage static content for your website, such as "About Us", "Contact", "Privacy Policy", or custom pages. The creation process is divided into three main areas: General Content, Page Settings, and Meta Options.

#### General Content

- Title & Slug Enter the main title of your page. The Slug (URL structure) will be generated automatically based on your title. If you want a custom URL, you can type it manually in the Slug field.
- Rich Text Editor Write your page content using the advanced TinyMCE editor. You can easily insert media using the Add Image button (which opens the File Manager) or generate content automatically using the built-in AI Writer.

#### Page Settings

Setting Name | Function & Description
--- | ---
Language | Assign the page to a specific language. It will only appear when users browse your site in this language.
Parent Link | Select a parent item if you want to create a nested dropdown menu. Select "None" to keep it as a main menu item.
Location | Choose where the page link should appear on your frontend: Top Menu, Main Menu, Footer, or "Don't Add to Menu" (useful for hidden landing pages).

Display Toggles

Control the layout elements of the page by toggling these options:

- Show Title: Displays the H1 title at the top of the page.
- Show Breadcrumb: Displays the navigation path (e.g., Home / Pages / About).
- Show Sidebar: Enables the right sidebar next to your content.

Show Only to Registered Users | Select Yes to lock this page behind an authentication wall. Guest users will be redirected to the login page.
Menu Order & Status | Define the display order of the link (e.g., 1, 2, 3) and toggle the active status of the page.

#### Meta Options (SEO)

Optimize your page for search engines. Fill in the Meta Title and Meta Description to control how your page appears in Google search results. Add relevant Meta Keywords separated by commas (e.g., technology, news, contact) to improve indexing.

## Add Post

The "Add Post" module is the core of your content creation engine. Varient offers a highly versatile publishing system with 11 distinct post formats. To prevent repetitive configurations, all post formats share a unified set of "Common Settings," while introducing specific fields and builders tailored to their exact content type.

### 1. Common Post Settings

Regardless of the format you select, you will encounter these standard configuration fields across the main form and the right sidebar.

Setting Group | Fields & Description
--- | ---

General Information

- Title & Slug: The main headline of your post. The slug (URL) generates automatically based on your title, but you can override it manually for SEO purposes.
- Summary & Description: A brief excerpt displayed on the homepage, category pages, and search engine results.
- Tags: Type relevant keywords and press Enter.
- Content (Editor): The primary TinyMCE rich-text editor. Includes an AI Writer button to instantly generate high-quality text, and an Add Image button directly linked to your server's File Manager.
- Attachments: Select or upload downloadable files (PDF, ZIP, DOCX, MP3). A stylized download button will automatically appear on the frontend.
- Optional URL: Enter an external link to display a custom call-to-action button at the bottom of the post.

Main Image

- Upload/Select: Choose the featured thumbnail from your File Manager. This represents the post across your entire website.
- External Image URL: Alternatively, paste a direct link to an image hosted on a third-party server (e.g., AWS S3, Unsplash) to save local bandwidth.
- Image Description: The text entered here will be displayed as a visible caption immediately under the main image on the post details page.

Visibility & Placement

Located in the right sidebar, these administrative toggles control where the post appears on your frontend:

- Full-Width Post: Removes the standard right sidebar for this specific post, giving your content an edge-to-edge cinematic layout.
- Add to Slider / Featured: Pins the post to the homepage hero slider or featured grids. You can strictly define its visual position using the numerical Order input.
- Breaking News & Recommended: Flags the post to appear in the top breaking news ticker or the dedicated recommended reading blocks.

Publishing & Access

- Scheduled Post: Toggle this on to reveal a calendar module. The post will remain hidden and automatically publish at your selected date and time.
- Need Auth: Toggling "Show Only to Registered Users" blocks public access and forces guests to log in before reading the content.
- Premium & Exclusive: Monetize your content. Mark a post as Premium (requires an active global membership) or Exclusive (requires a specific, one-time payment defined by the Price field).

SEO & FAQ Options

- Meta Options: Explicitly define the Meta Title, Meta Description (max 500 characters), and Meta Keywords to optimize how Google indexes your page.
- FAQ Schema: Add structured Questions and Answers. This generates valid JSON-LD FAQ schema in the background, significantly increasing your chances of securing "Rich Snippets" on Google search results.

### 2. Format-Specific Features

While the common settings remain identical, selecting a different post format alters the core structure of the content. Below is a detailed technical breakdown of the specialized configurations for all formats.

#### Article

The standard format for publishing news, editorial pieces, and daily blog entries.

###### Unique Feature: Additional Images Slider

Within the main Image panel, the Article format includes an Additional Images uploader. By selecting multiple images from the File Manager here, the featured thumbnail on the actual post page is automatically converted into an interactive, swipeable image slider.

#### Gallery

A visually-driven format designed to deliver content piece by piece, where each item is isolated and navigated using Next and Previous buttons.

###### Unique Feature: Step-by-Step Navigation Builder

Instead of relying on a single long text block, you construct this post by adding dynamic "List Items". Each individual item requires its own Title, Image, and localized Content Editor. On the frontend, the system displays only one image and its corresponding text at a time, requiring the visitor to click Next or Previous to continue reading the article.

Additionally, a specific "Show Item Numbers" toggle appears in the sidebar settings, allowing you to automatically display the current slide's progression number.

#### Sorted List

Perfect for engaging "Top 10" style listicles. Each item stacks vertically with prominent numbering.

###### Unique Feature: Vertical List Architecture

The backend interface operates identically to the Gallery format, utilizing the same robust List Items builder. However, the core distinction lies in how the frontend renders the data. Sorted Lists stack vertically on the page with bold, sequential typography, whereas Galleries prioritize horizontal sliding or masonry grid behaviors.

#### Table of Contents

A structured format for long-form documentation that automatically generates anchor links based on nested headings.

###### Unique Feature: Multi-Level Linking & Typography Control

This format transforms the List Items builder by introducing a critical Parent Link numerical field for each item block. By assigning parent numbers, you can easily create nested heading hierarchies (Parent -> Child -> Grandchild).

Furthermore, a dedicated Link List Style panel is injected into the configuration. This allows you to independently define the CSS numbering system (e.g., Decimal, Roman, Lower-Alpha, Disc) for up to 3 distinct levels of nested headings, ensuring precise typographical control.

#### Video

Focuses on a central video player. Embed via third-party URLs (YouTube, Vimeo) or securely upload your own MP4 files.

###### Unique Feature: Dual Media Acquisition

The conventional image upload panel is entirely replaced by a dynamic Video Configuration block containing two distinct tabs:

- Via URL: Paste a direct link from YouTube, Vimeo, Dailymotion, or Instagram. Clicking the "Get Video" button commands the system to automatically fetch the correct iframe embed code and extract the high-resolution thumbnail API.
- Upload: Bypasses external networks. Directly select an MP4 or WebM video file from your File Manager for fully self-hosted, secure playback.

#### Audio

Designed for music. Upload multiple audio files to generate a playable tracklist directly on the page.

###### Unique Feature: Automated Multi-Track Playlist

Injects an advanced Audios selection block at the apex of the form. You are not limited to a single file; you can select multiple audio (MP3, OGG, WAV) simultaneously from the File Manager. The system architecture automatically compiles these disparate files into a sleek, functional, and playable audio playlist embedded directly within the post.

#### Trivia Quiz

A strict knowledge-based testing format where users are algorithmically scored based on the exact number of correct answers they select.

1. Strict Answer Configuration

Build multiple questions, each supporting its own image and rich-text description. For every question, you append possible answers. You can toggle the visual Answer Format (Small Image Grid, Large Image Cards, or Text Only). Critically, you must manually select the radio button to instruct the system which answer is the absolute Correct one.

2. Range-Based Result Processing

Instead of mapping answers directly to individual outcomes, Trivia Quizzes utilize a mathematical scoring range. When configuring the Results block, you must define the Min and Max correct count. For instance, if a user gets 8 to 10 answers correct, the logic triggers the "Expert" result card; scoring 0 to 3 triggers the "Beginner" card.

#### Personality Quiz

An engagement quiz with no wrong answers. User choices are mapped directly to specific outcomes or characters.

1. Inverted Workflow: Results First

Because of the unique data-mapping required for this format, it is fundamentally recommended to build your Results blocks first. These represent the final character profiles or outcomes the user will land on at the end of the assessment.

2. Direct Answer Mapping

When constructing Questions and Answers, the "Correct" radio button is removed. Instead, every single answer features an Assign to Result dropdown menu. You meticulously map each choice to one of the results you created. The system algorithm tallies the assignments and displays the result possessing the highest mapped selections.

#### Poll

A streamlined voting mechanism to gather community opinions quickly, featuring secure voting permissions.

###### Unique Feature: Voting Permissions & Layout Flexibility

Inside the general settings, an exclusive Vote Permission toggle governs the security of the poll. You can leave it unrestricted so "All Users Can Vote," or lock the mechanism so "Only Registered Users Can Vote" to significantly reduce spam and duplicate data entries.

The poll shares the same flexible architecture as quizzes; you can present the voting options as minimal text blocks, tightly packed small image grids, or expansive large image cards to maximize click-through rates.

#### Recipe

Created for food blogs and cooking websites. It includes special fields for cook times, ingredients, nutrition facts, and step-by-step directions.

1. Recipe Details

Enter important details about your recipe in the specific fields. These include Prep Time, Cook Time, Serving, and Difficulty (Easy, Intermediate, Advanced).

2. Ingredients & Nutrition

Use the simple list builders to quickly add your items. You can easily add items like "1 tbsp olive oil" in the Ingredients section and "Protein 34g" in the Nutritional Information section.

3. Step-by-Step Directions

Use the list builder to add the cooking steps. You can create a new block for each step, and include a title, text description, and an image to show how it is done.

#### Event

A great tool to announce and manage your events. It includes an interactive Google Map, event schedules, and a built-in registration form.

1. Event Details & Map

Set the Start and End dates, Organizer, and Venue name. Thanks to the Google Maps API, you can just type the address into the search bar or drop a pin on the map. The system will automatically find and save the exact coordinates for the location.

2. Schedule & Speakers

Build your event page easily using three simple lists: add your timeline in the Event Schedule (e.g., 09:00 - Opening Speech), share important rules in Event Highlights (e.g., 16+ Age Limit), and introduce your guests using the Speakers & Guests builder.

3. Event Registration

You can choose how users join your event by selecting a Registration Type:

- External Link: If you use platforms like Eventbrite, Meetup, or Google Forms, paste the URL here. Users will be redirected there when they click the register button.
- Internal Registration: Use the built-in form to collect registrations directly on your website. You can set a Capacity Limit to control the number of attendees, add a Registration Deadline, and choose to accept Registered Users Only. You can also use Custom Fields to ask extra questions (like phone number or company name) along with the default Name and Email fields.

## Bulk Post Upload

The Bulk Post Upload tool allows you to publish hundreds of posts at the same time using a single CSV (Comma-Separated Values) file. This is especially useful if you are moving content from another website or adding a large database of articles quickly.

#### How to Use the Bulk Upload

- Step 1: Download the empty CSV template provided on the Bulk Upload page.
- Step 2: Open the file using a spreadsheet program like Microsoft Excel, Google Sheets, or Apple Numbers.
- Step 3: Fill in the columns exactly as described in the table below. Do not change or delete the column names in the first row.
- Step 4: Save your file in `.csv` format and upload it to the system.

#### CSV Column Rules

Please follow these exact rules when filling out your CSV file. If a "Required" field is left empty, the system will skip that specific post and not publish it.

Column Name | Requirement | Description & Example
--- | --- | ---
lang_id | Required Integer (Number) | The ID number of the language for this post. You can find your language IDs in the Language Settings menu. Example: `1`
title | Required String (Text) | The main headline of your post. Example: `Global Tech News`
slug | Optional String (Text) | The custom URL link for the post. If you leave it blank, the system will generate it automatically from your title. Example: `global-tech-news`
summary | Optional String (Text) | A short description that appears on the homepage and search results. Example: `This is the summary text.`
content | Optional String (Text) | The main body text of your post. You can use basic HTML tags inside this column (like <p>, <b>, <br>). Example: `This is the main content.`
category_id | Required Integer (Number) | The ID number of the category where this post will be published. You can find category IDs in the Categories menu. Example: `2`
post_format | Required String (Text) | The visual format of the post. The bulk upload tool only supports two formats: you must type either article or video. Example: `article`
video_embed_code | Optional String (Text) | If your `post_format` is set to video, paste the full embed URL here (like a YouTube or Vimeo iframe link). Example: `https://www.youtube.com/embed/V9ypxcc0TpI`
image_url | Optional String (Text) | A direct external link to the main image of the post. The system will use this image as the thumbnail. Example: `https://upload.wikimedia.org/example.jpg`
image_description | Optional String (Text) | The text that appears below the main image on the post details page. Also serves as the image Alt Tag. Example: `Beautiful nature view`
tags | Optional String (Text) | Words used to group similar posts together. Separate multiple tags with commas. Example: `nature, travel, photo`
meta_title | Optional String (Text) | The custom SEO title for search engines. If you leave it blank, the system will use the main title. Example: `Global Tech News - Full Story`
meta_description | Optional String (Text) | A brief description for search engine results (SEO). If left blank, the system will use the summary text. Example: `Read the latest updates on global technology and innovations.`
meta_keywords | Optional String (Text) | Keywords for SEO purposes. Separate multiple keywords with commas. Example: `technology, news, global, software`

#### Important Format Limitation

The Bulk Upload tool is designed for standard content. It does not support complex formats like Quizzes, Polls, or Recipes. You must build those specific post types manually using the "Add Post" page.

## Posts

The Posts menu is the central place for managing all your content. From here, you can view your published articles, approve content written by your authors, and track your upcoming schedules.

Menu Item | Description & Function
--- | ---
Posts | Displays a complete list of all currently published content on your website. You can edit, delete, or quickly view any post from this list.
Pending Posts | Acts as a waiting list. When your authors create a new post, it lands here. As an admin, you must review and approve the content before it goes live.
Scheduled Posts | Shows all the posts you have set to be published in the future. Once the scheduled date and time arrive, the system will automatically move them to "All Posts" and make them public.
Drafts | Contains unfinished posts that you or your authors have saved for later. These items are completely hidden from the public.

#### Quick Actions (Select Menu)

Next to every post in the list, you will see a Select button. Clicking this opens a dropdown menu. The options in this menu change smartly depending on the post format and its current status:

- Edit & Delete Basic tools to update the post content or remove it from your database entirely. Available for all posts.
- Approve or Publish If a post is in the Pending, Drafts, or Scheduled list, you can use these buttons to instantly make the post live without opening the edit page.
- Visibility Toggles (Admin Only) For active posts, admins will see quick options to Add/Remove to Slider, Featured, Recommended, or Breaking News. This lets you pin posts to your homepage in one click.
- Details (Events Only) If the post is an Event format, a Details button will appear. Clicking this takes you to the ticket and attendee management page for that specific event.

#### Events Calendar

The Events page provides a special calendar view. Instead of a standard text list, all your upcoming and past events are displayed on a large, interactive calendar.
When you click on any event directly on the calendar, a details page will open. Here, you can easily view the event information, check its status, and see the complete list of users who have registered to attend.

## RSS Feeds

The RSS Feeds module allows you to automatically import content from other websites into your own database. By connecting a valid XML/RSS link, the system can fetch external articles, images, and descriptions, and publish them as your own posts.

### Adding a New Feed

When you click Add Feed, you will see a form with specific settings to control how the imported posts will behave on your site.

Setting | Function & Description
--- | ---
Language & Category | Select the language and category where the imported posts will be saved.
Number of Posts to Import | Defines how many articles the system will fetch from the external site in a single run.
Auto Update | If enabled, the system will automatically check the external site for new content and import it using a Cron Job.
Show Read More Button | Adds a "Read More" link to the end of the imported text, redirecting users to the original source.
Add Posts as Draft | If enabled, imported articles will be saved to your Drafts list instead of publishing immediately. You can review them before making them live.
Generate Keywords | Automatically analyzes the post title and creates SEO keywords based on the words used.
Images (Saving Method) | You can choose to Download Images to your own server, or Show Images from Original Source (using external URLs). Note: Showing images via external URL is safer regarding copyright laws and saves your server's storage space.

### Managing Active Feeds

On the main RSS Feeds page, you will see a list of all your connected feeds. From here, you have two primary actions:

###### Manual Import

Under the Feed URL, there is an Import Posts button. Clicking this forces the system to immediately fetch and publish the latest articles from that specific feed.

###### "Auto Update" Status Badge

If a feed has this green badge, it means it is actively monitored by the background system (Cron Job). It will automatically fetch new posts without your manual intervention.

#### Automating RSS Feeds (Cron Jobs)

To make the "Auto Update" feature work, you must configure a Cron Job on your server. When the cron runs, the system checks the 3 oldest feeds in your list and updates them. This prevents server overload. For full instructions on how to set this up, please read the Cron Job section.

## Categories

Categories help you organize your posts and make it easy for visitors to find what they are looking for. You can create main categories (like "Technology") and subcategories (like "Mobile Phones" or "Computers").

### General Information & SEO

Field Name | Description
--- | ---
Category Name | The main title of your category. This field is required.
Slug | The URL link of the category. If you leave it empty, the system will create it automatically based on the category name.
Category Block Style | If you choose to show this category on your homepage, you can select how its posts will look. There are 6 different visual layouts to choose from (for example, Block 5 is a slider). Just click the image of the layout you want.
Meta Options | Fill in the Meta Title, Meta Description, and Meta Keywords to help your category rank better on Google and other search engines.

### Category Options

You will find these settings in the right sidebar. They control how and where your category is displayed.

Option | Description
--- | ---
Language | Choose which language this category belongs to. It will only show up when the site is viewed in this specific language.
Parent Category | Select "None" to make this a main category. If you select an existing category from the dropdown list, this new one will become its subcategory.
Sort Order | Type a number (1, 2, 3) to order your categories. Lower numbers appear first in the menu.
Color | Click the color box to open the color picker. This color will be used for category badges and tags on your website.

Display Toggles

Turn these switches on or off to control visibility:

- Status: Turn this off to hide the category completely from the public.
- Show on Menu: Adds a link to this category in the main website navigation.
- Show on Homepage: Displays a block of posts from this category directly on your home page (using the Block Style you selected earlier).

### Premium Settings

You can easily lock all posts inside a category so only paying users can read them.

Setting | Description
--- | ---
Premium Category | If you turn this on, every post inside this category will be locked automatically. Users must buy a premium subscription plan to read them.
Exclusive Category | If you turn this on, users must pay a one-time fee to access the posts in this category. When enabled, a Price field will appear for you to enter the cost.
Apply to Subcategories | Check this box if you want the premium or exclusive rules to automatically apply to all the child categories under this main one.

## Tags

Tags are simple keywords used to connect similar posts together. For example, if you publish an article about a new smartphone, you might use tags like "mobile", "tech", or "apple". When a visitor clicks on a tag, they will see a list of all posts that share that exact keyword.

### Adding a New Tag

If you want to create a tag manually before writing a post, you can use the form on this page. The process requires only three simple fields.

Field Name | Description
--- | ---
Language | Select the language for your new tag. It will only group posts that are written in this specific language.
Tag | Type the keyword you want to use. It is best to keep tags short, usually one or two words.

### Managing Existing Tags

The main table displays every tag currently saved in your database. From this list, you can use the search bar to find specific keywords, edit a tag to fix a typing mistake, or delete tags that you no longer need.

#### Workflow Tip: Dynamic Tag Creation

You do not need to visit this page every time you want a new tag. While adding or editing any post, you can simply type new keywords directly into the Tags box and press Enter. The system will automatically create and save the new tags into your database.

## Widgets

Widgets are small content blocks usually displayed in the sidebar of your website. You can use them to add extra information, display custom text, or show automatic lists like popular posts and social media links.

### Default System Widgets

Your website comes with several built-in widgets. If you do not want to use them, you can easily disable them by turning their Status off in the main widget list.

###### Follow Us

Displays quick links to your official social media profiles.

###### Popular Posts

Automatically displays a list of the most viewed articles from the last 30 days.

###### Recommended Posts

Shows a hand-picked list of articles that you marked as "Recommended" during post creation.

###### Popular Tags

Creates a dynamic cloud of the most frequently used tags on your website.

###### Voting Poll

Displays interactive polls that you have created, allowing users to vote directly from the sidebar.

### Adding a Custom Widget

In addition to the default options, you can create your own custom text or image blocks using the Add Widget form.

Field Name | Description
--- | ---
Title | The main headline of your widget. This will appear at the top of the block in your sidebar.
Content | The rich-text editor where you can write text, insert images from your File Manager, or use the AI Writer to generate content quickly.
Language | Select which language version of your site should display this specific widget.
Order | Type a number to position the widget in the sidebar. Smaller numbers (like 1 or 2) will make the widget appear higher up.
Status | A quick toggle switch. Turn it on to make the widget visible, or turn it off to hide it without deleting it.
Where To Display | Select the specific categories where this widget should appear. Please note: Only categories that use Block Style 2, 3, or 4 will be available to select. Other categories will not show up in this list. (No for the classic theme)

## Polls

Polls are a great way to interact with your visitors and gather their opinions. Once created, these polls are displayed in the sidebar of your website to catch the users' attention.

### Creating a Poll

To build a new poll, you need to define the main question and provide the answers that users can choose from.

Field Name | Description
--- | ---
Question | The main question you want to ask your audience. For example: "What is your favorite smartphone brand?"
Poll Options | The list of answers. The system provides one blank options by default. You can click the Add Option button to add more answers, or use the trash icon to remove an option.

### Poll Settings

These settings control who can see and interact with your poll.

Setting | Description
--- | ---
Language | Select which language version of your site will display this poll.

Vote Permission

Choose who is allowed to vote:

- All Users: Anyone visiting your site can cast a vote.
- Only Registered Users: Visitors must log in to their account to vote.

Status | Turn this switch on to make the poll active. Turn it off to hide the poll from the public without deleting its data.

## Media

The Media section is the central file manager for your entire website. Every image, video, audio, and file uploaded to your server is safely stored here. You can manage your files directly on this page, or access the exact same interface through a popup window while creating a new post.

### File Categories

To keep your storage organized, the system automatically separates your uploads into five distinct tabs:

Tab Name | Description
--- | ---
Main Images | Contains the primary cover images and thumbnails used for your standard articles.
Content Images | Contains the specific images used inside special post formats, such as step-by-step Recipe photos, Event gallery pictures, or Quiz result images.
Videos | Stores the MP4 or other video files that you have uploaded directly to your own server.
Audios | Stores audios uploaded for your visitors to listen to.
Files | Holds downloadable documents like PDFs, Word files, or ZIP archives that you want to share in your posts.

#### Controlling Allowed File Types

You can control exactly what types of files your authors are allowed to upload (for example, allowing `.pdf` but blocking `.exe`). You can configure these security rules and set maximum file size limits in the Content Settings menu.

## Gallery

The Gallery module allows you to create dedicated photo albums for your website. Unlike the Media section (which stores files used inside your posts), this section is used to display standalone image galleries directly to your visitors.

### Gallery Structure

To keep your photos organized, the gallery uses a simple three-step structure. You must follow this order to successfully display your images.

Section | Description & Workflow
--- | ---
Albums | This is the main folder. You must create an album first before you can upload any photos. For example, you might create an album named "Tech Conference 2026".
Categories | This is an optional step. You can create sub-folders inside your albums to group photos. For example, inside your Tech Conference album, you could create separate categories for "Speakers" and "Audience".
Images | This is where you upload the actual photos. To add images, simply select the target Album (and the Category, if you created one), and upload your files.

#### Bulk Image Upload

When adding photos to an album, you do not have to upload them one by one. You can select multiple images from your computer at the same time to upload a whole gallery instantly.

## Contact Messages

The Contact Messages section acts as the inbox for your website. Whenever a visitor fills out the contact form on your site, their message is safely stored and displayed in this list.

### Managing Messages

For every message in your list, you have two simple actions available to help you manage your communications.

Action | Description
--- | ---
Reply | Clicking this option opens a window where you can quickly write and send an email response directly to the visitor who contacted you.
Delete | Removes the message permanently from your database. This is useful for clearing out spam or old messages that you no longer need.

## Comments

The Comments section allows you to manage all the feedback and discussions left by your visitors. From this list, you can read the messages, see who wrote them, and control what appears on your website.

### Comment Status

Every comment in the system has a status indicator to help you moderate your community effectively.

Status | Description
--- | ---
Pending | The comment is waiting for an admin review. It is currently hidden from the public website.
Approved | The comment is live and visible to all visitors under the respective post.

#### The Approval System

If you turn on the Comment Approval System in your settings, all new comments will automatically arrive as Pending. They will stay hidden until an admin manually clicks the Approve option. This is a great way to protect your site from spam and bad language.

## Newsletter

The Newsletter module is your built-in email marketing tool. It helps you collect email addresses from your visitors, manage your audience, and send emails directly from your dashboard.

### Managing Subscribers & Sending Emails

The main Newsletter page displays two separate lists to help you target the right audience. You can easily select email addresses from either list to send a direct message.

List Type | Description
--- | ---
Newsletter Subscribers | People who entered their email address into the newsletter form or popup on your website. They might not have a registered account.
Registered Users | A complete list of people who have created a formal account on your website.

#### Import & Export

You can download your entire subscriber list as a file using the Export button. Keeping local backups of your lists is a great practice for data security. You can also use the Import button to add an existing list of subscribers to your database.

### Newsletter Settings & Popup

You can control how the newsletter form appears to your visitors using the Settings panel.

Setting | Description
--- | ---
Status | Turn this on to enable the newsletter system. If you turn it off, all newsletter subscription forms will disappear from your website.
Newsletter Popup | When enabled, a window will automatically pop up on the screen to ask visitors for their email address. This is a highly effective way to grow your list.
Image | Upload an eye-catching picture to display inside the popup. Supported formats are JPG, PNG, and WEBP.

## Premium Membership

The Premium Membership module allows you to monetize your website by restricting access to your content. You can create subscription plans, sell individual posts, and track all your earnings from a single dashboard.

### 1. Membership Settings

Before creating plans, you need to configure how the premium system operates across your website.

Setting Group | Options & Descriptions
--- | ---

General

- Status: Turns the entire premium system on or off.
- Content Mode: Choose Selected Content Only to lock specific posts/categories, or All Website Content to force a paywall on every single page.

Exclusive Content | Also known as "Pay-per-content". If enabled, users can buy a specific post individually without buying a full subscription. You can set a Default Content Price here, which you can always change later while creating a post.

Paywall Appearance

Controls how locked content looks to non-paying users:

- Strict Paywall: Hides everything on the page, only the post title will be visible.
- Hard Paywall: Shows the post title and main image, but completely hides the text.
- Fade Out Effect: Shows the first few lines of the text clearly, then smoothly fades out into the background. (Highly recommended).

Subscribe Button | Allows you to show or hide the main "Subscribe" button on the website and pick its exact color to match your brand.

#### Changing the Button Text

You can change the actual text of the "Subscribe" button (e.g., to "Join Premium" or "Upgrade") by going to the Language Settings and translating the `btn_subscribe` key.

### 2. Subscription Plans

You can create multiple pricing tiers for your users (like Basic, Pro, and VIP). Click Add Plan to set up a new tier.

Field Name | Description
--- | ---
Billing Cycle & Price | Choose how often the user is billed (Daily, Weekly, Monthly, Yearly) or check Lifetime for a one-time payment. Set the price, or check Free to offer a zero-cost tier.
User Profile Badge | Select a visual badge (like "Pro" or "Elite") that will automatically appear next to the user's name in comments and on their profile once they buy this plan.

Special Flags

- Most Popular: Highlights this specific plan on the pricing page to attract more sales.
- Ad-Free Experience: Automatically hides all website advertisements for users who purchase this plan.

Language Translations | Write the Plan Name, Description, and dynamic Plan Features (like "Access to all videos", "Premium Support") for each language your website supports using the tabs.

### 3. Transactions

The Transactions page is your financial ledger. It records every successful payment made on your website.

###### Transaction Details

The list shows exactly what was purchased (a Subscription Plan or a Single Content), who bought it, the exact amount paid, and the specific Payment Gateway used (Stripe, PayPal, Razorpay, etc.).

###### Advanced Filtering

Use the Filter button at the top right to search through your sales history. You can filter records by a specific Date Range, Payment Method, or Transaction Type to easily calculate your monthly revenue.

## Reward System

The Reward System allows you to share revenue with your authors based on the traffic they bring to your website. If you enable this feature, you agree to pay your authors a specific amount of money based on how many unique page views their posts receive.

#### Important: Enable per Author

Turning on the Reward System in settings does not automatically activate it for everyone. You must go to the Users menu, edit the specific author, and check the Enable Reward System box for their account.

### 1. How the Payment Workflow Works

Managing payouts involves a mix of automatic calculations and manual money transfers. Here is the step-by-step process:

Step | Action & Description
--- | ---
Set the Reward Amount | As the admin, you define how much money you will pay per 1,000 page views in the settings. The system divides this number by 1,000 to calculate the exact earning for a single page view.
Auto-Calculation | The system automatically counts valid unique views and slowly increases the earnings balance in the author's account.
Manual Payment | When an author requests their money (or reaches a limit), you must send the real money to them manually using methods like PayPal, IBAN, SWIFT, or Crypto.
Record the Payout | After sending the real money, you must go to Reward System > Payouts and approve the author's payout request. This tells the system to deduct that amount from the author's digital balance.

### 2. System Settings

Configure the financial details of your reward system here.

Setting | Description
--- | ---
Status | Turns the calculation system completely on or off.
Reward Amount | The total amount of money earned for every 1,000 valid views.
Payout Methods | Select which manual payment methods (PayPal, Bank Transfer, etc.) authors can choose when requesting their money.

### 3. Anti-Cheat & Human Verification

To prevent users from using bots or automated scripts to artificially increase their page views and steal money, our script uses a smart Human Verification system. Traditional IP blocking is not enough, so we track actual user behavior.

Behavior Rule | Why it matters
--- | ---
Minimum Time Spent | Bots usually load a page instantly and close it. Real humans take time to read the content. Set a minimum number of seconds the user must stay on the page.
Minimum Mouse Movements | Most simple bots do not move the mouse. Requiring at least 1 or 2 mouse movements easily separates real computer users from automated scripts.
Minimum Scroll Events | Real humans scroll down to read long articles. If a visitor never scrolls, the system will not count their visit as a valid page view.

###### Example Scenario

Imagine you set Time = 10s, Mouse = 1, and Scroll = 1. When a visitor opens an article, a hidden 10-second timer starts. If the visitor moves their mouse at least once, scrolls down at least once, and stays for the full 10 seconds, the system verifies them as a real human and adds the money to the author's account.

## Ad Spaces

The advertising system is designed to be fully mobile-friendly. It ensures that your banners always look perfect and never break your website's layout, whether the visitor is using a large computer monitor or a small smartphone.

### Desktop vs. Mobile Banners

To maintain a perfect design, every ad space provides two different code fields. You must fill in both fields when adding an advertisement.

Field Name | Description
--- | ---
Desktop Banner | This ad will only be displayed on large screens (monitors and laptops wider than 992 pixels). You can use wider formats like 728x90 here.
Mobile Banner | This ad will only be displayed on smaller screens (phones and small tablets under 992 pixels). You should use compact formats like 300x250 here to prevent horizontal scrolling issues.
Ad Size | Although you can paste an ad of any size, entering the correct dimensions helps the system allocate the right amount of blank space on the screen while the ad is loading.
Ad Code | Simply paste the raw HTML or script code provided by your ad network (like Google AdSense) into this box.

### Google AdSense Activation

If you are using Google AdSense, you must add your main verification script before placing individual banners.

###### AdSense Activation Code

Paste your primary AdSense publisher script into this dedicated section. The system will automatically inject it into the header of your entire website. Once this global script is active, you can start pasting your individual ad unit codes into the specific Ad Spaces.

#### Troubleshooting Blank Ads

Our script does not modify or block your ad codes in any way. If you have pasted your code but the ads are not showing, please double-check your code. If you are using AdSense, blank spaces usually mean your account is still under review, or there is a billing issue on your Google dashboard. You may need to wait a few days or contact Google AdSense Support.

## My Earnings

The My Earnings dashboard is available to both administrators and any author who has the Reward System enabled. This is the personal financial hub where earning users can track their article views, check their current balance, configure their own payment methods, and withdraw their money.

### Earnings Overview

At the top left of the page, users will see their personal performance statistics:

###### Balance

The total amount of money the author has earned that is ready to be withdrawn.

###### Pageviews

The total number of verified, unique human views the author's articles have generated.

### Setting Up a Payout Account

Before an author can request their earned money, they must tell the system where the funds should be sent. By clicking the Set Payout Account button, authors can open the configuration window and securely save their own personal details for up to four different payment methods.

Payment Method | Required Information
--- | ---
PayPal | The author simply enters the email address linked to their active PayPal account.
Bitcoin | The author enters their valid BTC crypto wallet address.
IBAN | The author enters their Full Name, Country, Bank Name, and their International Bank Account Number (IBAN).
SWIFT | Requires detailed international banking information, including the author's full address, bank branch details, city, and SWIFT Code.

### Requesting a Payout

Once an author has earned enough money, they can click the New Payout Request button. They will be asked to enter the amount they want to withdraw and select their preferred payment method from the ones they have configured.

#### Minimum Withdrawal Limits

Authors cannot request a payout if their balance is below the minimum limit set for their chosen payment method. For example, Bitcoin might have a low minimum limit, while a SWIFT bank transfer might require a much higher balance. These exact limits are displayed directly inside the author's payout request window.

### Payouts History

The large table on the right side of the screen displays the author's past and pending payout requests. Authors can track the status of their money here. Once the site admin manually sends the money to the author's real account and approves the request from the admin panel, the status will update to Completed.

## Users

The Users module is the central hub for managing everyone who interacts with your website. From this page, you can monitor registered visitors, assign roles to your staff (like Authors or Moderators), and control user access.

### The User List

The main table gives you a quick overview of every account on your platform. You can see their profile picture, email verification status, assigned Role, and their latest Activity (such as when they registered and the last time they were seen online).

###### Filtering & Searching

Use the top Filter menu to narrow down the list. You can easily find users based on their Role, Status (Active or Banned), or whether they have the Reward System enabled. You can also use the search bar to find a specific email or username.

###### Bulk Actions

You do not have to delete accounts one by one. By checking the boxes next to the user IDs on the left side of the table, you can select multiple accounts and use the Delete Selected button to clean up your database quickly.

### User Management Options

Clicking the Options button next to any user reveals a powerful menu with several administrative actions.

Action | Description
--- | ---
User Details & Edit | View the complete profile information of the user, or click Edit to manually change their username, email, password, or profile details.
Change User Role | Opens a popup where you can promote a standard user to an Author, Moderator, or Admin.
Enable Reward System | Turns on the financial tracking system for this specific user, allowing them to earn money from their article views.
Assign / Cancel Subscription | Allows you to manually give a user a Premium Membership plan for free, or cancel their currently active subscription without requiring them to pay.
Verify Email | If the user is having trouble receiving their verification email, you can manually verify their account with this button.
Ban User | Instantly blocks the user from logging into their account. Their profile will be marked with a red "Banned" badge. You can easily remove the ban from the same menu later.

#### Super Admin Protection

To prevent accidental lockouts, the system protects "Super Admin" accounts. A regular administrator cannot delete, ban, or change the role of a Super Admin. Only another Super Admin has the authority to modify these top-level accounts.

### The User Details Dashboard

When you click User Details from the options menu, you are taken to a comprehensive, dedicated profile page for that specific user. This dashboard gives you complete visibility into their account status, finances, and premium history.

###### Profile & Earnings

The left sidebar displays the user's Avatar, Role, and connected Social Media accounts. If the user is an author, you will also see two important financial blocks:

- Balance: Their currently available earned money.
- Pageviews: The total number of verified views their articles have received.

###### Premium Membership Card

At the top of the main area, a dynamic gradient card shows the user's exact subscription status. If they are a premium member, this card displays their Plan Name, their Current Billing Cycle dates, and exactly when their Next Payment is due (or when the plan expires). If they are not subscribed, the card will simply indicate "No Active Subscription".

#### Content & Financial Records

Below the Premium Membership card, you will find two critical tables that act as the user's financial ledger on your website.

Record Table | Description
--- | ---
Purchased Content | A list of every single "Exclusive Paid Post" this specific user has bought. It includes the date of purchase and a direct button to view the unlocked content.
Transactions & Invoices | The complete history of every payment this user has made (both for subscriptions and single posts). It shows the exact amount, the payment gateway used (e.g., Stripe, PayPal), and provides a direct link to generate and download a formal Invoice for each successful payment.

## Roles & Permissions

The Roles & Permissions module allows you to create custom access levels for your staff and users. Instead of making everyone an administrator, you can create specific roles (like "Editor" or "SEO Manager") and assign them exactly what they are allowed to see and do on your website.

### Understanding the Roles Table

The main list displays all the active roles on your website. The system comes with several default roles built-in, but you can create as many custom roles as you need.

Column | Description
--- | ---
Role Name | The name of the role (e.g., "Moderator"). If a role has a "Default" badge next to it, it means it is a system-required role and cannot be deleted.
Badge | If a visual profile badge is assigned to this role (like a "Pro" or "Author" icon), it will be displayed here.
Permissions | A quick visual list of all the specific actions this role is allowed to perform (e.g., "Add Post", "Manage Comments").

### Creating or Editing a Role

When you click Add Role or edit an existing one, a popup window will appear where you can configure the exact details of the access level.

###### Basic Information

You must provide a name for the role in every language your website supports. This ensures that a Spanish admin sees "Autor" while an English admin sees "Author".

You can also link a specific User Profile Badge to the role so that anyone assigned this role automatically gets the badge on their public profile.

###### Assigning Permissions

The bottom half of the form contains a list of checkboxes for every single module in the admin panel (like managing posts, editing categories, or viewing settings). Simply check the boxes for the features you want this role to access. If a box is left unchecked, that menu item will be completely hidden from the user's dashboard.

#### The Super Admin Role

The Super Admin is the highest level of authority. It automatically has the "All Permissions" flag. You cannot manually select or unselect individual checkboxes for a Super Admin because they inherently have full access to everything, including managing other Super Admins.

## Badges

User Badges are visual markers that appear next to a user's name across your website (in comments, profiles, and author boxes). They are a great way to highlight VIP members, staff members, or users who have purchased a premium subscription.

### Managing Existing Badges

The main table displays a list of all your created badges along with a live visual preview.

Column | Description
--- | ---
Name | The primary name of the badge used in your system.
Preview | A real-time rendering of the badge showing its exact color, shape, and icon as it will appear to your visitors.
Options | Click here to edit the badge's design or delete it permanently from your database.

### Adding or Editing a Badge

When you click Add Badge, a modal window appears allowing you to design a new visual marker in seconds.

Setting | Description
--- | ---
Name (Multi-Language) | Enter the text for the badge. Use the language tabs at the top to translate this name for different versions of your site.
Color | Use the interactive color picker or paste a HEX code to define the background color of your badge.
Icon | Select a crisp vector (SVG) icon from the predefined list to appear inside the badge, or select None if you prefer an empty, minimal look.

#### How to Assign Badges

Creating a badge here does not automatically give it to your users. Once you design a badge in this menu, you can assign it by linking it to a specific User Role or a Subscription Plan.

## Password Reset

The standard password recovery feature relies on your website's email system to send secure reset links. Before your visitors (or you) can use the "Forgot Password" page, you must ensure your Email Settings are properly configured with a working SMTP server.

### Emergency Admin Password Reset

If you are completely locked out of your admin account and have not set up your email settings yet, you can force a password reset directly through your database using phpMyAdmin (or any other database manager).

###### Step-by-Step Manual Reset

1. Open your database management tool (e.g., phpMyAdmin) from your hosting control panel.
2. Find and click on the `users` table inside your database.
3. Locate the row for your admin account and click Edit.
4. Delete the current text in the `password` column and double-click the code below to copy it exactly. Please make sure there are no blank spaces at the beginning or the end of the code.
   `$2a$08$drmgGpMVGzdyiv7q5LUt3eUne8xh05XKrJPgMKaR3RgRwCQKXZpdu`
5. Save your changes in the database. You can now log into the admin panel using the default password: 1234

#### Security Warning

"1234" is highly insecure and leaves your website vulnerable. As soon as you successfully log into your dashboard using the emergency password, you must immediately go to your Profile Settings and change it to a strong, secure password.

## SEO Tools

The SEO Tools module helps you optimize your website for search engines like Google. From this dashboard, you can automatically generate XML sitemaps to ensure all your pages are indexed properly, and integrate Google Analytics to track your website traffic.

### XML Sitemap Generator

A sitemap acts as a roadmap of your website that leads search engines to all your important pages. The system automatically calculates the best settings, but you can override them if needed.

###### Sitemap Settings

You can configure three main parameters before generating the file:

- Frequency: How often the content at a particular URL is likely to change.
- Last Modification: The time the URL was last modified.
- Priority: The priority of a particular URL relative to other pages on your site.

Note: Leaving these set to "Automatically Calculated" is recommended for the best SEO results.

###### Managing Generated Sitemaps

After you click Generate Sitemap, a new file named `sitemap.xml` will be created and displayed at the bottom of the section. From there, you can click the file name to view it live in your browser, or use the quick buttons to Download or Delete the file from your server.

#### Automating Your Sitemap (Cron Job)

You do not need to manually click the generate button every time you publish a new post. By setting up a Cron Job on your server, the system will automatically update your `sitemap.xml` file in the background. Please refer to the Cron Job section for the exact setup command.

### Google Analytics

You can easily connect your website to Google Analytics 4 (GA4) without touching any code.

Setting | Description
--- | ---
Status | Toggle this switch to easily turn the Google Analytics tracking script on or off.
Measurement ID | Simply paste your GA4 ID here (it usually starts with G-, for example: `G-XXXXXXXXXX`). The system will automatically inject the correct tracking script into the header of your website.

## Google News

Varient includes a specialized module designed to help your publication get indexed in Google News. This system automatically generates the strictly formatted XML files required by Google's technical standards.

#### Sitemap vs. Publisher Center Feed

This module provides two distinct integration methods, each serving a different purpose:

- News Sitemap (SEO) A specialized sitemap for Google Search Bots. It tells Google about articles published in the last 48 hours to help them appear in the "News" tab of search results.
- Publisher Center Feed (App) A rich-media RSS feed designed for the Google Publisher Center. This allows your content to appear in the Google News mobile app and newsstand.

#### Configuration Settings

Before submitting your site to Google, you must configure the following settings in the Google News section of your Admin Panel:

###### Publication Name

This is the most critical setting. You must enter the exact name of your publication as it appears in your Google Publisher Center account. Precision is required for validation.

###### RSS Content Type

- Show Full Content: Displays the entire article within the app (Native View). Recommended for better UX.
- Show Summary Only: Users must click "Read More" to visit your website.

###### Feed Post Limit

Determines how many recent articles are included in the RSS Feed. A value between 50 and 100 is recommended for optimal performance.

#### Submission & Link Generator

To get your publication listed in the Google News App, follow these steps:

1. Go to Google Publisher Center and create your publication.
2. Navigate to the "Content" tab and create a new "Feed" section.
3. In your Admin Panel, use the Feed Link Generator tool to select a Language and a Category.
4. Click Copy and paste this URL into the Google Publisher Center.

Pro Tip: Category Feeds You can create multiple themed sections in Google Publisher Center (e.g., "Politics", "Sports") by generating separate feed URLs for each category using the generator tool.

#### Technical Details & Constraints

Please keep the following technical constraints in mind. Important: Changes made affect your XML feeds immediately but may take time to reflect on Google's side due to caching.

Constraint | Description
--- | ---
The 48-Hour Rule | The `sitemap-news.xml` file will ONLY contain articles published in the last 2 days. This is a strict requirement by Google. Older posts will remain in your general sitemap.
Sitemap Caching | To protect your server performance, the News Sitemap refreshes every 1 minute (Micro-cache).
RSS Feed Caching | The rich-media RSS Feed refreshes every 1 minutes.

## Storage

The Storage module allows you to choose where your website's uploaded files (images, videos, documents) are saved. If you do not have enough disk space on your web server, offloading your files to an external cloud storage provider is the most efficient solution.

### Local Storage (Default)

By default, all uploaded files are stored directly on your web server inside the `uploads/` directory. This requires absolutely no external configuration. However, as your website grows, this method will consume your server's disk space and bandwidth.

### Amazon S3

Amazon Simple Storage Service (S3) is the industry standard for cloud storage. To connect it to your website, follow these configuration steps on your AWS account:

1. Log in to your AWS Management Console and navigate to the S3 dashboard.
2. Click the Create bucket button.
3. Enter a unique Bucket Name and select your Region. Remember the region code (e.g., `us-east-1`).
4. Under Object Ownership, select ACLs enabled.
5. Uncheck the Block all public access option, and check the box to acknowledge that the bucket will be public.
6. Disable the Bucket Key option, then click Create bucket.
7. Click your account name at the top right and go to My Security Credentials.
8. Go to the Access keys tab, click Create New Access Key, and copy your Access Key and Secret Key.

Admin Panel Field | What to enter from AWS
--- | ---
AWS Access Key | The Access Key ID you just created.
AWS Secret Key | The Secret Access Key you just created.
Bucket Name | Your exact bucket name (e.g., `varient-files`).
Region | The region code you selected (e.g., `us-east-1`).

### Cloudflare R2

Cloudflare R2 is an S3-compatible service known for having zero egress (bandwidth) fees. You must have your domain's DNS managed by Cloudflare to use this service.

1. Log in to your Cloudflare dashboard and ensure your domain is added (using Cloudflare nameservers).
2. Navigate to R2 Object Storage from the sidebar.
3. Click Create bucket, give it a unique lowercase name, select a location, and click Create.
4. Click on your new bucket, go to the Settings tab, and click + Add under Custom Domains.
5. Enter a subdomain (e.g., `storage.yourdomain.com`). Once active, this will be your Public URL.
6. Go back to the main R2 page, click Manage API Tokens (top right), and click Create Account API Token.
7. Name the token and set the Permissions strictly to Object Read & Write.
8. Click Create and instantly copy your Access Key ID and Secret Access Key.

Admin Panel Field | What to enter from Cloudflare
--- | ---
Access Key | Your Cloudflare Access Key ID.
Secret Key | Your Cloudflare Secret Access Key.
Bucket Name | The name of your R2 bucket.
Endpoint URL | The "S3 API" URL found under your bucket's Settings tab.
Public URL | The custom subdomain you connected (e.g., `https://storage.yourdomain.com/bucket-name`).

### Backblaze B2

Backblaze B2 is a highly affordable and reliable cloud object storage service with a developer-friendly API.

1. Log in to Backblaze, go to B2 Cloud Storage > Buckets, and click Create a Bucket.
2. Give it a name and set the privacy to Public (This is strictly required for visitors to see your images).
3. Go to Application Keys in the sidebar and click Add a New Application Key.
4. Allow access to the specific bucket you just created, set the type to Read and Write, and click Create.
5. Instantly copy the keyID and the applicationKey.
6. Go back to the Buckets page. Note the Endpoint listed next to your bucket (e.g., `s3.us-west-004.backblazeb2.com`).
7. To find your Public URL (Friendly URL), click Browse Files, upload a dummy image, and click on it to view its details. Copy the URL up to the bucket name, removing the file name itself (e.g., `https://varient.s3.eu-central-003.backblazeb2.com/`).

Admin Panel Field | What to enter from Backblaze
--- | ---
Key ID | The `keyID` you generated.
Application Key | The `applicationKey` you generated.
Bucket Name | The exact name of your B2 bucket.
Endpoint URL | The S3 Endpoint URL.
Public URL | The "Friendly URL" you discovered by browsing files.

## Cache System

The Cache System significantly improves your website's loading speed and overall performance by temporarily storing frequently accessed data. This reduces the heavy lifting required by your database and ensures your pages load instantly for visitors. The module is divided into two distinct caching mechanisms.

### Content Cache

This mechanism handles dynamic, frequently updated data such as your posts, articles, and user comments.

Setting | Description
--- | ---
Status | Toggle this to enable or disable the caching of dynamic content.
Refresh When Database Changes | If set to Yes, the system will intelligently clear the relevant cache files whenever a new post or comment is added. This ensures your visitors always see the latest content without waiting.
Cache Refresh Time (Minutes) | The maximum lifespan of a cache file. After this specified time (e.g., 34 minutes), the cache will automatically expire and rebuild itself from the fresh database data.

### Application Cache

This mechanism handles core structural data that rarely changes, such as your general settings, language translations, category trees, and static pages. Because this data is static, it is persisted in the memory until you explicitly update a setting.

Setting | Description
--- | ---
Status | Toggle this to enable or disable the caching of core application data. Leaving this enabled is highly recommended for production websites to minimize database queries.

#### Manual Cache Reset

If you make a change to your website (like updating a translation, changing a category name, or modifying a setting) but do not see the change reflected on the live frontend, the system is likely serving an older cached version. Simply click the yellow Reset Cache button in either section to instantly clear the memory and force the system to load the fresh data.

## Cron Job

Varient relies on a background process called a "Cron Job" to automatically manage all time-sensitive operations. This system ensures that scheduled content goes live, search engines stay updated, external news feeds are fetched, and subscription emails are sent without any manual intervention.

#### Security & Access Token

Because the Cron Job performs critical database operations, it is protected by a unique Security Token. You must generate this token before setting up your server. Navigate to the Security Settings in your Admin Panel, click Generate under the Cron Job Token card, and copy the resulting key.

#### Automated Tasks Breakdown

The high-performance controller is divided into two main processing routes, each handling a specific set of background tasks.

##### Master Service

Handles general website operations and content delivery:

- Scheduled Posts: Automatically publishes articles set for a future date.
- Sitemap Automation: Periodically checks and regenerates your XML sitemaps.
- RSS Feed Aggregation: Fetches external news using a load-balancing queue.
- Data Cleanup (Every 3 Hours): Purges expired showcase posts and deletes old posts if auto-deletion is enabled.

##### Premium Subscriptions

Handles the financial and membership lifecycle:

- Expiration Checks: Automatically revokes access when a user's subscription time runs out.
- Grace Periods: Manages 24-hour grace periods for gateway-linked subscriptions (Stripe/PayPal).
- 3-Day Reminders: Sends an automated "expiring soon" email to users 72 hours before their plan ends.
- 1-Day Reminders: Sends an urgent "expiring today" email 24 hours before expiration.

#### Flood Protection Architecture

The system is engineered with an enterprise-level smart locking mechanism to protect your server's CPU from being exhausted by overlapping processes.

- Master Service Lock (55s) Once triggered, the master cron locks itself for 55 seconds. Even if a bot hits the URL 100 times in a row, the script will strictly execute only once per minute to conserve resources.
- Subscription Lock (5m) Because sending automated emails (SMTP) takes longer, the subscription check process locks itself for 5 minutes (300 seconds) to prevent duplicate emails from being sent to your users.

### Server Setup Instructions (cPanel Guide)

For the automated features to function perfectly, you must add two separate Cron Jobs to your server. One will handle the core operations every minute, and the other will handle premium subscriptions every hour.

#### Step 1: Prepare Your Commands

Before logging into your server, prepare the two commands below. You must replace `yourdomain.com` with your actual website URL and `YOUR_TOKEN` with the Security Token you generated in the Admin Panel.

###### Command 1: Master Service

This URL handles scheduled posts, sitemaps, and RSS feeds.

`wget -q -O /dev/null "https://yourdomain.com/cron/service/run?token=YOUR_TOKEN"`

###### Command 2: Subscription Service

This URL checks expirations and sends premium email reminders.

`wget -q -O /dev/null "https://yourdomain.com/cron/service/run/subscription?token=YOUR_TOKEN"`

#### Step 2: Add the Cron Jobs in cPanel

Log in to your cPanel account, navigate to the Advanced section, and click on Cron Jobs. Scroll down to the "Add New Cron Job" form to add both of your tasks.

- Task 1: The Master Cron (Runs Every Minute) Since this handles content publishing and queue processing, it must run constantly.
  1. In the Common Settings dropdown, select Once Per Minute (* * * * *).
  2. In the Command field, paste your Command 1 (Master Service).
  3. Click the Add New Cron Job button.
- Task 2: The Subscription Cron (Runs Every Hour) To save server resources and avoid sending too many emails at once, this only needs to run once an hour.
  1. Go back to the empty Add New Cron Job form.
  2. In the Common Settings dropdown, select Once Per Hour (0 * * * *).
  3. In the Command field, paste your Command 2 (Subscription Service).
  4. Click the Add New Cron Job button.

Setup Complete! You should now see both of your commands active in the "Current Cron Jobs" list at the bottom of the page. Your platform is now fully automated.

## Security Settings

The Security module provides comprehensive tools to protect your website from malicious attacks, spam bots, and unauthorized access. It is highly recommended to configure these settings before launching your website to the public.

### General Security

This section allows you to enforce strict login rules and protect your community from spam.

###### Login & Passwords

- Max Login Attempts: Temporarily locks an account after a specified number of failed login attempts to prevent brute-force attacks.
- Lockout Time: The duration (in minutes) an account remains locked before the user can try logging in again.
- Min Password Length: Enforces a minimum character count for all new user registrations.
- Complexity Requirement: If enabled, forces users to include at least one number and one special character in their password.

###### Spam Protection

Manage how external links are processed in both articles and public comments to protect your SEO score:

- Add "Nofollow" (SEO Safe): Automatically adds the `rel="nofollow"` tag to user-submitted links, preventing search engines from passing your domain authority to spam sites.
- Remove Links (Keep Text): Completely strips the HTML link but keeps the anchor text.

### Captcha Settings

Enable a Captcha provider to block automated bots from registering accounts, resetting passwords, or sending contact messages. We highly recommend using Cloudflare Turnstile for a frictionless, privacy-first user experience.

Captcha Provider | Description & Integration
--- | ---
Cloudflare Turnstile | A modern, invisible captcha that requires no user interaction (no "click the traffic lights" puzzles). You simply need to provide a Site Key and a Secret Key obtained from your free Cloudflare dashboard.
Google reCAPTCHA | The traditional v2 Checkbox captcha from Google. Requires a Site Key and Secret Key from the Google reCAPTCHA console.

#### How to Obtain Your API Keys

Cloudflare Turnstile Integration

1. Go to Cloudflare Dashboard and sign in to your account.
2. From the left-hand menu, navigate to the Turnstile section.
3. Click the Add Site (or Add Widget) button.
4. Enter a widget name and click Add Hostnames. Enter your website URL here (e.g., `yourdomain.com`).
5. Click the Create button to generate your keys.
6. Copy the Site Key and Secret Key, then paste them into the Captcha Settings section of your Admin Panel. Keep these keys safe.

Google reCAPTCHA Integration

1. Go to the reCAPTCHA Admin Console.
2. Click the "+" (Create) button at the top menu.
3. Enter a label to identify your website.
4. Select reCAPTCHA v2, then choose the "I'm not a robot" Checkbox option.
5. Add your domain name under the Domains section (e.g., `yourdomain.com`).
6. Accept the terms, click submit, and copy your generated Site Key and Secret Key into your Admin Panel.

#### GDPR Privacy Warning

We strongly recommend using Cloudflare Turnstile as it offers a privacy-focused, cookie-free solution. Google reCAPTCHA may collect user data and tracks visitors, meaning you must explicitly obtain user consent via a Cookie Banner before loading it, to remain compliant with data privacy laws.

### Email Blacklist

The Email Blacklist is a powerful defensive tool against known spammers or abusive users. You can manually add specific email addresses to this list from the Admin Panel.

###### What happens to a blacklisted email?

Any email address added to the Blacklist is completely blocked from interacting with the platform. An owner of a blacklisted email cannot log in, cannot register a new account, cannot post comments, and cannot send messages through the contact form.

## Global Settings

The Global Settings module is the central control room for your entire platform. From here, you can manage your website's core behavior, branding elements, API integrations, and URL structures. Changes made here affect the global operation of your site immediately.

### General System Preferences

This section covers the fundamental operational rules of your website, including localization, user privacy, and mapping integrations.

###### Core Operations

- Timezone: Sets the default server timezone. This ensures scheduled posts and cron jobs run at the correct local time.
- Multilingual System: Toggle this to enable or disable multi-language support across the site.
- Registration System: Turn this off if you want a closed, invite-only platform where visitors cannot create new accounts.
- File Manager: Controls media privacy. You can restrict authors so they only see their own uploaded files, or allow them to view the entire global media library.

###### App & API Integrations

- Progressive Web App (PWA): When enabled, mobile users will be prompted to "Install" your website to their home screen like a native mobile app.
- Google Maps: Toggle the map integrations on/off.
- Google Maps API Key: The specific API key required to render interactive maps on your contact or directory pages.
- User Email Privacy: Determines whether a user's email address is publicly visible on their profile page.

### Google Maps Integration

Varient utilizes the Google Maps infrastructure to display interactive maps on your event page and to accurately pin locations for the Event post type. To ensure these maps function flawlessly, you must generate a valid API Key and enable specific Google services.

#### Important Notice: Billing Requirement

Google provides $200 in free monthly usage for map services, which comfortably covers the costs for most low-to-medium traffic websites without ever charging you. However, Google strictly requires you to attach an active billing account (Credit Card) to your Cloud Console to activate the API.

Step 1: Obtain Your API Key

1. Go to the Google Cloud Console and sign in with your Google account.
2. Select an existing project from the top menu dropdown, or click "New Project" to create one.
3. From the left sidebar, navigate to APIs & Services > Library.
4. Using the search bar, you must find and enable the following 3 specific services one by one. Click on each and press the Enable button:
   - Maps JavaScript API: Required to render and display the actual map on your website.
   - Places API: Enables the autocomplete search bar in your Admin Panel when looking for a venue.
   - Geocoding API: Converts the addresses you type into exact latitude and longitude coordinates.
5. Once all three services are enabled, go back to the left sidebar and click on Credentials.
6. Click "+ Create Credentials" at the top of the screen and select API Key. Copy the generated key.

Step 2: Admin Panel Configuration

To link your website to Google Maps, you need to input your new API key into the system:

- Navigate to Admin Panel > Global Settings.
- Toggle the Google Maps Status to "Enabled".
- Paste your copied key into the Google Maps API Key field and click Save Changes.

Step 3: Security & Budget Limits (Crucial)

To prevent unauthorized use of your API key (which could lead to unexpected charges), it is highly recommended to secure your setup immediately.

Security Measure | How to Configure
--- | ---
HTTP Referrers (Restriction) | In the Google Cloud Console, click on your API Key to edit its settings. Under "Application restrictions", select Websites. Click "ADD" and enter your domain using wildcards (e.g., `*yourdomain.com/*`). This ensures the key only works on your specific website.
Setting a Budget Alert | From the Google Cloud main menu, go to Billing > Budgets & Alerts. Create a new budget and set a small target amount (e.g., $10). Google will automatically email you if your usage approaches this limit.
API Quotas (Optional) | Go to APIs & Services > Enabled APIs, click on the "Maps JavaScript API", and navigate to the Quotas tab. You can set a strict daily limit (e.g., 500 requests per day) to absolutely guarantee you never exceed your free tier.

#### Map Not Displaying Properly?

If the map fails to load or shows a "For development purposes only" watermark, open your browser's Developer Console (press F12). This is usually caused by two common mistakes: "Billing not enabled" (You forgot to attach a credit card to your Google Cloud account) or "Places API is not enabled" (You missed enabling one of the 3 required APIs in Step 1).

### Branding & Logos

Upload your brand assets here. The system automatically serves the correct logo version depending on whether the user's device is in Light or Dark mode.

Asset Type | Description & Requirements
--- | ---
Application Icon | A square `512x512px` PNG file. This is universally used as your website's Favicon, mobile app icon (PWA), and bookmark icon.
Main Logos (Original) | You can upload separate logos for Light Mode and Dark Mode. High-quality SVG or WebP formats are highly recommended for crisp displays.
PNG Fallback Logos | Strictly requires standard `.png` files. These are used specifically as fallbacks for email templates and social media sharing cards where SVG files are not supported.
Logo Dimensions | Allows you to force a specific exact Width and Height (in pixels) for your logo, ensuring it fits perfectly into your header layout regardless of the uploaded image size.

### External Integrations (Social & RSS)

Manage how your website connects with Google for authentications, and how it distributes its own content via RSS feeds.

###### Google Social Login

Allows users to register and log in instantly using their Google accounts without passwords.

- Client ID: Obtained from your Google Cloud Console.
- Client Secret: The secure key paired with your Client ID.

###### RSS Feed Output

Controls the RSS feed generated by your own website for other platforms to consume.

- RSS Content: Choose between distributing the Full Content of your articles, or just a Summary to force users to click through to your site.
- Max Posts: Limits how many articles are loaded into the feed (e.g., 50).

### How to configure Google Social Login

- Step 1: Create a Google Cloud Project
  1. Go to the Google Cloud Credentials page.
  2. Click the Create Project button.
  3. Enter a name for your project and click Create.
- Step 2: Configure the Consent Screen
  1. Click Configure Consent Screen from the menu.
  2. Select External and click Create.
  3. Fill out the App Information form and click Save and Continue.
  4. Click "Add or Remove Scopes", select the first two options (email and profile), update, and save.
  5. Skip the Test Users step by clicking Save and Continue.
  6. Click Back to Dashboard, and then importantly, click Publish App.
- Step 3: Generate Your Client Keys
  1. Click Credentials on the left, then + Create Credentials, and select OAuth client ID.
  2. Select Web application and scroll down to "Authorized redirect URIs".
  3. Enter your redirect URL: `https://yourdomain.com/auth/google/callback` (replace yourdomain.com with your actual site).
  4. Click Create.
- Step 4: Enter Keys in Admin Panel
  1. Copy the generated Client ID and Client Secret from the Google popup.
  2. Navigate back to Admin Panel > Global Settings > Social Login and paste them into the respective fields.
  3. Click Save Changes.

### Custom URL Routes

Unlike standard platforms, this script allows you to translate or completely change the core URL structures of your website for better local SEO. For example, you can change `yourdomain.com/login` to `yourdomain.com/giris-yap` or `yourdomain.com/entrar`.

#### Critical Routing Warning

You cannot use special characters, spaces, or capital letters in routes (e.g., do not use `ç, ş, ñ, é, ä, ß, å, ø`). Use only standard English alphabet letters and hyphens (`-`). If you enter an invalid string here, the platform's routing system will break, and you will not be able to access that specific page.

### Custom Code Insertion

You do not need to edit core PHP files to add third-party tracking scripts. You can inject them safely directly from the dashboard.

Injection Area | Best Used For
--- | ---
Custom Header Codes | Inserted just before the closing `</head>` tag. Best used for custom CSS styling (`<style>`), Google Verification meta tags, and pre-load scripts.
Custom Footer Codes | Inserted just before the closing `</body>` tag. Best used for JavaScript snippets (`<script>`), live chat widgets, and heavy tracking codes to ensure they do not slow down your page load speed.

### Maintenance Mode

When performing major updates, you can safely lock out public visitors while still retaining full access to the admin panel.

###### Configuration Options

- Status: Instantly puts the website into "Coming Soon / Maintenance" mode.
- Title & Description: The customized message displayed to your public visitors.
- Image: A visual banner or illustration to display above your maintenance message.

## Localized Settings

Unlike Global Settings which affect the entire system regardless of the user's language, the Localized Settings module allows you to configure specific details that change depending on the language your visitor is using. For example, you can set an English Site Title for your English site, and a French Site Title for your French site.

#### How to switch languages?

To edit the settings for a specific language, simply use the language dropdown selector located at the top right of the Localized Settings page in your Admin Panel. Select the language you want to edit, and the form will automatically reload to show the values saved for that specific language.

### General (SEO & Identity)

Configure the fundamental text elements that represent your brand and improve your Search Engine Optimization (SEO) for the selected language.

###### Site Identity

- Application Name: The short, standard name of your script/app (e.g., "Varient").
- Site Title: The main title of your website that appears in browser tabs and search engine results (e.g., "Varient - News Magazine").
- Home Title: The title specifically used for your homepage/index layout.
- Copyright: The copyright text displayed at the very bottom of your website's footer.

###### SEO & Metadata

- Site Description: A brief summary of your website's purpose. This is injected as a meta description tag, which search engines often display below your title.
- Keywords: Comma-separated words relevant to your content. Type a word and press Enter to add it as a tag.
- Footer About Section: A short "About Us" paragraph that appears in the footer area to introduce your platform to visitors.

### Contact Settings

Manage the contact information and messaging displayed on your public "Contact Us" page for the selected language.

Field | Description
--- | ---
Email / Phone / Address | Your official business contact details. These will be publicly displayed on the contact page. Leave them blank if you do not wish to share physical or direct contact information.
Contact Text | A welcoming paragraph displayed above the contact form. Use the rich text editor to format your message, add links, or insert business hours.

### Social Media

Connect your official social media profiles. The platform supports a wide range of networks including X (Twitter), Facebook, Instagram, TikTok, LinkedIn, Discord, Patreon, and more.

###### How to activate social icons?

Simply paste your full profile URL (e.g., `https://x.com/yourhandle`) into the corresponding input field. If you provide a valid URL, the icon for that network will automatically appear in your website's footer and author profiles. If you leave a field entirely empty, that specific social icon will be hidden and disabled.

### Cookies Warning (GDPR)

If you use tracking scripts like Google Analytics or targeted advertising, you are legally required by GDPR (and similar privacy laws) to inform your users and obtain their consent to use cookies.

Setting | Description
--- | ---
Status | Enable this to display a cookie consent banner at the bottom of the screen for all new visitors.
Title & Description | The text explaining why you use cookies (e.g., "We use strictly necessary cookies to ensure our website functions correctly...").
Privacy Policy URL | Provide a link to your full, detailed Privacy Policy page so users can read exactly how their data is handled before they click "Accept".

## Content Settings

The Content Settings module is the editorial core of your platform. Here, you can configure how articles are displayed, manage reader interactions, set upload limits, organize featured blocks, and connect AI writing assistants.

### Reading Experience & Interactions

Control how your articles look to visitors and how readers can interact with your content.

- Post URL Structure Choose between using SEO-friendly Slugs (e.g., `domain.com/my-post-title`) or ID numbers (e.g., `domain.com/12345`). Changing this will only affect new posts; old links will remain intact.
- Comment & Approval System Enable or disable the built-in commenting system. If the Approval System is enabled, user comments will remain hidden until an administrator manually approves them.
- Emoji Reactions Allow users to react to articles using expressive emojis (Like, Love, Sad, etc.) at the bottom of the post.
- Post Meta Visibility Toggle the visibility of the Post Author, Post Date, and View Count on the article pages.
- Editorial Approvals If you have multiple authors, you can force all New Posts or Edited Posts to go into a "Pending" state until an admin reviews and publishes them.

### File Upload Constraints

Protect your server bandwidth and storage by enforcing strict rules on what authors can upload.

Upload Rule | Configuration
--- | ---
Image File Format | You can force the system to automatically convert all uploaded images into WEBP format. This is highly recommended as it drastically reduces file sizes and improves page load speed. You can also keep the original format or force JPG/PNG.
Allowed Extensions | Specify exactly which file types are permitted (e.g., `zip, pdf, mp3`). This prevents users from uploading dangerous executable files.
Size Limits (MB) | Set strict maximum file size limits (in Megabytes) independently for Images, Videos, Audio, and general Files.
Delete Images with Post | If enabled, when an article is deleted from the database, its associated images are also permanently deleted from your server to save disk space.

### Featured Content Blocks

Configure the behavior of the dynamic content blocks on your homepage: Main Slider, Featured Posts, Recommended Posts, and Breaking News.

- Content Source Choose "Latest Posts" to let the system automatically pull your newest content into the block. Choose "Manual Selection" if you only want posts that an admin has explicitly pinned to that block to appear.
- Exclude Slider Posts Available for the Featured Posts block. Enabling this ensures that an article doesn't appear in both the Main Slider and the Featured section at the same time, preventing repetitive content on the homepage.
- Duration & Limits Set how many days a post should remain in a block (Display Duration) and the maximum number of items the block can hold at once (Display Limit).

### AI Content Generator

Empower your authors with built-in Artificial Intelligence to instantly draft articles or generate ideas directly from the post creation page.

Setting | Description
--- | ---
Active Provider | Select your preferred AI engine: Gemini (Google) or ChatGPT (OpenAI).
API Key & Model | Provide your private API Key from the respective platform. You can also select the specific intelligence model to use. For example, you can choose a "Pro" model for high-quality complex writing, or a "Flash/Mini" model for faster, budget-friendly generation.

### Auto Post Deletion

Keep your database lightweight by automatically purging old content. Note: This feature requires the Master Cron Job to be active on your server.

- Deletion Method You can choose to delete All Posts older than the specified timeframe, or restrict it to Only RSS Posts (useful if you import thousands of external news articles and want to discard old ones).
- Number of Days Define the exact age threshold. For example, entering `30` will command the system to automatically delete any post that is older than 30 days.

## Payment Settings

The Payment Settings module allows you to configure global currency formats, set up tax rules, and integrate multiple payment gateways so you can securely charge users for premium subscriptions or content.

### Currency Settings

Configure how money is displayed across your entire website.

###### Base Settings

- Default Currency: Select the primary currency for your transactions (e.g., USD, EUR).
- Symbol Direction: Choose whether the currency symbol appears on the Left (`$100`) or Right (`100$`).

###### Formatting Rules

- Thousand Separator: Choose how thousands are separated (Comma, Dot, Space, or None).
- Decimal Separator: Choose how decimals are separated (Dot or Comma). Example: 1,000.50 vs 1.000,50

### Company & Invoice Details

Set up your official business identity. This information will be printed directly onto the downloadable PDF invoices generated for your customers.

Field | Description
--- | ---
Company Name | Your official business or personal name.
Details | Your full address, Tax ID, VAT Number, or any other legal business registration details required in your country.
Invoice Footer Note | A custom "Thank you" message or support email address printed at the bottom of the invoice.
Invoice Prefix | The letters placed before the invoice ID (e.g., if you set this to `INV`, invoices will be numbered INV-0001, INV-0002).

### Tax Configuration

Configure VAT (Value Added Tax) or localized sales tax rates that will be applied during checkout.

###### How to apply taxes:

The system allows you to define specific tax rates for every country in the world. When a customer selects their billing country at checkout, the corresponding tax rate is automatically added to their total.

- To apply a single universal tax rate (e.g., 20%) to all customers globally, enter `20` into the Bulk VAT Update field and click "Apply to All".
- To set specific rates (e.g., 20% for the UK, 0% for the USA), use the search bar to find the country and adjust its value individually.

### Gateway Configuration Guides

To receive payments, you must connect a Payment Gateway. Follow the step-by-step instructions below to obtain your API keys and configure your Webhooks (automatic notifications) correctly.

###### Admin Panel Configuration Options

- Status: Use this toggle to quickly enable or disable the payment gateway on your checkout page.
- Environment (Mode): Select Sandbox for testing with fake money, or Production when you are ready to accept real payments from live users. Your API keys will be different for each mode.
- Client ID & Secret Key: The unique credentials generated from your payment provider's developer dashboard.
- Webhook Secret/ID: A security string used to verify that background payment notifications are genuinely coming from the payment provider.
- Transaction Fee Rate (%): If you want to pass processing fees onto the customer, enter the percentage here (e.g., `3.5`). This fee will be added to the final checkout amount. Leave as `0.00` if you are absorbing the fees yourself.

#### Subscription Renewals & Automatic Payments

Please note that the premium subscription lifecycle behaves differently depending on the payment gateway selected by your customer during checkout:

- PayPal & Stripe: These gateways fully support automatic recurring payments. The customer's credit card or account will be charged automatically at the end of each billing cycle to extend their plan.
- All Other Gateways: Gateways like Iyzico, Razorpay, and PayTabs process one-time manual payments. To manage this, our system uses a smart notification process. Customers will receive automated email reminders 3 days and 1 day before their plan expires, prompting them to log in and renew their subscription manually to keep their premium features active.

#### PayPal Setup Guide

PayPal allows you to securely process standard transactions as well as automatic recurring subscriptions. Follow these steps to generate your API credentials and set up the required Webhook events.

###### Phase 1: Create an App & Get API Keys

1. Log in to the PayPal Developer Dashboard.
2. Make sure the toggle at the top right is set to Live (unless you are specifically testing in Sandbox).
3. Navigate to Apps & Credentials from the menu.
4. Click the Create App button. Give your app a name (e.g., "My Website Payments") and click Create.
5. You will now see your app's details. Copy the Client ID and the Secret (you may need to click "Show" to reveal the secret).
6. Paste these two keys into the PayPal section of your website's Admin Panel.

###### Phase 2: Set Up Webhooks (Critical for Subscriptions)

Webhooks are strictly required. They allow PayPal to silently communicate with your server in the background to confirm when a subscription is paid or cancelled.

1. On the same PayPal App page where you found your keys, scroll down to the bottom until you find the Webhooks section.
2. Click the Add Webhook button.
3. In the Webhook URL field, enter your website's exact webhook address:
   `https://yourdomain.com/webhook/paypal`
   (Make sure to replace "yourdomain.com" with your actual website address).

###### Phase 3: Select the Correct Active Events

If you select the wrong events, your user's subscriptions and orders will not complete automatically. You must check exactly the specific boxes listed below.

1. Scroll down the webhook form to the Event types list.
2. Search for and check the following events:
   - Checkout order approved (CHECKOUT.ORDER.APPROVED)
   - Payment capture completed (PAYMENT.CAPTURE.COMPLETED)
   - Payment sale completed (PAYMENT.SALE.COMPLETED)
   - Billing subscription cancelled (BILLING.SUBSCRIPTION.CANCELLED)
   - Billing subscription suspended (BILLING.SUBSCRIPTION.SUSPENDED)
   - Billing subscription expired (BILLING.SUBSCRIPTION.EXPIRED)
   - Billing subscription payment failed (BILLING.SUBSCRIPTION.PAYMENT.FAILED)
3. Click the Save button at the very bottom.
4. PayPal will generate a Webhook ID for the webhook you just created. Copy this ID and paste it into the
   Webhook Secret/ID field in your Admin Panel to complete the integration.

#### Stripe Setup Guide

Stripe is one of the most powerful gateways for handling both one-time payments and automatic recurring subscriptions. Follow these steps to generate your API keys and configure the webhook events.

###### Phase 1: Get Your API Keys

1. Log in to your Stripe Dashboard.
2. In the top right corner, ensure Test mode is turned off if you are ready to accept real payments.
3. Click on Developers in the top right menu, then click on API keys in the left sidebar.
4. Under the "Standard keys" section, you will see your Publishable key (starts with `pk_`) and your Secret key (starts with `sk_`).
5. Copy both keys and paste them into the Stripe section of your website's Admin Panel.

###### Phase 2: Set Up Webhooks (Critical for Subscriptions)

Webhooks are strictly required. They allow Stripe to silently communicate with your server in the background to confirm when a payment is successful or a subscription is cancelled.

1. Still in the Developers section, click on Webhooks in the left sidebar.
2. Click the Add an endpoint button.
3. In the Endpoint URL field, enter your website's exact webhook address:
   `https://yourdomain.com/webhook/stripe`
   (Make sure to replace "yourdomain.com" with your actual website address).

###### Phase 3: Select the Correct Active Events

If you select the wrong events, your user's subscriptions and orders will not complete automatically. You must check exactly four specific boxes.

1. On the same Add Endpoint page, click the + Select events button.
2. Search for and check the following four events:
   - Checkout session completed (checkout.session.completed)
   - Invoice paid (invoice.paid)
   - Invoice payment failed (invoice.payment_failed)
   - Customer subscription deleted (customer.subscription.deleted)
3. Click Add events, and then click the Add endpoint button to create the webhook.
4. Stripe will take you to your new webhook's settings page. Look for the Signing secret section and click Reveal.
5. Copy this Signing Secret (it usually starts with `whsec_`) and paste it into the Webhook Secret/ID field in your Admin Panel to complete the integration.

#### Razorpay Setup Guide

Follow this simple guide to generate your API keys and set up the required background notifications.

###### Phase 1: Get Your API Keys

1. Log in to your Razorpay Dashboard.
2. Go to Account & Settings > API Keys.
3. Click Generate New Key.
4. Copy the Key Id and Key Secret and paste them into your Admin Panel.

###### Phase 2: Set Up Webhooks

1. Go to Account & Settings > Webhooks.
2. Click Add New Webhook.
3. Enter your Webhook URL:
   `https://yourdomain.com/webhook/razorpay`
4. In the Secret field, type a random password (e.g., `MySecureSecret123!`). Important: You must copy this exact password and paste it into the "Webhook Secret" field in your Admin Panel.

###### Phase 3: Select the Correct Active Events

If you select the wrong events, your orders will not complete automatically.

1. Scroll down to the Active Events section.
2. Check ONLY these two boxes: `payment.authorized` and `payment.captured`.
3. Click Create Webhook.

#### Mercado Pago Setup Guide

Mercado Pago is highly popular in Latin America. Please note that for subscriptions, this gateway processes one-time manual payments, meaning users will receive an email to renew manually when their plan expires. Follow these steps to generate your API keys and configure the webhook events.

###### Phase 1: Get Your API Keys

1. Log in to your Mercado Pago Developer Dashboard.
2. Select the application you want to integrate (or create a new one).
3. Navigate to the Production credentials section (or Test credentials if you are in Sandbox mode).
4. You will see your Public Key and your Access Token (which serves as the Secret Key).
5. Copy both keys and paste them into the Mercado Pago section of your website's Admin Panel.

###### Phase 2: Set Up Webhooks

Webhooks are required so Mercado Pago can notify your server in the background when a payment succeeds.

1. In the Developer Dashboard menu, click on Webhooks (under Notifications).
2. In the Production URL (or Test URL) field, enter your website's exact webhook address:
   `https://yourdomain.com/webhook/mercadopago`
   (Make sure to replace "yourdomain.com" with your actual website address).

###### Phase 3: Select the Correct Active Events

If you select the wrong events, your orders will not complete automatically.

1. Scroll down to the Events section on the Webhook configuration page.
2. Check the following event:
   - Payments (payment)
3. Click the Save button.

#### Iyzico Setup Guide

Iyzico's setup is very straightforward. Follow the steps below to get your keys and set up automatic order confirmations.

###### Phase 1: Get Your API Keys

To link your website with Iyzico, you need to copy your unique API keys from your dashboard.

1. Log in to your Iyzico Control Panel.
2. On the left menu, click Settings > Merchant Settings.
3. Copy your API Key and Secret Key from this page.
4. Paste these keys into the Iyzico section of your Admin Panel.

###### Phase 2: Set Up the Webhook (Notification URL)

This ensures Iyzico notifies your website when a payment succeeds.

1. While still on the Merchant Settings page, scroll down to the Merchant Notification URL field.
2. Enter your exact webhook address:
   `https://yourdomain.com/webhook/iyzico`
3. Click Save. (Note: Iyzico does not require you to select specific events, pasting the URL is enough).

#### PayTabs Setup Guide

Even if you have no coding experience, you can easily set this up by following these step-by-step instructions.

###### Phase 1: Get Your API Keys

1. Log in to your PayTabs Merchant Dashboard.
2. Click on Developers > Key Management.
3. Copy your numeric Profile ID and your long Server Key.
4. Paste these into the PayTabs section of your Admin Panel.

###### Phase 2: Set Up Automatic Notifications (IPN)

1. In your PayTabs Dashboard, go to Developers > Payment Notifications (IPN).
2. Click the + icon to Add New.
3. In the Listener URL field, enter your webhook:
   `https://yourdomain.com/webhook/paytabs`
4. Set the Event to Transaction Status Changed.

###### Phase 3: The Crucial Security Setting (UserAgent)

To prevent your server's firewall from blocking PayTabs, you must change one specific setting.

1. On the IPN setup page, find the IPN UserAgent option (usually set to 'Not Set').
2. Change this immediately. Select any option that Simulates a Browser (e.g., "Mozilla/5.0" or "Chrome"). This allows PayTabs to pass through your website's security safely.
3. Click Save/Create.

## Language Settings

The Language Settings module gives you full control over the localization of your platform. You can add unlimited new languages, set default fallback languages, manage RTL (Right-to-Left) layouts, and edit every single text string on your website directly from the dashboard.

### Default Language Configuration

###### Setting the Default Language

From the "Settings" card at the top left, you can select your platform's primary language.

### Adding or Editing a Language

When you click Add Language or edit an existing one, you must fill out a specific form to ensure the system handles translations and layouts correctly. Here is a detailed breakdown of what each input field means:

Form Input | Explanation & Usage
--- | ---
Status | Toggle to Active to make the language visible and selectable by users on the frontend. If disabled, it remains hidden but safely stored in the database.
Language Name | The human-readable name of the language that will appear in the language selector dropdown on your website (e.g., `English`).
Short Form | The standard 2-letter ISO language code. This is extremely important as it is used to structure your URLs for SEO purposes (e.g., `domain.com/en/` or `domain.com/de/`).
Language Code | The full locale code used by search engines and browsers to determine the exact regional dialect (e.g., `en-US` for US English, `en-GB` for British English).
Order | A numeric value (1, 2, 3...) that dictates the display sequence of this language in the frontend dropdown menu. Lower numbers appear first.
Text Editor Language | This determines the interface language of the Rich Text Editor (TinyMCE) used by authors when writing posts. It ensures the writing toolbar matches their native language.
Text Direction | Crucial for layout rendering. Select Left to Right (LTR) for standard languages like English or French. Select Right to Left (RTL) for languages like Arabic, Hebrew, or Persian. The platform's entire CSS structure will flip dynamically based on this setting.

### Managing Translations & Bulk Import/Export

From the language table options menu (click "Select" next to any language), you have access to powerful localization tools.

###### Edit Translations

Takes you to a dedicated interface where you can translate every single phrase, button, and alert message used on the frontend and backend manually.

###### Export Language

Downloads all translations for that specific language as a raw `.json` file to your computer. Great for backups or sharing translations between different websites.

###### Import Language

Found at the top of the table. Allows you to upload a `.json` translation file. This instantly creates the language and maps all translated strings automatically, saving you hours of manual data entry.

#### Download Ready-to-Use Language Files

To save you the time and effort of translating everything manually, we provide a wide variety of pre-translated `.json` language files on our help desk. Simply visit https://codingest.com/languages, download the language you need, and use the Import Language tool to instantly add it to your website!

## Email Settings

Properly configuring your email settings is crucial for sending transactional emails such as user verifications, order notifications, and password resets. This module allows you to select your preferred mailing service, manage sender details, and customize the visual design of the emails your users receive.

###### General Options

- Email Verification: If enabled, new users must click a verification link sent to their email before they can access their accounts.
- Send Contact Messages to Email: If enabled, messages submitted through your website's public "Contact Us" form will be forwarded directly to your designated email address.
- Contact Email: The specific inbox where you want to receive those contact messages.

###### Test Email Tool

Before launching your site, you must verify that your email configuration works. Enter your personal email address in the Test Email form and click Send Email. If you receive the test message in your inbox, your setup is correct and ready for production.

### Email Templates (Visual Design)

You don't need to write HTML to send beautiful emails. The platform includes several professionally designed, fully responsive email templates out of the box.

###### Selecting a Template

In the Email Templates section, click "Preview" to see how the email will look on desktop and mobile devices. Once you find a style that matches your brand (e.g., Pure Minimalist, Obsidian, Corporate Accent), simply click "Select" to apply it globally to all outgoing transactional emails.

### Mail Service Configuration

The script provides several methods for sending emails to ensure reliability and flexibility. Choose the service that best fits your sending volume and technical requirements.

#### 1. Standard SMTP (PHP Mailer / CodeIgniter Mail)

This is the most common method, using your own email service via SMTP. While easy to set up, deliverability can sometimes be an issue on shared hosting environments. For critical applications, using a dedicated API service is recommended.

Field | Description
--- | ---
Mail Protocol | The recommended setting is `SMTP`. However, some strictly secured hosting environments may require you to use the `Mail` protocol, which utilizes the server's internal PHP mail function.
Encryption | `TLS` is the modern security standard for encrypting email communications. Use `SSL` only if specifically required by your email provider.
Mail Host & Port | The address of your email provider's server (e.g., `smtp.yourdomain.com`). The port is typically `587` for TLS and `465` for SSL.
Mail Username & Password | Your full email address (e.g., `info@yourdomain.com`) and its corresponding password.
Mail Title & Reply-To | The brand name shown to the receiver, and the email address replies should be routed to.

#### 2. Mailgun API Configuration

Mailgun is a powerful developer-focused service offering excellent deliverability, advanced analytics, and robust API features. Using its API is significantly more reliable than standard SMTP.

1. Create an account at mailgun.com.
2. Add and Verify Your Domain:
   - In the Mailgun dashboard, go to Sending > Domains and click Add New Domain.
   - It is highly recommended to use a subdomain for sending emails (e.g., `mg.yourdomain.com`). This protects your main domain's reputation in case of spam flags.
   - Mailgun will provide you with several DNS records (TXT, MX, and CNAME). You must add these to your domain's DNS settings (via cPanel or Cloudflare) to verify ownership and authorize Mailgun to send emails on your behalf. This is a critical step for deliverability.
   - For detailed DNS instructions, please read: Mailgun Domain Verification Setup Guide
3. Get Your API Credentials:
   - In the dashboard, navigate to Settings > Sending keys. Click on the "Add sending key" button and create your API key. Copy it securely.
4. Enter Details in the Admin Panel:
   - Select Mailgun as the Mail Service.
   - Enter your Sending API key.
   - Select the exact same Region (US or EU) you chose when adding your domain in Mailgun.
   - Enter your verified Mailgun Domain (e.g., `mg.yourdomain.com`).
   - Enter your sender email address in both the Sender Email Address and Reply-To fields. For best results, use an address based on the subdomain you just verified (e.g., `info@mg.yourdomain.com`).

#### 3. Brevo (Sendinblue) API Configuration

Brevo offers a reliable transactional email API as part of its larger suite of marketing tools, perfect for businesses that want to manage everything from one platform.

1. Create an account at brevo.com.
2. Get Your API Key:
   - In your Brevo dashboard, click on your profile name at the top-right and navigate to SMTP & API.
   - Select the API Keys tab.
   - Click Generate a new API key, give it a descriptive name, copy the generated key, and store it safely.
3. Verify Your Domain/Sender:
   - Before sending emails, you must verify your sending domain or a specific sender email address. Go to Senders & IP from your dashboard settings and follow the verification steps provided by Brevo.
4. Enter Details in the Admin Panel:
   - Select Brevo as the Mail Service.
   - Enter the API Key you generated.

#### Crucial Brevo Requirement

The email address you type into the Reply-To field in your Admin Panel MUST be a verified sender within your Brevo account. If the sender is not authorized and verified on Brevo's side, their API will reject the connection and your emails will not send.

#### 4. Amazon SES Configuration

Amazon Simple Email Service (SES) is a cloud-based email sending service designed for scalability and cost-effectiveness. It's an excellent choice for applications that need to send hundreds of thousands of emails securely.

1. Create an AWS account at aws.amazon.com/ses.
2. Verify Your Identities:
   - Log into the AWS Management Console and navigate to the Simple Email Service (SES) dashboard.
   - In the left menu, go to Verified Identities. You must verify the domain or specific email address you plan to use as your sender.
3. Generate SMTP Credentials:
   - In the SES dashboard, click on SMTP Settings in the left menu.
   - Click the Create My SMTP Credentials button. Proceed through the IAM user creation screen and click Create.
   - AWS will generate your credentials. Download or copy your SMTP Username and Password immediately, as you will not be able to view the password again.
4. Enter Details in the Admin Panel:
   - Select PHP Mailer or CodeIgniter Mail as your service.
   - Mail Protocol: `SMTP`
   - Encryption: `TLS`
   - Mail Host: Your AWS SMTP endpoint (e.g., `email-smtp.us-east-1.amazonaws.com`).
   - Mail Port: `587`
   - Mail Username: The AWS IAM Username you just generated (e.g., `AKIAVIAANDJBBXXXXXXX`).
   - Mail Password: The corresponding AWS Secret Password.
   - Reply-To: Must be a verified address in your AWS SES console.

#### Amazon SES Sandbox Mode Warning

By default, all new Amazon SES accounts are placed in a "Sandbox" environment to prevent spam. While in the sandbox, you can only send test emails to addresses you have explicitly verified in your AWS console (this includes both the receiver and the "Reply-To" address). To send emails to your real users and customers, you must submit a request to AWS Support to have your account moved out of the sandbox into production.

#### Notice Regarding Gmail/Yandex

Sending emails directly through free services like Gmail or Yandex using standard SMTP is no longer officially supported by us. Recent security policy changes by these providers restrict third-party apps from using basic authentication. In some cases, even with the correct configuration, Gmail may still block email delivery on certain servers. You may continue using Gmail if it works on your server, but our support team will not provide assistance for issues related to this setup.

## Font Settings

Typography is a core part of your platform's design identity. The Font Settings module allows you to assign specific fonts to different parts of your website, manage a highly advanced font-size scale, and upload your own custom local fonts for maximum performance and GDPR compliance.

### Site Font Assignments

Font selections are language-specific. This means you can use a sleek Sans-Serif font like "Inter" for your English site, but switch to a specialized Arabic font for your Arabic localization. Use the Language dropdown at the top of the card to switch between your active languages.

Font Category | Where it is applied
--- | ---
Primary Font (Main) | The default font used for the general user interface, menus, buttons, standard text, and overall layout elements.
Secondary Font (Titles) | Applied specifically to headings (H1, H2, H3, etc.), widget titles, and section headers to create visual contrast against the primary font.
Content Font (Post & Page Text) | The font used strictly for the inner reading content of your articles and custom pages. A highly readable Serif or clean Sans-Serif is recommended here to reduce eye strain.

### Font Size Scale

Instead of hardcoding font sizes into CSS, you have full control over the exact pixel values of the site's typography scale directly from the dashboard.

###### Layout & Special

Controls specific architectural elements. fs-base dictates the standard root size (usually 15px), while others like fs-post-title and fs-main-nav target exact structural areas.

###### General Scale

The utility classes used throughout the UI (fs-tiny through fs-xl). Adjusting these will proportionally scale buttons, badges, and meta-text globally.

###### Titles Scale

Controls the sizing hierarchy of your headings (from fs-title-xs up to fs-title-5xl). This allows you to fine-tune the exact dominance of your headlines.

### Adding Custom Local Fonts

You can upload and host your own fonts directly on your server. This eliminates third-party requests (like Google Fonts), ensuring your site loads incredibly fast and remains strictly privacy compliant.

###### How to Add a New Font

- Name & Font Type: Provide the exact name of the font (e.g., "Open Sans"). Then, select its generic fallback type (Sans Serif, Serif, Monospace). If the custom font fails to load on an older device, the browser will fall back to this base type.
- Font File Requirements (.woff2): To enforce extreme performance optimization and modern web standards, the system only accepts `.woff2` files. This format provides the best compression, reducing server load and rendering text instantly.
- Uploading Weights: You must upload three separate `.woff2` files corresponding to the core font weights used by the platform:
  - 400 (Regular): Used for standard body text.
  - 600 (Semi-Bold): Used for emphasis and sub-navigation.
  - 700 (Bold): Used for strong titles and primary buttons.

## GDPR & Privacy Compliance

This script was engineered with a "Privacy First" (Privacy by Design) architecture. We have taken special care to ensure that the platform minimizes personal data collection, isolates third-party requests, and provides the essential foundation and tools to facilitate your compliance with the General Data Protection Regulation (GDPR).

### Cookie Usage & Local Storage

Natively, the script uses zero tracking or marketing cookies. We strictly utilize only the cookies required for the core functionality of the application.

- Strictly Necessary Cookies: The system creates two mandatory cookies: `vr_csrf_cookie` (for security against Cross-Site Request Forgery attacks) and `vr_session` (for keeping users logged in). These do not track users, are not used for advertising, and cannot be disabled as the site cannot function without them. The "vr_" prefix can be changed in the .env file.
- Local Storage: To enhance the user experience without compromising privacy, the script uses the browser's Local Storage to remember basic interface preferences. This is strictly limited to the Dark Mode toggle, the Contact Map, and Event Maps. These features only save simple states (e.g., true/false, dark/light) locally on the user's device and do not store, process, or transmit any personal data.

### Data-Free Feature Interactions

Most scripts use cookies to remember user interactions. To ensure maximum privacy, we completely bypassed cookies and local storage for our interactive modules. Emoji Reactions, Sidebar Polls, and Quiz Polls operate entirely through server-side Sessions.

### Security, Fraud Prevention & IP Processing

To protect the platform from malicious attacks and fraudulent activities, certain technical data is processed under the legal basis of Legitimate Interest (GDPR Art. 6(1)(f)).

- Pageviews System (Anonymized): To ensure accurate view counts and prevent bot manipulation of the reward system, IP addresses and User Agents are processed temporarily. We do not store raw IP addresses for views. Instead, the data is immediately transformed into a one-way cryptographic hash (HMAC-SHA256) using a daily rotating key. This hash expires in 24 hours and cannot be used to directly identify an individual.
- Comments Security: To prevent spam and abuse, the IP addresses of users leaving comments are securely logged in the database. This data is strictly for security and legal obligations, is kept confidential, and is never displayed publicly.
- Financial Transactions: IP addresses are permanently stored on transaction and payout logs as a strict legal requirement to prevent financial fraud.
- Rate Limiting: IP addresses are monitored temporarily to block brute-force or DDoS attacks.
- Bot Protection (CAPTCHA): The admin panel allows you to choose between Google reCAPTCHA and Cloudflare Turnstile. For strict GDPR compliance, we highly recommend utilizing Cloudflare Turnstile. Unlike traditional reCAPTCHA, which may rely on tracking cookies and user profiling, Turnstile is built specifically for privacy, does not utilize cookies, and avoids harvesting personal data.

### User Rights & Data Isolation

- The Right to be Forgotten: Full GDPR compliance requires giving users control over their data. Registered users can permanently delete their own accounts and associated data directly from their profile settings.
- No Third-Party Data Leaks: The script does not leak user IP data to external servers. All core assets, including web fonts, are hosted locally on your server. We do not use external font APIs (e.g., Google Fonts), ensuring no background tracking occurs.

### Managing Consent (Analytics & AdSense)

When the native Cookies Window is enabled from the admin panel, the built-in Google Analytics integration is completely blocked from executing. The tracking script will only load and fire after the user explicitly clicks "Accept".

##### Custom Scripts Responsibility

Please note that this automatic blocking applies only to the native Google Analytics configuration. If you manually insert other third-party tracking scripts, custom pixels, or external codes into your site (e.g., via the Custom Header/Footer codes section), the system cannot automatically block them. It is your strict responsibility as the site owner to ensure any manually added custom scripts comply with GDPR and respect the user's cookie consent.

##### Important Notice Regarding Google AdSense

If you plan to monetize your site with Google AdSense, Google's terms require you to use their own certified Consent Management Platform (CMP) popup for European traffic. If you enable the AdSense GDPR popup, it automatically handles consent for Google Analytics as well. Therefore, if you are using the AdSense popup, you may disable the script's native cookie warning to prevent showing two annoying popups to your visitors.

### Recommendations for Your Privacy Policy

As the site owner, you are legally responsible for informing your users. We strongly recommend adding the following clauses to your website's Privacy Policy page:

• To ensure the accuracy of content statistics and prevent fraudulent bot traffic, certain technical identifiers (IP and browser info) are processed temporarily. This data is instantly converted into a one-way cryptographic hash and is automatically deleted within 24 hours. We do not store raw IP addresses for view counting.
• For security, spam detection, and compliance with legal obligations, the IP addresses of users submitting comments are logged and stored securely.
• Our system uses strictly necessary cookies to maintain security (CSRF protection) and session management. These cookies do not track you and cannot be disabled.
• Temporary IP processing is utilized for rate-limiting to protect the platform from malicious attacks.
Legal Disclaimer The information provided in this documentation is for technical and informational purposes only and does not constitute legal advice. Data privacy laws vary significantly by jurisdiction. As the website operator, you are solely responsible for ensuring that your data processing activities, privacy policies, and third-party integrations comply with applicable local and international laws. We strongly recommend consulting with a qualified legal professional.

## Update Guide

You can find all instructions to update your site in this section. If you don't know your current version, you can check it from the `version.txt` file in the main directory of your site.

#### Update from v2.4.x to v3.0

1. Follow all steps in the Updating FTP Files (Click Here) section.
2. Follow all steps in the Updating Database (Click Here) section. You can find update_database.php file in the "documentation/updates/Update from v2.4.x to v3.0" folder.
3. Clear your browser cache. This is a crucial step to prevent your browser from loading outdated scripts and ensure the new changes take effect immediately.

### Important Update Notes

Please review the following important changes and required actions after completing your update to ensure your platform functions correctly.

- Action Required: Create new folders
  After the update, please open the uploads folder and create the following subfolders: "event", "fonts", "media", "recipe", and "temp".
- Action Required: Upload an App Icon
  Please navigate to the Global Settings and upload a new App Icon. This single icon will now be used universally across the system for your Favicon, PWA (Progressive Web App) icons, and other essential areas.
- Action Required: Reconfigure Custom Routes
  The default routing system has been reset. If you had previously customized your URL route names (e.g., changing "/login" to "/entrar"), you must reconfigure these settings from the Global Settings panel.
- Action Required: Update Google Login Redirect URL
  The Google Social Login architecture has been completely rewritten. If you use Google Login, you must log into your Google Cloud Console and update your Authorized Redirect URI to:
  `https://yourdomain.com/auth/google/callback`
- Action Required: Update Google Analytics ID
  To comply with strict new GDPR regulations, the Google Analytics integration has been updated. Please go to the SEO Settings panel and re-enter your Google Analytics Measurement ID (you no longer need to paste the full tracking code).
- Action Required: Review Font Settings
  Due to the implementation of our advanced new typography engine, all previous font configurations have been reset. Please visit the Font Settings panel to select and apply your preferred fonts.
- Action Required: Check Currency Configurations
  Please navigate to Payment Settings and verify that your default currency and payment gateway configurations are correctly set.
- Notice: New Content Management Controls
  We have introduced a powerful new Content Settings section. We highly recommend reviewing these new controls to configure how your homepage blocks, sliders, and articles are managed and displayed.
- Deprecated: Facebook & VKontakte Login
  Facebook and VK Login integrations have been permanently removed. These platforms have introduced severe restrictions, making app approval incredibly difficult for standard publishers. Moving forward, we will exclusively support and maintain Google OAuth as our official social login provider.
- Deprecated: Facebook Comments
  The Facebook Comments plugin has been removed. Our native AJAX comment system has been vastly improved, offering a much more user-friendly, secure, and customizable experience. For strict GDPR compliance and better data ownership, we strongly advise using the native system.
- Deprecated: Google Indexing API
  The Google Indexing API module has been removed. According to official Google documentation, this API is strictly intended for specific structured data types like `JobPosting` or `BroadcastEvent`. Using it for standard news articles can negatively impact your site's indexing health. We now rely exclusively on our newly rebuilt, automated XML Sitemap system for optimal search engine crawling.

#### Update from v2.3.x to v3.0

1. Follow all steps in the Updating FTP Files (Click Here) section.
2. Follow all steps in the Updating Database (Click Here) section. You can find update_database.php file in the "documentation/updates/Update from v2.3.x to v3.0" folder.
3. Clear your browser cache. This is a crucial step to prevent your browser from loading outdated scripts and ensure the new changes take effect immediately.

#### Update from v2.2.x to v3.0

1. Follow all steps in the Updating FTP Files (Click Here) section.
2. Follow all steps in the Updating Database (Click Here) section. You can find update_database.php file in the "documentation/updates/Update from v2.2.x to v3.0" folder.
3. Clear your browser cache. This is a crucial step to prevent your browser from loading outdated scripts and ensure the new changes take effect immediately.

#### Update from v2.1.x to v3.0

1. Follow all steps in the Updating FTP Files (Click Here) section.
2. Follow all steps in the Updating Database (Click Here) section. You can find update_database.php file in the "documentation/updates/Update from v2.1.x to v3.0" folder.
3. Clear your browser cache. This is a crucial step to prevent your browser from loading outdated scripts and ensure the new changes take effect immediately.

#### Update from v2.0.x to v3.0

1. Follow all steps in the Updating FTP Files (Click Here) section.
2. Follow all steps in the Updating Database (Click Here) section. You can find update_database.php file in the "documentation/updates/Update from v2.0.x to v3.0" folder.
3. Clear your browser cache. This is a crucial step to prevent your browser from loading outdated scripts and ensure the new changes take effect immediately.

#### Updating FTP Files

1. Open your cPanel and go to File Manager section.
2. Go to main directory of your site.
3. Create a new folder named "old".
4. Move all of your files to this folder.
5. Upload "codecanyon-varient-news-magazine-script.zip" file to this directory.
6. Right click the .zip file and select "Extract" option.
7. Move all files that in the "varient-v.." folder to main directory.
8. Delete unnecessary files/folders: "documentation", "uploads", "varient-v..", "install" and "codecanyon-varient-news-magazine-script.zip".
9. Copy old/uploads folder to main directory.
10. Restore your Configuration Files (Crucial Step):
    1. Restore Database Connection: Go into the old/app/Config/ folder, copy the `Database.php` file, and paste it into your new app/Config/ folder. (If it asks to overwrite or replace the existing file, say Yes).
    2. Restore .env File: Go into the old/ folder, copy the `.env` file, and paste it directly into your main directory.
    Note: If you cannot see the .env file, it is because files starting with a dot are hidden by default. In cPanel File Manager, click "Settings" at the top right and check "Show Hidden Files (dotfiles)".

#### Updating Database

1. Upload update_database.php file to your main directory.
2. Open your browser and enter this URL: yourdomain.com/update_database.php
   Example:
3. When you go to this URL, you will see an update wizard. Enter your database credentials and click the Update My Database button.
4. After you see the success message, close this page and delete "update_database.php" file.