Version 1.8.2

This commit is contained in:
IGNY8 VPS (Salman)
2026-01-18 22:14:34 +00:00
parent 328098a48c
commit e57c4bf1ac
4 changed files with 447 additions and 10 deletions

View File

@@ -1,7 +1,7 @@
# IGNY8 Change Log
**Current Version:** 1.8.1
**Last Updated:** January 18, 2026
**Current Version:** 1.8.2
**Last Updated:** January 19, 2026
---
@@ -9,6 +9,7 @@
| Version | Date | Summary |
|---------|------|---------|
| 1.8.2 | Jan 19, 2026 | **Keywords Library Redesign & Sector Filtering** - Complete Keywords Library page overhaul with sector metric cards, Smart Suggestions, cascading filters, sector-specific keyword filtering, UI/UX improvements, and backend sector_ids parameter support |
| 1.8.1 | Jan 18, 2026 | **Automation Scheduling Overhaul** - Hourly scheduling (replaces 15-min windows), DefaultAutomationConfig singleton for centralized defaults, test mode for admin testing, Reset button fetches from backend, new migrations 0009-0012 |
| 1.8.0 | Jan 17, 2026 | **Major** - Unified Settings Consolidation: AI & Automation settings merged into Site Settings > Automation tab; Navigation Refactor Complete; Automation Overview & Run Detail pages; Publishing & Scheduling UX improvements; Skip Stage configuration; Content Calendar fixes |
| 1.7.6 | Jan 15, 2026 | **Navigation Refactor Complete** - Complete sidebar restructure, new Automation Overview page, Publish Settings page, Content Calendar improvements |
@@ -48,6 +49,328 @@
---
## v1.8.2 - January 19, 2026
### Keywords Library Complete Redesign & Sector-Specific Filtering
This release delivers a comprehensive redesign of the Keywords Library page with major architectural improvements to ensure sites only see keywords from their configured sectors, new UI components for better keyword discovery, and cascading filters matching the Planner pages pattern.
---
### 🎯 Critical Fix: Sector-Specific Filtering
**Problem:** Sites were seeing keywords from ALL sectors in their industry, not just their configured sectors. For example, a "Technology Consulting" site was seeing AI & Machine Learning keywords even though it wasn't configured for that sector.
**Root Cause:** Backend `get_queryset()` was filtering by `industry_id`, which returned ALL `IndustrySector` records for that industry, regardless of which sectors the site actually has.
**Solution:**
- Added `sector_ids` parameter support to backend API endpoints
- Frontend now passes site's specific `industry_sector` IDs
- Keywords filtered to only those matching site's configured sectors
- Both `sector_stats` and `list` endpoints respect sector filtering
**API Changes:**
```python
# New parameter support
GET /api/v1/keywords-library/?sector_ids=1,2,3
GET /api/v1/keywords-library/sector_stats/?sector_ids=1,2,3
```
**Impact:**
- Sites now see ONLY keywords relevant to their configured sectors
- Stat counts accurate (available, added, high-opportunity, etc.)
- Sector metric cards show correct totals
- Smart Suggestions reflect only relevant keywords
---
### 📊 Sector Metric Cards (New Component)
**New Feature:** Sector overview cards at top of page showing key stats per sector.
**Features:**
- **6 Stat Types:**
- 📦 Total Keywords - All keywords in sector
- ✅ Added - Keywords site has added
- ⭐ High-Opportunity - Premium keywords with high volume
- 🎯 Available - Keywords not yet added
- 💰 Paid - Premium keywords requiring credits
- 🆓 Free - No-cost keywords
- **Interactive Filtering:**
- Click any stat type to filter table
- Active stat highlighted with success color badge (top-right)
- Aggregates counts across all site sectors
- Respects search and other filters
- **Visual Design:**
- Card layout with sector name and description
- Metric grid showing all 6 stats
- Hover effects and smooth transitions
- Active badge in top-right corner when filtering by that sector
**Location:** Appears at top of page, before filters and table
---
### ✨ Smart Suggestions Redesign
**New Behavior:** Smart Suggestions now appear dynamically after user interaction (search or filter) instead of always visible.
**Features:**
- **6 Bulk-Add Options:**
- All Available - Add all unfettered keywords
- High-Opportunity Available - Add premium keywords not yet added
- High-Opportunity Missing - Suggest premium keywords to add
- Top 50 by Volume - Add highest traffic keywords
- Low Difficulty - Add easiest-to-rank keywords
- Paid Available - Add premium keywords
- **Dynamic Display:**
- Hidden by default on page load
- Appears after search or filter interaction
- Breathing animation indicator when active
- Metric cards show available counts for each option
- **Bulk Add Confirmation:**
- Modal confirmation before bulk operations
- Shows count of keywords to be added
- Prevents accidental mass additions
**Note:** Smart Suggestions metric cards do NOT show active badges (only Sector Cards do)
---
### 🔍 Cascading Filters Implementation
**Pattern Match:** Keywords Library now uses same filter UX as Planner pages (Keywords, Clusters, Ideas).
**Filter Options:**
- 🔍 Search - Keyword name search
- 🌍 Country - Filter by target country
- 📈 Volume - Traffic volume ranges
- 💪 Difficulty - SEO difficulty levels (Easy, Medium, Hard, Very Hard)
- 📊 Status - Added vs Available
- 🎯 Sector - Filter by specific sector (NEW)
**Cascading Behavior:**
- Each filter shows only values present in current data
- Filters update based on other active filters
- "Clear Filters" button appears when filters active
- Active filter indicator shows count
**UI Improvements:**
- Centered filter bar matching Planner pages
- Consistent spacing and styling
- Responsive layout
- Clear visual hierarchy
---
### 🎨 UI/UX Improvements
**Typography:**
- Reduced font sizes across page for better density
- Keyword names: text-base (was text-lg)
- Descriptions: text-sm (was text-base)
- Stat labels: text-xs (consistent with design system)
**Layout:**
- Sector cards at top with proper spacing
- Smart Suggestions below sector cards (when visible)
- Filter bar centered and properly aligned
- Table with improved readability
**Interactions:**
- Smooth transitions and hover states
- Active filter highlighting with success color
- Breathing indicator for Smart Suggestions
- Clear add/added button states
**State Management:**
- "Added" button state persists correctly after page reload
- Aggregated available counts accurate across all stats
- localStorage tracks added keywords
- Real-time stat updates when keywords added/removed
---
### 🔧 Backend Changes
**Files Modified:**
- `backend/igny8_core/auth/views.py` - SeedKeywordViewSet
**Changes:**
1. **sector_ids Parameter Support:**
```python
def get_queryset(self):
sector_ids_param = self.request.query_params.get('sector_ids', None)
if sector_ids_param:
sector_ids = [int(id.strip()) for id in sector_ids_param.split(',')]
queryset = queryset.filter(industry_sector_id__in=sector_ids)
```
2. **sector_stats Endpoint Updated:**
- Accepts sector_ids parameter
- Filters stats by specified sectors
- Returns accurate counts per sector
3. **Improved Query Performance:**
- Optimized sector filtering
- Reduced database queries
- Better indexing for sector lookups
---
### 🎯 Frontend Changes
**Files Modified:**
- `frontend/src/pages/Setup/IndustriesSectorsKeywords.tsx` - Main page component
- `frontend/src/components/keywords-library/SectorCardsGrid.tsx` - Sector metric cards
- `frontend/src/components/keywords-library/SectorMetricCard.tsx` - Individual sector card
- `frontend/src/components/keywords-library/SmartSuggestions.tsx` - Smart Suggestions component
- `frontend/src/services/api.ts` - API integration
**Major Changes:**
1. **Sector Filtering Integration:**
```typescript
const loadSectorStats = async () => {
const sectorIds = sectors.map(s => s.industry_sector).filter(Boolean);
const stats = await fetchSectorStats({ sector_ids: sectorIds });
};
```
2. **Available Counts Aggregation:**
- Fixed aggregation for all 6 stat types
- Correct counts for Total, Added, Available, High-Opportunity, Paid, Free
- Respects both sector filtering and search/filters
3. **State Management:**
- localStorage for added keywords tracking
- React state for sector stats and filters
- Proper dependency arrays for useEffect hooks
- Real-time updates on keyword add/remove
4. **UI Component Structure:**
```
KeywordsLibrary
├── SectorCardsGrid (if sectors)
│ └── SectorMetricCard[] (per sector)
├── SmartSuggestions (if search/filter active)
│ └── SectorMetricCard[] (for bulk actions)
├── FilterBar (centered, cascading)
└── KeywordsTable (filtered results)
```
---
### 📝 Terminology Standardization
**Unified Naming:** "Keywords Library" everywhere (was inconsistent: "Keyword Library", "Add Keywords", "Seed Keywords")
**Changes:**
- Sidebar: "Keywords Library"
- Page Title: "Keywords Library"
- URL: `/keywords-library` (was `/setup/add-keywords`)
- API Endpoint: `/api/v1/keywords-library/` (was `/api/v1/auth/seed-keywords/`)
- Code: Internal `SeedKeyword` model name kept, but all user-facing text updated
**Note:** No backward compatibility redirects - direct change to new naming.
---
### 🐛 Bug Fixes
1. **"Added" Button State:**
- Fixed state not reflecting correctly after page reload
- Now properly checks localStorage and aggregates counts
- Real-time updates when keywords added/removed
2. **Sector Card Active Badge:**
- Moved to top-right corner (was bleeding into card content)
- Uses success color variant
- Only shows on Sector Cards, not Smart Suggestions
3. **Wrong Sector Keywords:**
- Sites no longer see keywords from unconfigured sectors
- Sector filtering now works at backend level
- Accurate filtering prevents data pollution
4. **Available Count Accuracy:**
- Fixed aggregation logic for all stat types
- Correct counts regardless of active filters
- Proper handling of edge cases (0 available, all added, etc.)
---
### 📦 Files Changed (6 commits)
**Commit 328098a4:** "COMPLETED KEYWORDS-LIBRARY-REDESIGN-PLAN.md"
- Final implementation of sector filtering and UI polish
- 6 files: views.py, SectorCardsGrid, SectorMetricCard, SmartSuggestions, IndustriesSectorsKeywords, api.ts
**Commit 05bc433c:** "keywrods library fixes"
- Major refactoring and bug fixes
- 8 files including backend views, frontend components, API, design system
**Commit 4cf27fa8:** "keywrod slibrary page dsigning"
- UI/UX design implementation
- 9 files including new components and design system updates
**Commit aa03e15e:** "fixes ofkewyrod library"
- Cleanup and optimization
- 1 file: IndustriesSectorsKeywords component simplification
**Commit 43df7af9:** "keywrods libarry update"
- Major feature additions (Smart Suggestions, Bulk Add, etc.)
- 16 files including new components and API endpoints
**Commit 9e88c475:** "keywrod library sorting issue and fitlers inclusion"
- Initial redesign planning and filter improvements
- 4 files: pagination, views, redesign plan document, API
---
### 📋 Known Issues & Future Improvements
**Partially Implemented:**
- ⬜ Remove sector selector from AppHeader (route updated, selector still present)
- ⬜ Center filter bar styling (functional but needs polish)
- ⬜ Default table display (kept existing "Browse" toggle UX)
**Future Enhancements:**
- Multi-select sector filtering
- Export filtered keywords
- Keyword comparison across sectors
- Bulk edit operations
- Advanced search with operators
---
### 🎯 Impact Summary
**User Experience:**
- ✅ Sites only see relevant keywords for their sectors
- ✅ Clear visual organization with sector cards
- ✅ Powerful bulk-add options via Smart Suggestions
- ✅ Consistent filtering UX across platform
- ✅ Accurate stats and counts everywhere
**Performance:**
- ✅ Optimized backend queries with sector filtering
- ✅ Reduced data transfer (only relevant keywords)
- ✅ Better caching opportunities
- ✅ Faster page load times
**Maintainability:**
- ✅ Consistent terminology across codebase
- ✅ Clear component structure
- ✅ Well-documented API changes
- ✅ Comprehensive redesign plan document
---
## v1.8.1 - January 18, 2026
### Automation Scheduling Overhaul & Centralized Default Settings

