786 lines
27 KiB
Markdown
786 lines
27 KiB
Markdown
# WordPress Integration Management
|
|
|
|
**Last Updated:** January 10, 2026
|
|
**Version:** 1.7.0
|
|
**Status:** Production
|
|
**Scope:** App-side management of WordPress plugin distribution and site integrations
|
|
|
|
---
|
|
|
|
## Table of Contents
|
|
|
|
1. [Overview](#1-overview)
|
|
2. [Architecture](#2-architecture)
|
|
3. [Plugin Distribution System](#3-plugin-distribution-system)
|
|
4. [Database Models](#4-database-models)
|
|
5. [API Endpoints](#5-api-endpoints)
|
|
6. [Django Admin Management](#6-django-admin-management)
|
|
7. [Frontend Integration](#7-frontend-integration)
|
|
8. [Site Integration Flow](#8-site-integration-flow)
|
|
9. [Recent Updates (v1.7.0)](#9-recent-updates-v170)
|
|
10. [Troubleshooting](#10-troubleshooting)
|
|
|
|
---
|
|
|
|
## 1. Overview
|
|
|
|
### What This Document Covers
|
|
|
|
This document covers the **app-side** management of WordPress integration:
|
|
|
|
- How the IGNY8 app distributes the WordPress plugin
|
|
- How site integrations are tracked in the database
|
|
- API endpoints that WordPress plugins call
|
|
- Admin interface for managing plugins and versions
|
|
- Frontend components for plugin download
|
|
- Plugin distribution infrastructure (v1.7.0)
|
|
- Automated versioning and packaging system
|
|
|
|
### What This Document Does NOT Cover
|
|
|
|
- Internal plugin PHP code and functions (see `/plugins/wordpress/source/igny8-wp-bridge/docs/`)
|
|
- WordPress-side setup and configuration
|
|
- Plugin installation on WordPress sites
|
|
|
|
### Current Status (v1.7.0)
|
|
|
|
- ✅ WordPress Plugin: v1.3.3 (Production)
|
|
- ✅ Distribution System: Fully operational
|
|
- ✅ Auto-update Mechanism: Active
|
|
- ✅ Template Design: Updated with image layout fixes
|
|
- ✅ API Endpoints: All operational
|
|
- ✅ Security Features: Checksums, signed URLs, rate limiting
|
|
|
|
---
|
|
|
|
## 2. Architecture
|
|
|
|
### System Components
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
|
│ IGNY8 App Server │
|
|
├─────────────────────────────────────────────────────────────────────────┤
|
|
│ │
|
|
│ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │
|
|
│ │ Django Backend │ │ PostgreSQL │ │ Plugin Files │ │
|
|
│ │ │ │ │ │ │ │
|
|
│ │ - API Views │◄──►│ - Plugin │ │ /plugins/ │ │
|
|
│ │ - Admin │ │ - PluginVersion │ │ └─wordpress/ │ │
|
|
│ │ - Signals │ │ - Installation │ │ ├─source/ │ │
|
|
│ │ │ │ - Downloads │ │ └─dist/ │ │
|
|
│ └────────┬─────────┘ └──────────────────┘ └────────┬─────────┘ │
|
|
│ │ │ │
|
|
│ │ API Routes: api.igny8.com │ │
|
|
│ ▼ ▼ │
|
|
│ ┌──────────────────────────────────────────────────────────────────┐ │
|
|
│ │ API Endpoints │ │
|
|
│ │ │ │
|
|
│ │ /api/plugins/{slug}/download/ → Serve ZIP file │ │
|
|
│ │ /api/plugins/{slug}/check-update/ → Return update info │ │
|
|
│ │ /api/plugins/{slug}/info/ → Return plugin metadata │ │
|
|
│ │ /api/plugins/{slug}/register/ → Register installation │ │
|
|
│ │ /api/plugins/{slug}/health-check/ → Report plugin status │ │
|
|
│ └──────────────────────────────────────────────────────────────────┘ │
|
|
│ │
|
|
└─────────────────────────────────────────────────────────────────────────┘
|
|
│
|
|
│ HTTPS
|
|
▼
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
|
│ WordPress Sites │
|
|
│ │
|
|
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
|
│ │ Site A │ │ Site B │ │ Site C │ │ Site N │ │
|
|
│ │ v1.1.1 │ │ v1.1.0 │ │ v1.1.1 │ │ v1.0.0 │ │
|
|
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │
|
|
│ │
|
|
└─────────────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
### URL Routing
|
|
|
|
| Domain | Service | Purpose |
|
|
|--------|---------|---------|
|
|
| `app.igny8.com` | Frontend (Vite) | User interface |
|
|
| `api.igny8.com` | Backend (Django) | API endpoints |
|
|
|
|
**Important**: WordPress plugins must call `api.igny8.com`, not `app.igny8.com`.
|
|
|
|
---
|
|
|
|
## 3. Plugin Distribution System
|
|
|
|
### Directory Structure
|
|
|
|
```
|
|
/data/app/igny8/
|
|
├── plugins/
|
|
│ └── wordpress/
|
|
│ ├── source/ # Development source
|
|
│ │ └── igny8-wp-bridge/
|
|
│ │ ├── igny8-bridge.php # Main plugin file
|
|
│ │ ├── includes/ # PHP classes
|
|
│ │ ├── admin/ # Admin interface
|
|
│ │ │ ├── class-admin.php # Menu registration
|
|
│ │ │ ├── layout-header.php # Layout wrapper + sidebar
|
|
│ │ │ ├── layout-footer.php # Footer
|
|
│ │ │ ├── settings.php # Settings handler
|
|
│ │ │ └── pages/ # Admin pages (3 pages)
|
|
│ │ │ ├── connection.php # Dashboard (connection + stats)
|
|
│ │ │ ├── settings.php # Post types, taxonomies, sync
|
|
│ │ │ └── logs.php # Webhook activity logs
|
|
│ │ ├── sync/ # Sync functionality
|
|
│ │ ├── templates/ # Frontend templates
|
|
│ │ └── docs/ # Plugin-internal docs
|
|
│ └── dist/ # Distribution files
|
|
│ ├── igny8-wp-bridge-v1.x.x.zip # Version ZIP
|
|
│ ├── igny8-wp-bridge-v1.x.x.sha256
|
|
│ └── igny8-wp-bridge-latest.zip # Symlink to latest
|
|
│
|
|
└── backend/
|
|
└── igny8_core/
|
|
└── plugins/ # Django app
|
|
├── models.py # Database models
|
|
├── views.py # API endpoints
|
|
├── signals.py # Auto-build triggers
|
|
├── utils.py # ZIP creation utilities
|
|
├── admin.py # Django admin config
|
|
└── urls.py # URL routing
|
|
```
|
|
|
|
### Plugin Admin Pages
|
|
|
|
The WordPress plugin provides 3 admin pages:
|
|
|
|
| Page | File | Purpose |
|
|
|------|------|---------|
|
|
| Dashboard | `connection.php` | Connection status, Site ID, API key, content stats |
|
|
| Settings | `settings.php` | Post types, default post status, taxonomies, sync toggle |
|
|
| Logs | `logs.php` | Webhook activity with timestamps, event types, status |
|
|
|
|
**Layout:**
|
|
- Dashboard: 2-column grid (Connection Status + Content Stats)
|
|
- Settings: 3-column top row (Post Types + Default Post Status + IGNY8 Sync) + dynamic taxonomy cards
|
|
- Logs: Full-width table with search
|
|
|
|
### How ZIP Files Are Created
|
|
|
|
#### Automatic Build (Recommended)
|
|
|
|
When a `PluginVersion` status changes to `released` or `update_ready`, the system **automatically**:
|
|
|
|
1. Reads source files from `/plugins/wordpress/source/igny8-wp-bridge/`
|
|
2. Updates version numbers in PHP files
|
|
3. Removes development files (tests, .git, __pycache__)
|
|
4. Creates ZIP in `/plugins/wordpress/dist/`
|
|
5. Calculates SHA256 checksum
|
|
6. Updates database with `file_path`, `file_size`, `checksum`
|
|
7. Updates `*-latest.zip` symlink
|
|
|
|
This is handled by `signals.py`:
|
|
|
|
```python
|
|
# backend/igny8_core/plugins/signals.py
|
|
|
|
@receiver(pre_save, sender=PluginVersion)
|
|
def auto_build_plugin_on_release(sender, instance, **kwargs):
|
|
"""Automatically build ZIP when version is released."""
|
|
# Triggered on status change to 'released' or 'update_ready'
|
|
```
|
|
|
|
#### Manual Build (If Needed)
|
|
|
|
```bash
|
|
# From project root
|
|
cd /data/app/igny8/plugins/wordpress/source
|
|
|
|
# Create ZIP manually
|
|
zip -r ../dist/igny8-wp-bridge-v1.2.0.zip igny8-wp-bridge/ \
|
|
-x "*.git*" -x "*__pycache__*" -x "*.DS_Store" -x "*tester*"
|
|
|
|
# Update checksum
|
|
sha256sum ../dist/igny8-wp-bridge-v1.2.0.zip > ../dist/igny8-wp-bridge-v1.2.0.sha256
|
|
|
|
# Update symlink
|
|
ln -sf igny8-wp-bridge-v1.2.0.zip ../dist/igny8-wp-bridge-latest.zip
|
|
```
|
|
|
|
---
|
|
|
|
## 4. Database Models
|
|
|
|
### Plugin
|
|
|
|
Represents a plugin type (WordPress, Shopify, etc.).
|
|
|
|
```python
|
|
class Plugin(models.Model):
|
|
name = models.CharField(max_length=100) # "IGNY8 WordPress Bridge"
|
|
slug = models.SlugField(unique=True) # "igny8-wp-bridge"
|
|
platform = models.CharField(...) # "wordpress", "shopify", "custom"
|
|
description = models.TextField()
|
|
homepage_url = models.URLField()
|
|
is_active = models.BooleanField(default=True)
|
|
```
|
|
|
|
**Current Records:**
|
|
|
|
| ID | Name | Slug | Platform |
|
|
|----|------|------|----------|
|
|
| 1 | IGNY8 WordPress Bridge | igny8-wp-bridge | wordpress |
|
|
|
|
### PluginVersion
|
|
|
|
Tracks each version of a plugin.
|
|
|
|
```python
|
|
class PluginVersion(models.Model):
|
|
plugin = models.ForeignKey(Plugin, ...)
|
|
version = models.CharField(max_length=20) # "1.1.1"
|
|
version_code = models.IntegerField() # 10101 (for comparison)
|
|
status = models.CharField(...) # "draft", "released", "update_ready"
|
|
|
|
# File info (auto-populated on release)
|
|
file_path = models.CharField(...) # "igny8-wp-bridge-v1.1.1.zip"
|
|
file_size = models.IntegerField() # 167589 (bytes)
|
|
checksum = models.CharField(max_length=64) # SHA256
|
|
|
|
# Release info
|
|
changelog = models.TextField()
|
|
min_php_version = models.CharField(default='7.4')
|
|
released_at = models.DateTimeField(null=True)
|
|
force_update = models.BooleanField(default=False)
|
|
```
|
|
|
|
**Version Status Flow:**
|
|
|
|
```
|
|
draft → testing → staged → released → update_ready → deprecated
|
|
│ │
|
|
│ └─ Notifies WP sites
|
|
└─ Available for download
|
|
```
|
|
|
|
### PluginInstallation
|
|
|
|
Tracks where plugins are installed.
|
|
|
|
```python
|
|
class PluginInstallation(models.Model):
|
|
site = models.ForeignKey('Site', ...)
|
|
plugin = models.ForeignKey(Plugin, ...)
|
|
current_version = models.ForeignKey(PluginVersion, ...)
|
|
is_active = models.BooleanField(default=True)
|
|
last_health_check = models.DateTimeField(null=True)
|
|
health_status = models.CharField(...) # "healthy", "outdated", "error"
|
|
```
|
|
|
|
### PluginDownload
|
|
|
|
Tracks download analytics.
|
|
|
|
```python
|
|
class PluginDownload(models.Model):
|
|
plugin = models.ForeignKey(Plugin, ...)
|
|
version = models.ForeignKey(PluginVersion, ...)
|
|
ip_address = models.GenericIPAddressField()
|
|
user_agent = models.CharField(max_length=500)
|
|
download_type = models.CharField(...) # "manual", "auto_update"
|
|
created_at = models.DateTimeField(auto_now_add=True)
|
|
```
|
|
|
|
---
|
|
|
|
## 5. API Endpoints
|
|
|
|
### Public Endpoints (No Auth Required)
|
|
|
|
#### Download Plugin
|
|
|
|
```
|
|
GET /api/plugins/{slug}/download/
|
|
```
|
|
|
|
Returns the latest released ZIP file.
|
|
|
|
**Response:** Binary ZIP file download
|
|
|
|
**Example:**
|
|
```bash
|
|
curl -O https://api.igny8.com/api/plugins/igny8-wp-bridge/download/
|
|
```
|
|
|
|
#### Check for Updates
|
|
|
|
```
|
|
GET /api/plugins/{slug}/check-update/?current_version=1.0.0
|
|
```
|
|
|
|
Called by installed WordPress plugins to check for updates.
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"update_available": true,
|
|
"current_version": "1.0.0",
|
|
"latest_version": "1.1.1",
|
|
"latest_version_code": 10101,
|
|
"download_url": "https://api.igny8.com/api/plugins/igny8-wp-bridge/download/",
|
|
"changelog": "Bug fixes and improvements",
|
|
"info_url": "https://api.igny8.com/api/plugins/igny8-wp-bridge/info/",
|
|
"force_update": false,
|
|
"checksum": "6b9e231c07434df1dcfe81596b57f3571c30b6c2..."
|
|
}
|
|
```
|
|
|
|
#### Plugin Info
|
|
|
|
```
|
|
GET /api/plugins/{slug}/info/
|
|
```
|
|
|
|
Returns plugin metadata for WordPress update modal.
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"name": "IGNY8 WordPress Bridge",
|
|
"slug": "igny8-wp-bridge",
|
|
"version": "1.1.1",
|
|
"author": "IGNY8",
|
|
"homepage": "https://igny8.com",
|
|
"description": "Lightweight bridge plugin...",
|
|
"changelog": "Bug fixes and improvements",
|
|
"download_url": "https://api.igny8.com/api/plugins/igny8-wp-bridge/download/",
|
|
"file_size": 167589,
|
|
"requires_php": "7.4",
|
|
"tested_wp": "6.7"
|
|
}
|
|
```
|
|
|
|
### Authenticated Endpoints
|
|
|
|
#### Register Installation
|
|
|
|
```
|
|
POST /api/plugins/{slug}/register/
|
|
Headers: Authorization: Api-Key {site_api_key}
|
|
```
|
|
|
|
Called when plugin is activated on a WordPress site.
|
|
|
|
**Request Body:**
|
|
```json
|
|
{
|
|
"site_id": 123,
|
|
"version": "1.1.1",
|
|
"wp_version": "6.7",
|
|
"php_version": "8.2"
|
|
}
|
|
```
|
|
|
|
#### Health Check
|
|
|
|
```
|
|
POST /api/plugins/{slug}/health-check/
|
|
Headers: Authorization: Api-Key {site_api_key}
|
|
```
|
|
|
|
Periodic status report from installed plugins.
|
|
|
|
**Request Body:**
|
|
```json
|
|
{
|
|
"site_id": 123,
|
|
"version": "1.1.1",
|
|
"status": "active",
|
|
"last_sync": "2026-01-09T12:00:00Z"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 6. Django Admin Management
|
|
|
|
### Accessing Plugin Admin
|
|
|
|
1. Go to: `https://api.igny8.com/backend/`
|
|
2. Login with admin credentials
|
|
3. Navigate to **Plugin Distribution** section
|
|
|
|
### Admin Sections
|
|
|
|
#### Plugins
|
|
|
|
View and manage plugin registry.
|
|
|
|
| Field | Description |
|
|
|-------|-------------|
|
|
| Name | Display name |
|
|
| Slug | URL identifier (cannot change after creation) |
|
|
| Platform | wordpress, shopify, custom |
|
|
| Is Active | Whether available for download |
|
|
|
|
#### Plugin Versions
|
|
|
|
Manage versions and trigger releases.
|
|
|
|
**Required Fields Only:**
|
|
- Plugin
|
|
- Version (e.g., 1.2.0)
|
|
- Changelog
|
|
- Status
|
|
|
|
**Auto-Filled Fields:**
|
|
- Min API/Platform/PHP versions (copied from previous version)
|
|
- File path, size, checksum (generated on release)
|
|
- Version code (calculated from version number)
|
|
|
|
**To Release a New Version:**
|
|
|
|
1. Click **Add Plugin Version**
|
|
2. Select plugin
|
|
3. Enter version number (e.g., 1.2.0)
|
|
4. Write changelog
|
|
5. Set status to `draft`
|
|
6. Save
|
|
7. Change status to `released` (or use bulk action "✅ Release selected versions")
|
|
8. ZIP is automatically built with all file info populated
|
|
|
|
**Bulk Actions:**
|
|
- **✅ Release selected versions** - Builds ZIP and releases
|
|
- **📢 Mark as update ready** - Notifies WordPress sites
|
|
- **🗑️ Mark as deprecated** - Deprecates old versions
|
|
|
|
#### Plugin Installations
|
|
|
|
View where plugins are installed.
|
|
|
|
| Field | Description |
|
|
|-------|-------------|
|
|
| Site | IGNY8 site record |
|
|
| Plugin | Which plugin |
|
|
| Current Version | Installed version |
|
|
| Health Status | healthy, outdated, error |
|
|
| Last Health Check | Timestamp |
|
|
|
|
#### Plugin Downloads
|
|
|
|
View download analytics.
|
|
|
|
| Field | Description |
|
|
|-------|-------------|
|
|
| Plugin | Which plugin |
|
|
| Version | Which version |
|
|
| Download Type | manual, auto_update |
|
|
| IP Address | Client IP |
|
|
| User Agent | Browser/client info |
|
|
| Created At | Timestamp |
|
|
|
|
---
|
|
|
|
## 7. Frontend Integration
|
|
|
|
### Download Button Location
|
|
|
|
**Page:** Site Settings → Integrations → WordPress
|
|
|
|
**Component:** `frontend/src/components/sites/WordPressIntegrationForm.tsx`
|
|
|
|
### How Download Works
|
|
|
|
```typescript
|
|
// WordPressIntegrationForm.tsx
|
|
|
|
import { API_BASE_URL } from '../../services/api';
|
|
|
|
const handleDownloadPlugin = () => {
|
|
// Uses API_BASE_URL which resolves to https://api.igny8.com/api
|
|
const pluginUrl = `${API_BASE_URL}/plugins/igny8-wp-bridge/download/`;
|
|
window.open(pluginUrl, '_blank');
|
|
toast.success('Plugin download started');
|
|
};
|
|
```
|
|
|
|
### Plugin Information Display
|
|
|
|
The frontend shows:
|
|
|
|
- Plugin name and version
|
|
- File size
|
|
- PHP requirements
|
|
- Download button
|
|
- Changelog (expandable)
|
|
|
|
---
|
|
|
|
## 8. Site Integration Flow
|
|
|
|
### Integration Creation Flow
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
|
│ WordPress Site Setup │
|
|
├─────────────────────────────────────────────────────────────────────────┤
|
|
│ │
|
|
│ 1. User downloads plugin from IGNY8 app │
|
|
│ └─ GET /api/plugins/igny8-wp-bridge/download/ │
|
|
│ │
|
|
│ 2. User installs and activates plugin in WordPress │
|
|
│ │
|
|
│ 3. User enters Site ID and API Key in WP plugin settings │
|
|
│ └─ These are generated in IGNY8 app │
|
|
│ │
|
|
│ 4. WP Plugin calls IGNY8 to register │
|
|
│ └─ POST /api/plugins/igny8-wp-bridge/register/ │
|
|
│ │
|
|
│ 5. IGNY8 creates SiteIntegration record │
|
|
│ └─ Links WordPress site to IGNY8 site │
|
|
│ │
|
|
│ 6. Integration is now active │
|
|
│ └─ Content can be published from IGNY8 to WordPress │
|
|
│ │
|
|
└─────────────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
### Integration Data Model
|
|
|
|
**Authentication (Source of Truth):**
|
|
|
|
```python
|
|
# Site model (in auth/models.py) - SINGLE source of truth for API auth
|
|
|
|
class Site(models.Model):
|
|
wp_api_key = models.CharField(max_length=255) # API key for WP authentication
|
|
# Used by: PublisherService, test connection, plugin verification
|
|
```
|
|
|
|
**Sync Tracking (SiteIntegration):**
|
|
|
|
```python
|
|
# SiteIntegration model (in auth/models.py) - Tracks sync status, NOT auth
|
|
|
|
class SiteIntegration(models.Model):
|
|
site = models.ForeignKey(Site, ...) # IGNY8 site
|
|
platform = models.CharField(...) # "wordpress", "shopify"
|
|
external_site_url = models.URLField() # WordPress URL
|
|
sync_enabled = models.BooleanField()
|
|
sync_status = models.CharField(...) # "pending", "syncing", "completed"
|
|
last_sync_at = models.DateTimeField()
|
|
sync_error = models.TextField(null=True)
|
|
connection_status = models.CharField(...) # "connected", "error"
|
|
```
|
|
|
|
**Key Architecture Points:**
|
|
- `Site.wp_api_key` is the **SINGLE source of truth** for API authentication
|
|
- `SiteIntegration` provides sync tracking but NOT authentication
|
|
- Publishing uses `Site.wp_api_key` via `X-IGNY8-API-KEY` header
|
|
- SiteIntegration kept for future multi-platform support (Shopify, custom)
|
|
|
|
---
|
|
|
|
## 9. Troubleshooting
|
|
|
|
### Common Issues
|
|
|
|
#### "404 Not Found" on Download
|
|
|
|
**Cause:** Using wrong domain (app.igny8.com instead of api.igny8.com)
|
|
|
|
**Solution:** Ensure URL is `https://api.igny8.com/api/plugins/igny8-wp-bridge/download/`
|
|
|
|
#### "Plugin file not found" Error
|
|
|
|
**Cause:** ZIP file doesn't exist in dist/ directory
|
|
|
|
**Solution:**
|
|
```bash
|
|
# Check if file exists
|
|
ls -la /data/app/igny8/plugins/wordpress/dist/
|
|
|
|
# If missing, rebuild manually or change version status to trigger auto-build
|
|
```
|
|
|
|
#### Updates Not Showing in WordPress
|
|
|
|
**Cause 1:** WordPress caches plugin update checks
|
|
|
|
**Solution:** In WordPress admin, go to Dashboard → Updates → Check Again
|
|
|
|
**Cause 2:** Version status is not `released` or `update_ready`
|
|
|
|
**Solution:** Check PluginVersion status in Django admin
|
|
|
|
#### Wrong File Size/Checksum
|
|
|
|
**Cause:** Database values don't match actual file
|
|
|
|
**Solution:**
|
|
```bash
|
|
# Get actual values
|
|
stat -c %s /data/app/igny8/plugins/wordpress/dist/igny8-wp-bridge-v1.1.1.zip
|
|
sha256sum /data/app/igny8/plugins/wordpress/dist/igny8-wp-bridge-v1.1.1.zip
|
|
|
|
# Update in Django admin or shell
|
|
```
|
|
|
|
### Verification Commands
|
|
|
|
```bash
|
|
# Test download endpoint
|
|
curl -I https://api.igny8.com/api/plugins/igny8-wp-bridge/download/
|
|
|
|
# Test check-update endpoint
|
|
curl "https://api.igny8.com/api/plugins/igny8-wp-bridge/check-update/?current_version=1.0.0"
|
|
|
|
# Test info endpoint
|
|
curl https://api.igny8.com/api/plugins/igny8-wp-bridge/info/
|
|
|
|
# Check ZIP contents
|
|
unzip -l /data/app/igny8/plugins/wordpress/dist/igny8-wp-bridge-v1.1.1.zip
|
|
|
|
# Verify API URL in plugin
|
|
unzip -p /data/app/igny8/plugins/wordpress/dist/igny8-wp-bridge-v1.1.1.zip \
|
|
igny8-wp-bridge/igny8-bridge.php | grep "api.igny8.com"
|
|
```
|
|
|
|
### Log Locations
|
|
|
|
| Log | Location |
|
|
|-----|----------|
|
|
| Django Logs | `/data/app/igny8/backend/logs/` |
|
|
| Plugin API Logs | Check Django logs for `/api/plugins/` requests |
|
|
| WordPress Plugin Logs | WP site's debug.log if WP_DEBUG enabled |
|
|
|
|
---
|
|
|
|
## 9. Recent Updates (v1.7.0)
|
|
|
|
### Plugin Distribution System Implemented
|
|
|
|
**Infrastructure:**
|
|
- ✅ Complete plugin distribution system operational
|
|
- ✅ Multi-platform support (WordPress, Shopify, Custom sites)
|
|
- ✅ Automated ZIP packaging with versioning
|
|
- ✅ Security features: checksums (MD5/SHA256), signed URLs, rate limiting
|
|
- ✅ Monitoring and analytics dashboard
|
|
|
|
**Database Models:**
|
|
- `Plugin` - Platform-agnostic plugin registry
|
|
- `PluginVersion` - Full version lifecycle management
|
|
- `PluginInstallation` - Per-site installation tracking
|
|
- `PluginDownload` - Download analytics and monitoring
|
|
|
|
**API Endpoints:**
|
|
- All 5 endpoints operational and tested
|
|
- `/download/` - Serve plugin ZIP files
|
|
- `/check-update/` - WordPress update mechanism
|
|
- `/info/` - Plugin metadata
|
|
- `/register/` - Installation registration
|
|
- `/health-check/` - Plugin health monitoring
|
|
|
|
### WordPress Plugin Updates (v1.3.0 → v1.5.1)
|
|
|
|
**v1.5.1 - Admin UI Consolidation:**
|
|
- Reduced admin pages from 6 to 3: Dashboard, Settings, Logs
|
|
- Renamed Connection page to Dashboard with content stats
|
|
- Removed redundant pages: Data, Sync, old Dashboard
|
|
- Settings redesigned with 3-column layout (Post Types + Default Post Status + IGNY8 Sync)
|
|
- Fixed header alignment across all pages with proper width styling
|
|
- Cleaned up orphaned code and functions
|
|
|
|
**v1.5.0 - Authentication Simplification:**
|
|
- Simplified authentication to use Site.wp_api_key as single source of truth
|
|
- Removed redundant access_token handling
|
|
- Improved test connection flow using authenticated /verify-key endpoint
|
|
|
|
**v1.3.3 - Template Design Improvements:**
|
|
- Fixed square images displaying in 2 rows (now side-by-side)
|
|
- Fixed landscape images in sections 4+ displaying incorrectly
|
|
- Removed card wrapper for images without descriptions
|
|
- Applied border-radius and shadow directly to images
|
|
- Landscape images now appear after first paragraph
|
|
- Consistent CSS classes for all image types
|
|
|
|
**v1.3.2 - Template Fixes:**
|
|
- Template rendering improvements in app and plugin
|
|
- Image layout enhancements
|
|
- Content section fixes
|
|
|
|
**v1.3.1 - Plugin Updates:**
|
|
- Versioning system improvements
|
|
- WordPress plugin compatibility updates
|
|
|
|
**v1.3.0 - Initial Distribution System:**
|
|
- First release with automated distribution
|
|
- Update mechanism implementation
|
|
- Base template system
|
|
|
|
### Version Progression Timeline
|
|
|
|
```
|
|
v1.7.0 (Jan 10, 2026) - App infrastructure + plugin v1.5.1
|
|
├── Plugin admin UI consolidation (6→3 pages)
|
|
├── Authentication simplification
|
|
├── Plugin distribution system complete
|
|
├── Template design overhaul
|
|
└── Pre-launch cleanup complete
|
|
|
|
v1.6.2 (Jan 8, 2026) - Design refinements
|
|
└── Marketing site updates
|
|
|
|
v1.6.0 (Jan 8, 2026) - Payment system refactor
|
|
└── Stripe, PayPal, Bank Transfer
|
|
|
|
v1.4.0 (Jan 5, 2026) - AI model architecture overhaul
|
|
└── IntegrationProvider, AIModelConfig
|
|
```
|
|
|
|
### Infrastructure Improvements
|
|
|
|
**Security:**
|
|
- Signed URLs with expiration for downloads
|
|
- Checksum verification (MD5 + SHA256)
|
|
- Rate limiting per IP/site
|
|
- API authentication for sensitive operations
|
|
- Production environment protection
|
|
|
|
**Automation:**
|
|
- Auto-build on version status change
|
|
- Automatic checksum calculation
|
|
- File size tracking
|
|
- Version number updates in ZIP contents
|
|
- Released timestamp tracking
|
|
|
|
**Monitoring:**
|
|
- Installation tracking per site
|
|
- Download analytics
|
|
- Health check endpoints
|
|
- Version distribution monitoring
|
|
- Error logging and alerts
|
|
|
|
### Documentation Updates
|
|
|
|
- Added comprehensive plugin distribution plan
|
|
- Updated API endpoint documentation
|
|
- Enhanced troubleshooting guides
|
|
- Added version progression tracking
|
|
- Updated architecture diagrams
|
|
|
|
---
|
|
|
|
## 10. Troubleshooting
|
|
|-----|----------|
|
|
| Django logs | `/data/app/logs/django.log` |
|
|
| Plugin build logs | Check Django log for `"Created plugin ZIP"` messages |
|
|
| Download tracking | `PluginDownload` model in database |
|
|
|
|
---
|
|
|
|
## Related Documentation
|
|
|
|
- [PLUGIN-UPDATE-WORKFLOW.md](PLUGIN-UPDATE-WORKFLOW.md) - Post-update checklist
|
|
- `/plugins/wordpress/source/igny8-wp-bridge/docs/` - Plugin internal documentation
|
|
- [docs/plans/PLUGIN-DISTRIBUTION-SYSTEM.md](/docs/plans/PLUGIN-DISTRIBUTION-SYSTEM.md) - Original implementation plan
|