📄 Version 1.0.0

Adbell Blog Network

A self-hosted PHP multi-site AI blog platform. Run unlimited niche blogs from one codebase, automate content with Claude AI, and monetise with Google Ad Manager or AdSense.

PHP 8.0+ MySQL 5.7+ Claude AI cPanel Compatible No Framework

What's Included

adbell-blog-network/ ├── index.php ← front controller + all routes ├── generate.php ← standalone cron runner ├── lead.php ← AJAX email capture endpoint ├── .htaccess ← routing + gzip + security ├── LICENSE.txt ← license terms ├── README.md ← quick start guide ├── core/ ← engine (DB, router, helpers, AI) ├── admin/ ← admin panel ├── cron/ ← cron runner logic ├── install/ ← setup.php + schema.sql ├── public/ ← assets, cache, images └── sites/ ├── default/ ← light clean theme └── adtech/ ← dark technical theme

Requirements

PHP Version8.0+
MySQL / MariaDB5.7+ / 10.3+
PDO + PDO MySQLRequired
cURL ExtensionRequired
mod_rewriteRequired
HostingShared / VPS
ℹ️
cPanel Shared Hosting CompatibleTested on Namecheap, Hostinger, Bluehost, SiteGround, and GoDaddy shared hosting. No root access needed.

Installation

Step 1 — Create Database

In cPanel → MySQL Databases:

  1. Create Database

    e.g. youraccount_blog

  2. Create Database User

    Use a strong password

  3. Assign User to Database

    Select All Privileges

Step 2 — Upload Files

Upload all files to your domain root. Enable "show hidden files" in your FTP client to ensure .htaccess is uploaded.

⚠️
.htaccess is criticalWithout .htaccess the routing will not work and every page will return 404. Make sure it's uploaded.

Step 3 — Run the Installer

Visit https://yourdomain.com/setup.php in your browser and follow the 5-step wizard:

  1. Requirements Check

    Automatically verifies PHP version, extensions, and folder permissions

  2. Database Configuration

    Enter your DB host, name, username and password — tables are created automatically

  3. Create Admin Account

    Set your username, email, and password for the admin panel

  4. First Site Setup

    Enter your domain, brand name, niche, and choose a theme

  5. Complete

    Installer self-deletes and redirects to admin panel

🔒
Security: Delete setup.phpThe installer deletes itself automatically. If it doesn't, delete setup.php manually from your server immediately after installation.

Configuration

The installer creates core/db.config.php automatically. Add your API keys to it:

// core/db.config.php
define('DB_HOST',       'localhost');
define('DB_NAME',       'your_database');
define('DB_USER',       'your_username');
define('DB_PASS',       'your_password');

// AI Content Generation — get at console.anthropic.com
define('AB_CLAUDE_KEY', 'sk-ant-api03-...');

// Images API — optional, free at pexels.com/api
define('AB_PEXELS_KEY', 'your-pexels-key');

// Your license key — from purchase email
define('ABN_LICENSE',   'ABN-A-XXXX-XXXX-XXXX');

Admin Panel

Access the admin panel at https://yourdomain.com/admin/

The admin auto-detects which domain you're accessing it from and pre-selects the correct site. All management is done through the admin — no database editing required.

SectionWhat It Does
DashboardOverview stats — posts, queue, views, leads, revenue estimate
Write PostHTML editor with live preview, SEO fields, image upload
All PostsList, edit, publish/draft toggle, delete
Static PagesCreate About, Privacy, Contact pages with full editor
AI QueueAdd topics, monitor generation status, retry failed
KeywordsKeyword bank — auto-picked by cron when queue is empty
CategoriesCreate and manage post categories
Ad ZonesConfigure 10 predefined ad placements
Email LeadsView subscribers, export CSV
Cron / AutoCron URL, cPanel guide, queue status
SettingsAPI keys, Brevo, ads.txt, robots.txt per domain
All SitesAdd/edit sites, switch themes, manage multiple domains

Managing Sites

Admin → All Sites → Add New Site. Each site needs:

  • Domain — without www, e.g. myblog.com
  • Brand Name — shown in header and emails
  • Niche — used to guide AI content tone
  • Theme — select from installed themes
ℹ️
Domain must point to this folderFor multiple sites, point all domains to the same folder in cPanel using Addon Domains. The system identifies which site to serve based on the incoming domain.

Posts & Editor

Admin → Write Post. The editor has four tabs:

  • Write — HTML editor. Use standard tags: <h2> <h3> <p> <ul> <strong>
  • Preview — live rendered preview
  • SEO — meta title (50–60 chars), meta description (140–155 chars), focus keyword, excerpt
  • Image — upload featured image or paste URL
