361 lines
13 KiB
Markdown
361 lines
13 KiB
Markdown
# IGNY8 Application Repository
|
|
|
|
**Repository Name:** `igny8-app`
|
|
**Purpose:** Custom application code for the IGNY8 Content AI Platform
|
|
|
|
---
|
|
|
|
## Overview
|
|
|
|
This repository contains ONLY the custom business logic for IGNY8. It does not contain:
|
|
- Dockerfiles (in stack repo)
|
|
- package.json / requirements.txt (in stack repo)
|
|
- Vite/TypeScript configs (in stack repo)
|
|
- Docker compose files (in stack repo)
|
|
|
|
---
|
|
|
|
## Complete Folder Structure
|
|
|
|
```
|
|
igny8-app/
|
|
│
|
|
├── README.md # App overview
|
|
├── CHANGELOG.md # Version history
|
|
├── .gitignore # Git ignore rules
|
|
├── .env.example # Environment template
|
|
│
|
|
├── backend/
|
|
│ └── igny8_core/ # Django application
|
|
│ ├── __init__.py
|
|
│ ├── settings.py # Django settings
|
|
│ ├── urls.py # Root URL routing
|
|
│ ├── celery.py # Celery configuration
|
|
│ ├── wsgi.py # WSGI entry point
|
|
│ ├── asgi.py # ASGI entry point
|
|
│ ├── tasks.py # Root Celery tasks
|
|
│ │
|
|
│ ├── auth/ # Authentication module
|
|
│ │ ├── __init__.py
|
|
│ │ ├── models.py # User, Account, Site, Sector, Plan
|
|
│ │ ├── views.py # Login, register, password reset
|
|
│ │ ├── serializers.py # DRF serializers
|
|
│ │ ├── middleware.py # AccountContextMiddleware
|
|
│ │ ├── urls.py # Auth URL routes
|
|
│ │ └── migrations/ # Database migrations
|
|
│ │
|
|
│ ├── api/ # API infrastructure
|
|
│ │ ├── __init__.py
|
|
│ │ ├── base.py # Base ViewSets (AccountModelViewSet)
|
|
│ │ ├── authentication.py # JWT, API key auth
|
|
│ │ ├── pagination.py # Unified pagination
|
|
│ │ └── tests/ # API tests
|
|
│ │
|
|
│ ├── ai/ # AI engine
|
|
│ │ ├── __init__.py
|
|
│ │ ├── engine.py # AIEngine orchestrator
|
|
│ │ ├── registry.py # Function registry
|
|
│ │ ├── model_registry.py # AI model configuration
|
|
│ │ ├── progress.py # Progress tracking
|
|
│ │ └── functions/ # AI function implementations
|
|
│ │ ├── __init__.py
|
|
│ │ ├── auto_cluster.py
|
|
│ │ ├── generate_ideas.py
|
|
│ │ ├── generate_content.py
|
|
│ │ └── ...
|
|
│ │
|
|
│ ├── modules/ # Feature modules (API layer)
|
|
│ │ ├── __init__.py
|
|
│ │ ├── planner/ # Keywords, Clusters, Ideas
|
|
│ │ │ ├── models.py
|
|
│ │ │ ├── views.py
|
|
│ │ │ ├── serializers.py
|
|
│ │ │ ├── urls.py
|
|
│ │ │ └── migrations/
|
|
│ │ ├── writer/ # Tasks, Content, Images
|
|
│ │ ├── billing/ # Credits, usage, transactions
|
|
│ │ ├── integration/ # WordPress integration
|
|
│ │ ├── system/ # Settings, prompts, AI config
|
|
│ │ ├── linker/ # Internal linking
|
|
│ │ ├── optimizer/ # Content optimization
|
|
│ │ └── publisher/ # Publishing pipeline
|
|
│ │
|
|
│ ├── business/ # Business logic (services)
|
|
│ │ ├── __init__.py
|
|
│ │ ├── automation/ # 7-stage automation pipeline
|
|
│ │ ├── billing/ # Credit service
|
|
│ │ ├── content/ # Content generation
|
|
│ │ ├── integration/ # Sync services
|
|
│ │ ├── linking/ # Link processing
|
|
│ │ ├── notifications/ # Notification system
|
|
│ │ ├── optimization/ # Content optimization
|
|
│ │ ├── planning/ # Clustering, ideas
|
|
│ │ └── publishing/ # Publishing orchestration
|
|
│ │
|
|
│ ├── middleware/ # Custom middleware
|
|
│ │ ├── __init__.py
|
|
│ │ ├── request_id.py # X-Request-ID header
|
|
│ │ └── resource_tracker.py # Resource tracking
|
|
│ │
|
|
│ ├── tasks/ # Celery background tasks
|
|
│ │ ├── __init__.py
|
|
│ │ └── *.py
|
|
│ │
|
|
│ ├── admin/ # Django admin customization
|
|
│ ├── common/ # Shared utilities
|
|
│ ├── management/ # Django management commands
|
|
│ │ └── commands/
|
|
│ ├── utils/ # Helper functions
|
|
│ ├── urls/ # URL routing modules
|
|
│ ├── static/ # App static files
|
|
│ └── templates/ # Django templates
|
|
│
|
|
├── frontend/
|
|
│ └── src/ # React application
|
|
│ ├── main.tsx # Entry point
|
|
│ ├── App.tsx # Root component, routing
|
|
│ ├── index.css # Global styles, Tailwind
|
|
│ ├── vite-env.d.ts # Vite type definitions
|
|
│ ├── svg.d.ts # SVG type definitions
|
|
│ │
|
|
│ ├── api/ # API client modules
|
|
│ │ ├── linker.api.ts
|
|
│ │ ├── optimizer.api.ts
|
|
│ │ └── ...
|
|
│ │
|
|
│ ├── services/ # Core services
|
|
│ │ ├── api.ts # Main API service
|
|
│ │ └── notifications.api.ts # Notification API
|
|
│ │
|
|
│ ├── store/ # Zustand state stores
|
|
│ │ ├── authStore.ts # Authentication state
|
|
│ │ ├── siteStore.ts # Active site
|
|
│ │ ├── sectorStore.ts # Active sector
|
|
│ │ ├── billingStore.ts # Billing state
|
|
│ │ ├── moduleStore.ts # Module enable/disable
|
|
│ │ ├── notificationStore.ts # Notifications
|
|
│ │ └── ...
|
|
│ │
|
|
│ ├── pages/ # Route pages
|
|
│ │ ├── Dashboard/
|
|
│ │ ├── Planner/
|
|
│ │ ├── Writer/
|
|
│ │ ├── Automation/
|
|
│ │ ├── Linker/
|
|
│ │ ├── Optimizer/
|
|
│ │ ├── Settings/
|
|
│ │ ├── Billing/
|
|
│ │ └── Auth/
|
|
│ │
|
|
│ ├── components/ # Reusable components
|
|
│ │ ├── common/ # Shared UI components
|
|
│ │ ├── dashboard/ # Dashboard widgets
|
|
│ │ ├── header/ # Header components
|
|
│ │ └── shared/ # Cross-feature components
|
|
│ │
|
|
│ ├── layout/ # Layout components
|
|
│ │ ├── AppLayout.tsx
|
|
│ │ ├── AppHeader.tsx
|
|
│ │ └── AppSidebar.tsx
|
|
│ │
|
|
│ ├── hooks/ # Custom React hooks
|
|
│ ├── context/ # React contexts
|
|
│ ├── config/ # App configuration
|
|
│ ├── icons/ # Icon components
|
|
│ ├── styles/ # CSS modules/styles
|
|
│ ├── utils/ # Utility functions
|
|
│ ├── types/ # TypeScript types
|
|
│ ├── templates/ # Content templates
|
|
│ ├── modules/ # Feature modules
|
|
│ ├── marketing/ # Marketing site
|
|
│ │ ├── index.tsx
|
|
│ │ ├── MarketingApp.tsx
|
|
│ │ ├── config/
|
|
│ │ ├── components/
|
|
│ │ ├── layout/
|
|
│ │ ├── pages/
|
|
│ │ ├── images/
|
|
│ │ └── styles/
|
|
│ │
|
|
│ └── __tests__/ # Test files
|
|
│
|
|
├── public/ # Public static assets
|
|
│ ├── favicon.ico
|
|
│ ├── logo.svg
|
|
│ └── images/
|
|
│
|
|
└── docs/ # Documentation
|
|
├── 00-SYSTEM/
|
|
│ └── ARCHITECTURE.md
|
|
├── 10-MODULES/
|
|
├── 20-API/
|
|
├── 30-FRONTEND/
|
|
├── 40-WORKFLOWS/
|
|
├── 50-DEPLOYMENT/
|
|
│ ├── TWO-REPO-ARCHITECTURE.md
|
|
│ ├── INFRASTRUCTURE-STACK.md
|
|
│ ├── IGNY8-APP-STRUCTURE.md # This file
|
|
│ ├── DOCKER-DEPLOYMENT.md
|
|
│ └── ENVIRONMENT-SETUP.md
|
|
├── 90-REFERENCE/
|
|
└── plans/
|
|
```
|
|
|
|
---
|
|
|
|
## Deployment to New Server
|
|
|
|
### Prerequisites
|
|
- Stack already installed (see INFRASTRUCTURE-STACK.md)
|
|
- Server has `/data/stack/igny8-stack/` ready
|
|
- Docker network `igny8_net` exists
|
|
|
|
### Step-by-Step Deployment
|
|
|
|
```
|
|
1. Copy app code to server
|
|
|
|
Option A: Git clone
|
|
cd /data/app
|
|
git clone https://github.com/yourorg/igny8-app.git igny8
|
|
|
|
Option B: Rsync from existing server
|
|
rsync -avz --exclude='.git' \
|
|
--exclude='node_modules' \
|
|
--exclude='__pycache__' \
|
|
--exclude='*.pyc' \
|
|
--exclude='staticfiles' \
|
|
--exclude='dist' \
|
|
old-server:/data/app/igny8/ /data/app/igny8/
|
|
|
|
2. Create symlinks to stack
|
|
cd /data/stack/igny8-stack
|
|
./scripts/link-app.sh igny8
|
|
|
|
3. Configure environment
|
|
cd /data/app/igny8
|
|
cp .env.example .env
|
|
nano .env # Set your secrets
|
|
|
|
4. Install frontend dependencies
|
|
docker exec igny8_frontend npm install
|
|
|
|
5. Run database migrations
|
|
docker exec igny8_backend python manage.py migrate
|
|
|
|
6. Create superuser (first time only)
|
|
docker exec -it igny8_backend python manage.py createsuperuser
|
|
|
|
7. Collect static files
|
|
docker exec igny8_backend python manage.py collectstatic --noinput
|
|
|
|
8. Start all services
|
|
docker compose -f docker-compose.app.yml up -d
|
|
|
|
9. Verify
|
|
curl https://api.igny8.com/api/v1/system/status/
|
|
```
|
|
|
|
---
|
|
|
|
## What Gets Copied vs Symlinked
|
|
|
|
### Copied (Your Code)
|
|
|
|
| Path | Content |
|
|
|------|---------|
|
|
| `backend/igny8_core/` | All Django app code |
|
|
| `frontend/src/` | All React code |
|
|
| `public/` | Static assets |
|
|
| `docs/` | Documentation |
|
|
| `.env` | Environment config |
|
|
|
|
### Symlinked (From Stack)
|
|
|
|
| App Path | Stack Path |
|
|
|----------|------------|
|
|
| `backend/Dockerfile` | `stack/backend/Dockerfile` |
|
|
| `backend/requirements.txt` | `stack/backend/requirements.txt` |
|
|
| `backend/manage.py` | `stack/backend/manage.py` |
|
|
| `frontend/Dockerfile.dev` | `stack/frontend/Dockerfile.dev` |
|
|
| `frontend/package.json` | `stack/frontend/package.json` |
|
|
| `frontend/vite.config.ts` | `stack/frontend/vite.config.ts` |
|
|
| `frontend/tsconfig*.json` | `stack/frontend/tsconfig*.json` |
|
|
| `docker-compose.app.yml` | `stack/docker/docker-compose.app.yml` |
|
|
|
|
---
|
|
|
|
## Updating App on Existing Server
|
|
|
|
### Code Update (Most Common)
|
|
|
|
```
|
|
cd /data/app/igny8
|
|
git pull # Get latest code
|
|
|
|
# If migrations changed:
|
|
docker exec igny8_backend python manage.py migrate
|
|
|
|
# If frontend deps changed:
|
|
docker exec igny8_frontend npm install
|
|
|
|
# Restart to apply:
|
|
docker compose restart
|
|
```
|
|
|
|
### Full Rebuild (After Major Changes)
|
|
|
|
```
|
|
cd /data/app/igny8
|
|
docker compose down
|
|
docker compose build --no-cache
|
|
docker compose up -d
|
|
```
|
|
|
|
---
|
|
|
|
## Backup Before Migration
|
|
|
|
### What to Backup
|
|
|
|
| Item | Command/Method |
|
|
|------|----------------|
|
|
| Database | `pg_dump igny8_db > backup.sql` |
|
|
| App code | `git push` or `rsync` |
|
|
| Uploads | Copy `/data/app/igny8/backend/media/` |
|
|
| Environment | Copy `.env` file |
|
|
|
|
### Full Backup Script
|
|
|
|
```
|
|
# On old server
|
|
DATE=$(date +%Y%m%d)
|
|
mkdir -p /data/backups/$DATE
|
|
|
|
# Database
|
|
docker exec igny8_postgres pg_dump -U igny8 igny8_db > /data/backups/$DATE/db.sql
|
|
|
|
# App code (excluding generated files)
|
|
tar -czf /data/backups/$DATE/app.tar.gz \
|
|
--exclude='node_modules' \
|
|
--exclude='__pycache__' \
|
|
--exclude='staticfiles' \
|
|
--exclude='dist' \
|
|
--exclude='.git' \
|
|
/data/app/igny8/
|
|
|
|
# Environment
|
|
cp /data/app/igny8/.env /data/backups/$DATE/
|
|
|
|
echo "Backup complete: /data/backups/$DATE/"
|
|
```
|
|
|
|
---
|
|
|
|
## Related Documentation
|
|
|
|
- [TWO-REPO-ARCHITECTURE.md](TWO-REPO-ARCHITECTURE.md) - Why this structure
|
|
- [INFRASTRUCTURE-STACK.md](INFRASTRUCTURE-STACK.md) - Stack repo details
|
|
- [DOCKER-DEPLOYMENT.md](DOCKER-DEPLOYMENT.md) - Container details
|
|
- [ARCHITECTURE.md](../00-SYSTEM/ARCHITECTURE.md) - System architecture
|