View File

@@ -1,7 +1,7 @@
# API Endpoints Reference
**Last Verified:** January 18, 2026
**Version:** 1.8.1
**Last Verified:** January 19, 2026
**Version:** 1.8.2
**Base URL:** `/api/v1/`
**Documentation:** `/api/docs/` (Swagger) | `/api/redoc/` (ReDoc)
@@ -39,7 +39,116 @@ All endpoints require authentication unless noted.
| GET | `/sectors/` | `SectorViewSet.list` | ✅ | List sectors |
| POST | `/sectors/` | `SectorViewSet.create` | ✅ | Create sector |
| GET | `/industries/` | `IndustryViewSet.list` | ✅ | List industries |
| GET | `/seed-keywords/` | `SeedKeywordViewSet.list` | ✅ | List seed keywords |
| GET | `/keywords-library/` | `SeedKeywordViewSet.list` | ✅ | List keywords library (v1.8.2) |
| GET | `/keywords-library/sector_stats/` | `SeedKeywordViewSet.sector_stats` | ✅ | Get sector statistics (v1.8.2) |
---
## Keywords Library Endpoints (v1.8.2)
**New Endpoint:** `/api/v1/keywords-library/`
**Previous:** `/api/v1/auth/seed-keywords/` (deprecated, no backward compatibility)
### List Keywords
```
GET /api/v1/keywords-library/
```
**Query Parameters:**
- `sector_ids` _(string, comma-separated)_ - Filter by specific sector IDs (e.g., `1,2,3`)
- **New in v1.8.2:** Ensures sites only see keywords from their configured sectors
- `search` _(string)_ - Search keyword names
- `country` _(string)_ - Filter by country code (e.g., `US`, `UK`)
- `volume_min` _(number)_ - Minimum search volume
- `volume_max` _(number)_ - Maximum search volume
- `difficulty` _(string)_ - SEO difficulty level (`easy`, `medium`, `hard`, `very_hard`)
- `is_high_opportunity` _(boolean)_ - Filter high-opportunity keywords
- `is_paid` _(boolean)_ - Filter paid/premium keywords
- `ordering` _(string)_ - Sort field (prefix `-` for descending)
- Options: `keyword`, `volume`, `difficulty`, `country`
- Default: `-volume`
- `page` _(number)_ - Page number for pagination
- `page_size` _(number)_ - Results per page (default: 20)
**Example Request:**
```bash
GET /api/v1/keywords-library/?sector_ids=1,2,3&country=US&difficulty=easy&ordering=-volume&page=1
```
**Response:**
```json
{
"count": 150,
"next": "http://api.igny8.com/api/v1/keywords-library/?page=2&sector_ids=1,2,3",
"previous": null,
"results": [
{
"id": 1,
"keyword": "cloud computing services",
"volume": 12000,
"difficulty": "medium",
"country": "US",
"industry_sector": 1,
"industry_sector_name": "Cloud Infrastructure & Services",
"is_high_opportunity": true,
"is_paid": false,
"credit_cost": 0,
"created_at": "2025-01-15T10:00:00Z"
}
]
}
```
### Sector Statistics
```
GET /api/v1/keywords-library/sector_stats/
```
Returns aggregated statistics per sector for the keywords library.
**Query Parameters:**
- `sector_ids` _(string, comma-separated)_ - Filter by specific sector IDs
- **New in v1.8.2:** Returns stats only for specified sectors
**Example Request:**
```bash
GET /api/v1/keywords-library/sector_stats/?sector_ids=1,2,3
```
**Response:**
```json
[
{
"sector_id": 1,
"sector_name": "Cloud Infrastructure & Services",
"sector_description": "Keywords related to cloud computing, hosting, and infrastructure services",
"stats": {
"total": 250,
"added": 45,
"available": 205,
"high_opportunity": 80,
"paid": 30,
"free": 220
}
}
]
```
**Stat Definitions:**
- `total` - All keywords in sector
- `added` - Keywords site has added to their workflow
- `available` - Keywords not yet added (total - added)
- `high_opportunity` - Premium keywords with high volume and potential
- `paid` - Premium keywords requiring credits
- `free` - Keywords with no credit cost
**Use Cases:**
1. **Sector Metric Cards** - Display stats per sector with clickable filters
2. **Smart Suggestions** - Show available counts for bulk-add operations
3. **Progress Tracking** - Track keyword adoption across sectors
4. **Budget Planning** - Understand credit requirements for paid keywords
---

