docs updated v1.2.0
This commit is contained in:
185
CHANGELOG.md
185
CHANGELOG.md
@@ -1,6 +1,6 @@
|
|||||||
# IGNY8 Change Log
|
# IGNY8 Change Log
|
||||||
|
|
||||||
**Current Version:** 1.1.8
|
**Current Version:** 1.2.0
|
||||||
**Last Updated:** December 27, 2025
|
**Last Updated:** December 27, 2025
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -9,6 +9,8 @@
|
|||||||
|
|
||||||
| Version | Date | Summary |
|
| Version | Date | Summary |
|
||||||
|---------|------|---------|
|
|---------|------|---------|
|
||||||
|
| 1.2.0 | Dec 27, 2025 | **Final Launch Release** - Notifications system, Dashboard widgets, ThreeWidgetFooter, UI polish |
|
||||||
|
| 1.1.9 | Dec 27, 2025 | UI improvements - PageContext, SearchModal, AppHeader/Layout updates |
|
||||||
| 1.1.8 | Dec 27, 2025 | Section 6 SIDEBAR restructure - Dropdowns, breadcrumbs, navigation cleanup |
|
| 1.1.8 | Dec 27, 2025 | Section 6 SIDEBAR restructure - Dropdowns, breadcrumbs, navigation cleanup |
|
||||||
| 1.1.7 | Dec 27, 2025 | Section 5 HELP module - Support links, Documentation, FAQ updates |
|
| 1.1.7 | Dec 27, 2025 | Section 5 HELP module - Support links, Documentation, FAQ updates |
|
||||||
| 1.1.6 | Dec 27, 2025 | Section 4 ACCOUNT modules - Profile API, Password Change, Billing improvements |
|
| 1.1.6 | Dec 27, 2025 | Section 4 ACCOUNT modules - Profile API, Password Change, Billing improvements |
|
||||||
@@ -27,6 +29,187 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## v1.2.0 - December 27, 2025
|
||||||
|
|
||||||
|
### Final Launch Release - Notifications, Dashboard, UI Polish
|
||||||
|
|
||||||
|
This release marks the final pre-launch state with comprehensive UI polish, real-time notifications, and dashboard overhaul.
|
||||||
|
|
||||||
|
**Backend: Notifications Module**
|
||||||
|
- **NEW MODULE**: `backend/igny8_core/business/notifications/`
|
||||||
|
- Models: `Notification`, `NotificationPreference`
|
||||||
|
- NotificationType choices: AI operations (cluster/ideas/content/images complete/failed), workflow events, WordPress sync, credits/billing, system
|
||||||
|
- Services: `NotificationService` for creating/managing notifications
|
||||||
|
- REST API: `/api/v1/notifications/` endpoints
|
||||||
|
- Registered in `settings.py` INSTALLED_APPS
|
||||||
|
- Added URL routing in `urls.py`
|
||||||
|
|
||||||
|
**Frontend: Notification System**
|
||||||
|
- **NEW STORE**: `notificationStore.ts` - Zustand store for notification management
|
||||||
|
- In-memory queue for optimistic UI
|
||||||
|
- API sync for persistent notifications
|
||||||
|
- Auto-dismissal with configurable timeout
|
||||||
|
- Read/unread state tracking
|
||||||
|
- Category-based filtering (ai_task, system, info)
|
||||||
|
- **NEW API SERVICE**: `notifications.api.ts`
|
||||||
|
- `fetchNotifications()`, `fetchUnreadCount()`
|
||||||
|
- `markNotificationRead()`, `markAllNotificationsRead()`
|
||||||
|
- `deleteNotification()`
|
||||||
|
- **UPDATED**: `NotificationDropdown.tsx` - Real notification integration
|
||||||
|
|
||||||
|
**Frontend: Dashboard Home Overhaul**
|
||||||
|
- **NEW WIDGETS** in `components/dashboard/`:
|
||||||
|
- `WorkflowPipelineWidget.tsx` - Visual flow: Sites → Keywords → Clusters → Ideas → Tasks → Drafts → Published
|
||||||
|
- `AIOperationsWidget.tsx` - Operation stats with time filter (7d/30d/90d)
|
||||||
|
- `RecentActivityWidget.tsx` - Activity feed with type icons
|
||||||
|
- `ContentVelocityWidget.tsx` - Week/Month/Total metrics table
|
||||||
|
- `AutomationStatusWidget.tsx` - Status, schedule, last/next run info
|
||||||
|
- `NeedsAttentionBar.tsx` - Alert bar for pending actions
|
||||||
|
- `QuickActionsWidget.tsx` - Quick action buttons
|
||||||
|
- `CreditAvailabilityWidget.tsx` - Credit balance display
|
||||||
|
- `OperationsCostsWidget.tsx` - Cost breakdown by operation type
|
||||||
|
- `SiteConfigWidget.tsx` - Site configuration status
|
||||||
|
- Updated `Home.tsx` to use new dashboard widgets with real data from APIs
|
||||||
|
|
||||||
|
**Frontend: ThreeWidgetFooter Component**
|
||||||
|
- **NEW COMPONENT**: `ThreeWidgetFooter.tsx` - 3-column footer for table pages
|
||||||
|
- Widget 1: Page Progress (metrics + progress bar)
|
||||||
|
- Widget 2: Module Stats (pipeline flow with arrows)
|
||||||
|
- Widget 3: Completion (tree structure for both modules)
|
||||||
|
- **NEW HOOK**: `useThreeWidgetFooter.ts` - Data preparation hook
|
||||||
|
- **IMPLEMENTED ON**: Keywords, Clusters, Ideas, Tasks, Content pages
|
||||||
|
|
||||||
|
**Frontend: Page Rename - Published → Approved**
|
||||||
|
- **RENAMED**: `Writer/Published.tsx` → `Writer/Approved.tsx`
|
||||||
|
- **RENAMED**: Config `published.config.tsx` → `approved.config.tsx`
|
||||||
|
- **ROUTE**: `/writer/approved` (legacy `/writer/published` redirects)
|
||||||
|
- Updated sidebar navigation label to "Approved"
|
||||||
|
|
||||||
|
**Frontend: Site Selectors**
|
||||||
|
- **NEW COMPONENTS**:
|
||||||
|
- `SingleSiteSelector.tsx` - Simple site dropdown
|
||||||
|
- `SiteWithAllSitesSelector.tsx` - Site selector with "All Sites" option
|
||||||
|
- Updated `SiteAndSectorSelector.tsx` for improved UX
|
||||||
|
- Enhanced `PageHeader.tsx` with badge props and breadcrumb support
|
||||||
|
|
||||||
|
**Backend: SiteSerializer Fixes**
|
||||||
|
- Fixed `has_integration` field to use `platform` field (not `integration_type`)
|
||||||
|
- Added missing serializer fields for frontend consumption
|
||||||
|
|
||||||
|
**Progress Modal Text Updates**
|
||||||
|
- Fixed placeholder "X" text in image prompt steps
|
||||||
|
- Improved step labels with actual counts when available
|
||||||
|
|
||||||
|
### Files Added
|
||||||
|
```
|
||||||
|
backend/igny8_core/business/notifications/
|
||||||
|
├── __init__.py
|
||||||
|
├── admin.py
|
||||||
|
├── apps.py
|
||||||
|
├── models.py
|
||||||
|
├── serializers.py
|
||||||
|
├── services.py
|
||||||
|
├── urls.py
|
||||||
|
├── views.py
|
||||||
|
└── migrations/0001_initial.py
|
||||||
|
|
||||||
|
frontend/src/components/dashboard/
|
||||||
|
├── AIOperationsWidget.tsx
|
||||||
|
├── AutomationStatusWidget.tsx
|
||||||
|
├── ContentVelocityWidget.tsx
|
||||||
|
├── CreditAvailabilityWidget.tsx
|
||||||
|
├── NeedsAttentionBar.tsx
|
||||||
|
├── OperationsCostsWidget.tsx
|
||||||
|
├── QuickActionsWidget.tsx
|
||||||
|
├── RecentActivityWidget.tsx
|
||||||
|
├── SiteConfigWidget.tsx
|
||||||
|
├── ThreeWidgetFooter.tsx
|
||||||
|
└── WorkflowPipelineWidget.tsx
|
||||||
|
|
||||||
|
frontend/src/components/common/
|
||||||
|
├── SingleSiteSelector.tsx
|
||||||
|
└── SiteWithAllSitesSelector.tsx
|
||||||
|
|
||||||
|
frontend/src/hooks/useThreeWidgetFooter.ts
|
||||||
|
frontend/src/services/notifications.api.ts
|
||||||
|
frontend/src/store/notificationStore.ts
|
||||||
|
```
|
||||||
|
|
||||||
|
### Files Modified
|
||||||
|
- `backend/igny8_core/settings.py` - Added notifications to INSTALLED_APPS
|
||||||
|
- `backend/igny8_core/urls.py` - Added notifications URL routing
|
||||||
|
- `backend/igny8_core/auth/serializers.py` - Fixed SiteSerializer fields
|
||||||
|
- `backend/igny8_core/ai/engine.py` - Progress tracking updates
|
||||||
|
- `frontend/src/App.tsx` - Route updates for approved page
|
||||||
|
- `frontend/src/layout/AppHeader.tsx` - Dashboard context support
|
||||||
|
- `frontend/src/layout/AppLayout.tsx` - Layout improvements
|
||||||
|
- `frontend/src/layout/AppSidebar.tsx` - Navigation label updates
|
||||||
|
- `frontend/src/pages/Dashboard/Home.tsx` - Complete dashboard overhaul
|
||||||
|
- `frontend/src/pages/Writer/*.tsx` - ThreeWidgetFooter integration
|
||||||
|
- `frontend/src/pages/Planner/*.tsx` - ThreeWidgetFooter integration
|
||||||
|
- `frontend/src/components/common/ProgressModal.tsx` - Text fixes
|
||||||
|
- `frontend/src/components/common/SiteCard.tsx` - Setup checklist updates
|
||||||
|
- `frontend/src/config/pages/*.config.tsx` - Column/action updates
|
||||||
|
- `frontend/src/config/routes.config.ts` - Route updates
|
||||||
|
- `frontend/src/context/PageContext.tsx` - Enhanced page context
|
||||||
|
- `frontend/src/icons/index.ts` - New icon exports
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## v1.1.9 - December 27, 2025
|
||||||
|
|
||||||
|
### UI Infrastructure & Polish
|
||||||
|
|
||||||
|
**PageContext System**
|
||||||
|
- **NEW**: `PageContext.tsx` - React context for page-level state management
|
||||||
|
- Provides site filter, sector filter state to nested components
|
||||||
|
- Enables AppHeader to access current page info
|
||||||
|
|
||||||
|
**Search Modal**
|
||||||
|
- **NEW**: `SearchModal.tsx` - Global search modal component
|
||||||
|
- Cmd+K / Ctrl+K keyboard shortcut
|
||||||
|
- Search across pages, content, keywords
|
||||||
|
|
||||||
|
**Header & Layout Updates**
|
||||||
|
- Enhanced `AppHeader.tsx`:
|
||||||
|
- Site filter integration
|
||||||
|
- Breadcrumb support
|
||||||
|
- Search modal trigger
|
||||||
|
- Improved responsive behavior
|
||||||
|
- Updated `AppLayout.tsx`:
|
||||||
|
- Better sidebar/content coordination
|
||||||
|
- Dark mode improvements
|
||||||
|
- Updated `AppSidebar.tsx`:
|
||||||
|
- Module dropdown improvements
|
||||||
|
- Active state indicators
|
||||||
|
|
||||||
|
**Table Template Improvements**
|
||||||
|
- Enhanced `TablePageTemplate.tsx`:
|
||||||
|
- Better filter UI
|
||||||
|
- Improved empty states
|
||||||
|
- Column configuration updates
|
||||||
|
- Updated page configs for consistency
|
||||||
|
|
||||||
|
**Style Updates**
|
||||||
|
- `igny8-colors.css` - Token refinements
|
||||||
|
- Dark mode consistency improvements
|
||||||
|
|
||||||
|
### Files Added
|
||||||
|
- `frontend/src/components/common/SearchModal.tsx`
|
||||||
|
- `frontend/src/context/PageContext.tsx`
|
||||||
|
- `docs/30-FRONTEND/PAGE-REQUIREMENTS.md`
|
||||||
|
|
||||||
|
### Files Modified
|
||||||
|
- `frontend/src/layout/AppHeader.tsx`
|
||||||
|
- `frontend/src/layout/AppLayout.tsx`
|
||||||
|
- `frontend/src/layout/AppSidebar.tsx`
|
||||||
|
- `frontend/src/templates/TablePageTemplate.tsx`
|
||||||
|
- `frontend/src/pages/Planner/*.tsx`
|
||||||
|
- `frontend/src/pages/Writer/*.tsx`
|
||||||
|
- `frontend/src/styles/igny8-colors.css`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## v1.1.8 - December 27, 2025
|
## v1.1.8 - December 27, 2025
|
||||||
|
|
||||||
### Section 6 Sidebar & Navigation Restructure
|
### Section 6 Sidebar & Navigation Restructure
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
# System Architecture
|
# System Architecture
|
||||||
|
|
||||||
**Last Verified:** December 25, 2025
|
**Last Verified:** December 27, 2025
|
||||||
|
**Version:** 1.2.0
|
||||||
**Backend Path:** `backend/igny8_core/`
|
**Backend Path:** `backend/igny8_core/`
|
||||||
**Frontend Path:** `frontend/src/`
|
**Frontend Path:** `frontend/src/`
|
||||||
|
|
||||||
@@ -114,6 +115,7 @@ backend/igny8_core/
|
|||||||
│ ├── content/ # Content generation orchestration
|
│ ├── content/ # Content generation orchestration
|
||||||
│ ├── integration/ # Sync services
|
│ ├── integration/ # Sync services
|
||||||
│ ├── linking/ # Link processing
|
│ ├── linking/ # Link processing
|
||||||
|
│ ├── notifications/ # Notification system (v1.2.0)
|
||||||
│ ├── optimization/ # Content optimization
|
│ ├── optimization/ # Content optimization
|
||||||
│ ├── planning/ # Clustering, idea generation
|
│ ├── planning/ # Clustering, idea generation
|
||||||
│ └── publishing/ # Publishing orchestration
|
│ └── publishing/ # Publishing orchestration
|
||||||
@@ -142,7 +144,8 @@ frontend/src/
|
|||||||
│ └── ...
|
│ └── ...
|
||||||
│
|
│
|
||||||
├── services/
|
├── services/
|
||||||
│ └── api.ts # Main API service (2500+ lines)
|
│ ├── api.ts # Main API service (2500+ lines)
|
||||||
|
│ └── notifications.api.ts # Notification API (v1.2.0)
|
||||||
│
|
│
|
||||||
├── store/ # Zustand stores
|
├── store/ # Zustand stores
|
||||||
│ ├── authStore.ts # Authentication state
|
│ ├── authStore.ts # Authentication state
|
||||||
@@ -150,6 +153,7 @@ frontend/src/
|
|||||||
│ ├── sectorStore.ts # Active sector
|
│ ├── sectorStore.ts # Active sector
|
||||||
│ ├── billingStore.ts # Billing state
|
│ ├── billingStore.ts # Billing state
|
||||||
│ ├── moduleStore.ts # Module enable/disable
|
│ ├── moduleStore.ts # Module enable/disable
|
||||||
|
│ ├── notificationStore.ts # Notifications (v1.2.0)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
│
|
│
|
||||||
├── pages/ # Route pages
|
├── pages/ # Route pages
|
||||||
@@ -164,12 +168,27 @@ frontend/src/
|
|||||||
│ └── Auth/
|
│ └── Auth/
|
||||||
│
|
│
|
||||||
├── components/ # Reusable components
|
├── components/ # Reusable components
|
||||||
│ ├── ProgressModal.tsx # AI progress display
|
│ ├── common/
|
||||||
│ ├── ConfirmDialog.tsx
|
│ │ ├── ProgressModal.tsx # AI progress display
|
||||||
│ └── ...
|
│ │ ├── SearchModal.tsx # Global search (v1.1.9)
|
||||||
|
│ │ └── ...
|
||||||
|
│ ├── dashboard/ # Dashboard widgets (v1.2.0)
|
||||||
|
│ │ ├── WorkflowPipelineWidget.tsx
|
||||||
|
│ │ ├── AIOperationsWidget.tsx
|
||||||
|
│ │ ├── RecentActivityWidget.tsx
|
||||||
|
│ │ ├── ContentVelocityWidget.tsx
|
||||||
|
│ │ ├── AutomationStatusWidget.tsx
|
||||||
|
│ │ ├── ThreeWidgetFooter.tsx
|
||||||
|
│ │ └── ...
|
||||||
|
│ └── header/
|
||||||
|
│ └── NotificationDropdown.tsx
|
||||||
|
│
|
||||||
|
├── context/ # React contexts (v1.1.9)
|
||||||
|
│ └── PageContext.tsx # Page-level state
|
||||||
│
|
│
|
||||||
├── layout/ # Layout components
|
├── layout/ # Layout components
|
||||||
│ ├── AppLayout.tsx
|
│ ├── AppLayout.tsx
|
||||||
|
│ ├── AppHeader.tsx
|
||||||
│ └── AppSidebar.tsx
|
│ └── AppSidebar.tsx
|
||||||
│
|
│
|
||||||
├── hooks/ # Custom hooks
|
├── hooks/ # Custom hooks
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
# Writer Module
|
# Writer Module
|
||||||
|
|
||||||
**Last Verified:** December 25, 2025
|
**Last Verified:** December 27, 2025
|
||||||
|
**Version:** 1.2.0
|
||||||
**Status:** ✅ Active
|
**Status:** ✅ Active
|
||||||
**Backend Path:** `backend/igny8_core/modules/writer/`
|
**Backend Path:** `backend/igny8_core/modules/writer/`
|
||||||
**Frontend Path:** `frontend/src/pages/Writer/`
|
**Frontend Path:** `frontend/src/pages/Writer/`
|
||||||
@@ -240,10 +241,11 @@ ContentIdeas → Tasks → Content → Images → Review → Publish
|
|||||||
- Publish to WordPress
|
- Publish to WordPress
|
||||||
- Status management
|
- Status management
|
||||||
|
|
||||||
### Draft/Review/Published Tabs
|
### Draft/Review/Approved Tabs
|
||||||
|
|
||||||
- Filtered views by status
|
- Filtered views by status
|
||||||
- Different actions per status
|
- Different actions per status
|
||||||
|
- **v1.2.0**: "Published" tab renamed to "Approved"
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
# API Endpoints Reference
|
# API Endpoints Reference
|
||||||
|
|
||||||
**Last Verified:** December 25, 2025
|
**Last Verified:** December 27, 2025
|
||||||
|
**Version:** 1.2.0
|
||||||
**Base URL:** `/api/v1/`
|
**Base URL:** `/api/v1/`
|
||||||
**Documentation:** `/api/docs/` (Swagger) | `/api/redoc/` (ReDoc)
|
**Documentation:** `/api/docs/` (Swagger) | `/api/redoc/` (ReDoc)
|
||||||
|
|
||||||
@@ -151,6 +152,54 @@ All endpoints require authentication unless noted.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Notification Endpoints (`/api/v1/notifications/`) - v1.2.0
|
||||||
|
|
||||||
|
| Method | Path | Handler | Purpose |
|
||||||
|
|--------|------|---------|---------|
|
||||||
|
| GET | `/` | `NotificationViewSet.list` | List notifications (paginated) |
|
||||||
|
| GET | `/{id}/` | `NotificationViewSet.retrieve` | Get notification detail |
|
||||||
|
| DELETE | `/{id}/` | `NotificationViewSet.destroy` | Delete notification |
|
||||||
|
| POST | `/{id}/read/` | `NotificationViewSet.read` | Mark single notification as read |
|
||||||
|
| POST | `/read-all/` | `NotificationViewSet.read_all` | Mark all notifications as read |
|
||||||
|
| GET | `/unread-count/` | `NotificationViewSet.unread_count` | Get unread notification count |
|
||||||
|
|
||||||
|
**Query Parameters:**
|
||||||
|
- `?page=` - Page number for pagination
|
||||||
|
- `?page_size=` - Results per page (default 20)
|
||||||
|
- `?is_read=` - Filter by read status (true/false)
|
||||||
|
- `?notification_type=` - Filter by type (ai_task, system, credit, billing, integration, content, info)
|
||||||
|
|
||||||
|
**Notification Types:**
|
||||||
|
- `ai_cluster_complete`, `ai_cluster_failed` - Clustering operations
|
||||||
|
- `ai_ideas_complete`, `ai_ideas_failed` - Idea generation
|
||||||
|
- `ai_content_complete`, `ai_content_failed` - Content generation
|
||||||
|
- `ai_images_complete`, `ai_images_failed` - Image generation
|
||||||
|
- `ai_prompts_complete`, `ai_prompts_failed` - Image prompt generation
|
||||||
|
- `content_ready_review`, `content_published`, `content_publish_failed` - Workflow
|
||||||
|
- `wordpress_sync_success`, `wordpress_sync_failed` - WordPress sync
|
||||||
|
- `credits_low`, `credits_depleted` - Billing alerts
|
||||||
|
- `site_setup_complete`, `keywords_imported` - Setup
|
||||||
|
- `system_info` - System notifications
|
||||||
|
|
||||||
|
**Response Format:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"notification_type": "ai_content_complete",
|
||||||
|
"severity": "success",
|
||||||
|
"title": "Content Generated",
|
||||||
|
"message": "Generated 5 articles successfully",
|
||||||
|
"is_read": false,
|
||||||
|
"created_at": "2025-12-27T12:00:00Z",
|
||||||
|
"read_at": null,
|
||||||
|
"action_label": "View Content",
|
||||||
|
"action_url": "/writer/content",
|
||||||
|
"metadata": {"count": 5, "credits": 250}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Automation Endpoints (`/api/v1/automation/`)
|
## Automation Endpoints (`/api/v1/automation/`)
|
||||||
|
|
||||||
| Method | Path | Handler | Purpose |
|
| Method | Path | Handler | Purpose |
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
# Page Requirements - Site & Sector Selectors
|
# Page Requirements - Site & Sector Selectors
|
||||||
|
|
||||||
|
**Last Verified:** December 27, 2025
|
||||||
|
**Version:** 1.2.0
|
||||||
|
|
||||||
This document outlines all pages in the application and their requirements for site/sector selectors.
|
This document outlines all pages in the application and their requirements for site/sector selectors.
|
||||||
|
|
||||||
## Legend
|
## Legend
|
||||||
@@ -28,8 +31,8 @@ This document outlines all pages in the application and their requirements for s
|
|||||||
| Tasks | `/writer/tasks` | ✅ Required | ✅ Required | Filter tasks by site/sector | `{count} selected → Generate Content` OR `{ready} ready → Generate Content` |
|
| Tasks | `/writer/tasks` | ✅ Required | ✅ Required | Filter tasks by site/sector | `{count} selected → Generate Content` OR `{ready} ready → Generate Content` |
|
||||||
| Content | `/writer/content` | ✅ Required | ✅ Required | Filter content by site/sector | `{count} selected → Generate Images` OR `{draft} drafts → Add Images` |
|
| Content | `/writer/content` | ✅ Required | ✅ Required | Filter content by site/sector | `{count} selected → Generate Images` OR `{draft} drafts → Add Images` |
|
||||||
| Images | `/writer/images` | ✅ Required | ✅ Required | Filter images by site/sector | `{count} selected → Submit for Review` OR `{ready} ready → Submit for Review` |
|
| Images | `/writer/images` | ✅ Required | ✅ Required | Filter images by site/sector | `{count} selected → Submit for Review` OR `{ready} ready → Submit for Review` |
|
||||||
| Review | `/writer/review` | ✅ Required | ✅ Required | Filter review items by site/sector | `{count} selected → Publish Selected` OR `{approved} approved → Publish All` |
|
| Review | `/writer/review` | ✅ Required | ✅ Required | Filter review items by site/sector | `{count} selected → Approve Selected` OR `{reviewed} reviewed → Approve All` |
|
||||||
| Published | `/writer/published` | ✅ Required | ✅ Required | Filter published items by site/sector | `{count} selected → Sync to WordPress` OR `View All Sites` |
|
| Approved | `/writer/approved` | ✅ Required | ✅ Required | Filter approved items by site/sector | `{count} selected → Sync to WordPress` OR `View All Sites` |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -170,9 +173,9 @@ nextAction={selectedIds.length > 0 ? {
|
|||||||
## Workflow Pipeline (Planner → Writer)
|
## Workflow Pipeline (Planner → Writer)
|
||||||
|
|
||||||
```
|
```
|
||||||
Keywords → Clusters → Ideas → Tasks → Content → Images → Review → Published
|
Keywords → Clusters → Ideas → Tasks → Content → Images → Review → Approved
|
||||||
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
|
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
|
||||||
Cluster Expand Create Generate Generate Submit Publish Sync to
|
Cluster Expand Create Generate Generate Submit Approve Sync to
|
||||||
Keywords Ideas Tasks Content Images Review Content WordPress
|
Keywords Ideas Tasks Content Images Review Content WordPress
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# Frontend Pages & Routes
|
# Frontend Pages & Routes
|
||||||
|
|
||||||
**Last Verified:** December 27, 2025
|
**Last Verified:** December 27, 2025
|
||||||
**Version:** 1.1.7
|
**Version:** 1.2.0
|
||||||
**Framework:** React 19 + TypeScript + React Router 6 + Vite
|
**Framework:** React 19 + TypeScript + React Router 6 + Vite
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -33,6 +33,20 @@ Routes defined in `/frontend/src/App.tsx`:
|
|||||||
|-------|------|-------------|
|
|-------|------|-------------|
|
||||||
| `/` | `Dashboard/Home.tsx` | Main dashboard with workflow pipeline, metrics, quick actions |
|
| `/` | `Dashboard/Home.tsx` | Main dashboard with workflow pipeline, metrics, quick actions |
|
||||||
|
|
||||||
|
**v1.2.0 Dashboard Widgets:**
|
||||||
|
- `WorkflowPipelineWidget` - Visual flow: Sites → Keywords → Clusters → Ideas → Tasks → Drafts → Published
|
||||||
|
- `AIOperationsWidget` - Operation stats (clustering, ideas, content, images) with time filter (7d/30d/90d)
|
||||||
|
- `RecentActivityWidget` - Activity feed with type-specific icons
|
||||||
|
- `ContentVelocityWidget` - Week/Month/Total metrics table
|
||||||
|
- `AutomationStatusWidget` - Status, schedule, last/next run, run controls
|
||||||
|
- `NeedsAttentionBar` - Alert bar for pending actions requiring attention
|
||||||
|
- `QuickActionsWidget` - Quick action buttons for common tasks
|
||||||
|
|
||||||
|
**Data Sources:**
|
||||||
|
- Pipeline counts from actual API calls (keywords, clusters, ideas, tasks, content)
|
||||||
|
- AI operations derived from content creation totals
|
||||||
|
- Activity generated from real data with capped display values
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## SETUP Routes
|
## SETUP Routes
|
||||||
@@ -102,7 +116,12 @@ Routes defined in `/frontend/src/App.tsx`:
|
|||||||
| `/writer/content/:id` | `Writer/ContentView.tsx` | Content detail view (read-only) | - |
|
| `/writer/content/:id` | `Writer/ContentView.tsx` | Content detail view (read-only) | - |
|
||||||
| `/writer/images` | `Writer/Images.tsx` | Image management by content | Images |
|
| `/writer/images` | `Writer/Images.tsx` | Image management by content | Images |
|
||||||
| `/writer/review` | `Writer/Review.tsx` | Review queue (status=review) | Review |
|
| `/writer/review` | `Writer/Review.tsx` | Review queue (status=review) | Review |
|
||||||
| `/writer/published` | `Writer/Published.tsx` | Published content (status=published) | Published |
|
| `/writer/approved` | `Writer/Approved.tsx` | Approved content (status=approved/published) | Approved |
|
||||||
|
|
||||||
|
**v1.2.0 Changes:**
|
||||||
|
- Renamed "Published" to "Approved" page
|
||||||
|
- Legacy route `/writer/published` redirects to `/writer/approved`
|
||||||
|
- ThreeWidgetFooter added to Tasks, Content pages
|
||||||
|
|
||||||
### Automation
|
### Automation
|
||||||
|
|
||||||
@@ -248,10 +267,7 @@ frontend/src/pages/
|
|||||||
├── Dashboard/
|
├── Dashboard/
|
||||||
│ └── Home.tsx
|
│ └── Home.tsx
|
||||||
├── Help/
|
├── Help/
|
||||||
│ ├── HelpCenter.tsx
|
│ └── Help.tsx # Main help page with docs, FAQ
|
||||||
│ ├── Documentation.tsx # Placeholder
|
|
||||||
│ ├── SystemTesting.tsx # Placeholder
|
|
||||||
│ └── FunctionTesting.tsx # Placeholder
|
|
||||||
├── Linker/
|
├── Linker/
|
||||||
│ ├── Content.tsx
|
│ ├── Content.tsx
|
||||||
│ └── Dashboard.tsx # Not exposed
|
│ └── Dashboard.tsx # Not exposed
|
||||||
@@ -283,7 +299,7 @@ frontend/src/pages/
|
|||||||
├── ContentView.tsx
|
├── ContentView.tsx
|
||||||
├── Images.tsx
|
├── Images.tsx
|
||||||
├── Review.tsx
|
├── Review.tsx
|
||||||
└── Published.tsx
|
└── Approved.tsx # Renamed from Published.tsx (v1.2.0)
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -318,7 +334,7 @@ Dashboard
|
|||||||
│ ├── Planner [if planner enabled]
|
│ ├── Planner [if planner enabled]
|
||||||
│ │ └── In-page: Keywords → Clusters → Ideas
|
│ │ └── In-page: Keywords → Clusters → Ideas
|
||||||
│ ├── Writer [if writer enabled]
|
│ ├── Writer [if writer enabled]
|
||||||
│ │ └── In-page: Queue → Drafts → Images → Review → Published
|
│ │ └── In-page: Queue → Drafts → Images → Review → Approved
|
||||||
│ ├── Automation [if automation enabled]
|
│ ├── Automation [if automation enabled]
|
||||||
│ ├── Linker [if linker enabled]
|
│ ├── Linker [if linker enabled]
|
||||||
│ └── Optimizer [if optimizer enabled]
|
│ └── Optimizer [if optimizer enabled]
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
# Zustand State Management
|
# Zustand State Management
|
||||||
|
|
||||||
**Last Verified:** December 25, 2025
|
**Last Verified:** December 27, 2025
|
||||||
|
**Version:** 1.2.0
|
||||||
**Framework:** Zustand 4 with persist middleware
|
**Framework:** Zustand 4 with persist middleware
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -315,6 +316,80 @@ interface UIActions {
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Notification Store (`notificationStore.ts`) - v1.2.0
|
||||||
|
|
||||||
|
**Purpose:** In-app notifications for AI task completions and system events
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
type NotificationType = 'success' | 'error' | 'warning' | 'info';
|
||||||
|
type NotificationCategory = 'ai_task' | 'system' | 'info';
|
||||||
|
|
||||||
|
interface Notification {
|
||||||
|
id: string;
|
||||||
|
apiId?: number; // Server ID for synced notifications
|
||||||
|
type: NotificationType;
|
||||||
|
category: NotificationCategory;
|
||||||
|
title: string;
|
||||||
|
message: string;
|
||||||
|
timestamp: Date;
|
||||||
|
read: boolean;
|
||||||
|
actionLabel?: string;
|
||||||
|
actionHref?: string;
|
||||||
|
metadata?: {
|
||||||
|
taskId?: string;
|
||||||
|
functionName?: string;
|
||||||
|
count?: number;
|
||||||
|
credits?: number;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
interface NotificationStore {
|
||||||
|
notifications: Notification[];
|
||||||
|
unreadCount: number;
|
||||||
|
isLoading: boolean;
|
||||||
|
lastFetched: Date | null;
|
||||||
|
|
||||||
|
// Actions
|
||||||
|
addNotification(notification: Omit<Notification, 'id' | 'timestamp' | 'read'>): void;
|
||||||
|
markAsRead(id: string): void;
|
||||||
|
markAllAsRead(): void;
|
||||||
|
removeNotification(id: string): void;
|
||||||
|
clearAll(): void;
|
||||||
|
fetchFromAPI(): Promise<void>;
|
||||||
|
syncWithAPI(): Promise<void>;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Features:**
|
||||||
|
- In-memory queue for optimistic UI updates
|
||||||
|
- API sync for persistent notifications
|
||||||
|
- Auto-dismissal with configurable timeout
|
||||||
|
- Read/unread state tracking
|
||||||
|
- Category-based filtering (ai_task, system, info)
|
||||||
|
|
||||||
|
**API Integration:** Uses `notifications.api.ts` service:
|
||||||
|
- `fetchNotifications()` - List with pagination
|
||||||
|
- `fetchUnreadCount()` - Unread count
|
||||||
|
- `markNotificationRead()` - Mark single as read
|
||||||
|
- `markAllNotificationsRead()` - Mark all as read
|
||||||
|
- `deleteNotification()` - Delete notification
|
||||||
|
|
||||||
|
**Usage:**
|
||||||
|
```typescript
|
||||||
|
const { notifications, unreadCount, addNotification, markAsRead } = useNotificationStore();
|
||||||
|
|
||||||
|
// Add AI task completion notification
|
||||||
|
addNotification({
|
||||||
|
type: 'success',
|
||||||
|
category: 'ai_task',
|
||||||
|
title: 'Content Generated',
|
||||||
|
message: 'Generated 5 articles successfully',
|
||||||
|
metadata: { count: 5, credits: 250 }
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Store Dependencies
|
## Store Dependencies
|
||||||
|
|
||||||
```
|
```
|
||||||
@@ -329,6 +404,8 @@ authStore
|
|||||||
├── automationStore (scoped to site)
|
├── automationStore (scoped to site)
|
||||||
└── integrationStore (scoped to site)
|
└── integrationStore (scoped to site)
|
||||||
|
|
||||||
|
notificationStore (global, polls/syncs independently)
|
||||||
|
|
||||||
moduleStore (global, loads once per account)
|
moduleStore (global, loads once per account)
|
||||||
billingStore (global, loads once per account)
|
billingStore (global, loads once per account)
|
||||||
uiStore (local only, no API)
|
uiStore (local only, no API)
|
||||||
@@ -345,6 +422,9 @@ frontend/src/store/
|
|||||||
├── sectorStore.ts
|
├── sectorStore.ts
|
||||||
├── moduleStore.ts
|
├── moduleStore.ts
|
||||||
├── billingStore.ts
|
├── billingStore.ts
|
||||||
|
├── notificationStore.ts # v1.2.0
|
||||||
|
├── onboardingStore.ts
|
||||||
|
├── pageSizeStore.ts
|
||||||
├── plannerStore.ts
|
├── plannerStore.ts
|
||||||
├── writerStore.ts
|
├── writerStore.ts
|
||||||
├── automationStore.ts
|
├── automationStore.ts
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# IGNY8 Technical Documentation
|
# IGNY8 Technical Documentation
|
||||||
|
|
||||||
**Version:** 1.1.0
|
**Version:** 1.2.0
|
||||||
**Last Updated:** December 25, 2025
|
**Last Updated:** December 27, 2025
|
||||||
**Purpose:** Complete technical reference for the IGNY8 AI content platform
|
**Purpose:** Complete technical reference for the IGNY8 AI content platform
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -60,14 +60,13 @@
|
|||||||
|
|
||||||
| Document | Purpose |
|
| Document | Purpose |
|
||||||
|----------|---------|
|
|----------|---------|
|
||||||
| [PAGES.md](30-FRONTEND/PAGES.md) | All pages and routes |
|
| [PAGES.md](30-FRONTEND/PAGES.md) | All pages and routes || [PAGE-REQUIREMENTS.md](30-FRONTEND/PAGE-REQUIREMENTS.md) | Site/sector selector requirements || [STORES.md](30-FRONTEND/STORES.md) | Zustand state management |
|
||||||
| [STORES.md](30-FRONTEND/STORES.md) | Zustand state management |
|
|
||||||
| [COMPONENTS.md](30-FRONTEND/COMPONENTS.md) | Key reusable components |
|
| [COMPONENTS.md](30-FRONTEND/COMPONENTS.md) | Key reusable components |
|
||||||
|
|
||||||
### Current Page Structure (v1.1.0)
|
### Current Page Structure (v1.2.0)
|
||||||
|
|
||||||
```
|
```
|
||||||
/ → Dashboard (Home.tsx)
|
/ → Dashboard (Home.tsx) - with new widgets
|
||||||
├── SETUP
|
├── SETUP
|
||||||
│ /setup/add-keywords → Add Keywords (AddKeywords.tsx)
|
│ /setup/add-keywords → Add Keywords (AddKeywords.tsx)
|
||||||
│ /account/content-settings → Content Settings (ContentSettingsPage.tsx)
|
│ /account/content-settings → Content Settings (ContentSettingsPage.tsx)
|
||||||
@@ -83,7 +82,7 @@
|
|||||||
│ /writer/drafts → Drafts (Drafts.tsx)
|
│ /writer/drafts → Drafts (Drafts.tsx)
|
||||||
│ /writer/images → Images (Images.tsx)
|
│ /writer/images → Images (Images.tsx)
|
||||||
│ /writer/review → Review (Review.tsx)
|
│ /writer/review → Review (Review.tsx)
|
||||||
│ /writer/published → Published (Published.tsx)
|
│ /writer/approved → Approved (Approved.tsx)
|
||||||
│ /automation → Automation Dashboard (Dashboard.tsx)
|
│ /automation → Automation Dashboard (Dashboard.tsx)
|
||||||
│ /linker/content → Linker [if enabled]
|
│ /linker/content → Linker [if enabled]
|
||||||
│ /optimizer/content → Optimizer [if enabled]
|
│ /optimizer/content → Optimizer [if enabled]
|
||||||
|
|||||||
Reference in New Issue
Block a user