diff --git a/CHANGELOG.md b/CHANGELOG.md
index e1135457..15a32d6f 100644
--- a/CHANGELOG.md
+++ b/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)
diff --git a/docs/10-MODULES/AUTOMATION.md b/docs/10-MODULES/AUTOMATION.md
index 502eab02..c4da6c3e 100644
--- a/docs/10-MODULES/AUTOMATION.md
+++ b/docs/10-MODULES/AUTOMATION.md
@@ -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.
---
diff --git a/docs/10-MODULES/INTEGRATIONS.md b/docs/10-MODULES/INTEGRATIONS.md
index 0af713d9..c83410a3 100644
--- a/docs/10-MODULES/INTEGRATIONS.md
+++ b/docs/10-MODULES/INTEGRATIONS.md
@@ -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
diff --git a/docs/10-MODULES/PUBLISHER.md b/docs/10-MODULES/PUBLISHER.md
index e4c0d1d1..e25a32ad 100644
--- a/docs/10-MODULES/PUBLISHER.md
+++ b/docs/10-MODULES/PUBLISHER.md
@@ -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 |
diff --git a/docs/20-API/ENDPOINTS.md b/docs/20-API/ENDPOINTS.md
index 0d622edb..0782d199 100644
--- a/docs/20-API/ENDPOINTS.md
+++ b/docs/20-API/ENDPOINTS.md
@@ -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/`)
diff --git a/docs/30-FRONTEND/COMPONENT-SYSTEM.md b/docs/30-FRONTEND/COMPONENT-SYSTEM.md
index bd942115..f410cb4b 100644
--- a/docs/30-FRONTEND/COMPONENT-SYSTEM.md
+++ b/docs/30-FRONTEND/COMPONENT-SYSTEM.md
@@ -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';
+
+
+```
+
+### 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';
+
+
+```
+
+---
+
+## 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
diff --git a/docs/30-FRONTEND/DESIGN-GUIDE.md b/docs/30-FRONTEND/DESIGN-GUIDE.md
index a682ed45..acecb920 100644
--- a/docs/30-FRONTEND/DESIGN-GUIDE.md
+++ b/docs/30-FRONTEND/DESIGN-GUIDE.md
@@ -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
---
diff --git a/docs/30-FRONTEND/DESIGN-TOKENS.md b/docs/30-FRONTEND/DESIGN-TOKENS.md
index ba0486d0..ef0d9949 100644
--- a/docs/30-FRONTEND/DESIGN-TOKENS.md
+++ b/docs/30-FRONTEND/DESIGN-TOKENS.md
@@ -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
-
Content
+// Use semantic Tailwind utilities
+Primary action
+Success message
+Error alert
-// Use CSS variables for custom values
-Content
+// Use CSS variables for custom cases
+Custom
-// Use React components
-
+// Use React components with tone prop
+
+
+Pending
```
**β DON'T:**
```tsx
-// Don't use deprecated .igny8-* utility classes
-Content
+// Don't use Tailwind default colors (DISABLED)
+Won't work!
+Won't work!
-// Don't hardcode color values
-Content
-
-// Don't use inline styles
-Content
+// Don't hardcode hex values
+Bad!
+Bad!
```
## π 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 = () =>