Skip to main content

System Architecture

The Manage Rhino Group platform is a WordPress installation with five custom plugins that work together to provide a comprehensive management dashboard for all Rhino Group client sites.


Directory Structure

Z:\Herd\manage/
├── wp-config.php ← Database config, debug settings, osTicket DB constant
├── cron/ ← 18+ scheduled task scripts
├── tools/ ← Admin utility scripts (indexing checks, webhook tests)
├── wp-content/
│ ├── plugins/
│ │ ├── suma-management/ ← Core management plugin (v1.1.0)
│ │ ├── suma-gemini/ ← Gemini AI integration (v1.0.0)
│ │ ├── suma-harvest/ ← Harvest time tracking (v1.0.0)
│ │ ├── suma-order-volume-monitor/ ← Order monitoring (v1.2.2)
│ │ ├── suma-toolshed/ ← Tools framework (v1.0.0)
│ │ ├── mainwp/ ← MainWP Dashboard (v4.5.2)
│ │ ├── advanced-custom-fields-pro/
│ │ ├── wordfence/
│ │ ├── wp-mail-smtp/
│ │ ├── zapier/
│ │ └── [other utility plugins]
│ ├── themes/
│ │ └── twentyseventeen/ ← Default theme (UI is plugin-driven)
│ └── debug.log ← Error log (WP_DEBUG_LOG enabled)
└── [standard WordPress core files]

Plugin Ecosystem

How the Plugins Interact

┌─────────────────────────────────────────────────────────────┐
│ WordPress Core │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────┐ ┌──────────────────┐ │
│ │ MainWP Dashboard │────▶│ Suma Management │ │
│ │ (site sync data) │ │ (core platform) │ │
│ └──────────────────┘ └────────┬─────────┘ │
│ │ │
│ ┌─────────────────────────┼──────────────┐ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌────────────────┐ ┌──────────────────┐ ┌───────────┐ │
│ │ Suma Harvest │ │ Suma Gemini │ │ Suma │ │
│ │ (time/budget) │ │ (AI analysis) │ │ Toolshed │ │
│ └────────────────┘ └──────────────────┘ └───────────┘ │
│ │
│ ┌──────────────────────────┐ │
│ │ Suma Order Volume │ │
│ │ Monitor (e-commerce) │ │
│ └──────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘

Plugin Dependencies

PluginDepends OnProvides To
Suma ManagementMainWP (site data), ACF Pro (settings)Site model used by Toolshed; hooks consumed by Pinecone
Suma GeminiNone (standalone REST API)Ticket urgency endpoint consumed by osTicket
Suma HarvestSuma Management (email templates)Budget data for dashboards
Suma Order Volume MonitorACF Pro (settings)Alert notifications
Suma ToolshedSuma Management (site model, DB tables)REST routes for BigCommerce/WooCommerce operations

WordPress Configuration

Key Constants (wp-config.php)

ConstantValuePurpose
DB_NAMEmanagerhinogroupPrimary database
OSTICKETS_DBNAMEosticketsCross-database access to ticket system
WP_DEBUGtrueDebug mode enabled
WP_DEBUG_LOGtrueLogs to wp-content/debug.log
WP_DEBUG_DISPLAYfalseErrors hidden from frontend

Database Access

The site has access to two databases:

  1. managerhinogroup — Primary WordPress database with all custom tables
  2. ostickets — Read access to the osTicket database for cross-system queries

Request Flow

Admin Dashboard Request

Browser → manage.rhinogroup.com/wp-admin/admin.php?page=suma_sites
→ WordPress loads admin page
→ Suma Management registers menu pages
→ Sites class renders site list view
→ AJAX calls to admin-ajax.php for dynamic data
→ Response rendered with Bootstrap + custom CSS

REST API Request (External)

External System → POST /wp-json/suma/gemini/ticket-urgency
→ WordPress REST API routing
→ Suma Gemini validates request (API key, rate limit)
→ Gemini AI processes ticket data
→ JSON response returned

Cron Job Execution

Server cron (every 5 min) → php cron/site-updates.php
→ WordPress bootstrap loaded
→ Suma Management API instantiated
→ update_sites_cron() processes 15 sites from queue
→ Site_Update syncs each site with MainWP data
→ suma_site_updated hook fires → Pinecone auto-sync

Authentication & Access

Access TypeMethod
Admin DashboardWordPress login (manage_options capability)
REST API (Gemini)API key header (suma-gemini-security-key) or WordPress nonce
REST API (Harvest)Public endpoints (triggered by cron)
REST API (Toolshed)Per-route permissions
AJAX EndpointsWordPress nonce + manage_options capability
Cron ScriptsServer-level access (direct PHP execution)

External Service Architecture

┌──────────────────────────────────────────────┐
│ manage.rhinogroup.com │
└──────────────┬───────────────────────────────┘

┌──────────┼──────────────────────────────┐
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
┌────────┐ ┌────────┐ ┌───────┐ ┌───────┐ ┌────────┐
│Pinecone│ │ Gemini │ │Harvest│ │ Asana │ │ Cloud │
│Vector │ │ AI │ │ API │ │ API │ │ flare │
│ DB │ │ │ │ │ │ │ │ SDK │
└────────┘ └────────┘ └───────┘ └───────┘ └────────┘
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
┌────────┐ ┌────────┐ ┌───────┐ ┌───────┐ ┌────────┐
│Uptime │ │WP │ │Google │ │MS │ │Envato │
│Robot │ │Engine │ │Sheets │ │Teams │ │ API │
│ API │ │ API │ │ API │ │Webhook│ │ │
└────────┘ └────────┘ └───────┘ └───────┘ └────────┘

Namespaces & Autoloading

PluginNamespaceAutoloading
Suma ManagementSumaManual require_once (30+ class files)
Suma GeminiSuma\GeminiComposer PSR-4
Suma HarvestSuma_HarvestManual require_once (13 class files)
Suma Order Volume MonitorSuma\OrderVolumeMonitorManual require_once
Suma ToolshedSuma\ToolShedManual require_once + dynamic route discovery

Build & Assets

PluginBuild SystemFrontend
Suma ManagementNone (raw CSS/JS)Bootstrap 5, jQuery, custom CSS
Suma GeminiLaravel Mix + WebpackTailwind CSS, admin.js
Suma HarvestNoneBootstrap 5.3.2 (CDN)
Suma Order Volume MonitorNoneACF admin UI
Suma ToolshedNoneWordPress admin

Error Handling

  • PHP errorswp-content/debug.log (WP_DEBUG_LOG)
  • API errors → Returned as WP_Error with HTTP status codes
  • Gemini errors → Retry with exponential backoff + model fallback chain
  • Harvest sync → 10-second sleep delays for rate limiting
  • Order volume → File-based logging in wp-content/uploads/suma-logs/
  • Cron failures → Logged via WordPress error_log