# AutoModerate - Content Moderation Platform
A comprehensive Flask-based content moderation platform that leverages OpenAI for intelligent content analysis with real-time WebSocket updates and multi-tenant project management.
## Key Features
- **Multi-Tenant Project Management**: Project-based organization with member management and role-based access
- **Intelligent Moderation Pipeline**: Keyword, regex, and AI-powered content analysis with parallel processing
- **OpenAI Integration**: Advanced GPT models with smart chunking and result caching for optimal performance
- **Real-time Updates**: WebSocket-powered live notifications for moderation results
- **Comprehensive API**: RESTful API with authentication, pagination, and detailed analytics
- **Performance Optimized**: Connection pooling, caching layers, and early-exit processing
- **Manual Review System**: Low-confidence results automatically flagged for human review
## Quick Start
Installation & Setup
### Prerequisites
- Python 3.11+
- OpenAI API key
### Setup Steps
```bash
# Clone and setup environment
git clone https://github.com/Bentlybro/AutoModerate
cd AutoModerate
python -m venv venv
# Windows
venv\Scripts\activate
# Linux/macOS
source venv/bin/activate
# Install dependencies
pip install -r requirements.txt
# Configuration
cp .env.example .env
# Edit .env and add your OPENAI_API_KEY
# Start development server
python run.py
```
**Access Points:**
- Web Interface: http://localhost:6217
- Default Login: admin@example.com / admin123
- API Documentation: http://localhost:6217/api/docs
## Architecture
System Architecture & Technology Stack
### Core Technology Stack
| Component | Technology | Purpose |
|-----------|------------|---------|
| **Backend** | Flask 3.1.3 + Flask-SocketIO | Web framework with real-time capabilities |
| **Database** | SQLAlchemy (SQLite dev, PostgreSQL prod) | ORM with connection pooling |
| **AI Integration** | OpenAI API (GPT models) | Content analysis and moderation |
| **Authentication** | Flask-Login + API Keys | Session-based web auth + API authentication |
| **Real-time** | WebSocket (Flask-SocketIO) | Live moderation result updates |
| **Caching** | Multi-layer caching | Rule caching + AI result caching |
### Application Structure
```
AutoModerate/
├── run.py # Application entry point (port 6217)
├── requirements.txt # Python dependencies
├── .env.example # Example environment configuration
├── .pre-commit-config.yaml # Pre-commit hooks configuration
├── README.md # Main documentation
├── CLAUDE.md # Claude Code project instructions
│
├── config/ # Configuration files
│ ├── config.py # Environment-based configuration
│ └── default_rules.py # Default moderation rules
│
├── app/ # Main application directory
│ ├── __init__.py # Flask app factory with database initialization
│ │
│ ├── models/ # SQLAlchemy database models
│ │ ├── __init__.py # Models package initialization
│ │ ├── user.py # User authentication and management
│ │ ├── project.py # Projects with member management
│ │ ├── api_key.py # API authentication tokens
│ │ ├── api_user.py # API user tracking
│ │ ├── content.py # Content submissions for moderation
│ │ ├── moderation_rule.py # Custom moderation rules
│ │ ├── moderation_result.py# Moderation decisions and metadata
│ │ └── system_settings.py # System-wide configuration settings
│ │
│ ├── routes/ # Blueprint-based routing
│ │ ├── __init__.py # Routes package initialization
│ │ ├── auth.py # Authentication (login/register/profile)
│ │ ├── dashboard.py # Web interface for project management
│ │ ├── api.py # RESTful API for content moderation
│ │ ├── websocket.py # Real-time WebSocket endpoints
│ │ ├── admin.py # Admin interface for system management
│ │ ├── manual_review.py # Human review interface
│ │ └── monitoring.py # System monitoring and health checks
│ │
│ ├── services/ # Business logic layer
│ │ ├── __init__.py # Services package initialization
│ │ ├── moderation_orchestrator.py # Main workflow coordinator
│ │ ├── database_service.py # Centralized database operations
│ │ ├── error_tracker.py # Error tracking and logging
│ │ │
│ │ ├── ai/ # OpenAI integration services
│ │ │ ├── __init__.py # AI services initialization
│ │ │ ├── ai_moderator.py # AI moderation strategies with chunking
│ │ │ ├── openai_client.py # OpenAI client management
│ │ │ └── result_cache.py # AI result caching
│ │ │
│ │ ├── moderation/ # Core moderation logic
│ │ │ ├── __init__.py # Moderation services initialization
│ │ │ ├── rule_processor.py # Rule evaluation (keyword/regex/AI)
│ │ │ └── websocket_notifier.py # Real-time update handling
│ │ │
│ │ └── notifications/ # Notification services
│ │ ├── __init__.py # Notifications initialization
│ │ └── discord_notifier.py # Discord webhook notifications
│ │
│ ├── schemas/ # Request/Response schemas
│ │ ├── __init__.py # Schemas package initialization
│ │ └── api_schemas.py # API validation schemas
│ │
│ ├── utils/ # Utility functions
│ │ ├── __init__.py # Utils package initialization
│ │ ├── error_handlers.py # Error handling utilities
│ │ └── project_access.py # Project access control helpers
│ │
│ ├── templates/ # Jinja2 templates for web interface
│ │ ├── base.html # Base template with common layout
│ │ │
│ │ ├── auth/ # Authentication templates
│ │ │ ├── login.html # Login page
│ │ │ ├── register.html # Registration page
│ │ │ └── profile.html # User profile page
│ │ │
│ │ ├── dashboard/ # Dashboard templates
│ │ │ ├── index.html # Dashboard home
│ │ │ ├── projects.html # Projects list
│ │ │ ├── project_detail.html # Project overview
│ │ │ ├── project_settings.html # Project configuration
│ │ │ ├── project_analytics.html # Project statistics
│ │ │ ├── create_project.html # New project form
│ │ │ ├── api_keys.html # API keys management
│ │ │ ├── rules.html # Rules list
│ │ │ ├── create_rule.html# Rule creation form
│ │ │ ├── content.html # Content moderation history
│ │ │ └── members.html # Project members management
│ │ │
│ │ ├── admin/ # Admin templates
│ │ │ ├── index.html # Admin dashboard
│ │ │ ├── users.html # User management
│ │ │ ├── user_detail.html# User details
│ │ │ ├── projects.html # All projects overview
│ │ │ ├── analytics.html # System analytics
│ │ │ └── system_health.html # System health monitoring
│ │ │
│ │ ├── manual_review/ # Manual review templates
│ │ │ ├── index.html # Review queue
│ │ │ ├── review_content.html # Content review interface
│ │ │ ├── api_users.html # API users list
│ │ │ └── api_user_detail.html # API user statistics
│ │ │
│ │ └── api/ # API documentation templates
│ │ └── docs.html # Interactive API documentation
│ │
│ └── static/ # Static assets (CSS, JS)
│ ├── css/ # Stylesheets
│ │ ├── core/ # Core styles
│ │ │ ├── layout.css # Base layout styles
│ │ │ └── dark-mode.css # Dark mode theme
│ │ ├── components/ # Reusable components
│ │ │ ├── forms.css # Form styles
│ │ │ ├── modals.css # Modal dialog styles
│ │ │ └── tables.css # Table styles
│ │ ├── dashboard/ # Dashboard-specific styles
│ │ │ ├── project_detail.css # Project detail page
│ │ │ └── rules.css # Rules page styles
│ │ ├── api/ # API documentation styles
│ │ │ └── docs.css # API docs styling
│ │ └── utilities/ # Utility styles
│ │ └── responsive.css # Responsive design utilities
│ │
│ └── js/ # JavaScript files
│ ├── base.js # Global JavaScript utilities
│ ├── auth/ # Authentication scripts
│ │ └── profile.js # Profile page functionality
│ ├── dashboard/ # Dashboard scripts
│ │ ├── project_detail.js # Project detail page
│ │ ├── project_settings.js # Project settings
│ │ ├── api_keys.js # API key management
│ │ ├── rules.js # Rules management
│ │ ├── create_rule.js # Rule creation form
│ │ ├── content.js # Content viewing
│ │ └── members.js # Member management
│ └── api/ # API documentation scripts
│ └── docs.js # Interactive API testing
│
├── tests/ # Test suite
│ └── e2e_test.py # End-to-end integration tests
│
├── docs/ # Additional documentation
│ ├── README.md # Documentation index
│ ├── api/ # API documentation
│ │ ├── overview.md # API overview
│ │ ├── moderation.md # Moderation endpoints
│ │ ├── statistics.md # Statistics endpoints
│ │ └── websockets.md # WebSocket documentation
│ └── guides/ # Implementation guides
│ ├── installation.md # Installation guide
│ └── architecture.md # Architecture details
│
├── docker/ # Docker development setup
│ ├── Dockerfile # Development Docker image
│ ├── docker-compose.yml # Docker Compose configuration
│ ├── .env.docker.example # Docker environment template
│ └── README.md # Docker deployment guide
│
└── deploy/ # Production deployment
├── Dockerfile # Production Docker image
├── cloudbuild.yaml # Google Cloud Build configuration
└── README.md # Deployment documentation
```
### Content Moderation Pipeline
```mermaid
flowchart TD
A[Client Application] -->|POST /api/moderate
content + metadata| B[AutoModerate API]
B --> C[Validate API Key
& Extract Project]
C --> D[Store Content in Database]
D --> E[Token Analysis &
Chunking Decision]
E --> F{Rule Processing}
F --> G[Fast Rules
Keyword/Regex]
G --> H{Match Found?}
H -->|Yes| M[Generate Decision]
H -->|No| I[AI Rules
Parallel Processing]
I --> J[OpenAI API Call #1
w/ caching]
I --> K[OpenAI API Call #2
w/ caching]
J --> L{First Match or
All Processed}
K --> L
L --> M
M --> N{Low Confidence?
< 0.3}
N -->|Yes| O[Flag for Manual Review]
N -->|No| P[Final Decision
approve/reject/flag]
O --> Q[Save Result to DB
+ WebSocket Notify]
P --> Q
Q --> R[Return Response to Client]
style A fill:#4A90E2,stroke:#2E5C8A,stroke-width:2px,color:#fff
style B fill:#F5A623,stroke:#C47F1A,stroke-width:2px,color:#fff
style C fill:#7B68EE,stroke:#5A4DB5,stroke-width:2px,color:#fff
style D fill:#00BFA5,stroke:#008C7A,stroke-width:2px,color:#fff
style E fill:#9013FE,stroke:#6B0FBF,stroke-width:2px,color:#fff
style G fill:#FF6B6B,stroke:#CC5555,stroke-width:2px,color:#fff
style H fill:#FF8C00,stroke:#CC7000,stroke-width:2px,color:#fff
style I fill:#E91E63,stroke:#B71850,stroke-width:2px,color:#fff
style J fill:#EC407A,stroke:#BD3361,stroke-width:2px,color:#fff
style K fill:#EC407A,stroke:#BD3361,stroke-width:2px,color:#fff
style L fill:#F06292,stroke:#C04F75,stroke-width:2px,color:#fff
style M fill:#4CAF50,stroke:#3D8B40,stroke-width:2px,color:#fff
style N fill:#FF9800,stroke:#CC7A00,stroke-width:2px,color:#fff
style O fill:#F57C00,stroke:#C46300,stroke-width:2px,color:#fff
style P fill:#8BC34A,stroke:#6F9C3B,stroke-width:2px,color:#000
style Q fill:#9C27B0,stroke:#7D1F8D,stroke-width:2px,color:#fff
style R fill:#2196F3,stroke:#1A78C2,stroke-width:2px,color:#fff
```
**Processing Flow:**
1. **Content Submission** - API receives content via POST /api/moderate
2. **Token Analysis** - Content size analyzed for chunking decisions
3. **Rule Processing** - Priority-based rule evaluation:
- Fast rules (keyword/regex) processed first for early exit
- AI rules processed in parallel with ThreadPoolExecutor
4. **Decision Making** - First matching rule determines outcome
5. **Manual Review** - Low confidence results automatically flagged
6. **Database Save** - Results stored with WebSocket notifications
## API Usage
API Reference & Examples
### Authentication
All API requests require an API key in the header:
```bash
X-API-Key: am_your-api-key-here
```
### Content Moderation
**Submit Content for Moderation**
```bash
curl -X POST \
-H "Content-Type: application/json" \
-H "X-API-Key: am_your-api-key" \
-d '{
"type": "text",
"content": "Content to moderate",
"metadata": {
"source": "user_comment",
"user_id": "external_user_123"
}
}' \
http://localhost:6217/api/moderate
```
**Response Format:**
```json
{
"success": true,
"content_id": "uuid-here",
"status": "approved|rejected|flagged",
"moderation_results": [
{
"decision": "approved",
"confidence": 0.95,
"reason": "Content passed all moderation checks",
"moderator_type": "rule|ai|manual",
"processing_time": 0.23
}
]
}
```
### Additional Endpoints
| Method | Endpoint | Description | Parameters |
|--------|----------|-------------|------------|
| `GET` | `/api/content/` | Get specific content details | - |
| `GET` | `/api/content` | List content with pagination | `page`, `per_page`, `status` |
| `GET` | `/api/stats` | Get project statistics | - |
| `GET` | `/api/health` | Service health check | - |
| `GET` | `/api/docs` | API documentation | - |
## Moderation Rules
Rule Types & Configuration
### Rule Types
| Type | Processing Speed | Use Case | Configuration |
|------|-----------------|----------|---------------|
| **Keyword** | Fast | Simple word blocking | `keywords` list, `case_sensitive` |
| **Regex** | Fast | Pattern matching | `pattern`, `flags` (i/m/s) |
| **AI Prompt** | Slow | Custom AI analysis | Custom `prompt` text |
### Rule Processing
- **Priority-based**: Rules processed in order of priority
- **Early Exit**: Processing stops at first matching rule
- **Parallel AI**: AI rules processed concurrently for optimal performance
- **Manual Review**: Low confidence results (<0.3) automatically flagged
### Creating Rules
1. Navigate to your project dashboard
2. Select "Moderation Rules"
3. Click "Create Rule"
4. Configure rule type and parameters
5. Set priority (lower numbers = higher priority)
6. Choose action: approve, reject, or flag for manual review
## Configuration
Environment Variables & Settings
### Required Environment Variables
```bash
# OpenAI Configuration (Required)
OPENAI_API_KEY=sk-your-openai-api-key
# Optional OpenAI Settings
OPENAI_CHAT_MODEL=gpt-5-nano-2025-08-07 # Default model
OPENAI_CONTEXT_WINDOW=400000 # Model context window
OPENAI_MAX_OUTPUT_TOKENS=128000 # Maximum output tokens
# Database Configuration
DATABASE_URL=sqlite:///automoderate.db # SQLite for dev
# DATABASE_URL=postgresql://user:pass@host/db # PostgreSQL for prod
# Flask Configuration
FLASK_CONFIG=default # Environment mode
SECRET_KEY=auto-generated # Session security
ADMIN_EMAIL=admin@example.com # Default admin
ADMIN_PASSWORD=admin123 # Default password
# Debug Settings
SQL_DEBUG=False # Enable SQL query logging
```
### Database Connection Pooling
**Development Configuration:**
- Pool Size: 3 base connections
- Max Overflow: 5 additional connections
- Connection Timeout: 20 seconds
- Connection Lifetime: 30 minutes
**Production Configuration:**
- Pool Size: 10 base connections
- Max Overflow: 20 additional connections
- Connection Timeout: 30 seconds
- Health Checks: Enabled
## Performance & Optimization
Performance Features
### AI Processing Optimizations
- **Parallel Processing**: AI rules processed concurrently with ThreadPoolExecutor
- **Early Exit**: Processing stops at first rule match
- **Smart Chunking**: Large content automatically split at sentence boundaries
- **Result Caching**: AI results cached to reduce duplicate API calls
- **Connection Pooling**: Optimized HTTP client with 200 keepalive connections
### Processing Times
- **Fast Rules** (keyword/regex): ~50-200ms
- **AI Rules**: ~5-10 seconds (OpenAI API dependent)
- **Cache Hits**: ~50-100ms
- **Parallel AI Rules**: Multiple rules processed simultaneously
### Caching Layers
1. **Rule Cache**: Project rules cached in memory with TTL
2. **AI Result Cache**: OpenAI responses cached by content hash
3. **Connection Pool**: HTTP connections reused for multiple requests
## Testing & Quality
Code Quality & Testing
### Code Quality Tools
```bash
# Setup pre-commit hooks
pre-commit install
# Manual code formatting
autopep8 --in-place --recursive .
isort .
# Run all quality checks
pre-commit run --all-files
```
**Pre-commit hooks automatically run:**
- autopep8 with max line length 127
- isort with black profile
- flake8 code quality checks
- trailing whitespace removal
### End-to-End Testing
```bash
# Run E2E test suite
python -m pytest tests/e2e_test.py -v
```
**E2E tests cover:**
- User registration and authentication
- Project creation and management
- API key generation and usage
- Content moderation pipeline
- Rule creation and processing
- WebSocket real-time updates
## Deployment
Production Deployment
### Docker Deployment
```bash
# Using Docker Compose (includes PostgreSQL)
cd docker/
docker-compose up -d
# Custom environment variables
OPENAI_API_KEY=sk-your-key docker-compose up -d
```
**Docker Configuration:**
- Base Image: python:3.12-slim
- Port: 6217
- Database: PostgreSQL 15 Alpine
- Volumes: Persistent data storage
- Health Checks: Built-in service monitoring
### Production Considerations
1. **Security**: Set secure SECRET_KEY, enable HTTPS
2. **Database**: Use PostgreSQL with connection pooling
3. **Web Server**: Deploy with Gunicorn + Nginx
4. **Monitoring**: Implement logging and health checks
5. **API Keys**: Rotate keys regularly, monitor usage
6. **SSL/TLS**: Enable HTTPS for secure API communication
### Environment-Specific Configs
**Development:**
- SQLite database
- Debug logging enabled
- Hot reload
- Smaller connection pools
**Production:**
- PostgreSQL database
- Optimized connection pools
- Error logging only
- Security headers enabled
## Database Schema
Database Models & Relationships
### Core Models
| Model | Purpose | Key Features |
|-------|---------|--------------|
| **User** | Authentication & management | UUID primary keys, password hashing, admin roles |
| **Project** | Moderation workspaces | Multi-member support, role-based access |
| **ProjectMember** | Project membership | User-project relationships with roles |
| **ProjectInvitation** | Project invites | Token-based invitation system |
| **APIKey** | API authentication | Auto-generated keys (am_ prefix), usage tracking |
| **APIUser** | API user tracking | External user ID mapping, usage statistics |
| **Content** | Submitted content | JSON metadata, status tracking |
| **ModerationRule** | Custom rules | Priority-based, multiple types |
| **ModerationResult** | Moderation decisions | Confidence scores, processing metrics |
### Key Relationships
**Detailed Relationships:**
- **User → Project**: 1:N ownership (creator)
- **User ↔ Project**: N:M membership via ProjectMember (owner/admin/member roles)
- **Project → APIKey**: 1:N (multiple keys per project)
- **Project → Content**: 1:N (all content submissions)
- **Project → ModerationRule**: 1:N (custom rules per project)
- **Project → ProjectInvitation**: 1:N (pending invitations)
- **Content → ModerationResult**: 1:N (multiple moderation checks)
- **APIUser → Content**: 1:N (tracks external user submissions)
### Advanced Features
- **Multi-tenancy**: Project-based isolation with member management
- **Usage Tracking**: API usage statistics per key and user
- **Rich Metadata**: JSON fields for flexible data storage
- **Audit Trail**: Comprehensive logging of all moderation decisions
## Contributing
Development Guidelines
### Getting Started
1. Fork the repository
2. Create a feature branch
3. Setup development environment
4. Make your changes following the coding standards
5. Add tests for new functionality
6. Run the test suite
7. Submit a pull request
### Coding Standards
- **Python**: PEP 8 compliance with max line length 127
- **Imports**: Organized with isort (black profile)
- **Code Quality**: Flake8 linting required
- **Testing**: E2E tests for new features
- **Documentation**: Update relevant documentation
### Pre-commit Hooks
All commits must pass pre-commit hooks:
- Code formatting (autopep8)
- Import sorting (isort)
- Linting (flake8)
- Trailing whitespace removal
## License
This project is licensed under the MIT License. See the LICENSE file for details.
## Support
For support and questions:
- Create an issue on GitHub
- Check the comprehensive documentation
- Review the API examples and test suite