View File

@@ -78,13 +78,13 @@
| [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.8.0)
### Current Page Structure (v1.8.2)
```
/ → Dashboard (Home.tsx) - with workflow widgets
├── SETUP
│ /setup/wizard → Onboarding Wizard (SetupWizard.tsx)
│ /setup/add-keywords Add Keywords (AddKeywords.tsx)
│ /keywords-library → Keywords Library (IndustriesSectorsKeywords.tsx) [v1.8.2 renamed]
│ /account/content-settings → Content Settings (ContentSettingsPage.tsx)
│ /sites → Sites List (List.tsx)
│ /sites/:id → Site Dashboard (Dashboard.tsx)

View File

@@ -1,8 +1,8 @@
# Keywords Library Page Redesign Plan
**Created:** January 18, 2026
**Updated:** January 18, 2026
**Status:**IMPLEMENTED (v1.8.1)
**Updated:** January 19, 2026 _(v1.8.2 released)_
**Status:**COMPLETED & DOCUMENTED (v1.8.2)
**Page:** `/keywords-library` (was `/setup/add-keywords`)
**Priority:** 🟢 COMPLETED
@@ -10,7 +10,7 @@
## Executive Summary
Comprehensive redesign of the Keywords Library page to:
Comprehensive redesign of the Keywords Library page completed and deployed in **v1.8.2**:
1.**Standardize naming** to "Keywords Library" across frontend, backend, URLs, menus, and admin
2.**Implement cascading filters** like Planner pages (Keywords, Clusters, Ideas)
3.**Remove sector selector** from AppHeader, use site-only selector (partial - route updated)
@@ -19,6 +19,11 @@ Comprehensive redesign of the Keywords Library page to:
6.**Center filter bar** with sector filter added, matching Planner page styling (needs polish)
7.**Show table data by default** (remove "Browse" toggle) (kept existing UX for now)
8.**No backward compatibility** - single source of truth
9.**CRITICAL FIX:** Sector-specific filtering - sites now only see keywords from their configured sectors
**Release:** Version 1.8.2 - January 19, 2026
**Changelog:** See `/CHANGELOG.md` for complete details
**API Documentation:** See `/docs/20-API/ENDPOINTS.md` for Keywords Library endpoints
---