⚠️
Do not include HTML page tags in contentOnly use content-level HTML. Never include <html>, <head>, <body>, <style>, or <script> tags in post content — they break page layout.

AI Queue & Automation

How It Works

  1. Add Topics

    Admin → AI Queue → paste topics one per line

  2. Set Up Cron

    cPanel cron hits generate.php on a schedule

  3. AI Generates

    Claude API writes full article with title, meta, content, image, and schema

  4. Auto-Published

    Post appears live on site immediately

Cron Setup

In cPanel → Cron Jobs, add:

# Every 4 hours — 3 posts per run (~18 posts/day)
0 */4 * * * curl -s "https://yourdomain.com/generate.php?site=1&limit=3" >> /dev/null 2>&1
FrequencySchedulePosts/DayClaude Cost
Every hour0 * * * *~72~$2.40/day
Every 3h0 */3 * * *~24~$0.80/day
Every 4h0 */4 * * *~18~$0.60/day
Every 6h0 */6 * * *~12~$0.40/day
Once daily0 9 * * *~3~$0.10/day
💡
Claude API Cost~$0.03 per article. $5 credit = ~150 articles. Get your API key at console.anthropic.com

Categories & Keywords

Categories

Admin → Categories → Add. Every post can be assigned a category. Categories appear in navigation, breadcrumbs, and sitemaps automatically.

Keywords Bank

Admin → Keywords → add keywords one per line. When the AI Queue runs out of topics, the cron automatically picks unused keywords from this bank to generate new topics. This creates a self-sustaining content engine.

Ad Zones

Admin → Ad Zones. Click any slot card to configure it. Paste your AdSense or GPT code, tick Active, save.

top_banner
Top Banner
728×90 desktop / 320×50 mobile · All pages
post_after_p1
After Paragraph 1
300×250 · Post pages only
post_after_p3
After Paragraph 3
300×250 · Post pages only
post_mid
Mid-Post
300×250 · ~50% scroll
post_bottom
Post Bottom
Responsive · End of content
sidebar_top
Sidebar Top
300×250 · Desktop only
sidebar_bottom
Sidebar Bottom
300×250 · Desktop only
home_mid
Homepage Mid
Responsive · Homepage only
sticky_bottom
Sticky Mobile
320×50 · Fixed bottom
interstitial
Interstitial
Full overlay · 8s delay

Google Ad Manager (GPT) Setup

Step 1: Admin → Site Settings → Custom Head Scripts → paste your GPT script:

<script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
<script>
  window.googletag = window.googletag || {cmd: []};
  googletag.cmd.push(function() {
    googletag.defineSlot('/YOUR_NETWORK/UNIT', [320, 50], 'div-id').addService(googletag.pubads());
    googletag.pubads().enableSingleRequest();
    googletag.enableServices();
  });
</script>

Step 2: Admin → Ad Zones → select zone → paste the display() div → tick Active.

Email Leads

Leads are captured automatically from six placements: popup, footer newsletter, inline post form, end-of-post form, sidebar widget, and homepage widget.

Brevo Integration (Recommended — free up to 300 emails/day)

  1. Sign up at brevo.com

    Free plan included

  2. Get API Key

    Brevo → Settings → API Keys → Create

  3. Create a Contact List

    Note the List ID number

  4. Add to Admin

    Admin → Settings → Brevo API Key + List ID → Save

Mailchimp Integration

Admin → Settings → Mailchimp API Key + List ID → Save. Subscribers are automatically added to your list on sign-up.

Export Leads

Admin → Email Leads → Export CSV. Exports all leads for this site with email, name, source, and timestamp.

Site Settings

SettingDescription
brevo_api_keyBrevo API key for email list sync
brevo_list_idBrevo contact list ID
mailchimp_api_keyMailchimp API key
mailchimp_list_idMailchimp audience ID
clarity_codeMicrosoft Clarity tracking ID
custom_head_scriptsGTM, GPT, or any custom head script
ads_txtCustom ads.txt content (per domain)
robots_txtCustom robots.txt content (per domain)
jsearch_api_keyJSearch API for live jobs board (optional)

Themes & Customisation

Themes live in sites/themename/theme/. Two themes included:

ThemeBest ForStyle
defaultBeauty, lifestyle, health, generalLight, clean, DM Serif + DM Sans
adtechTech, SaaS, AdTech, programmingDark slate, Space Grotesk + Space Mono

Creating a Custom Theme

  1. Copy the default theme

    cp -r sites/default sites/mytheme

  2. Edit CSS variables

    Open sites/mytheme/theme/theme.css and change the :root colour variables

  3. Customise templates

    Edit home.php, post.php, partials/header.php, partials/footer.php

  4. Activate

    Admin → All Sites → Edit → Theme: mytheme

