VErsion 1.3.2
This commit is contained in:
314
CHANGELOG.md
314
CHANGELOG.md
@@ -1,7 +1,7 @@
|
||||
# IGNY8 Change Log
|
||||
|
||||
**Current Version:** 1.3.1
|
||||
**Last Updated:** January 2, 2026
|
||||
**Current Version:** 1.3.2
|
||||
**Last Updated:** January 3, 2026
|
||||
|
||||
---
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
| Version | Date | Summary |
|
||||
|---------|------|---------|
|
||||
| 1.3.2 | Jan 3, 2026 | **Major** - Publishing Scheduler, Onboarding Wizard, Content Calendar, Design System Consolidation, Site Dashboard redesign |
|
||||
| 1.3.1 | Jan 2, 2026 | **Design System Consolidation** - Updated .rules with comprehensive design system & component rules, ESLint enforcement |
|
||||
| 1.3.0 | Jan 1, 2026 | **Major** - Automation overhaul, AI provider integrations (Anthropic/Bria), Model Registry, Global Progress tracking, CSS globalization |
|
||||
| 1.2.2 | Dec 28, 2025 | **NEW** - Full notifications page with filtering and bulk actions |
|
||||
@@ -33,6 +34,315 @@
|
||||
|
||||
---
|
||||
|
||||
## v1.3.2 - January 3, 2026
|
||||
|
||||
### Major Release: Publishing Scheduler, Onboarding Wizard & Content Calendar
|
||||
|
||||
This release introduces automated publishing scheduling, a streamlined onboarding wizard for new users, a content calendar for managing publishing schedules, comprehensive design system consolidation, and site-specific dashboard improvements.
|
||||
|
||||
---
|
||||
|
||||
### 📅 Publishing Scheduler System (NEW)
|
||||
|
||||
**Backend: Publishing Scheduler Tasks**
|
||||
- **NEW FILE**: `backend/igny8_core/tasks/publishing_scheduler.py`
|
||||
- `schedule_approved_content` - Hourly task that schedules approved content based on site's publishing settings
|
||||
- `process_scheduled_publications` - Every 5 minutes, publishes content that's due
|
||||
- `update_content_site_status` - Callback task for status updates after WordPress publish
|
||||
- Calculates available slots based on publish_days, publish_time_slots, and daily/weekly/monthly limits
|
||||
- Respects site-specific publishing limits
|
||||
|
||||
**Content Model Updates:**
|
||||
- **NEW MIGRATION**: `0014_add_approved_status.py`
|
||||
- Added `approved` status to Content model: `draft → review → approved → published`
|
||||
- Created `ImagePrompts` proxy model
|
||||
|
||||
- **NEW MIGRATION**: `0015_add_publishing_scheduler_fields.py`
|
||||
- `site_status` field: `not_published | scheduled | publishing | published | failed`
|
||||
- `scheduled_publish_at` field: DateTime for scheduled publishing
|
||||
- `site_status_updated_at` field: Timestamp for status tracking
|
||||
|
||||
**PublishingSettings Model (NEW):**
|
||||
- **NEW MODEL**: `backend/igny8_core/business/integration/models.py`
|
||||
- `auto_approval_enabled` - Auto-approve content after review
|
||||
- `auto_publish_enabled` - Auto-publish approved content
|
||||
- `daily_publish_limit`, `weekly_publish_limit`, `monthly_publish_limit`
|
||||
- `publish_days` - JSON array of allowed days (mon, tue, wed, etc.)
|
||||
- `publish_time_slots` - JSON array of times (09:00, 14:00, 18:00)
|
||||
- Default: 3/day, 15/week, 50/month, Mon-Fri at 9am/2pm/6pm
|
||||
|
||||
**DefaultsService (NEW):**
|
||||
- **NEW FILE**: `backend/igny8_core/business/integration/services/defaults_service.py`
|
||||
- `create_site_with_defaults()` - Creates site with publishing and automation settings
|
||||
- `apply_defaults_to_existing_site()` - Applies defaults to existing sites
|
||||
- Optimized defaults for automated content publishing
|
||||
|
||||
**API Endpoints (NEW):**
|
||||
- `GET /api/v1/integration/sites/{site_id}/publishing-settings/` - Get publishing settings
|
||||
- `PUT/PATCH /api/v1/integration/sites/{site_id}/publishing-settings/` - Update settings
|
||||
- `POST /api/v1/writer/content/{id}/schedule/` - Schedule content for publishing
|
||||
- `POST /api/v1/writer/content/{id}/unschedule/` - Remove from schedule
|
||||
- `GET /api/v1/writer/content/?status__in=` - Filter by multiple statuses
|
||||
|
||||
**Celery Beat Schedule:**
|
||||
- Added `schedule-approved-content` task (hourly)
|
||||
- Added `process-scheduled-publications` task (every 5 minutes)
|
||||
|
||||
---
|
||||
|
||||
### 🧙 Onboarding Wizard (NEW)
|
||||
|
||||
**NEW COMPONENTS**: `frontend/src/components/onboarding/`
|
||||
|
||||
**OnboardingWizard.tsx:**
|
||||
- 5-step wizard for new user setup
|
||||
- Manages wizard state and navigation
|
||||
- Creates site with optimized defaults
|
||||
|
||||
**Step Components:**
|
||||
- `Step1Welcome.tsx` - Welcome screen with feature overview
|
||||
- `Step2AddSite.tsx` - Site creation with industry/sector selection
|
||||
- Uses SelectDropdown for industry
|
||||
- Badge-based sector selection (up to 5)
|
||||
- Shows optimized defaults info card
|
||||
- `Step3ConnectIntegration.tsx` - WordPress plugin installation
|
||||
- API key display with copy button
|
||||
- 4-step installation guide
|
||||
- Connection test functionality
|
||||
- Optional - can skip
|
||||
- `Step4AddKeywords.tsx` - Initial keyword entry
|
||||
- Multi-keyword input with paste support
|
||||
- Keyword suggestions
|
||||
- Optional - can skip
|
||||
- `Step5Complete.tsx` - Success screen with next steps
|
||||
- Setup summary
|
||||
- Expected timeline
|
||||
- Quick links to key areas
|
||||
|
||||
**Route:** `/setup/wizard` - New onboarding wizard page
|
||||
|
||||
---
|
||||
|
||||
### 📆 Content Calendar (NEW)
|
||||
|
||||
**NEW PAGE**: `frontend/src/pages/Publisher/ContentCalendar.tsx`
|
||||
- Calendar view of scheduled content
|
||||
- List view with drag-and-drop reordering
|
||||
- Schedule/unschedule content
|
||||
- View scheduled vs published vs approved content
|
||||
- Month navigation
|
||||
- Stats: scheduled, publishing, published counts
|
||||
|
||||
**Features:**
|
||||
- Drag content from approved list to calendar dates
|
||||
- Click to view content details
|
||||
- Remove from queue functionality
|
||||
- Publishing status badges (Scheduled, Publishing, Published, Failed)
|
||||
- Real-time updates
|
||||
|
||||
**Route:** `/publisher/content-calendar` (main)
|
||||
**Redirect:** `/sites/:id/publishing-queue` → `/publisher/content-calendar`
|
||||
|
||||
---
|
||||
|
||||
### 🎨 Design System Consolidation
|
||||
|
||||
**CSS Consolidation:**
|
||||
- **NEW FILE**: `frontend/src/styles/design-system.css` (836 lines)
|
||||
- Single source of truth for all design tokens
|
||||
- Only 6 base hex values - everything else derived
|
||||
- Tailwind default colors DISABLED
|
||||
- Color scales: brand-*, success-*, warning-*, error-*, purple-*, gray-*
|
||||
- Module-specific color schemes
|
||||
- Dark mode support
|
||||
|
||||
- **DELETED FILES**:
|
||||
- `frontend/src/styles/global.css`
|
||||
- `frontend/src/styles/tokens.css`
|
||||
- `frontend/src/index.css` (571 lines removed)
|
||||
|
||||
**ESLint Plugin (NEW):**
|
||||
- **NEW FILE**: `frontend/eslint/eslint-plugin-igny8-design-system.cjs`
|
||||
- `no-tailwind-default-colors` - Blocks blue-*, red-*, green-*, etc.
|
||||
- `no-hardcoded-colors` - Blocks inline hex colors
|
||||
- `no-lucide-imports` - Enforces local icon imports
|
||||
- `no-icon-children` - Blocks children in icon components
|
||||
|
||||
**Module Color Scheme:**
|
||||
- Planner (Keywords/Clusters/Ideas): Purple theme
|
||||
- Writer (Tasks/Content/Images): Green theme
|
||||
- Automation: Blue theme
|
||||
- Publisher: Brand/Orange theme
|
||||
- Unified visual distinction across pipeline
|
||||
|
||||
**Component Updates:**
|
||||
- 100+ files updated for semantic color tokens
|
||||
- All hardcoded Tailwind colors replaced
|
||||
- All inline hex colors replaced
|
||||
- Badge, Button, Card components updated
|
||||
|
||||
---
|
||||
|
||||
### 🏠 Site Dashboard Redesign
|
||||
|
||||
**Site Dashboard (`/sites/:id`):**
|
||||
- **NEW**: SiteInfoBar component for site-specific pages
|
||||
- **NEW**: Quick Actions grid (2-column card layout)
|
||||
- **FIXED**: Race condition in Dashboard.tsx - async loadSiteData using stale closure
|
||||
- AI Operations widget now loads real data from getDashboardStats API
|
||||
- Proper site filtering for all widgets
|
||||
|
||||
**Site Settings Page:**
|
||||
- Industry/Sector selector redesigned to match wizard style
|
||||
- SelectDropdown for industry selection
|
||||
- Badge-based sector selection with visual feedback
|
||||
- Publishing Settings tab (NEW)
|
||||
- Auto-approval toggle
|
||||
- Auto-publish toggle
|
||||
- Daily/Weekly/Monthly limits
|
||||
- Publish days selection
|
||||
- Time slots configuration
|
||||
|
||||
**Site List Page:**
|
||||
- Enhanced site cards with setup progress
|
||||
- WordPress connection status indicators
|
||||
- Quick actions per site
|
||||
|
||||
---
|
||||
|
||||
### 📄 New Pages & Routes
|
||||
|
||||
| Route | File | Description |
|
||||
|-------|------|-------------|
|
||||
| `/setup/wizard` | `Setup/SetupWizard.tsx` | Onboarding wizard |
|
||||
| `/publisher/content-calendar` | `Publisher/ContentCalendar.tsx` | Content calendar |
|
||||
| `/ui-elements` | `UIElements.tsx` | Design system reference (internal) |
|
||||
|
||||
**Legacy Redirects:**
|
||||
- `/sites/:id/publishing-queue` → `/publisher/content-calendar`
|
||||
|
||||
---
|
||||
|
||||
### 🔧 Backend Improvements
|
||||
|
||||
**New Migrations:**
|
||||
- `0014_add_approved_status.py` - Content approved status
|
||||
- `0015_add_publishing_scheduler_fields.py` - Scheduling fields
|
||||
- `0003_add_publishing_settings.py` - PublishingSettings model
|
||||
|
||||
**Celery Configuration:**
|
||||
- Added publishing scheduler tasks to celery beat
|
||||
- New `tasks/__init__.py` consolidating all task imports
|
||||
|
||||
**WordPress Publishing:**
|
||||
- Updated `publish_content_to_wordpress` to update `site_status`
|
||||
- On success: site_status='published'
|
||||
- On failure: site_status='failed'
|
||||
|
||||
---
|
||||
|
||||
### 🐛 Bug Fixes
|
||||
|
||||
**Dashboard:**
|
||||
- Fixed race condition where async loadSiteData used stale siteId closure
|
||||
- Now passes currentSiteId as parameter to loadSiteData function
|
||||
- Fixed site 5 showing site 21 data issue
|
||||
|
||||
**Content Filtering:**
|
||||
- Added `status__in` query parameter support for multiple status filtering
|
||||
- Content serializer includes new `site_status` and `scheduled_publish_at` fields
|
||||
|
||||
**UI/UX:**
|
||||
- Fixed industry/sector selector styling inconsistency
|
||||
- Fixed Site Dashboard quick actions layout
|
||||
- Fixed notification dropdown styling in dark mode
|
||||
|
||||
---
|
||||
|
||||
### 📚 Documentation Updates
|
||||
|
||||
**New Documentation:**
|
||||
- `docs/30-FRONTEND/COMPONENT-SYSTEM.md` - Complete UI components reference
|
||||
- `docs/30-FRONTEND/DESIGN-GUIDE.md` - Design system guidelines
|
||||
- `docs/50-DEPLOYMENT/WORDPRESS-INTEGRATION-FLOW.md` - WordPress setup guide
|
||||
- `docs/plans/FINAL-PRELAUNCH.md` - Pre-launch checklist
|
||||
- `docs/plans/implemented/FRONTEND-AUDIT-PLAN.md` - Frontend audit plan
|
||||
- `docs/plans/implemented/PUBLISHING-ONBOARDING-IMPLEMENTATION-PLAN.md` - Implementation plan
|
||||
|
||||
**Moved/Reorganized:**
|
||||
- `IGNY8-APP.md` → `docs/00-SYSTEM/IGNY8-APP.md`
|
||||
- `fixes-kb.md` → `docs/90-REFERENCE/FIXES-KB.md`
|
||||
- Various plan docs → `docs/plans/implemented/`
|
||||
|
||||
**Updated Documentation:**
|
||||
- `docs/INDEX.md` - Added new doc links, updated version
|
||||
- `docs/30-FRONTEND/DESIGN-TOKENS.md` - Expanded with color scales
|
||||
- `frontend/src/styles/README.md` - Updated for design-system.css
|
||||
|
||||
---
|
||||
|
||||
### 📁 Files Summary
|
||||
|
||||
**New Files (20+):**
|
||||
```
|
||||
backend/igny8_core/tasks/__init__.py
|
||||
backend/igny8_core/tasks/publishing_scheduler.py
|
||||
backend/igny8_core/business/integration/services/defaults_service.py
|
||||
backend/igny8_core/modules/writer/migrations/0014_add_approved_status.py
|
||||
backend/igny8_core/modules/writer/migrations/0015_add_publishing_scheduler_fields.py
|
||||
backend/igny8_core/business/content/migrations/0003_add_publishing_settings.py
|
||||
|
||||
frontend/src/components/onboarding/OnboardingWizard.tsx
|
||||
frontend/src/components/onboarding/steps/Step1Welcome.tsx
|
||||
frontend/src/components/onboarding/steps/Step2AddSite.tsx
|
||||
frontend/src/components/onboarding/steps/Step3ConnectIntegration.tsx
|
||||
frontend/src/components/onboarding/steps/Step4AddKeywords.tsx
|
||||
frontend/src/components/onboarding/steps/Step5Complete.tsx
|
||||
frontend/src/components/onboarding/steps/index.ts
|
||||
frontend/src/components/common/SiteInfoBar.tsx
|
||||
frontend/src/components/ui/button/IconButton.tsx
|
||||
frontend/src/components/ui/tooltip/CalendarItemTooltip.tsx
|
||||
frontend/src/pages/Publisher/ContentCalendar.tsx
|
||||
frontend/src/pages/Setup/SetupWizard.tsx
|
||||
frontend/src/pages/UIElements.tsx
|
||||
frontend/src/styles/design-system.css
|
||||
frontend/eslint/eslint-plugin-igny8-design-system.cjs
|
||||
frontend/audit-results/*.txt
|
||||
```
|
||||
|
||||
**Major Changes (50+ files):**
|
||||
- All frontend components updated for semantic colors
|
||||
- Site Dashboard, Settings, Content pages redesigned
|
||||
- Automation page color scheme updated
|
||||
- 100+ files with color token replacements
|
||||
|
||||
**Deleted Files:**
|
||||
- `frontend/src/styles/global.css`
|
||||
- `frontend/src/styles/tokens.css`
|
||||
- `frontend/src/index.css` (content moved to design-system.css)
|
||||
- Various old logo files
|
||||
- `docs/plans/final-fixes.md` (moved to implemented)
|
||||
- `docs/plans/flexible-model-configuration-plan.md` (moved)
|
||||
|
||||
---
|
||||
|
||||
### Git Reference
|
||||
```bash
|
||||
# Commits since v1.3.0 (21 commits)
|
||||
git log af408d0747429d94ab9168884c8f0e8e97add810..HEAD --oneline
|
||||
|
||||
# Key commits:
|
||||
# f1ba0aa5 - Section 2 Completed
|
||||
# 4d6ee214 - Section 2 Part 3
|
||||
# e2d462d8 - Update dashboard and automation colors
|
||||
# f28f641f - Components standardization 2
|
||||
# e9606977 - Global Styling part 1
|
||||
# f81fffc9 - Section 1 & 2 - Migration Run
|
||||
# 03400169 - Section 3-8 - Migration Run
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## v1.3.1 - January 2, 2026
|
||||
|
||||
### Design System Consolidation (Pre-Launch Section 1)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Automation Module
|
||||
|
||||
**Last Verified:** January 1, 2026
|
||||
**Version:** 1.3.0
|
||||
**Last Verified:** January 3, 2026
|
||||
**Version:** 1.3.2
|
||||
**Status:** ✅ Active
|
||||
**Backend Path:** `backend/igny8_core/business/automation/`
|
||||
**Frontend Path:** `frontend/src/pages/Automation/`
|
||||
@@ -16,6 +16,7 @@
|
||||
| Service | `business/automation/services/automation_service.py` | `AutomationService` |
|
||||
| Logger | `business/automation/services/automation_logger.py` | `AutomationLogger` |
|
||||
| Celery Tasks | `business/automation/tasks.py` | `run_automation_task`, `check_scheduled_automations` |
|
||||
| Publishing Tasks | `igny8_core/tasks/publishing_scheduler.py` | Scheduled publishing (v1.3.2) |
|
||||
| Frontend | `pages/Automation/AutomationPage.tsx` | Main automation UI |
|
||||
| Progress Bar | `components/Automation/GlobalProgressBar.tsx` | Full pipeline progress |
|
||||
| Processing Card | `components/Automation/CurrentProcessingCard.tsx` | Real-time progress |
|
||||
@@ -42,9 +43,9 @@ Keywords → Clusters → Ideas → Tasks → Content → Image Prompts → Imag
|
||||
| 4 | Tasks → Content | `GenerateContentFunction` | Per 100 words |
|
||||
| 5 | Content → Image Prompts | `GenerateImagePromptsFunction` | Per prompt |
|
||||
| 6 | Image Prompts → Images | `process_image_generation_queue` | Per image |
|
||||
| 7 | Review → Published | None (auto-approve) | None |
|
||||
| 7 | Review → Published | Publishing Scheduler (v1.3.2) | None |
|
||||
|
||||
**Note:** Stage 7 changed from "Manual Review Gate" to auto-approve and publish in v1.3.0.
|
||||
**Note:** Stage 7 uses the Publishing Scheduler with `PublishingSettings` to auto-approve and schedule content for publication. See [PUBLISHER.md](PUBLISHER.md) for details.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Integrations Module
|
||||
|
||||
**Last Verified:** January 1, 2026
|
||||
**Version:** 1.3.0
|
||||
**Last Verified:** January 3, 2026
|
||||
**Version:** 1.3.2
|
||||
**Status:** ✅ Active
|
||||
**Backend Path:** `backend/igny8_core/modules/integration/` + `backend/igny8_core/business/integration/`
|
||||
**Frontend Path:** `frontend/src/pages/Settings/IntegrationSettings.tsx`
|
||||
@@ -117,6 +117,29 @@ The Integrations module manages:
|
||||
| metadata | JSON | Additional data |
|
||||
| created_at | DateTime | Event time |
|
||||
|
||||
### PublishingSettings (v1.3.2)
|
||||
|
||||
Site-level publishing configuration. Used by the publishing scheduler.
|
||||
|
||||
| Field | Type | Purpose |
|
||||
|-------|------|---------|
|
||||
| site | OneToOneField | Parent site (unique per site) |
|
||||
| auto_approval_enabled | BooleanField | Auto-approve content (default: False) |
|
||||
| auto_publish_enabled | BooleanField | Auto-publish approved content (default: False) |
|
||||
| daily_publish_limit | IntegerField | Max publications per day (default: 5) |
|
||||
| weekly_publish_limit | IntegerField | Max per week (default: 20) |
|
||||
| monthly_publish_limit | IntegerField | Max per month (default: 60) |
|
||||
| publish_days | JSONField | Days for publishing ["mon","wed","fri"] |
|
||||
| publish_time_slots | JSONField | Time slots [{"start":"09:00","end":"17:00"}] |
|
||||
|
||||
**Helper Method:**
|
||||
```python
|
||||
# Get or create settings for a site
|
||||
settings, created = PublishingSettings.get_or_create_for_site(site)
|
||||
```
|
||||
|
||||
**Related:** See [PUBLISHER.md](PUBLISHER.md) for publishing scheduler details.
|
||||
|
||||
---
|
||||
|
||||
## API Endpoints
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
# Publisher Module
|
||||
|
||||
**Last Verified:** December 25, 2025
|
||||
**Last Verified:** January 3, 2026
|
||||
**Status:** ✅ Active
|
||||
**Version:** 1.3.2
|
||||
**Backend Path:** `backend/igny8_core/modules/publisher/` + `backend/igny8_core/business/publishing/`
|
||||
**Frontend Path:** N/A (API-only module)
|
||||
**Frontend Path:** `frontend/src/pages/Publisher/`
|
||||
|
||||
---
|
||||
|
||||
@@ -13,8 +14,11 @@
|
||||
|------|------|-----------|
|
||||
| Views | `modules/publisher/views.py` | `PublishingRecordViewSet`, `DeploymentViewSet`, `PublishContentViewSet` |
|
||||
| Models | `business/publishing/models.py` | `PublishingRecord`, `DeploymentRecord` |
|
||||
| Integration Models | `modules/integration/models.py` | `PublishingSettings` |
|
||||
| Services | `business/publishing/services/*.py` | Publishing orchestration |
|
||||
| Scheduler Tasks | `igny8_core/tasks/publishing_scheduler.py` | Celery beat tasks |
|
||||
| URLs | `modules/publisher/urls.py` | Publisher endpoints |
|
||||
| Frontend | `pages/Publisher/ContentCalendar.tsx` | Content calendar view |
|
||||
|
||||
---
|
||||
|
||||
@@ -22,9 +26,11 @@
|
||||
|
||||
The Publisher module manages:
|
||||
- Content publishing pipeline
|
||||
- **Publishing scheduler (automated publishing)**
|
||||
- Publishing record tracking
|
||||
- Deployment management
|
||||
- Multi-destination publishing
|
||||
- **Content calendar visualization**
|
||||
|
||||
---
|
||||
|
||||
@@ -59,6 +65,31 @@ The Publisher module manages:
|
||||
| error_log | TextField | Errors encountered |
|
||||
| metadata | JSON | Deployment details |
|
||||
|
||||
### PublishingSettings (v1.3.2)
|
||||
|
||||
Site-level publishing configuration:
|
||||
|
||||
| Field | Type | Purpose |
|
||||
|-------|------|---------|
|
||||
| site | OneToOne | Parent site (unique) |
|
||||
| auto_approval_enabled | Boolean | Auto-approve content |
|
||||
| auto_publish_enabled | Boolean | Auto-publish approved content |
|
||||
| daily_publish_limit | Integer | Max publications per day |
|
||||
| weekly_publish_limit | Integer | Max publications per week |
|
||||
| monthly_publish_limit | Integer | Max publications per month |
|
||||
| publish_days | JSON | Days of week for publishing ["mon","wed","fri"] |
|
||||
| publish_time_slots | JSON | Time slots for publishing [{"start":"09:00","end":"17:00"}] |
|
||||
|
||||
### Content Site Status Fields (v1.3.2)
|
||||
|
||||
Added to Content model for scheduling:
|
||||
|
||||
| Field | Type | Values |
|
||||
|-------|------|--------|
|
||||
| site_status | CharField | not_published, scheduled, publishing, published, failed |
|
||||
| scheduled_publish_at | DateTime | Future publication time (nullable) |
|
||||
| site_status_updated_at | DateTime | Last status change timestamp |
|
||||
|
||||
---
|
||||
|
||||
## API Endpoints
|
||||
@@ -71,6 +102,85 @@ The Publisher module manages:
|
||||
| POST | `/api/v1/publisher/publish/` | `PublishContentViewSet.publish` | Publish content |
|
||||
| GET | `/api/v1/publisher/publish/status/` | `PublishContentViewSet.status` | Get publishing status |
|
||||
| GET | `/api/v1/publisher/site-definition/` | `SiteDefinitionViewSet.list` | Public site definitions |
|
||||
| **POST** | `/api/v1/content/{id}/schedule/` | Schedule content | Schedule content for future publish |
|
||||
| **POST** | `/api/v1/content/{id}/unschedule/` | Unschedule content | Remove from publishing schedule |
|
||||
| **GET** | `/api/v1/sites/{site_id}/publishing-settings/` | `PublishingSettingsViewSet` | Get site publishing settings |
|
||||
| **PUT** | `/api/v1/sites/{site_id}/publishing-settings/` | `PublishingSettingsViewSet` | Update publishing settings |
|
||||
|
||||
---
|
||||
|
||||
## Publishing Scheduler (v1.3.2)
|
||||
|
||||
### Celery Beat Tasks
|
||||
|
||||
Located in `igny8_core/tasks/publishing_scheduler.py`:
|
||||
|
||||
| Task | Schedule | Purpose |
|
||||
|------|----------|---------|
|
||||
| `schedule_approved_content` | Every 15 minutes | Assigns publish times to approved content |
|
||||
| `process_scheduled_publications` | Every 5 minutes | Publishes content when scheduled time arrives |
|
||||
| `cleanup_failed_publications` | Daily at midnight | Retries or cleans up failed publications |
|
||||
|
||||
### Scheduling Flow
|
||||
|
||||
```
|
||||
Approved Content → schedule_approved_content (every 15 min)
|
||||
↓
|
||||
Check PublishingSettings
|
||||
↓
|
||||
Assign scheduled_publish_at based on:
|
||||
- publish_days configuration
|
||||
- publish_time_slots configuration
|
||||
- daily/weekly/monthly limits
|
||||
↓
|
||||
Set site_status = "scheduled"
|
||||
↓
|
||||
process_scheduled_publications (every 5 min)
|
||||
↓
|
||||
If scheduled_publish_at <= now:
|
||||
- Set site_status = "publishing"
|
||||
- Execute publication
|
||||
- Set site_status = "published" or "failed"
|
||||
```
|
||||
|
||||
### Site Status State Machine
|
||||
|
||||
```
|
||||
not_published → scheduled → publishing → published
|
||||
↓ ↓
|
||||
↓ → failed
|
||||
↓
|
||||
not_published (if unscheduled)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Frontend Pages (v1.3.2)
|
||||
|
||||
### Content Calendar (`/publisher/content-calendar`)
|
||||
|
||||
**Purpose:** Visualize and manage scheduled content
|
||||
|
||||
**Features:**
|
||||
- Calendar view of scheduled publications
|
||||
- List view alternative
|
||||
- Filter by site
|
||||
- Schedule/unschedule actions
|
||||
- Drag-and-drop rescheduling (planned)
|
||||
|
||||
**Components:**
|
||||
- `ContentCalendar.tsx` - Main page component
|
||||
- `CalendarItemTooltip` - Hover details for calendar items
|
||||
- `SiteInfoBar` - Site context header
|
||||
|
||||
### Publishing Queue (`/publisher/publishing-queue`)
|
||||
|
||||
**Purpose:** Review upcoming publications
|
||||
|
||||
**Features:**
|
||||
- List of content pending publication
|
||||
- Status indicators (scheduled, publishing, failed)
|
||||
- Publish now / unschedule actions
|
||||
|
||||
---
|
||||
|
||||
@@ -179,6 +289,7 @@ Returns site structure for external consumption:
|
||||
|---------|--------|-------------|
|
||||
| Ghost integration | 🔜 Planned | Ghost CMS publishing |
|
||||
| Webflow integration | 🔜 Planned | Webflow publishing |
|
||||
| Scheduled publishing | 🔜 Planned | Future-date publishing |
|
||||
| ~~Scheduled publishing~~ | ✅ Implemented (v1.3.2) | Future-date publishing |
|
||||
| Republish detection | 🔜 Planned | Detect and handle updates |
|
||||
| Publishing queue | 🔜 Planned | Batch publishing with queue |
|
||||
| ~~Publishing queue~~ | ✅ Implemented (v1.3.2) | Batch publishing with queue |
|
||||
| Drag-and-drop calendar | 🔜 Planned | Reschedule via drag-and-drop |
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# API Endpoints Reference
|
||||
|
||||
**Last Verified:** December 27, 2025
|
||||
**Version:** 1.2.0
|
||||
**Last Verified:** January 3, 2026
|
||||
**Version:** 1.3.2
|
||||
**Base URL:** `/api/v1/`
|
||||
**Documentation:** `/api/docs/` (Swagger) | `/api/redoc/` (ReDoc)
|
||||
|
||||
@@ -88,11 +88,35 @@ All endpoints require authentication unless noted.
|
||||
| POST | `/content/{id}/update_content/` | `ContentViewSet.update_content` | Update with validation |
|
||||
| POST | `/content/{id}/generate_images/` | `ContentViewSet.generate_images` | Generate images |
|
||||
| POST | `/content/{id}/publish_to_wordpress/` | `ContentViewSet.publish_to_wordpress` | Publish to WP |
|
||||
| POST | `/content/{id}/schedule/` | `ContentViewSet.schedule` | Schedule for publishing (v1.3.2) |
|
||||
| POST | `/content/{id}/unschedule/` | `ContentViewSet.unschedule` | Remove from schedule (v1.3.2) |
|
||||
| GET | `/images/` | `ImageViewSet.list` | List images |
|
||||
| POST | `/images/generate_for_content/` | `ImageViewSet.generate_for_content` | Generate images |
|
||||
| POST | `/images/regenerate/` | `ImageViewSet.regenerate` | Regenerate image |
|
||||
| GET | `/taxonomies/` | `TaxonomyViewSet.list` | List taxonomies |
|
||||
|
||||
**Content Query Parameters (v1.3.2):**
|
||||
- `?status__in=draft,review,approved` - Filter by multiple workflow statuses
|
||||
- `?site_status=scheduled` - Filter by publishing status
|
||||
- `?site_id=` - Filter by site
|
||||
|
||||
**Schedule Endpoint Request:**
|
||||
```json
|
||||
POST /api/v1/writer/content/{id}/schedule/
|
||||
{
|
||||
"scheduled_publish_at": "2026-01-15T09:00:00Z"
|
||||
}
|
||||
```
|
||||
|
||||
**Schedule Endpoint Response:**
|
||||
```json
|
||||
{
|
||||
"content_id": 123,
|
||||
"site_status": "scheduled",
|
||||
"scheduled_publish_at": "2026-01-15T09:00:00Z"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Billing Endpoints (`/api/v1/billing/`)
|
||||
@@ -125,6 +149,31 @@ All endpoints require authentication unless noted.
|
||||
| POST | `/site_sync/` | Site-level sync | Sync by site ID |
|
||||
| POST | `/webhook/wordpress/` | WordPress webhook | Receive WP updates |
|
||||
|
||||
### Publishing Settings Endpoints (v1.3.2)
|
||||
|
||||
| Method | Path | Handler | Purpose |
|
||||
|--------|------|---------|---------|
|
||||
| GET | `/sites/{site_id}/publishing-settings/` | `PublishingSettingsViewSet.retrieve` | Get publishing settings |
|
||||
| PUT | `/sites/{site_id}/publishing-settings/` | `PublishingSettingsViewSet.update` | Update settings (full) |
|
||||
| PATCH | `/sites/{site_id}/publishing-settings/` | `PublishingSettingsViewSet.partial_update` | Update settings (partial) |
|
||||
|
||||
**Publishing Settings Response:**
|
||||
```json
|
||||
{
|
||||
"id": 1,
|
||||
"site": 5,
|
||||
"auto_approval_enabled": true,
|
||||
"auto_publish_enabled": true,
|
||||
"daily_publish_limit": 3,
|
||||
"weekly_publish_limit": 15,
|
||||
"monthly_publish_limit": 50,
|
||||
"publish_days": ["mon", "tue", "wed", "thu", "fri"],
|
||||
"publish_time_slots": ["09:00", "14:00", "18:00"],
|
||||
"created_at": "2026-01-03T10:00:00Z",
|
||||
"updated_at": "2026-01-03T10:00:00Z"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## System Endpoints (`/api/v1/system/`)
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
# IGNY8 Frontend Component System
|
||||
|
||||
**Last Updated:** January 3, 2026
|
||||
**Version:** 1.3.2
|
||||
|
||||
> **🔒 ENFORCED BY ESLINT** - Violations will trigger warnings/errors during build.
|
||||
> This document is the single source of truth for all UI components.
|
||||
|
||||
@@ -11,6 +14,7 @@
|
||||
|---------|-----------|-------------|
|
||||
| Button | `Button` | `components/ui/button/Button` |
|
||||
| Icon Button | `IconButton` | `components/ui/button/IconButton` |
|
||||
| Button Group | `ButtonGroup` | `components/ui/button-group/ButtonGroup` |
|
||||
| Text Input | `InputField` | `components/form/input/InputField` |
|
||||
| Checkbox | `Checkbox` | `components/form/input/Checkbox` |
|
||||
| Radio | `Radio` | `components/form/input/Radio` |
|
||||
@@ -27,6 +31,7 @@
|
||||
| Spinner | `Spinner` | `components/ui/spinner/Spinner` |
|
||||
| Tabs | `Tabs` | `components/ui/tabs/Tabs` |
|
||||
| Tooltip | `Tooltip` | `components/ui/tooltip/Tooltip` |
|
||||
| Calendar Tooltip | `CalendarItemTooltip` | `components/ui/tooltip/CalendarItemTooltip` |
|
||||
| Toast | `useToast` | `components/ui/toast/ToastContainer` |
|
||||
| Icons | `*Icon` | `icons` (e.g., `../../icons`) |
|
||||
|
||||
@@ -595,7 +600,54 @@ import { CloseIcon } from '../../icons';
|
||||
|
||||
---
|
||||
|
||||
## 8. LIVE REFERENCE
|
||||
## 8. SITE-SPECIFIC COMPONENTS (v1.3.2)
|
||||
|
||||
### SiteInfoBar
|
||||
|
||||
Reusable site info header component for site-specific pages.
|
||||
|
||||
```tsx
|
||||
import { SiteInfoBar } from '../../components/common/SiteInfoBar';
|
||||
|
||||
<SiteInfoBar
|
||||
site={currentSite} // Site object with name, domain, etc.
|
||||
onSiteChange={handleSiteChange} // Optional: Callback when site changes
|
||||
showSelector={true} // Whether to show site selector dropdown
|
||||
/>
|
||||
```
|
||||
|
||||
### OnboardingWizard Components
|
||||
|
||||
Located in `components/onboarding/`:
|
||||
|
||||
```tsx
|
||||
import { OnboardingWizard } from '../../components/onboarding/OnboardingWizard';
|
||||
import {
|
||||
Step1Welcome,
|
||||
Step2AddSite,
|
||||
Step3ConnectIntegration,
|
||||
Step4AddKeywords,
|
||||
Step5Complete,
|
||||
} from '../../components/onboarding/steps';
|
||||
```
|
||||
|
||||
### CalendarItemTooltip
|
||||
|
||||
Tooltip specifically designed for calendar items.
|
||||
|
||||
```tsx
|
||||
import { CalendarItemTooltip } from '../../components/ui/tooltip';
|
||||
|
||||
<CalendarItemTooltip
|
||||
item={contentItem} // Content object
|
||||
onView={handleView} // Optional: View callback
|
||||
onRemove={handleRemove} // Optional: Remove callback
|
||||
/>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 9. LIVE REFERENCE
|
||||
|
||||
View all components with live examples at: `/ui-elements`
|
||||
|
||||
@@ -603,7 +655,7 @@ This page shows every component with all prop variations.
|
||||
|
||||
---
|
||||
|
||||
## 9. AI AGENT INSTRUCTIONS
|
||||
## 10. AI AGENT INSTRUCTIONS
|
||||
|
||||
When working on this codebase, AI agents MUST:
|
||||
|
||||
@@ -611,6 +663,20 @@ When working on this codebase, AI agents MUST:
|
||||
2. **Import icons only from `src/icons`** - never from external libraries
|
||||
3. **Follow the import paths** specified in this document
|
||||
4. **Check ESLint** after making changes: `npm run lint`
|
||||
5. **Use semantic color tokens** - never hardcoded hex values or Tailwind defaults
|
||||
|
||||
### Color Rules
|
||||
```tsx
|
||||
// ✅ CORRECT - Use semantic tokens
|
||||
className="bg-brand-500 text-gray-900 border-success-500"
|
||||
|
||||
// ❌ WRONG - Tailwind defaults (DISABLED)
|
||||
className="bg-blue-500 text-slate-900 border-green-500"
|
||||
|
||||
// ❌ WRONG - Hardcoded hex
|
||||
className="bg-[#0077B6]"
|
||||
style={{ color: '#DC2626' }}
|
||||
```
|
||||
5. **Reference this document** for correct component usage
|
||||
6. **Use consistent icon sizing**: `className="w-4 h-4"` for small, `w-5 h-5` for medium
|
||||
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
>
|
||||
> 🔒 **STYLE LOCKED** - This design system is enforced by ESLint. All frontend code must comply.
|
||||
|
||||
**Last Updated:** January 2, 2026
|
||||
**Last Updated:** January 3, 2026
|
||||
**Version:** 1.3.2
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,64 +1,127 @@
|
||||
# Design System & Component Guidelines
|
||||
|
||||
> 🔒 **STYLE SYSTEM LOCKED** - This design system is **LOCKED** as of 2025-01-XX. Read this entire document before making any styling changes.
|
||||
**Last Updated:** January 3, 2026
|
||||
**Version:** 1.3.2
|
||||
|
||||
> 🔒 **STYLE SYSTEM LOCKED** - This design system is **LOCKED**. Read this entire document before making any styling changes.
|
||||
|
||||
## 🎨 Design Token System
|
||||
|
||||
**Single Source of Truth**: All design tokens (colors, gradients, shadows) are defined in `/src/styles/tokens.css`
|
||||
**Single Source of Truth**: `/src/styles/design-system.css`
|
||||
|
||||
### Color Tokens
|
||||
⚠️ **CRITICAL**: Only 6 hex color values exist in the entire system. Everything else is derived using `color-mix()`.
|
||||
|
||||
Use CSS variables for colors:
|
||||
- `var(--color-primary)` - Primary brand blue (#0693e3)
|
||||
- `var(--color-primary-dark)` - Primary dark (#0472b8)
|
||||
- `var(--color-success)` - Success green (#0bbf87)
|
||||
- `var(--color-warning)` - Warning amber (#ff7a00)
|
||||
- `var(--color-danger)` - Danger red (#ef4444)
|
||||
- `var(--color-purple)` - Purple accent (#5d4ae3)
|
||||
### The 6 Base Colors
|
||||
|
||||
| Token | Hex | Purpose |
|
||||
|-------|-----|---------|
|
||||
| `--color-primary` | `#0077B6` | Brand blue |
|
||||
| `--color-success` | `#00B894` | Success green |
|
||||
| `--color-warning` | `#F59E0B` | Warning amber |
|
||||
| `--color-danger` | `#DC2626` | Error red |
|
||||
| `--color-purple` | `#7C3AED` | Premium purple |
|
||||
| `--color-gray-base` | `#667085` | Neutral gray |
|
||||
|
||||
### Color Scales (Derived)
|
||||
|
||||
Each base color generates a full scale (50-950) via `color-mix()`:
|
||||
|
||||
```css
|
||||
/* Example: brand color scale */
|
||||
--color-brand-50 /* Lightest */
|
||||
--color-brand-100
|
||||
--color-brand-200
|
||||
--color-brand-300
|
||||
--color-brand-400
|
||||
--color-brand-500 /* Base = --color-primary */
|
||||
--color-brand-600
|
||||
--color-brand-700
|
||||
--color-brand-800
|
||||
--color-brand-900
|
||||
--color-brand-950 /* Darkest */
|
||||
```
|
||||
|
||||
### Tailwind Color Classes
|
||||
|
||||
**Available (Use These):**
|
||||
```css
|
||||
/* Brand */ bg-brand-50 ... bg-brand-950, text-brand-*, border-brand-*
|
||||
/* Success */ bg-success-50 ... bg-success-950, text-success-*, border-success-*
|
||||
/* Warning */ bg-warning-50 ... bg-warning-950, text-warning-*, border-warning-*
|
||||
/* Error */ bg-error-50 ... bg-error-950, text-error-*, border-error-*
|
||||
/* Purple */ bg-purple-50 ... bg-purple-950, text-purple-*, border-purple-*
|
||||
/* Gray */ bg-gray-50 ... bg-gray-950, text-gray-*, border-gray-*
|
||||
/* Info */ bg-info-50 ... bg-info-950 (alias for brand)
|
||||
```
|
||||
|
||||
**DISABLED (DO NOT USE):**
|
||||
```css
|
||||
/* These Tailwind defaults are DISABLED and won't work */
|
||||
blue-*, red-*, green-*, yellow-*, orange-*, indigo-*, violet-*,
|
||||
pink-*, rose-*, cyan-*, teal-*, emerald-*, lime-*, amber-*,
|
||||
slate-*, zinc-*, neutral-*, stone-*
|
||||
```
|
||||
|
||||
### Using Colors
|
||||
|
||||
**✅ DO:**
|
||||
```tsx
|
||||
// Use Tailwind utilities with brand colors
|
||||
<div className="bg-brand-500 text-white">Content</div>
|
||||
// Use semantic Tailwind utilities
|
||||
<div className="bg-brand-500 text-white">Primary action</div>
|
||||
<div className="bg-success-100 text-success-700">Success message</div>
|
||||
<div className="bg-error-50 border-error-500">Error alert</div>
|
||||
|
||||
// Use CSS variables for custom values
|
||||
<div className="bg-[var(--color-primary)]">Content</div>
|
||||
// Use CSS variables for custom cases
|
||||
<div className="bg-[var(--color-primary)]">Custom</div>
|
||||
|
||||
// Use React components
|
||||
<Button tone="brand" variant="gradient">Click me</Button>
|
||||
// Use React components with tone prop
|
||||
<Button tone="brand">Primary</Button>
|
||||
<Button tone="success">Approve</Button>
|
||||
<Badge tone="warning">Pending</Badge>
|
||||
```
|
||||
|
||||
**❌ DON'T:**
|
||||
```tsx
|
||||
// Don't use deprecated .igny8-* utility classes
|
||||
<div className="igny8-bg-blue">Content</div>
|
||||
// Don't use Tailwind default colors (DISABLED)
|
||||
<div className="bg-blue-500">Won't work!</div>
|
||||
<div className="text-slate-700">Won't work!</div>
|
||||
|
||||
// Don't hardcode color values
|
||||
<div className="bg-[#0693e3]">Content</div>
|
||||
|
||||
// Don't use inline styles
|
||||
<div style={{ backgroundColor: '#0693e3' }}>Content</div>
|
||||
// Don't hardcode hex values
|
||||
<div className="bg-[#0077B6]">Bad!</div>
|
||||
<div style={{ backgroundColor: '#DC2626' }}>Bad!</div>
|
||||
```
|
||||
|
||||
## 🔒 Style System Lock Status
|
||||
|
||||
**DO NOT:**
|
||||
- ❌ Create new CSS classes without documenting in this file
|
||||
- ❌ Use Tailwind default color classes (blue-*, red-*, green-*, etc.)
|
||||
- ❌ Hardcode hex color values anywhere
|
||||
- ❌ Use inline styles for colors/spacing/typography
|
||||
- ❌ Import from external icon libraries (lucide-react, @heroicons)
|
||||
- ❌ Create new CSS classes without documenting
|
||||
- ❌ Duplicate existing styling patterns
|
||||
- ❌ Create custom colors/utilities that already exist
|
||||
- ❌ Use deprecated `.igny8-*` utility classes (except `.igny8-table-*` and `.igny8-header-metric-*`)
|
||||
- ❌ Add inline styles for colors/spacing/typography
|
||||
- ❌ Hardcode color hex values
|
||||
|
||||
**DO:**
|
||||
- ✅ Check this document before creating any styles
|
||||
- ✅ Use design tokens from `tokens.css` via CSS variables
|
||||
- ✅ Use Tailwind utilities (bg-brand-500, text-brand-500, etc.)
|
||||
- ✅ Use React components (Button, Badge, Card) from `/components/ui/`
|
||||
- ✅ Follow component patterns from this guide
|
||||
- ✅ Update this document if you MUST add something new
|
||||
- ✅ Use semantic color tokens (brand-*, success-*, etc.)
|
||||
- ✅ Import icons from `src/icons`
|
||||
- ✅ Use React components (Button, Badge, Card, InputField)
|
||||
- ✅ Run `npm run lint` to check for violations
|
||||
- ✅ Check `/ui-elements` for component examples
|
||||
|
||||
---
|
||||
|
||||
## Module Color Scheme (v1.3.2)
|
||||
|
||||
Each module has a distinct color for visual identification:
|
||||
|
||||
| Module | Color | Tailwind Classes |
|
||||
|--------|-------|------------------|
|
||||
| **Planner** (Keywords/Clusters/Ideas) | Purple | `bg-purple-*`, `text-purple-*` |
|
||||
| **Writer** (Tasks/Content/Images) | Green | `bg-success-*`, `text-success-*` |
|
||||
| **Automation** | Blue | `bg-brand-*`, `text-brand-*` |
|
||||
| **Publisher** | Orange | `bg-warning-*`, `text-warning-*` |
|
||||
| **Billing** | Purple | `bg-purple-*`, `text-purple-*` |
|
||||
| **Settings** | Gray | `bg-gray-*`, `text-gray-*` |
|
||||
|
||||
---
|
||||
|
||||
@@ -148,7 +211,7 @@ Before implementing any UI element:
|
||||
|
||||
## 📝 Typography Scale
|
||||
|
||||
Typography tokens are defined in `index.css` and should be used consistently:
|
||||
Typography tokens are defined in `design-system.css` and should be used consistently:
|
||||
|
||||
### Title Sizes (for page/section headings)
|
||||
| Token | Size | Line Height | Use Case |
|
||||
@@ -192,14 +255,15 @@ Module-specific colors are defined in `src/config/colors.config.ts`:
|
||||
|
||||
| Module | Primary Color | Usage |
|
||||
|--------|---------------|-------|
|
||||
| Keywords | `brand-500` (blue) | Icons, progress bars, badges |
|
||||
| Clusters | `purple-500` | Icons, progress bars, badges |
|
||||
| Ideas | `purple-600` | Icons, progress bars, badges |
|
||||
| Tasks | `success-600` (green) | Icons, progress bars, badges |
|
||||
| Content | `success-500` | Icons, progress bars, badges |
|
||||
| Images | `purple-500` | Icons, progress bars, badges |
|
||||
| Planner (Keywords) | `brand-500` (blue) | Icons, progress bars, badges |
|
||||
| Planner (Clusters) | `purple-500` | Icons, progress bars, badges |
|
||||
| Planner (Ideas) | `purple-600` | Icons, progress bars, badges |
|
||||
| Writer (Tasks) | `success-600` (green) | Icons, progress bars, badges |
|
||||
| Writer (Content) | `success-500` | Icons, progress bars, badges |
|
||||
| Writer (Images) | `purple-500` | Icons, progress bars, badges |
|
||||
| Automation | `brand-500` | Pipeline cards |
|
||||
| Billing | `warning-500` (amber) | Credit displays |
|
||||
| Publisher | `warning-500` (amber) | Calendar, scheduling |
|
||||
| Billing | `purple-500` | Credit displays |
|
||||
|
||||
```tsx
|
||||
import { MODULE_COLORS } from '@/config/colors.config';
|
||||
@@ -211,7 +275,7 @@ import { MODULE_COLORS } from '@/config/colors.config';
|
||||
|
||||
---
|
||||
|
||||
**Last Updated**: January 2, 2026
|
||||
**Last Updated**: January 3, 2026
|
||||
**Status**: Active Design System Rules - 🔒 LOCKED
|
||||
|
||||
---
|
||||
@@ -228,7 +292,7 @@ import { MODULE_COLORS } from '@/config/colors.config';
|
||||
|----------|--------------|------------|
|
||||
| **UI Components** | `@/components/ui/` or relative `../components/ui/` | Button, Card, Modal, Alert, Badge, Dropdown, Tooltip, Spinner, Tabs, Toast, Pagination, Progress, Avatar, Breadcrumb |
|
||||
| **Common Components** | `@/components/common/` | PageHeader, ComponentCard, ConfirmDialog, FormModal, TablePageTemplate |
|
||||
| **Icons** | `@/icons` or `@heroicons/react` | All SVG icons |
|
||||
| **Icons** | `@/icons` | All SVG icons (local icons only - external libraries disabled) |
|
||||
| **Templates** | `@/templates/` | TablePageTemplate, ContentViewTemplate |
|
||||
|
||||
### BANNED IMPORTS (DO NOT USE)
|
||||
@@ -254,11 +318,12 @@ const MyButton = () => <button className="...">; // If used more than once, crea
|
||||
|
||||
| File | Purpose | When to Use |
|
||||
|------|---------|-------------|
|
||||
| `src/index.css` | Main Tailwind config, utilities | Auto-imported, don't import manually |
|
||||
| `src/styles/tokens.css` | CSS variables (colors, shadows) | Use via `var(--color-name)` |
|
||||
| `src/styles/design-system.css` | ALL design tokens, colors, shadows, typography | Single source - auto-imported via main.tsx |
|
||||
|
||||
**DO NOT CREATE OR USE:**
|
||||
- ❌ `styles/global.css` - Deprecated
|
||||
- ❌ `src/styles/global.css` - **Deleted** (consolidated into design-system.css)
|
||||
- ❌ `src/styles/tokens.css` - **Deleted** (consolidated into design-system.css)
|
||||
- ❌ `src/styles/index.css` - **Deleted** (consolidated into design-system.css)
|
||||
- ❌ `components/shared/blocks/blocks.css` - For marketing only
|
||||
- ❌ `components/shared/layouts/layouts.css` - For marketing only
|
||||
- ❌ Any new `.css` files in component folders
|
||||
@@ -375,8 +440,10 @@ src/components/ui/
|
||||
|--------|-------|------|
|
||||
| Planner | Keywords, Clusters, Ideas | `src/pages/Planner/` |
|
||||
| Writer | Review, Approved, Content | `src/pages/Writer/` |
|
||||
| Publisher | ContentCalendar, PublishingQueue | `src/pages/Publisher/` |
|
||||
| Sites | List, Settings | `src/pages/Sites/` |
|
||||
| Dashboard | Home | `src/pages/Dashboard/` |
|
||||
| Setup | SetupWizard (Onboarding) | `src/pages/Setup/` |
|
||||
|
||||
### AUDIT CHECKLIST FOR CODE REVIEW
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Frontend Pages & Routes
|
||||
|
||||
**Last Verified:** January 1, 2026
|
||||
**Version:** 1.3.0
|
||||
**Last Verified:** January 3, 2026
|
||||
**Version:** 1.3.2
|
||||
**Framework:** React 19 + TypeScript + React Router 6 + Vite
|
||||
|
||||
---
|
||||
@@ -60,6 +60,27 @@ Routes defined in `/frontend/src/App.tsx`:
|
||||
|
||||
## SETUP Routes
|
||||
|
||||
### Onboarding Wizard (NEW v1.3.2)
|
||||
|
||||
| Route | File | Description |
|
||||
|-------|------|-------------|
|
||||
| `/setup/wizard` | `Setup/SetupWizard.tsx` | 5-step onboarding wizard for new users |
|
||||
|
||||
**Steps:**
|
||||
1. **Welcome** - Feature overview, get started CTA
|
||||
2. **Add Site** - Site name, industry/sector selection, creates site with defaults
|
||||
3. **Connect Integration** - WordPress plugin installation (optional, can skip)
|
||||
4. **Add Keywords** - Initial keyword entry with paste support (optional)
|
||||
5. **Complete** - Success summary, next steps, go to dashboard
|
||||
|
||||
**Components:** `frontend/src/components/onboarding/`
|
||||
- `OnboardingWizard.tsx` - Main wizard container and state
|
||||
- `steps/Step1Welcome.tsx` - Welcome screen
|
||||
- `steps/Step2AddSite.tsx` - Site creation with SelectDropdown + Badge sectors
|
||||
- `steps/Step3ConnectIntegration.tsx` - WordPress setup
|
||||
- `steps/Step4AddKeywords.tsx` - Keyword input
|
||||
- `steps/Step5Complete.tsx` - Completion summary
|
||||
|
||||
### Add Keywords
|
||||
|
||||
| Route | File | Description |
|
||||
@@ -86,11 +107,19 @@ Routes defined in `/frontend/src/App.tsx`:
|
||||
| Route | File | Description |
|
||||
|-------|------|-------------|
|
||||
| `/sites` | `Sites/List.tsx` | Site listing with setup checklist per site |
|
||||
| `/sites/:id/dashboard` | `Sites/Dashboard.tsx` | Site overview with setup checklist |
|
||||
| `/sites/:id/settings` | `Sites/Settings.tsx` | Site settings (General, Integrations, Content Types) |
|
||||
| `/sites/:id` | `Sites/Dashboard.tsx` | Site dashboard with quick actions and widgets |
|
||||
| `/sites/:id/settings` | `Sites/Settings.tsx` | Site settings (General, Integrations, Publishing, Content Types) |
|
||||
|
||||
**v1.3.2 Changes:**
|
||||
- Site Dashboard redesigned with SiteInfoBar component
|
||||
- Quick actions now 2-column card grid layout
|
||||
- AI Operations widget loads real data from getDashboardStats API
|
||||
- Fixed race condition in async loadSiteData
|
||||
- Settings page has new Publishing Settings tab
|
||||
|
||||
**Components:**
|
||||
- `SiteSetupChecklist` - Shows setup progress (site created, industry/sectors, WordPress, keywords)
|
||||
- `SiteInfoBar` - Reusable site info header for site-specific pages
|
||||
|
||||
### Thinker (Admin Only)
|
||||
|
||||
@@ -136,7 +165,42 @@ Routes defined in `/frontend/src/App.tsx`:
|
||||
|
||||
| Route | File | Description |
|
||||
|-------|------|-------------|
|
||||
| `/automation` | `Automation/Dashboard.tsx` | 7-stage pipeline, schedule config, run controls |
|
||||
| `/automation` | `Automation/AutomationPage.tsx` | 7-stage pipeline, schedule config, run controls |
|
||||
|
||||
---
|
||||
|
||||
## PUBLISHER Routes (NEW v1.3.2)
|
||||
|
||||
### Content Calendar
|
||||
|
||||
| Route | File | Description |
|
||||
|-------|------|-------------|
|
||||
| `/publisher` | → `/publisher/content-calendar` | Redirect |
|
||||
| `/publisher/content-calendar` | `Publisher/ContentCalendar.tsx` | Content calendar with scheduling |
|
||||
|
||||
**Features:**
|
||||
- Calendar view with month navigation
|
||||
- List view with drag-and-drop reordering
|
||||
- Schedule content by dragging to calendar dates
|
||||
- Unschedule content from queue
|
||||
- Stats: scheduled, publishing, published counts
|
||||
- Filter by site (inherited from layout)
|
||||
|
||||
**Content Status Fields:**
|
||||
- `status`: `draft | review | approved | published` (workflow status)
|
||||
- `site_status`: `not_published | scheduled | publishing | published | failed` (publishing status)
|
||||
- `scheduled_publish_at`: DateTime for scheduled publishing
|
||||
|
||||
**API Integration:**
|
||||
- `POST /api/v1/writer/content/{id}/schedule/` - Schedule content
|
||||
- `POST /api/v1/writer/content/{id}/unschedule/` - Remove from schedule
|
||||
- `GET /api/v1/writer/content/?status__in=approved,published` - Multi-status filter
|
||||
|
||||
### Legacy Redirects
|
||||
|
||||
| Old Route | Redirects To |
|
||||
|-----------|--------------|
|
||||
| `/sites/:id/publishing-queue` | `/publisher/content-calendar` |
|
||||
|
||||
### Linker (Optional Module)
|
||||
|
||||
@@ -269,9 +333,20 @@ These routes redirect to their new locations:
|
||||
| `/profile` | `/account/settings` |
|
||||
| `/import-export` | `/account/settings` |
|
||||
| `/billing/overview` | `/account/plans` |
|
||||
| `/billing/credits` | `/account/plans` (separate page exists at `Billing/CreditPurchase.tsx`) |
|
||||
| `/billing/credits` | `/account/plans` |
|
||||
| `/billing/history` | `/account/plans` |
|
||||
| `/publishing` | `/account/content-settings` |
|
||||
| `/writer/published` | `/writer/approved` |
|
||||
| `/sites/:id/publishing-queue` | `/publisher/content-calendar` |
|
||||
|
||||
---
|
||||
|
||||
## Internal Pages (Non-Indexed)
|
||||
|
||||
| Route | File | Description |
|
||||
|-------|------|-------------|
|
||||
| `/ui-elements` | `UIElements.tsx` | Design system reference page |
|
||||
| `/components` | `Components.tsx` | Component showcase |
|
||||
|
||||
---
|
||||
|
||||
@@ -282,6 +357,7 @@ frontend/src/pages/
|
||||
├── account/
|
||||
│ ├── AccountSettingsPage.tsx # Account, Profile, Team tabs
|
||||
│ ├── ContentSettingsPage.tsx # Content Gen, Publishing, Images tabs
|
||||
│ ├── NotificationsPage.tsx # Full notifications with filters
|
||||
│ ├── PlansAndBillingPage.tsx # Plan, Upgrade, History tabs
|
||||
│ ├── UsageAnalyticsPage.tsx # Limits, Credit History, API tabs
|
||||
│ ├── UsageLimits.tsx # Limits tab component
|
||||
@@ -293,7 +369,7 @@ frontend/src/pages/
|
||||
│ ├── ResetPassword.tsx
|
||||
│ └── VerifyEmail.tsx
|
||||
├── Automation/
|
||||
│ └── Dashboard.tsx
|
||||
│ └── AutomationPage.tsx
|
||||
├── Billing/
|
||||
│ └── CreditPurchase.tsx
|
||||
├── Dashboard/
|
||||
@@ -310,28 +386,34 @@ frontend/src/pages/
|
||||
├── Planner/
|
||||
│ ├── Keywords.tsx
|
||||
│ ├── Clusters.tsx
|
||||
│ ├── ClusterView.tsx
|
||||
│ ├── ClusterDetail.tsx
|
||||
│ └── Ideas.tsx
|
||||
├── Publisher/ # NEW v1.3.2
|
||||
│ └── ContentCalendar.tsx
|
||||
├── Settings/
|
||||
│ └── IntegrationPage.tsx # AI Models (admin)
|
||||
├── Setup/
|
||||
│ └── IndustriesSectorsKeywords.tsx # Add Keywords page
|
||||
│ ├── IndustriesSectorsKeywords.tsx # Add Keywords page
|
||||
│ └── SetupWizard.tsx # NEW v1.3.2 - Onboarding wizard
|
||||
├── Sites/
|
||||
│ ├── List.tsx # Site listing
|
||||
│ ├── Dashboard.tsx # Site overview + checklist
|
||||
│ └── Settings.tsx # Site configuration
|
||||
│ ├── Dashboard.tsx # Site overview + quick actions
|
||||
│ ├── Settings.tsx # Site config with Publishing tab
|
||||
│ ├── Content.tsx # Site content listing
|
||||
│ └── SyncDashboard.tsx # Sync status
|
||||
├── Thinker/
|
||||
│ ├── Prompts.tsx
|
||||
│ ├── AuthorProfiles.tsx
|
||||
│ ├── Strategies.tsx # Coming Soon
|
||||
│ └── ImageTesting.tsx # Coming Soon
|
||||
└── Writer/
|
||||
├── Tasks.tsx
|
||||
├── Drafts.tsx
|
||||
├── ContentView.tsx
|
||||
├── Images.tsx
|
||||
├── Review.tsx
|
||||
└── Approved.tsx # Renamed from Published.tsx (v1.2.0)
|
||||
├── Writer/
|
||||
│ ├── Tasks.tsx
|
||||
│ ├── Content.tsx
|
||||
│ ├── ContentView.tsx
|
||||
│ ├── Images.tsx
|
||||
│ ├── Review.tsx
|
||||
│ └── Approved.tsx # Renamed from Published.tsx (v1.2.0)
|
||||
└── UIElements.tsx # NEW v1.3.2 - Design system ref
|
||||
```
|
||||
|
||||
---
|
||||
@@ -353,14 +435,15 @@ frontend/src/pages/
|
||||
|
||||
---
|
||||
|
||||
## Navigation Structure (Sidebar)
|
||||
## Navigation Structure (Sidebar v1.3.2)
|
||||
|
||||
```
|
||||
Dashboard
|
||||
├── SETUP
|
||||
│ ├── Setup Wizard [first-time users]
|
||||
│ ├── Add Keywords
|
||||
│ ├── Content Settings
|
||||
│ ├── Sites [if site_builder enabled]
|
||||
│ ├── Sites
|
||||
│ └── Thinker [admin only, if thinker enabled]
|
||||
├── WORKFLOW
|
||||
│ ├── Planner [if planner enabled]
|
||||
@@ -368,9 +451,12 @@ Dashboard
|
||||
│ ├── Writer [if writer enabled]
|
||||
│ │ └── In-page: Queue → Drafts → Images → Review → Approved
|
||||
│ ├── Automation [if automation enabled]
|
||||
│ ├── Publisher
|
||||
│ │ └── Content Calendar
|
||||
│ ├── Linker [if linker enabled]
|
||||
│ └── Optimizer [if optimizer enabled]
|
||||
├── ACCOUNT
|
||||
│ ├── Notifications
|
||||
│ ├── Account Settings (Account → Profile → Team)
|
||||
│ ├── Plans & Billing (Plan → Upgrade → History)
|
||||
│ ├── Usage (Limits → Credit History → API Activity)
|
||||
@@ -381,11 +467,15 @@ Dashboard
|
||||
|
||||
---
|
||||
|
||||
## Known Issues (from Audit)
|
||||
## Component Updates (v1.3.2)
|
||||
|
||||
1. **Linker/Optimizer Dashboards** exist but not exposed in navigation
|
||||
2. **Help sub-pages** are placeholders
|
||||
3. **ContentView** is read-only (no editing capability)
|
||||
4. Legacy redirects may cause confusion
|
||||
**New Components:**
|
||||
- `SiteInfoBar` - Reusable site info header for site-specific pages
|
||||
- `IconButton` - Icon-only button component
|
||||
- `CalendarItemTooltip` - Tooltip for calendar items
|
||||
- `OnboardingWizard` + 5 step components
|
||||
|
||||
See `/PRE-LAUNCH-AUDIT.md` for complete issue list.
|
||||
**Updated Components:**
|
||||
- All components updated for semantic color tokens
|
||||
- Badge, Button, Card use design system colors
|
||||
- 100+ files with color standardization
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Zustand State Management
|
||||
|
||||
**Last Verified:** December 27, 2025
|
||||
**Version:** 1.2.0
|
||||
**Last Verified:** January 3, 2026
|
||||
**Version:** 1.3.2
|
||||
**Framework:** Zustand 4 with persist middleware
|
||||
|
||||
---
|
||||
@@ -15,6 +15,19 @@ All stores in `/frontend/src/store/` use Zustand with TypeScript.
|
||||
- Async actions for API calls
|
||||
- Selectors for derived state
|
||||
|
||||
**Available Stores:**
|
||||
- `authStore.ts` - Authentication state
|
||||
- `siteStore.ts` - Site selection/management
|
||||
- `sectorStore.ts` - Sector management
|
||||
- `plannerStore.ts` - Planner module state
|
||||
- `billingStore.ts` - Billing/credits
|
||||
- `notificationStore.ts` - Notifications
|
||||
- `settingsStore.ts` - User preferences
|
||||
- `moduleStore.ts` - Module navigation
|
||||
- `columnVisibilityStore.ts` - Table column prefs
|
||||
- `pageSizeStore.ts` - Table pagination prefs
|
||||
- **`onboardingStore.ts`** - Onboarding wizard state (v1.3.2)
|
||||
|
||||
---
|
||||
|
||||
## Auth Store (`authStore.ts`)
|
||||
@@ -408,11 +421,57 @@ notificationStore (global, polls/syncs independently)
|
||||
|
||||
moduleStore (global, loads once per account)
|
||||
billingStore (global, loads once per account)
|
||||
onboardingStore (global, syncs with UserSettings backend)
|
||||
uiStore (local only, no API)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Onboarding Store (`onboardingStore.ts`) (v1.3.2)
|
||||
|
||||
**Purpose:** Manages onboarding wizard and guide screen state
|
||||
|
||||
```typescript
|
||||
interface OnboardingState {
|
||||
isGuideDismissed: boolean;
|
||||
isGuideVisible: boolean;
|
||||
isLoading: boolean;
|
||||
lastSyncedAt: Date | null;
|
||||
}
|
||||
|
||||
interface OnboardingActions {
|
||||
dismissGuide(): Promise<void>;
|
||||
showGuide(): void;
|
||||
toggleGuide(): void;
|
||||
loadFromBackend(): Promise<void>;
|
||||
syncToBackend(dismissed: boolean): Promise<void>;
|
||||
}
|
||||
```
|
||||
|
||||
**Persistence:**
|
||||
- Local: `onboarding-storage` in localStorage
|
||||
- Backend: `UserSettings` with key `workflow_guide_dismissed`
|
||||
|
||||
**Features:**
|
||||
- Cross-device sync via backend UserSettings
|
||||
- Rate-limited sync (max every 5 minutes)
|
||||
- Graceful fallback if backend unavailable
|
||||
|
||||
**Usage:**
|
||||
```typescript
|
||||
const { isGuideVisible, dismissGuide, showGuide } = useOnboardingStore();
|
||||
|
||||
// Show onboarding wizard
|
||||
if (isGuideVisible) {
|
||||
return <OnboardingWizard onDismiss={dismissGuide} />;
|
||||
}
|
||||
|
||||
// Re-show guide button
|
||||
<Button onClick={showGuide}>Show Guide</Button>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Store Files Location
|
||||
|
||||
```
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Database Models Reference
|
||||
|
||||
**Last Verified:** December 27, 2025
|
||||
**Last Verified:** January 3, 2026
|
||||
|
||||
---
|
||||
|
||||
@@ -10,7 +10,8 @@
|
||||
|-------|--------|------------|-----------|
|
||||
| **Global** | `GlobalIntegrationSettings`, `GlobalAIPrompt`, `GlobalAuthorProfile`, `GlobalStrategy`, `GlobalModuleSettings`, `Industry`, `SeedKeyword` | `models.Model` | None (platform-wide) |
|
||||
| **Account** | `Account`, `User`, `Plan`, `IntegrationSettings`, `ModuleEnableSettings`, `AISettings`, `AIPrompt`, `AuthorProfile`, `CreditBalance` | `AccountBaseModel` | `account` |
|
||||
| **Site+Sector** | `Keywords`, `Clusters`, `ContentIdeas`, `Tasks`, `Content`, `Images`, `AutomationConfig` | `SiteSectorBaseModel` | `site`, `sector` |
|
||||
| **Site** | `Site`, `PublishingSettings`, `AutomationConfig`, `SiteIntegration` | `AccountBaseModel` | `account`, `site` |
|
||||
| **Site+Sector** | `Keywords`, `Clusters`, `ContentIdeas`, `Tasks`, `Content`, `Images` | `SiteSectorBaseModel` | `site`, `sector` |
|
||||
|
||||
---
|
||||
|
||||
@@ -270,8 +271,18 @@ class Content(models.Model):
|
||||
meta_title = CharField(max_length=255, blank=True)
|
||||
meta_description = TextField(blank=True)
|
||||
|
||||
# Workflow status
|
||||
status = CharField(choices=CONTENT_STATUS) # draft, review, approved, published
|
||||
|
||||
# Publishing status (v1.3.2)
|
||||
site_status = CharField(choices=SITE_STATUS) # not_published, scheduled, publishing, published, failed
|
||||
scheduled_publish_at = DateTimeField(null=True)
|
||||
site_status_updated_at = DateTimeField(null=True)
|
||||
|
||||
# External site reference
|
||||
external_id = CharField(max_length=255, blank=True) # WordPress post ID
|
||||
external_url = URLField(blank=True) # Published URL
|
||||
|
||||
word_count = IntegerField(default=0)
|
||||
|
||||
created_by = ForeignKey(User)
|
||||
@@ -279,12 +290,19 @@ class Content(models.Model):
|
||||
updated_at = DateTimeField(auto_now=True)
|
||||
```
|
||||
|
||||
**Status Values:**
|
||||
**Workflow Status Values (status):**
|
||||
- `draft` - Initial state after generation
|
||||
- `review` - Pending human review
|
||||
- `approved` - Ready for publishing
|
||||
- `approved` - Ready for publishing (v1.3.2: NEW status)
|
||||
- `published` - Published to WordPress
|
||||
|
||||
**Publishing Status Values (site_status) - v1.3.2:**
|
||||
- `not_published` - Not yet scheduled for external site
|
||||
- `scheduled` - Scheduled for future publishing
|
||||
- `publishing` - Currently being published
|
||||
- `published` - Successfully published to external site
|
||||
- `failed` - Publishing failed
|
||||
|
||||
---
|
||||
|
||||
### ContentImage
|
||||
@@ -311,7 +329,7 @@ class ContentImage(models.Model):
|
||||
|
||||
---
|
||||
|
||||
## Integration Models (`igny8_core/modules/integration/models.py`)
|
||||
## Integration Models (`igny8_core/business/integration/models.py`)
|
||||
|
||||
### SiteIntegration
|
||||
|
||||
@@ -321,7 +339,7 @@ class SiteIntegration(models.Model):
|
||||
name = CharField(max_length=255)
|
||||
|
||||
site = ForeignKey(Site, related_name='integrations')
|
||||
integration_type = CharField(max_length=50) # wordpress
|
||||
platform = CharField(max_length=50) # wordpress
|
||||
|
||||
# Credentials (encrypted)
|
||||
url = URLField()
|
||||
@@ -344,7 +362,51 @@ class SiteIntegration(models.Model):
|
||||
|
||||
---
|
||||
|
||||
## Billing Models (`igny8_core/modules/billing/models.py`)
|
||||
### PublishingSettings (NEW v1.3.2)
|
||||
|
||||
```python
|
||||
class PublishingSettings(AccountBaseModel):
|
||||
"""Site-level publishing configuration. Controls auto-approval, publishing limits, and scheduling."""
|
||||
|
||||
site = OneToOneField(Site, related_name='publishing_settings')
|
||||
|
||||
# Auto-approval settings
|
||||
auto_approval_enabled = BooleanField(default=True)
|
||||
|
||||
# Auto-publish settings
|
||||
auto_publish_enabled = BooleanField(default=True)
|
||||
|
||||
# Publishing limits
|
||||
daily_publish_limit = PositiveIntegerField(default=3)
|
||||
weekly_publish_limit = PositiveIntegerField(default=15)
|
||||
monthly_publish_limit = PositiveIntegerField(default=50)
|
||||
|
||||
# Publishing schedule
|
||||
publish_days = JSONField(default=['mon', 'tue', 'wed', 'thu', 'fri'])
|
||||
publish_time_slots = JSONField(default=['09:00', '14:00', '18:00'])
|
||||
|
||||
created_at = DateTimeField(auto_now_add=True)
|
||||
updated_at = DateTimeField(auto_now=True)
|
||||
```
|
||||
|
||||
**Default Values:**
|
||||
- `auto_approval_enabled`: True (auto-approve after review)
|
||||
- `auto_publish_enabled`: True (auto-publish approved content)
|
||||
- `daily_publish_limit`: 3 articles per day
|
||||
- `weekly_publish_limit`: 15 articles per week
|
||||
- `monthly_publish_limit`: 50 articles per month
|
||||
- `publish_days`: Monday through Friday
|
||||
- `publish_time_slots`: 9:00 AM, 2:00 PM, 6:00 PM
|
||||
|
||||
**Usage:**
|
||||
```python
|
||||
# Get or create with defaults
|
||||
settings, created = PublishingSettings.get_or_create_for_site(site)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Billing Models (`igny8_core/business/billing/models.py`)
|
||||
|
||||
### Plan
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# IGNY8 Technical Documentation
|
||||
|
||||
**Version:** 1.3.1
|
||||
**Last Updated:** January 2, 2026
|
||||
**Version:** 1.3.2
|
||||
**Last Updated:** January 3, 2026
|
||||
**Purpose:** Complete technical reference for the IGNY8 AI content platform
|
||||
|
||||
---
|
||||
@@ -21,6 +21,7 @@
|
||||
| Trace a workflow end-to-end | [40-WORKFLOWS/](#workflows) |
|
||||
| Look up model fields | [90-REFERENCE/MODELS.md](90-REFERENCE/MODELS.md) |
|
||||
| See prelaunch checklist | [plans/FINAL-PRELAUNCH.md](plans/FINAL-PRELAUNCH.md) |
|
||||
| **Understand publishing flow** | [50-DEPLOYMENT/WORDPRESS-INTEGRATION-FLOW.md](50-DEPLOYMENT/WORDPRESS-INTEGRATION-FLOW.md) |
|
||||
|
||||
---
|
||||
|
||||
@@ -46,7 +47,7 @@
|
||||
| **Integrations** | ✅ Active | WordPress sync, webhooks | [INTEGRATIONS.md](10-MODULES/INTEGRATIONS.md) |
|
||||
| **Notifications** | ✅ Active | Real-time notifications for AI tasks | [NOTIFICATIONS.md](10-MODULES/NOTIFICATIONS.md) |
|
||||
| **System** | ✅ Active | Settings, prompts, AI config | [SYSTEM-SETTINGS.md](10-MODULES/SYSTEM-SETTINGS.md) |
|
||||
| **Publisher** | ✅ Active | Content publishing pipeline | [PUBLISHER.md](10-MODULES/PUBLISHER.md) |
|
||||
| **Publisher** | ✅ Active | Content calendar, scheduled publishing | [PUBLISHER.md](10-MODULES/PUBLISHER.md) |
|
||||
| **Linker** | ⏸️ Inactive | Internal linking (disabled by default) | [LINKER.md](10-MODULES/LINKER.md) |
|
||||
| **Optimizer** | ⏸️ Inactive | Content optimization (disabled by default) | [OPTIMIZER.md](10-MODULES/OPTIMIZER.md) |
|
||||
|
||||
@@ -72,15 +73,17 @@
|
||||
| [PAGE-REQUIREMENTS.md](30-FRONTEND/PAGE-REQUIREMENTS.md) | Site/sector selector requirements |
|
||||
| [STORES.md](30-FRONTEND/STORES.md) | Zustand state management |
|
||||
|
||||
### Current Page Structure (v1.2.0)
|
||||
### Current Page Structure (v1.3.2)
|
||||
|
||||
```
|
||||
/ → Dashboard (Home.tsx) - with new widgets
|
||||
/ → Dashboard (Home.tsx) - with workflow widgets
|
||||
├── SETUP
|
||||
│ /setup/wizard → Onboarding Wizard (SetupWizard.tsx) [NEW v1.3.2]
|
||||
│ /setup/add-keywords → Add Keywords (AddKeywords.tsx)
|
||||
│ /account/content-settings → Content Settings (ContentSettingsPage.tsx)
|
||||
│ /sites → Sites List (List.tsx)
|
||||
│ /sites/:id/settings → Site Settings (SiteSettings.tsx)
|
||||
│ /sites/:id → Site Dashboard (Dashboard.tsx)
|
||||
│ /sites/:id/settings → Site Settings (Settings.tsx) - with Publishing tab
|
||||
│ /thinker/prompts → Thinker Prompts (Prompts.tsx) [Admin]
|
||||
│ /thinker/author-profiles → Author Profiles (AuthorProfiles.tsx) [Admin]
|
||||
├── WORKFLOW
|
||||
@@ -92,10 +95,14 @@
|
||||
│ /writer/images → Images (Images.tsx)
|
||||
│ /writer/review → Review (Review.tsx)
|
||||
│ /writer/approved → Approved (Approved.tsx)
|
||||
│ /automation → Automation Dashboard (Dashboard.tsx)
|
||||
│ /automation → Automation Dashboard (AutomationPage.tsx)
|
||||
├── PUBLISHER [NEW v1.3.2]
|
||||
│ /publisher/content-calendar → Content Calendar (ContentCalendar.tsx)
|
||||
├── OPTIONAL MODULES
|
||||
│ /linker/content → Linker [if enabled]
|
||||
│ /optimizer/content → Optimizer [if enabled]
|
||||
├── ACCOUNT
|
||||
│ /account/notifications → Notifications (NotificationsPage.tsx)
|
||||
│ /account/settings → Account Settings (AccountSettingsPage.tsx)
|
||||
│ - Tabs: Account, Profile, Team
|
||||
│ /account/plans → Plans & Billing (PlansAndBillingPage.tsx)
|
||||
@@ -103,8 +110,10 @@
|
||||
│ /account/usage → Usage Analytics (UsageAnalyticsPage.tsx)
|
||||
│ - Tabs: Limits, Credit History, API Activity
|
||||
│ /settings/integration → AI Models (IntegrationPage.tsx) [Admin]
|
||||
└── HELP
|
||||
/help → Help Center (HelpCenter.tsx)
|
||||
├── HELP
|
||||
│ /help → Help Center (HelpCenter.tsx)
|
||||
└── INTERNAL
|
||||
/ui-elements → UI Elements (UIElements.tsx) [Design System Ref]
|
||||
```
|
||||
|
||||
---
|
||||
@@ -114,8 +123,7 @@
|
||||
| Document | Purpose |
|
||||
|----------|---------|
|
||||
| [CONTENT-PIPELINE.md](40-WORKFLOWS/CONTENT-PIPELINE.md) | Keyword → Published article flow |
|
||||
| [CREDIT-DEDUCTION.md](40-WORKFLOWS/CREDIT-DEDUCTION.md) | When and how credits are used |
|
||||
| [WORDPRESS-SYNC.md](40-WORKFLOWS/WORDPRESS-SYNC.md) | Two-way WordPress synchronization |
|
||||
| [CREDIT-SYSTEM.md](40-WORKFLOWS/CREDIT-SYSTEM.md) | When and how credits are used |
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user