1154 lines
37 KiB
Markdown
1154 lines
37 KiB
Markdown
# IGNY8 Master Architecture Document
|
|
|
|
**Version:** 1.0
|
|
**Last Updated:** 2025-01-XX
|
|
**Purpose:** Comprehensive master architecture document covering all aspects of the IGNY8 platform including workflows, functions, tech stack, infrastructure, and system design.
|
|
|
|
---
|
|
|
|
## Table of Contents
|
|
|
|
1. [Executive Summary](#executive-summary)
|
|
2. [System Overview](#system-overview)
|
|
3. [Technology Stack](#technology-stack)
|
|
4. [Core Architecture Principles](#core-architecture-principles)
|
|
5. [System Architecture](#system-architecture)
|
|
6. [Module Organization](#module-organization)
|
|
7. [Workflows & Functions](#workflows--functions)
|
|
8. [Data Flow & Processing](#data-flow--processing)
|
|
9. [Multi-Tenancy Architecture](#multi-tenancy-architecture)
|
|
10. [API Architecture](#api-architecture)
|
|
11. [Frontend Architecture](#frontend-architecture)
|
|
12. [Backend Architecture](#backend-architecture)
|
|
13. [AI Framework](#ai-framework)
|
|
14. [Infrastructure & Deployment](#infrastructure--deployment)
|
|
15. [Security Architecture](#security-architecture)
|
|
16. [Database Architecture](#database-architecture)
|
|
17. [Integration Points](#integration-points)
|
|
18. [System Diagrams](#system-diagrams)
|
|
|
|
---
|
|
|
|
## Executive Summary
|
|
|
|
**IGNY8** is a full-stack SaaS platform for SEO keyword management and AI-driven content generation. The system provides a scalable, multi-account platform that enables users to:
|
|
|
|
- **Manage SEO Keywords**: Import, organize, and cluster keywords
|
|
- **Plan Content**: Generate content ideas from keyword clusters
|
|
- **Generate Content**: AI-powered blog post and article generation
|
|
- **Create Images**: AI-powered image generation for content
|
|
- **Publish Content**: Direct WordPress integration for publishing
|
|
|
|
### Key Metrics
|
|
|
|
- **Architecture**: Multi-tenant SaaS with account isolation
|
|
- **Backend**: Django 5.2+ with Django REST Framework
|
|
- **Frontend**: React 19 with TypeScript
|
|
- **Database**: PostgreSQL 15
|
|
- **Task Queue**: Celery with Redis
|
|
- **Deployment**: Docker-based containerization
|
|
- **AI Functions**: 8 primary AI operations
|
|
- **Modules**: 4 core modules (Planner, Writer, System, Billing)
|
|
|
|
---
|
|
|
|
## System Overview
|
|
|
|
### Platform Capabilities
|
|
|
|
| Capability | Description | Module |
|
|
|------------|-------------|--------|
|
|
| **Keyword Management** | Import, organize, filter, and manage SEO keywords | Planner |
|
|
| **Keyword Clustering** | AI-powered semantic clustering of related keywords | Planner |
|
|
| **Content Ideas** | Generate content ideas from keyword clusters | Planner |
|
|
| **Content Generation** | AI-powered blog post and article generation | Writer |
|
|
| **Image Generation** | AI-powered image generation (DALL-E, Runware) | Writer |
|
|
| **WordPress Integration** | Direct publishing to WordPress sites | Writer |
|
|
| **Account Management** | Multi-account SaaS with user roles | Auth |
|
|
| **Billing & Credits** | Credit-based billing system | Billing |
|
|
| **AI Configuration** | Customizable AI prompts and settings | System |
|
|
|
|
### System Hierarchy
|
|
|
|
```
|
|
Account (1) ──< (N) User
|
|
Account (1) ──< (1) Subscription ──> (1) Plan
|
|
Account (1) ──< (N) Site
|
|
Site (1) ──< (1-5) Sector
|
|
Sector (1) ──< (N) Keywords, Clusters, ContentIdeas, Tasks
|
|
```
|
|
|
|
### User Roles
|
|
|
|
| Role | Access Level | Description |
|
|
|------|--------------|-------------|
|
|
| **Developer** | System-wide | Full system access, bypasses all restrictions |
|
|
| **Owner** | Account-wide | Full account access, can manage users and billing |
|
|
| **Admin** | Account-wide | Account admin access, can manage content and users |
|
|
| **Editor** | Site-specific | Content editing access, can manage clusters/tasks |
|
|
| **Viewer** | Site-specific | Read-only access |
|
|
| **System Bot** | System-wide | System automation user |
|
|
|
|
---
|
|
|
|
## Technology Stack
|
|
|
|
### Backend Stack
|
|
|
|
| Component | Technology | Version | Purpose |
|
|
|-----------|------------|---------|---------|
|
|
| **Framework** | Django | 5.2+ | Web framework |
|
|
| **API Framework** | Django REST Framework | Latest | RESTful API |
|
|
| **Database** | PostgreSQL | 15 | Primary database |
|
|
| **Task Queue** | Celery | Latest | Asynchronous tasks |
|
|
| **Cache/Broker** | Redis | 7 | Celery broker & caching |
|
|
| **Authentication** | JWT | SimpleJWT | Token-based auth |
|
|
| **HTTP Client** | Requests | Latest | External API calls |
|
|
| **WSGI Server** | Gunicorn | Latest | Production server |
|
|
|
|
### Frontend Stack
|
|
|
|
| Component | Technology | Version | Purpose |
|
|
|-----------|------------|---------|---------|
|
|
| **Framework** | React | 19 | UI library |
|
|
| **Language** | TypeScript | Latest | Type safety |
|
|
| **Build Tool** | Vite | Latest | Build tool & dev server |
|
|
| **Styling** | Tailwind CSS | Latest | Utility-first CSS |
|
|
| **State Management** | Zustand | Latest | Lightweight state |
|
|
| **Routing** | React Router | v6 | Client-side routing |
|
|
| **HTTP Client** | Fetch API | Native | API communication |
|
|
|
|
### Infrastructure Stack
|
|
|
|
| Component | Technology | Purpose |
|
|
|-----------|------------|---------|
|
|
| **Containerization** | Docker | Application containers |
|
|
| **Orchestration** | Docker Compose | Multi-container orchestration |
|
|
| **Reverse Proxy** | Caddy | HTTPS termination & routing |
|
|
| **Database Admin** | pgAdmin | PostgreSQL administration |
|
|
| **File Management** | FileBrowser | Web-based file management |
|
|
| **Container Management** | Portainer | Docker container management |
|
|
|
|
### External Services
|
|
|
|
| Service | Purpose | Integration |
|
|
|---------|---------|-------------|
|
|
| **OpenAI API** | Text generation (GPT models) | API integration |
|
|
| **OpenAI DALL-E** | Image generation | API integration |
|
|
| **Runware API** | Alternative image generation | API integration |
|
|
| **WordPress** | Content publishing | REST API integration |
|
|
| **Stripe** | Payment processing | Webhook integration (planned) |
|
|
|
|
---
|
|
|
|
## Core Architecture Principles
|
|
|
|
### 1. Configuration-Driven Everything
|
|
|
|
**Principle**: Zero HTML/JSX duplication - All UI rendered from configuration.
|
|
|
|
**Implementation**:
|
|
- **Frontend**: Config files in `/config/pages/` and `/config/snippets/`
|
|
- **Backend**: DRF serializers and ViewSet actions
|
|
- **Templates**: 4 universal templates (Dashboard, Table, Form, System)
|
|
|
|
**Benefits**:
|
|
- Single source of truth
|
|
- Easy maintenance
|
|
- Consistent UI/UX
|
|
- Rapid feature development
|
|
|
|
### 2. Multi-Tenancy Foundation
|
|
|
|
**Principle**: Complete account isolation with automatic filtering.
|
|
|
|
**Implementation**:
|
|
- All models inherit `AccountBaseModel`
|
|
- All ViewSets inherit `AccountModelViewSet`
|
|
- Middleware injects account context from JWT
|
|
- Site > Sector hierarchy for content organization
|
|
|
|
**Benefits**:
|
|
- Data security
|
|
- Scalability
|
|
- Resource isolation
|
|
- Simplified access control
|
|
|
|
### 3. Template System (4 Universal Templates)
|
|
|
|
**Principle**: Reusable templates for all page types.
|
|
|
|
| Template | Purpose | Usage |
|
|
|----------|---------|-------|
|
|
| **DashboardTemplate** | Module home pages | KPIs, workflow steps, charts |
|
|
| **TablePageTemplate** | CRUD table pages | Keywords, Clusters, Tasks, etc. |
|
|
| **FormPageTemplate** | Settings/form pages | Settings, Integration, etc. |
|
|
| **SystemPageTemplate** | System/admin pages | Logs, Status, Monitoring |
|
|
|
|
### 4. Unified AI Processor
|
|
|
|
**Principle**: Single interface for all AI operations.
|
|
|
|
**Implementation**:
|
|
- Single `AIProcessor` class handles all AI operations
|
|
- Manual and automated workflows use same functions
|
|
- Action-based routing: 'clustering', 'ideas', 'content_generation', 'image_generation'
|
|
- Account-specific API keys and model configuration
|
|
|
|
**Benefits**:
|
|
- Code reusability
|
|
- Consistent error handling
|
|
- Unified logging
|
|
- Easy to extend
|
|
|
|
### 5. Module-Based Organization
|
|
|
|
**Principle**: Clear module boundaries with shared utilities.
|
|
|
|
**Modules**:
|
|
- **Planner**: Keywords, Clusters, Ideas
|
|
- **Writer**: Tasks, Content, Images
|
|
- **System**: Settings, Prompts, Integration
|
|
- **Billing**: Credits, Transactions, Usage
|
|
|
|
---
|
|
|
|
## System Architecture
|
|
|
|
### High-Level Architecture
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────┐
|
|
│ Client Layer │
|
|
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
|
│ │ Browser │ │ Mobile │ │ Admin │ │
|
|
│ │ (React) │ │ (Future) │ │ Panel │ │
|
|
│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
|
|
└─────────┼──────────────────┼──────────────────┼─────────────┘
|
|
│ │ │
|
|
└──────────────────┼──────────────────┘
|
|
│
|
|
┌────────────────────────────┼──────────────────────────────┐
|
|
│ Reverse Proxy Layer │
|
|
│ ┌───────────────┐ │
|
|
│ │ Caddy │ │
|
|
│ │ (HTTPS/443) │ │
|
|
│ └───────┬───────┘ │
|
|
└────────────────────────────┼──────────────────────────────┘
|
|
│
|
|
┌────────────────────────────┼──────────────────────────────┐
|
|
│ Application Layer │
|
|
│ ┌──────────────┐ ┌──────────────┐ │
|
|
│ │ Frontend │ │ Backend │ │
|
|
│ │ (React) │◄─────────────┤ (Django) │ │
|
|
│ │ Port 8021 │ REST API │ Port 8011 │ │
|
|
│ └──────────────┘ └──────┬───────┘ │
|
|
│ │ │
|
|
│ ┌────────┴────────┐ │
|
|
│ │ Celery Worker │ │
|
|
│ │ (Async Tasks) │ │
|
|
│ └────────┬────────┘ │
|
|
└───────────────────────────────────────┼──────────────────┘
|
|
│
|
|
┌───────────────────────────────────────┼──────────────────┐
|
|
│ Data Layer │
|
|
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
|
│ │ PostgreSQL │ │ Redis │ │ Storage │ │
|
|
│ │ (Database) │ │ (Cache/Broker)│ │ (Files) │ │
|
|
│ └──────────────┘ └──────────────┘ └──────────────┘ │
|
|
└──────────────────────────────────────────────────────────┘
|
|
│
|
|
┌───────────────────────────────────────┼──────────────────┐
|
|
│ External Services │
|
|
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
|
│ │ OpenAI │ │ Runware │ │ WordPress │ │
|
|
│ │ (GPT/DALL-E)│ │ (Images) │ │ (Publish) │ │
|
|
│ └──────────────┘ └──────────────┘ └──────────────┘ │
|
|
└──────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
### Request Flow
|
|
|
|
```
|
|
1. User Request
|
|
↓
|
|
2. Browser (React Frontend)
|
|
↓
|
|
3. Caddy Reverse Proxy (HTTPS Termination)
|
|
↓
|
|
4. Django Backend (API Endpoint)
|
|
↓
|
|
5. AccountContextMiddleware (Account Isolation)
|
|
↓
|
|
6. ViewSet (Business Logic)
|
|
↓
|
|
7. Serializer (Validation)
|
|
↓
|
|
8. Model (Database)
|
|
↓
|
|
9. Response (JSON)
|
|
↓
|
|
10. Frontend (UI Update)
|
|
```
|
|
|
|
### AI Task Flow
|
|
|
|
```
|
|
1. User Action (e.g., "Auto Cluster Keywords")
|
|
↓
|
|
2. Frontend API Call
|
|
↓
|
|
3. Backend Endpoint (ViewSet Action)
|
|
↓
|
|
4. Celery Task Queued
|
|
↓
|
|
5. Task ID Returned to Frontend
|
|
↓
|
|
6. Frontend Polls Progress Endpoint
|
|
↓
|
|
7. Celery Worker Processes Task
|
|
↓
|
|
8. AIProcessor Makes API Calls
|
|
↓
|
|
9. Results Saved to Database
|
|
↓
|
|
10. Progress Updates Sent
|
|
↓
|
|
11. Frontend Displays Results
|
|
```
|
|
|
|
---
|
|
|
|
## Module Organization
|
|
|
|
### Module Structure
|
|
|
|
| Module | Purpose | Models | ViewSets | Tasks |
|
|
|--------|---------|--------|----------|-------|
|
|
| **Planner** | Keyword management & content planning | Keywords, Clusters, ContentIdeas | KeywordViewSet, ClusterViewSet, ContentIdeasViewSet | auto_cluster_keywords_task, auto_generate_ideas_task |
|
|
| **Writer** | Content generation & management | Tasks, Content, Images | TasksViewSet | auto_generate_content_task, auto_generate_images_task |
|
|
| **System** | Settings, prompts, integrations | AIPrompt, IntegrationSettings, AuthorProfile, Strategy | AIPromptViewSet, IntegrationSettingsViewSet, AuthorProfileViewSet | - |
|
|
| **Billing** | Credits, transactions, usage | CreditTransaction, UsageLog | CreditTransactionViewSet, UsageLogViewSet | - |
|
|
| **Auth** | Multi-tenancy, users, accounts | Account, User, Plan, Site, Sector | AccountViewSet, UserViewSet, SiteViewSet, SectorViewSet | - |
|
|
|
|
### Module Dependencies
|
|
|
|
```
|
|
Auth (Core)
|
|
├── Planner (depends on Auth)
|
|
├── Writer (depends on Auth, Planner)
|
|
├── System (depends on Auth)
|
|
└── Billing (depends on Auth)
|
|
```
|
|
|
|
---
|
|
|
|
## Workflows & Functions
|
|
|
|
### Primary Workflows
|
|
|
|
#### 1. Keyword Management Workflow
|
|
|
|
```
|
|
1. Import Keywords (CSV/Manual)
|
|
↓
|
|
2. Keywords Stored in Database
|
|
↓
|
|
3. Filter & Organize Keywords
|
|
↓
|
|
4. Select Keywords for Clustering
|
|
↓
|
|
5. Auto Cluster (AI Function)
|
|
↓
|
|
6. Clusters Created
|
|
↓
|
|
7. Generate Ideas from Clusters
|
|
↓
|
|
8. Content Ideas Created
|
|
```
|
|
|
|
#### 2. Content Generation Workflow
|
|
|
|
```
|
|
1. Select Content Idea
|
|
↓
|
|
2. Create Task
|
|
↓
|
|
3. Auto Generate Content (AI Function)
|
|
↓
|
|
4. Content Generated & Saved
|
|
↓
|
|
5. Review & Edit Content
|
|
↓
|
|
6. Auto Generate Images (AI Function)
|
|
↓
|
|
7. Images Generated & Attached
|
|
↓
|
|
8. Publish to WordPress
|
|
```
|
|
|
|
#### 3. Account Setup Workflow
|
|
|
|
```
|
|
1. User Signs Up
|
|
↓
|
|
2. Account Created
|
|
↓
|
|
3. Default Plan Assigned
|
|
↓
|
|
4. Site Created
|
|
↓
|
|
5. Sectors Created (1-5 per site)
|
|
↓
|
|
6. Integration Settings Configured
|
|
↓
|
|
7. Ready to Use
|
|
```
|
|
|
|
### AI Functions
|
|
|
|
| Function | Module | Purpose | Input | Output |
|
|
|----------|--------|---------|-------|--------|
|
|
| **Auto Cluster Keywords** | Planner | Group related keywords | Keyword IDs | Clusters |
|
|
| **Auto Generate Ideas** | Planner | Generate content ideas | Cluster IDs | Content Ideas |
|
|
| **Auto Generate Content** | Writer | Generate blog posts | Task IDs | HTML Content |
|
|
| **Auto Generate Images** | Writer | Generate images | Task IDs | Images |
|
|
| **Extract Image Prompts** | Writer | Extract prompts from content | Content Text | Image Prompts |
|
|
| **Test OpenAI** | System | Test OpenAI connection | API Key | Connection Status |
|
|
| **Test Runware** | System | Test Runware connection | API Key | Connection Status |
|
|
| **Generate Image (Test)** | System | Test image generation | Prompt | Image URL |
|
|
|
|
### AI Function Execution Flow
|
|
|
|
```
|
|
1. User Initiates AI Function
|
|
↓
|
|
2. Frontend Calls API Endpoint
|
|
↓
|
|
3. Backend Validates Input
|
|
↓
|
|
4. Celery Task Queued
|
|
↓
|
|
5. Task ID Returned
|
|
↓
|
|
6. Frontend Polls Progress
|
|
↓
|
|
7. Celery Worker Executes:
|
|
a. Prepare Data
|
|
b. Build Prompt
|
|
c. Call AI API
|
|
d. Parse Response
|
|
e. Save Results
|
|
↓
|
|
8. Progress Updates Sent
|
|
↓
|
|
9. Task Completes
|
|
↓
|
|
10. Results Displayed
|
|
```
|
|
|
|
---
|
|
|
|
## Data Flow & Processing
|
|
|
|
### Data Models Hierarchy
|
|
|
|
```
|
|
AccountBaseModel
|
|
├── Account
|
|
├── User
|
|
├── Plan
|
|
├── Site
|
|
├── Sector
|
|
└── SiteSectorBaseModel
|
|
├── Keywords
|
|
├── Clusters
|
|
├── ContentIdeas
|
|
├── Tasks
|
|
├── Content
|
|
└── Images
|
|
```
|
|
|
|
### Data Relationships
|
|
|
|
| Parent | Child | Relationship | Constraints |
|
|
|--------|-------|--------------|-------------|
|
|
| Account | User | One-to-Many | N users per account |
|
|
| Account | Site | One-to-Many | N sites per account (plan limit) |
|
|
| Account | Subscription | One-to-One | 1 subscription per account |
|
|
| Subscription | Plan | Many-to-One | 1 plan per subscription |
|
|
| Site | Sector | One-to-Many | 1-5 sectors per site |
|
|
| Sector | Keywords | One-to-Many | N keywords per sector |
|
|
| Sector | Clusters | One-to-Many | N clusters per sector |
|
|
| Sector | ContentIdeas | One-to-Many | N ideas per sector |
|
|
| Sector | Tasks | One-to-Many | N tasks per sector |
|
|
| Cluster | Keywords | Many-to-Many | N keywords per cluster |
|
|
| Cluster | ContentIdeas | One-to-Many | N ideas per cluster |
|
|
| Task | Content | One-to-One | 1 content per task |
|
|
| Task | Images | One-to-Many | N images per task |
|
|
| ContentIdeas | Task | One-to-Many | N tasks per idea |
|
|
|
|
### Data Processing Pipeline
|
|
|
|
```
|
|
Raw Data (CSV/Manual)
|
|
↓
|
|
Import & Validation
|
|
↓
|
|
Database Storage
|
|
↓
|
|
AI Processing (Optional)
|
|
↓
|
|
Enriched Data
|
|
↓
|
|
User Review & Edit
|
|
↓
|
|
Final Data
|
|
↓
|
|
Export/Publish
|
|
```
|
|
|
|
---
|
|
|
|
## Multi-Tenancy Architecture
|
|
|
|
### Account Isolation
|
|
|
|
**Implementation Levels**:
|
|
|
|
1. **Model Level**: All models inherit `AccountBaseModel` with `account` ForeignKey
|
|
2. **ViewSet Level**: All ViewSets inherit `AccountModelViewSet` with automatic filtering
|
|
3. **Middleware Level**: `AccountContextMiddleware` sets `request.account` from JWT
|
|
|
|
### Access Control Matrix
|
|
|
|
| User Role | Account Access | Site Access | Data Access |
|
|
|-----------|----------------|-------------|-------------|
|
|
| Developer | All accounts | All sites | All data |
|
|
| System Bot | All accounts | All sites | All data |
|
|
| Owner | Own account | All sites in account | All data in account |
|
|
| Admin | Own account | All sites in account | All data in account |
|
|
| Editor | Own account | Granted sites only | Data in granted sites |
|
|
| Viewer | Own account | Granted sites only | Read-only in granted sites |
|
|
|
|
### Site/Sector Hierarchy
|
|
|
|
```
|
|
Account
|
|
└── Site 1 (Active)
|
|
├── Sector 1 (Active)
|
|
│ ├── Keywords
|
|
│ ├── Clusters
|
|
│ ├── ContentIdeas
|
|
│ └── Tasks
|
|
├── Sector 2 (Active)
|
|
└── Sector 3 (Inactive)
|
|
└── Site 2 (Active)
|
|
└── Sector 1 (Active)
|
|
```
|
|
|
|
---
|
|
|
|
## API Architecture
|
|
|
|
### API Structure
|
|
|
|
**Base URL**: `/api/v1/`
|
|
|
|
**Module Endpoints**:
|
|
|
|
| Module | Base Path | Resources |
|
|
|--------|-----------|-----------|
|
|
| **Auth** | `/api/v1/auth/` | accounts, users, sites, sectors, plans |
|
|
| **Planner** | `/api/v1/planner/` | keywords, clusters, ideas |
|
|
| **Writer** | `/api/v1/writer/` | tasks, content, images |
|
|
| **System** | `/api/v1/system/` | prompts, integrations, author-profiles, strategies |
|
|
| **Billing** | `/api/v1/billing/` | credits, transactions, usage |
|
|
|
|
### API Endpoints
|
|
|
|
#### Planner Endpoints
|
|
|
|
| Method | Endpoint | Purpose |
|
|
|--------|----------|---------|
|
|
| GET | `/api/v1/planner/keywords/` | List keywords |
|
|
| POST | `/api/v1/planner/keywords/` | Create keyword |
|
|
| GET | `/api/v1/planner/keywords/{id}/` | Get keyword |
|
|
| PUT | `/api/v1/planner/keywords/{id}/` | Update keyword |
|
|
| DELETE | `/api/v1/planner/keywords/{id}/` | Delete keyword |
|
|
| POST | `/api/v1/planner/keywords/auto_cluster/` | Auto-cluster keywords |
|
|
| POST | `/api/v1/planner/keywords/bulk_delete/` | Bulk delete |
|
|
| GET | `/api/v1/planner/keywords/export_csv/` | Export CSV |
|
|
| POST | `/api/v1/planner/keywords/import_csv/` | Import CSV |
|
|
| GET | `/api/v1/planner/clusters/` | List clusters |
|
|
| POST | `/api/v1/planner/clusters/auto_generate_ideas/` | Generate ideas |
|
|
| GET | `/api/v1/planner/ideas/` | List ideas |
|
|
|
|
#### Writer Endpoints
|
|
|
|
| Method | Endpoint | Purpose |
|
|
|--------|----------|---------|
|
|
| GET | `/api/v1/writer/tasks/` | List tasks |
|
|
| POST | `/api/v1/writer/tasks/auto_generate_content/` | Generate content |
|
|
| POST | `/api/v1/writer/tasks/auto_generate_images/` | Generate images |
|
|
|
|
#### System Endpoints
|
|
|
|
| Method | Endpoint | Purpose |
|
|
|--------|----------|---------|
|
|
| GET | `/api/v1/system/settings/integrations/{id}/` | Get integration |
|
|
| PUT | `/api/v1/system/settings/integrations/{id}/` | Save integration |
|
|
| POST | `/api/v1/system/settings/integrations/{id}/test_openai/` | Test OpenAI |
|
|
| POST | `/api/v1/system/settings/integrations/{id}/test_runware/` | Test Runware |
|
|
| GET | `/api/v1/system/settings/task_progress/{task_id}/` | Get task progress |
|
|
|
|
### Authentication Flow
|
|
|
|
```
|
|
1. User Signs In
|
|
↓
|
|
2. Backend Validates Credentials
|
|
↓
|
|
3. JWT Token Generated
|
|
↓
|
|
4. Token Returned to Frontend
|
|
↓
|
|
5. Frontend Stores Token (localStorage)
|
|
↓
|
|
6. Frontend Includes Token in Requests
|
|
↓
|
|
7. Backend Validates Token
|
|
↓
|
|
8. Account Context Set
|
|
↓
|
|
9. Request Processed
|
|
```
|
|
|
|
### Response Format
|
|
|
|
**Success Response**:
|
|
```json
|
|
{
|
|
"success": true,
|
|
"data": { ... },
|
|
"message": "Optional message"
|
|
}
|
|
```
|
|
|
|
**Error Response**:
|
|
```json
|
|
{
|
|
"success": false,
|
|
"message": "Error message",
|
|
"errors": { ... }
|
|
}
|
|
```
|
|
|
|
**Pagination Response**:
|
|
```json
|
|
{
|
|
"count": 100,
|
|
"next": "http://api.example.com/api/v1/resource/?page=2",
|
|
"previous": null,
|
|
"results": [ ... ]
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Frontend Architecture
|
|
|
|
### Component Hierarchy
|
|
|
|
```
|
|
App
|
|
└── AppLayout
|
|
├── Sidebar (Navigation)
|
|
├── Header (User Menu, Notifications)
|
|
└── Main Content
|
|
└── Page Component
|
|
└── Template (DashboardTemplate, TablePageTemplate, etc.)
|
|
└── Components (DataTable, Filters, etc.)
|
|
```
|
|
|
|
### State Management
|
|
|
|
| Store | Purpose | State |
|
|
|-------|---------|-------|
|
|
| **authStore** | Authentication | user, token, isAuthenticated |
|
|
| **siteStore** | Site selection | activeSite, sites |
|
|
| **sectorStore** | Sector selection | activeSector, sectors |
|
|
| **plannerStore** | Planner module | module-specific state |
|
|
| **aiRequestLogsStore** | AI logs | request/response logs |
|
|
| **pageSizeStore** | Table preferences | pageSize |
|
|
|
|
### Routing Structure
|
|
|
|
| Route | Component | Template |
|
|
|-------|-----------|----------|
|
|
| `/` | Home | DashboardTemplate |
|
|
| `/planner` | PlannerDashboard | DashboardTemplate |
|
|
| `/planner/keywords` | Keywords | TablePageTemplate |
|
|
| `/planner/clusters` | Clusters | TablePageTemplate |
|
|
| `/planner/ideas` | Ideas | TablePageTemplate |
|
|
| `/writer` | WriterDashboard | DashboardTemplate |
|
|
| `/writer/tasks` | Tasks | TablePageTemplate |
|
|
| `/thinker` | ThinkerDashboard | DashboardTemplate |
|
|
| `/thinker/prompts` | Prompts | TablePageTemplate |
|
|
| `/billing/credits` | Credits | FormPageTemplate |
|
|
| `/settings` | Settings | FormPageTemplate |
|
|
|
|
### Configuration System
|
|
|
|
**Page-Local Config**: `/config/pages/`
|
|
- Page-specific table, filter, and action configurations
|
|
|
|
**Shared Snippets**: `/config/snippets/`
|
|
- Reusable column definitions
|
|
- Reusable filter definitions
|
|
- Reusable action definitions
|
|
|
|
---
|
|
|
|
## Backend Architecture
|
|
|
|
### Model Inheritance Hierarchy
|
|
|
|
```
|
|
models.Model
|
|
└── AccountBaseModel (adds account ForeignKey)
|
|
└── SiteSectorBaseModel (adds site, sector ForeignKeys)
|
|
└── Keywords, Clusters, ContentIdeas, Tasks, etc.
|
|
```
|
|
|
|
### ViewSet Inheritance Hierarchy
|
|
|
|
```
|
|
viewsets.ModelViewSet
|
|
└── AccountModelViewSet (adds account filtering)
|
|
└── SiteSectorModelViewSet (adds site/sector filtering)
|
|
└── KeywordViewSet, ClusterViewSet, TasksViewSet, etc.
|
|
```
|
|
|
|
### Middleware Stack
|
|
|
|
1. **SecurityMiddleware**: Django security middleware
|
|
2. **SessionMiddleware**: Session management
|
|
3. **AuthenticationMiddleware**: User authentication
|
|
4. **AccountContextMiddleware**: Sets `request.account` from JWT
|
|
5. **ResourceTrackerMiddleware**: Tracks API request metrics
|
|
|
|
### Celery Task Architecture
|
|
|
|
**Broker**: Redis
|
|
|
|
**Workers**: Separate Celery worker processes
|
|
|
|
**Task Structure**:
|
|
```python
|
|
@shared_task(bind=True)
|
|
def my_task(self, ...):
|
|
# Update progress
|
|
self.update_state(state='PROGRESS', meta={...})
|
|
# Do work
|
|
result = do_work()
|
|
# Return result
|
|
return result
|
|
```
|
|
|
|
**Progress Tracking**:
|
|
- Frontend polls `/api/v1/system/settings/task_progress/{task_id}/`
|
|
- Backend returns task state and meta information
|
|
- Progress displayed in modal
|
|
|
|
---
|
|
|
|
## AI Framework
|
|
|
|
### AI Framework Architecture
|
|
|
|
```
|
|
BaseAIFunction (Abstract)
|
|
├── AutoClusterFunction
|
|
├── AutoGenerateIdeasFunction
|
|
├── AutoGenerateContentFunction
|
|
└── AutoGenerateImagesFunction
|
|
|
|
AIEngine (Orchestrator)
|
|
├── INIT Phase (0-10%)
|
|
├── PREP Phase (10-25%)
|
|
├── AI_CALL Phase (25-60%)
|
|
├── PARSE Phase (60-80%)
|
|
├── SAVE Phase (80-95%)
|
|
└── DONE Phase (95-100%)
|
|
|
|
AIProcessor (Wrapper)
|
|
├── cluster_keywords()
|
|
├── generate_ideas()
|
|
├── generate_content()
|
|
├── extract_image_prompts()
|
|
└── generate_image()
|
|
```
|
|
|
|
### AI Function Execution
|
|
|
|
```
|
|
1. User Action
|
|
↓
|
|
2. API Endpoint
|
|
↓
|
|
3. run_ai_task.delay()
|
|
↓
|
|
4. AIEngine.execute()
|
|
↓
|
|
5. Function.prepare()
|
|
↓
|
|
6. Function.build_prompt()
|
|
↓
|
|
7. AIProcessor API Call
|
|
↓
|
|
8. Function.parse_response()
|
|
↓
|
|
9. Function.save_output()
|
|
↓
|
|
10. Task Complete
|
|
```
|
|
|
|
### Progress Tracking
|
|
|
|
**Progress Endpoint**: `/api/v1/system/settings/task_progress/{task_id}/`
|
|
|
|
**Response Format**:
|
|
```json
|
|
{
|
|
"state": "PROGRESS",
|
|
"meta": {
|
|
"phase": "AI_CALL",
|
|
"percentage": 45,
|
|
"message": "Processing...",
|
|
"request_steps": [...],
|
|
"response_steps": [...],
|
|
"cost": 0.000123,
|
|
"tokens": 1500
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Infrastructure & Deployment
|
|
|
|
### Docker Architecture
|
|
|
|
**Two-Stack Architecture**:
|
|
|
|
1. **Infrastructure Stack** (`igny8-infra`):
|
|
- PostgreSQL
|
|
- Redis
|
|
- pgAdmin
|
|
- FileBrowser
|
|
- Caddy
|
|
|
|
2. **Application Stack** (`igny8-app`):
|
|
- Backend (Django)
|
|
- Frontend (React)
|
|
- Celery Worker
|
|
- Celery Beat
|
|
|
|
### Network Architecture
|
|
|
|
**Single Network**: `igny8_net` (bridge network)
|
|
|
|
**Container Communication**: Service names as hostnames
|
|
|
|
### Port Allocation
|
|
|
|
| Service | External Port | Internal Port | Purpose |
|
|
|---------|---------------|---------------|---------|
|
|
| Backend | 8011 | 8010 | Django API |
|
|
| Frontend | 8021 | 5173 | React Dev Server |
|
|
| PostgreSQL | - | 5432 | Database |
|
|
| Redis | - | 6379 | Cache/Broker |
|
|
| pgAdmin | 5050 | 80 | DB Admin |
|
|
| FileBrowser | 8080 | 80 | File Manager |
|
|
| Caddy | 80, 443 | 80, 443 | Reverse Proxy |
|
|
|
|
### Volume Management
|
|
|
|
| Volume | Purpose | Location |
|
|
|--------|---------|----------|
|
|
| `pgdata` | PostgreSQL data | `/var/lib/docker/volumes/igny8-infra_pgdata/` |
|
|
| `redisdata` | Redis data | `/var/lib/docker/volumes/igny8-infra_redisdata/` |
|
|
| `caddy_data` | SSL certificates | `/var/lib/docker/volumes/igny8-infra_caddy_data/` |
|
|
| Application Code | Source code | `/data/app/igny8/` (host mount) |
|
|
|
|
---
|
|
|
|
## Security Architecture
|
|
|
|
### Authentication
|
|
|
|
**Methods**:
|
|
- JWT (JSON Web Tokens) - Primary method
|
|
- Session-based auth - Fallback for admin
|
|
|
|
**Flow**:
|
|
1. User signs in → Backend returns JWT token
|
|
2. Frontend stores token in localStorage
|
|
3. Frontend includes token in `Authorization: Bearer {token}` header
|
|
4. Backend middleware validates token and sets `request.user` and `request.account`
|
|
|
|
### Authorization
|
|
|
|
**Role-Based Access Control (RBAC)**:
|
|
- `developer`: Full system access
|
|
- `owner`: Full account access
|
|
- `admin`: Account admin access
|
|
- `editor`: Content editing access
|
|
- `viewer`: Read-only access
|
|
|
|
**Access Control**:
|
|
- Account-level: Automatic filtering by `request.account`
|
|
- Site-level: Filtering by `user.get_accessible_sites()`
|
|
- Action-level: Permission checks in ViewSet actions
|
|
|
|
### Data Isolation
|
|
|
|
**Account Isolation**:
|
|
- All queries filtered by account
|
|
- Admin/Developer override for system accounts
|
|
|
|
**Site Access Control**:
|
|
- Users can only access granted sites
|
|
- Admin/Developer override for all sites
|
|
|
|
### API Security
|
|
|
|
- **CORS**: Configured for frontend domain
|
|
- **CSRF**: Enabled for session-based auth
|
|
- **Input Validation**: DRF serializers validate all input
|
|
- **Rate Limiting**: (Future implementation)
|
|
|
|
---
|
|
|
|
## Database Architecture
|
|
|
|
### Core Tables
|
|
|
|
| Table | Purpose | Key Fields |
|
|
|-------|---------|------------|
|
|
| `igny8_accounts` | Account information | name, slug, owner, plan, credits, status |
|
|
| `igny8_users` | User accounts | email, account, role |
|
|
| `igny8_plans` | Subscription plans | name, price, limits, features |
|
|
| `igny8_subscriptions` | Active subscriptions | account, plan, status, period |
|
|
| `igny8_sites` | Sites within accounts | name, slug, account, industry, status |
|
|
| `igny8_sectors` | Sectors within sites | name, slug, site, status |
|
|
| `igny8_industries` | Global industry templates | name, slug, description |
|
|
| `igny8_industry_sectors` | Industry sector templates | name, slug, industry |
|
|
|
|
### Planner Tables
|
|
|
|
| Table | Purpose | Key Fields |
|
|
|-------|---------|------------|
|
|
| `igny8_keywords` | Keywords | keyword, volume, difficulty, intent, cluster |
|
|
| `igny8_clusters` | Keyword clusters | name, description, keywords_count, volume |
|
|
| `igny8_content_ideas` | Content ideas | idea_title, description, cluster, status |
|
|
|
|
### Writer Tables
|
|
|
|
| Table | Purpose | Key Fields |
|
|
|-------|---------|------------|
|
|
| `igny8_tasks` | Content generation tasks | title, description, cluster, idea, status, content |
|
|
| `igny8_content` | Generated content | task, html_content, word_count |
|
|
| `igny8_images` | Generated images | task, image_type, image_url, prompt |
|
|
|
|
### System Tables
|
|
|
|
| Table | Purpose | Key Fields |
|
|
|-------|---------|------------|
|
|
| `igny8_ai_prompts` | AI prompt templates | prompt_type, prompt_value, account |
|
|
| `igny8_integration_settings` | API keys and configuration | integration_type, config, account |
|
|
| `igny8_author_profiles` | Writing style profiles | name, description, tone, language |
|
|
| `igny8_strategies` | Content strategies | name, description, sector, prompt_types |
|
|
|
|
### Billing Tables
|
|
|
|
| Table | Purpose | Key Fields |
|
|
|-------|---------|------------|
|
|
| `igny8_credit_transactions` | Credit transactions | account, transaction_type, amount, balance_after |
|
|
| `igny8_credit_usage_logs` | Usage tracking | account, operation_type, credits_used, cost_usd |
|
|
|
|
### Indexes
|
|
|
|
**Account Isolation**: All tables have indexes on `account`
|
|
|
|
**Site/Sector Filtering**: Tables with site/sector have composite indexes on `(account, site, sector)`
|
|
|
|
**Performance**: Indexes on frequently queried fields (status, created_at, etc.)
|
|
|
|
---
|
|
|
|
## Integration Points
|
|
|
|
### External API Integrations
|
|
|
|
| Service | Integration Type | Purpose | Configuration |
|
|
|---------|------------------|---------|---------------|
|
|
| **OpenAI** | REST API | Text generation (GPT) | API key in IntegrationSettings |
|
|
| **OpenAI DALL-E** | REST API | Image generation | API key in IntegrationSettings |
|
|
| **Runware** | REST API | Alternative image generation | API key in IntegrationSettings |
|
|
| **WordPress** | REST API | Content publishing | wp_url, wp_username, wp_app_password in Site model |
|
|
|
|
### Integration Flow
|
|
|
|
```
|
|
1. User Configures Integration
|
|
↓
|
|
2. API Key Stored in IntegrationSettings
|
|
↓
|
|
3. Test Connection (Optional)
|
|
↓
|
|
4. Integration Active
|
|
↓
|
|
5. AI Functions Use Integration
|
|
↓
|
|
6. API Calls Made
|
|
↓
|
|
7. Results Returned
|
|
```
|
|
|
|
---
|
|
|
|
## System Diagrams
|
|
|
|
### System Component Diagram
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────┐
|
|
│ Frontend │
|
|
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
|
|
│ │ React │ │ Zustand │ │ Vite │ │
|
|
│ │ (UI) │ │ (State) │ │ (Build) │ │
|
|
│ └────────────┘ └────────────┘ └────────────┘ │
|
|
└───────────────────────────┬─────────────────────────────────┘
|
|
│ HTTP/REST
|
|
┌───────────────────────────┴─────────────────────────────────┐
|
|
│ Backend │
|
|
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
|
|
│ │ Django │ │ DRF │ │ Celery │ │
|
|
│ │ (Framework)│ │ (API) │ │ (Tasks) │ │
|
|
│ └────────────┘ └────────────┘ └────────────┘ │
|
|
└───────────────────────────┬─────────────────────────────────┘
|
|
│
|
|
┌───────────────────────────┴─────────────────────────────────┐
|
|
│ Database │
|
|
│ ┌────────────┐ ┌────────────┐ │
|
|
│ │ PostgreSQL │ │ Redis │ │
|
|
│ │ (Data) │ │ (Cache) │ │
|
|
│ └────────────┘ └────────────┘ │
|
|
└─────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
### Data Flow Diagram
|
|
|
|
```
|
|
User Action
|
|
↓
|
|
Frontend (React)
|
|
↓
|
|
API Request (REST)
|
|
↓
|
|
Caddy (Reverse Proxy)
|
|
↓
|
|
Django Backend
|
|
↓
|
|
AccountContextMiddleware (Account Isolation)
|
|
↓
|
|
ViewSet (Business Logic)
|
|
↓
|
|
Serializer (Validation)
|
|
↓
|
|
Model (Database)
|
|
↓
|
|
PostgreSQL
|
|
↓
|
|
Response (JSON)
|
|
↓
|
|
Frontend (UI Update)
|
|
```
|
|
|
|
### AI Function Flow Diagram
|
|
|
|
```
|
|
User Initiates AI Function
|
|
↓
|
|
Frontend API Call
|
|
↓
|
|
Backend Endpoint
|
|
↓
|
|
Celery Task Queued
|
|
↓
|
|
Task ID Returned
|
|
↓
|
|
Frontend Polls Progress
|
|
↓
|
|
Celery Worker Executes
|
|
├── Prepare Data
|
|
├── Build Prompt
|
|
├── Call AI API (OpenAI/Runware)
|
|
├── Parse Response
|
|
└── Save Results
|
|
↓
|
|
Progress Updates
|
|
↓
|
|
Task Complete
|
|
↓
|
|
Results Displayed
|
|
```
|
|
|
|
### Multi-Tenancy Flow Diagram
|
|
|
|
```
|
|
Request with JWT Token
|
|
↓
|
|
AccountContextMiddleware
|
|
├── Extract Account ID from JWT
|
|
├── Load Account Object
|
|
└── Set request.account
|
|
↓
|
|
ViewSet.get_queryset()
|
|
├── Check User Role
|
|
├── Filter by Account (if not admin/developer)
|
|
└── Filter by Accessible Sites (if not owner/admin)
|
|
↓
|
|
Database Query
|
|
↓
|
|
Results (Account-Isolated)
|
|
```
|
|
|
|
---
|
|
|
|
## Summary
|
|
|
|
The IGNY8 platform is built on a modern, scalable architecture that provides:
|
|
|
|
1. **Multi-Tenancy**: Complete account isolation with automatic filtering
|
|
2. **Configuration-Driven UI**: Zero duplication, single source of truth
|
|
3. **Unified AI Framework**: Single interface for all AI operations
|
|
4. **Module-Based Organization**: Clear boundaries with shared utilities
|
|
5. **RESTful API**: Consistent API design with DRF
|
|
6. **Modern Frontend**: React + TypeScript with Zustand state management
|
|
7. **Scalable Backend**: Django + Celery for async processing
|
|
8. **Security First**: JWT auth, RBAC, data isolation
|
|
9. **Docker Deployment**: Containerized for easy deployment and scaling
|
|
10. **Comprehensive Logging**: Detailed tracking for all operations
|
|
|
|
This architecture ensures scalability, maintainability, and extensibility while providing a robust foundation for the IGNY8 platform.
|
|
|
|
---
|
|
|
|
**Document Version**: 1.0
|
|
**Last Updated**: 2025-01-XX
|
|
**Maintained By**: IGNY8 Development Team
|
|
|