Multi-site Setup

🌐
Agency & Developer licenses onlySingle Site license is limited to 1 domain. Upgrade to Agency for unlimited sites.
  1. Point domain to same folder

    In cPanel → Addon Domains, point all domains to the same document root as your main installation

  2. Add site in admin

    Admin → All Sites → Add New Site. Enter domain, brand, niche, theme

  3. Add categories and queue

    Set up categories and add topics to the AI queue for the new site

  4. Set up cron for new site

    Add a cron job with the new site's ID: generate.php?site=2&limit=3

Cron & Automation

The cron runner at generate.php is standalone — no authentication required. Call it with:

https://yourdomain.com/generate.php?site=1&limit=3

Parameters:
  site=1   ← your site ID (Admin → All Sites)
  limit=3  ← posts to generate per run (max 10)

Monitor Generation

Admin → AI Queue shows all jobs with statuses:

  • pending — waiting to run
  • processing — currently generating
  • done — published successfully
  • failed — error occurred, click Retry

SEO Features

FeatureDetails
Dynamic SitemapAuto-generated at /sitemap.xml — posts, pages, categories
robots.txtCustom per domain, set in Admin → Settings
ads.txtCustom per domain, set in Admin → Settings
Article SchemaJSON-LD on every post, auto-generated or custom
Open Graphog:title, og:description, og:image on every page
Twitter Cardssummary_large_image cards on posts
Canonical URLsSelf-referencing canonical on every page
BreadcrumbsWith BreadcrumbList schema markup
RSS FeedAuto-generated at /feed
GA4 IntegrationAdd GA4 ID per site in Admin → All Sites

License & Support

Single Site
$97/once
  • 1 domain
  • All core features
  • 6 months support
  • 1 year updates
  • White-label
  • Client use
Developer
$497/once
  • Unlimited domains
  • All core features
  • 12 months support + consultations
  • 1 year updates
  • White-label
  • Build for clients

Activating Your License

Add your license key to core/db.config.php:

define('ABN_LICENSE', 'ABN-A-XXXX-XXXX-XXXX');

The system validates against license.adbellmedia.com and caches the result for 24 hours. Your site continues working even if the license server is temporarily unreachable.

📧
SupportEmail: support@adbellmedia.com
Response time: 24–48 hours (Mon–Fri)

Changelog

v1.0.0
April 2026 — Initial Release
  • Multi-site blog network from single PHP codebase
  • Claude AI content generation with queue system
  • 10 predefined ad zones (AdSense + GAM + custom)
  • Email lead capture with Brevo + Mailchimp
  • Two themes: default (light) and adtech (dark)
  • Web installer (setup.php)
  • Dynamic sitemap, per-domain robots.txt + ads.txt
  • Static HTML cache for performance
  • 27-tool AdTech tools hub
  • Jobs board with live JSearch API integration
  • License validation system

Troubleshooting

500 Error on all pages

Check core/db.config.php exists with correct database credentials. View the PHP error log in cPanel → Error Logs.

404 on all pages except homepage

The .htaccess file is missing or mod_rewrite is disabled. Re-upload .htaccess (it's hidden — enable "show hidden files" in your FTP client).

Posts not generating

  • Visit yourdomain.com/generate.php?site=1&limit=1 directly and check the output
  • Verify AB_CLAUDE_KEY is set in db.config.php
  • Check the Anthropic account has credits at console.anthropic.com
  • Check Admin → AI Queue has pending items

Images not showing on posts

If AI generated posts with broken image URLs, run the content fixer:

https://yourdomain.com/install/fix-content.php?key=fix123

Delete that file immediately after running.

Admin login not working

Reset password via phpMyAdmin. First, generate a hash by creating a temporary file on your server:

// Create /reset.php temporarily
<?php echo password_hash('YourNewPassword', PASSWORD_BCRYPT); ?>

Then in phpMyAdmin:

UPDATE ab_admins SET password_hash = 'PASTE_HASH' WHERE username = 'admin';

Ads not displaying

  • Verify the GPT/AdSense initialisation script is in Admin → Settings → Custom Head Scripts
  • Verify the ad zone is set to Active in Admin → Ad Zones
  • Open browser DevTools → Console and check for JavaScript errors
  • AdSense can take 24–72 hours to start serving after account approval

Emails not sending

Check your Brevo API key and List ID in Admin → Settings. Test by submitting the popup form and checking Admin → Email Leads for the new entry. If it appears in leads but Brevo shows nothing, verify the API key is correct.

Adbell Blog Network v1.0.0 © 2026 Adbell Media

support@adbellmedia.com  ·  adbellmedia.com