Files
ALwrity/docs/Content strategy/content_strategy_alwrityit_implementation_plan.md
2025-08-15 08:28:34 +05:30

446 lines
14 KiB
Markdown

# ALwrity It - Content Strategy Analysis Customization Feature
## 🎯 **Feature Overview**
**ALwrity It** allows users to customize AI-generated analysis components when they don't meet expectations. Users can manually edit data or use AI to regenerate with custom prompts, maintaining context from other analysis components.
### **Key Benefits:**
-**User Control**: Full control over AI-generated analysis
-**Flexibility**: Manual editing or AI-powered regeneration
-**Context Awareness**: AI considers other analysis components
-**Structured Output**: Consistent JSON responses via Gemini
-**Version History**: Track and revert changes
-**Preview Mode**: Compare original vs modified analysis
## 🏗️ **Technical Architecture**
### **File Structure**
```
frontend/src/components/ContentPlanningDashboard/components/StrategyIntelligence/
├── components/
│ ├── content_strategy_alwrityit/
│ │ ├── ALwrityItButton.tsx # Main button component
│ │ ├── ALwrityItModal.tsx # Main modal container
│ │ ├── ManualEditForm.tsx # Manual editing form
│ │ ├── AIEditForm.tsx # AI prompt form
│ │ ├── QuickRegenerateForm.tsx # Quick AI regeneration
│ │ ├── AnalysisPreview.tsx # Preview changes
│ │ ├── ModeSelector.tsx # Mode selection interface
│ │ ├── VersionHistory.tsx # Version tracking
│ │ └── TemplateLibrary.tsx # Saved templates
│ └── [existing analysis cards]
├── hooks/
│ ├── content_strategy_alwrityit/
│ │ ├── useALwrityIt.ts # Main hook for ALwrity It functionality
│ │ ├── useAnalysisRegeneration.ts # AI regeneration logic
│ │ ├── useManualEditing.ts # Manual editing logic
│ │ └── useVersionHistory.ts # Version management
├── types/
│ ├── content_strategy_alwrityit/
│ │ ├── alwrityIt.types.ts # TypeScript types
│ │ ├── analysisSchemas.ts # JSON schemas for each component
│ │ └── promptTemplates.ts # AI prompt templates
├── utils/
│ ├── content_strategy_alwrityit/
│ │ ├── analysisTransformers.ts # Data transformation utilities
│ │ ├── promptGenerators.ts # AI prompt generation
│ │ ├── schemaValidators.ts # JSON schema validation
│ │ └── versionManager.ts # Version control utilities
└── providers/
└── ALwrityItProvider.tsx # Context provider for state management
```
### **Backend Structure**
```
backend/api/content_planning/api/content_strategy/
├── endpoints/
│ ├── alwrityit_endpoints.py # ALwrity It API endpoints
│ └── [existing endpoints]
├── services/
│ ├── alwrityit_service.py # ALwrity It business logic
│ ├── analysis_regeneration_service.py # AI regeneration service
│ └── version_management_service.py # Version control service
└── models/
├── alwrityit_models.py # Database models for versions/templates
└── [existing models]
```
## 📋 **Implementation Phases**
### **Phase 1: Core Infrastructure (2-3 days)**
#### **1.1 Backend API Endpoints**
```python
# backend/api/content_planning/api/content_strategy/endpoints/alwrityit_endpoints.py
@router.post("/regenerate-analysis-component")
async def regenerate_analysis_component(request: RegenerateAnalysisRequest):
"""Regenerate specific analysis component with AI"""
@router.post("/update-analysis-component-manual")
async def update_analysis_component_manual(request: ManualUpdateRequest):
"""Update analysis component with manual edits"""
@router.get("/analysis-component-schema/{component_type}")
async def get_analysis_component_schema(component_type: str):
"""Get JSON schema for specific component type"""
@router.get("/analysis-versions/{strategy_id}/{component_type}")
async def get_analysis_versions(strategy_id: int, component_type: str):
"""Get version history for analysis component"""
```
#### **1.2 Frontend Core Components**
```typescript
// ALwrityItButton.tsx
const ALwrityItButton = ({ componentType, currentData, onUpdate }) => {
return (
<IconButton
sx={{
background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
color: 'white',
'&:hover': { transform: 'scale(1.1)' },
transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',
boxShadow: '0 4px 12px rgba(102, 126, 234, 0.3)',
}}
onClick={() => setModalOpen(true)}
>
<AutoAwesomeIcon />
</IconButton>
);
};
```
### **Phase 2: Modal & Mode Selection (1-2 days)**
#### **2.1 Main Modal Component**
```typescript
// ALwrityItModal.tsx
const ALwrityItModal = ({ open, onClose, componentType, currentData, onUpdate }) => {
const [mode, setMode] = useState<ALwrityItMode>('manual');
return (
<Dialog open={open} onClose={onClose} maxWidth="lg" fullWidth>
<DialogTitle>ALwrity It - {getComponentDisplayName(componentType)}</DialogTitle>
<DialogContent>
<ModeSelector mode={mode} onModeChange={setMode} />
{mode === 'manual' && (
<ManualEditForm componentType={componentType} currentData={currentData} />
)}
{mode === 'ai' && (
<AIEditForm componentType={componentType} currentData={currentData} />
)}
{mode === 'regenerate' && (
<QuickRegenerateForm componentType={componentType} />
)}
</DialogContent>
</Dialog>
);
};
```
#### **2.2 Mode Selector Component**
```typescript
// ModeSelector.tsx
const ModeSelector = ({ mode, onModeChange }) => {
const modes = [
{
id: 'manual',
title: 'Manual Edit',
description: 'Edit analysis data manually',
icon: <EditIcon />,
color: '#4caf50'
},
{
id: 'ai',
title: 'AI Custom',
description: 'Provide custom prompt for AI regeneration',
icon: <AutoAwesomeIcon />,
color: '#667eea'
},
{
id: 'regenerate',
title: 'Quick Regenerate',
description: 'Regenerate with improved AI analysis',
icon: <RefreshIcon />,
color: '#ff9800'
}
];
return (
<Grid container spacing={2}>
{modes.map((modeOption) => (
<Grid item xs={12} sm={4} key={modeOption.id}>
<Card onClick={() => onModeChange(modeOption.id)}>
<CardContent>
<Box sx={{ color: modeOption.color }}>{modeOption.icon}</Box>
<Typography variant="subtitle1">{modeOption.title}</Typography>
<Typography variant="caption">{modeOption.description}</Typography>
</CardContent>
</Card>
</Grid>
))}
</Grid>
);
};
```
### **Phase 3: Manual Editing Interface (1-2 days)**
#### **3.1 Manual Edit Form**
```typescript
// ManualEditForm.tsx
const ManualEditForm = ({ componentType, currentData, onSave }) => {
const schema = useAnalysisSchema(componentType);
const [formData, setFormData] = useState(currentData);
return (
<Box>
<Typography variant="h6">Manual Edit - {getComponentDisplayName(componentType)}</Typography>
{Object.entries(schema.properties).map(([field, fieldSchema]) => (
<DynamicFormField
key={field}
field={field}
schema={fieldSchema}
value={formData[field]}
onChange={(value) => setFormData(prev => ({ ...prev, [field]: value }))}
/>
))}
<Box sx={{ mt: 2, display: 'flex', gap: 2 }}>
<Button variant="outlined" onClick={() => setFormData(currentData)}>
Reset to Original
</Button>
<Button variant="contained" onClick={() => onSave(formData)}>
Save Changes
</Button>
</Box>
</Box>
);
};
```
### **Phase 4: AI Integration (2-3 days)**
#### **4.1 AI Edit Form**
```typescript
// AIEditForm.tsx
const AIEditForm = ({ componentType, currentData, onGenerate }) => {
const [prompt, setPrompt] = useState('');
const [suggestedPrompts, setSuggestedPrompts] = useState([]);
return (
<Box>
<Typography variant="h6">AI Custom Regeneration</Typography>
<TextField
fullWidth
multiline
rows={4}
label="Custom AI Prompt"
value={prompt}
onChange={(e) => setPrompt(e.target.value)}
placeholder="Describe how you want to improve this analysis..."
/>
<Box sx={{ mt: 2 }}>
{suggestedPrompts.map((suggestion, index) => (
<Chip
key={index}
label={suggestion}
onClick={() => setPrompt(suggestion)}
sx={{ mr: 1, mb: 1 }}
/>
))}
</Box>
<Button
variant="contained"
onClick={() => onGenerate(prompt)}
disabled={!prompt.trim()}
startIcon={<AutoAwesomeIcon />}
>
Generate with AI
</Button>
</Box>
);
};
```
#### **4.2 Backend AI Service**
```python
# backend/services/alwrityit_service.py
class ALwrityItService:
async def regenerate_analysis_component(
self,
component_type: str,
current_data: dict,
user_prompt: str = None,
context_data: dict = None
) -> dict:
prompt = self._build_regeneration_prompt(
component_type, current_data, user_prompt, context_data
)
schema = self._get_component_schema(component_type)
response = await self.gemini_provider.generate_structured_response(
prompt=prompt,
schema=schema,
context={
"current_analysis": current_data,
"other_components": context_data,
"user_requirements": user_prompt,
"component_type": component_type
}
)
return response
```
### **Phase 5: Preview & Version Management (1-2 days)**
#### **5.1 Analysis Preview Component**
```typescript
// AnalysisPreview.tsx
const AnalysisPreview = ({ original, modified, componentType, onApply, onRevert }) => {
return (
<Box>
<Typography variant="h6">Preview Changes</Typography>
<Grid container spacing={2}>
<Grid item xs={6}>
<Typography variant="subtitle2">Original Analysis</Typography>
<AnalysisCard data={original} componentType={componentType} />
</Grid>
<Grid item xs={6}>
<Typography variant="subtitle2">Modified Analysis</Typography>
<AnalysisCard data={modified} componentType={componentType} />
</Grid>
</Grid>
<Box sx={{ mt: 2, display: 'flex', gap: 2 }}>
<Button variant="outlined" onClick={onRevert}>Revert Changes</Button>
<Button variant="contained" onClick={onApply}>Apply Changes</Button>
</Box>
</Box>
);
};
```
## 🎨 **UI/UX Design Specifications**
### **Color Scheme**
```typescript
const ALWRITY_IT_COLORS = {
primary: '#667eea',
secondary: '#764ba2',
success: '#4caf50',
warning: '#ff9800',
error: '#f44336',
background: {
modal: 'linear-gradient(135deg, #0f0f23 0%, #1a1a2e 100%)',
card: 'rgba(255, 255, 255, 0.05)',
button: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)'
}
};
```
## 🔧 **Database Schema**
### **Version History Table**
```sql
CREATE TABLE analysis_versions (
id SERIAL PRIMARY KEY,
strategy_id INTEGER NOT NULL,
component_type VARCHAR(50) NOT NULL,
version_data JSONB NOT NULL,
change_type VARCHAR(20) NOT NULL,
user_prompt TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
created_by INTEGER,
description TEXT
);
```
### **Templates Table**
```sql
CREATE TABLE analysis_templates (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
component_type VARCHAR(50) NOT NULL,
template_data JSONB NOT NULL,
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
created_by INTEGER,
is_public BOOLEAN DEFAULT FALSE
);
```
## 🚀 **Implementation Timeline**
### **Week 1: Core Infrastructure**
- **Day 1-2**: Backend API endpoints and database models
- **Day 3-4**: Frontend component structure and basic modal
- **Day 5**: Integration with existing analysis cards
### **Week 2: AI Integration**
- **Day 1-2**: Gemini structured response integration
- **Day 3-4**: Prompt engineering and context handling
- **Day 5**: Testing and refinement
### **Week 3: Manual Editing & Polish**
- **Day 1-2**: Dynamic form generation and validation
- **Day 3-4**: Preview and comparison features
- **Day 5**: Version history and advanced features
## 🧪 **Testing Strategy**
### **Unit Tests**
- Component rendering and interactions
- Form validation and data transformation
- AI prompt generation and response parsing
### **Integration Tests**
- API endpoint functionality
- Database operations
- AI service integration
### **End-to-End Tests**
- Complete user workflows
- Error handling scenarios
- Performance testing
## 📊 **Success Metrics**
### **User Engagement**
- Number of ALwrity It button clicks per analysis
- Most frequently modified components
- User satisfaction with customization options
### **Technical Performance**
- AI generation response times
- Modal load times
- Error rates and recovery
## 🔄 **Future Enhancements**
### **Phase 2 Features**
1. **Collaboration Tools**: Team comments and approvals
2. **Advanced AI**: Multi-step regeneration with user feedback
3. **Integration**: Connect with external data sources
4. **Analytics**: Detailed usage analytics and insights
5. **Templates**: Community template sharing
---
**Next Steps**:
1. Review and approve this implementation plan
2. Set up development environment
3. Begin Phase 1 implementation
4. Create project milestones and tracking
5. Set up testing infrastructure