460 lines
13 KiB
Markdown
460 lines
13 KiB
Markdown
# Research Templates Improvement Plan
|
|
|
|
**Date**: 2025-01-29
|
|
**Status**: Planning & Implementation Guide
|
|
|
|
---
|
|
|
|
## 📊 Current State: Research Presets
|
|
|
|
### What We Have
|
|
- **AI-Generated Presets**: Generated from research persona based on user's onboarding data
|
|
- **Rule-Based Presets**: Fallback presets when persona doesn't exist
|
|
- **Quick Start Presets**: Displayed in ResearchTest page sidebar
|
|
- **Preset Structure**: Includes name, keywords, industry, target audience, research mode, config, icon, gradient
|
|
|
|
### Current Limitations
|
|
1. **No User-Created Templates**: Users can't save their own research configurations
|
|
2. **No Template Management**: No way to edit, delete, or organize templates
|
|
3. **No Template Sharing**: Can't share templates with team members
|
|
4. **No Template Categories**: All presets shown together, no organization
|
|
5. **No Template Analytics**: Can't see which templates are used most
|
|
6. **Limited Customization**: Presets are static, can't be modified after creation
|
|
7. **No Template Library**: No community or pre-built templates
|
|
|
|
---
|
|
|
|
## 🎯 Proposed Improvements: Research Templates System
|
|
|
|
### Phase 1: User-Created Templates (High Priority)
|
|
|
|
#### 1.1 Save Research as Template
|
|
**Feature**: Allow users to save any research configuration as a reusable template
|
|
|
|
**Implementation**:
|
|
```typescript
|
|
interface ResearchTemplate {
|
|
id: string;
|
|
name: string;
|
|
description?: string;
|
|
keywords: string;
|
|
industry: string;
|
|
target_audience: string;
|
|
research_mode: ResearchMode;
|
|
config: ResearchConfig;
|
|
icon?: string;
|
|
gradient?: string;
|
|
category?: string;
|
|
tags?: string[];
|
|
created_at: string;
|
|
updated_at: string;
|
|
usage_count: number;
|
|
is_favorite: boolean;
|
|
is_public: boolean; // For future sharing
|
|
}
|
|
```
|
|
|
|
**UI Components**:
|
|
- "Save as Template" button in IntentConfirmationPanel (after research completes)
|
|
- Template name input dialog
|
|
- Template description (optional)
|
|
- Category/tag selection
|
|
|
|
**Backend**:
|
|
- New endpoint: `POST /api/research/templates/save`
|
|
- Store templates in database (new `research_templates` table)
|
|
- Associate with user_id
|
|
|
|
#### 1.2 Template Library UI
|
|
**Feature**: Display user's saved templates alongside AI-generated presets
|
|
|
|
**UI Components**:
|
|
- Template cards with name, description, usage count
|
|
- "Use Template" button
|
|
- "Edit Template" button
|
|
- "Delete Template" button
|
|
- "Favorite" toggle
|
|
- Search/filter templates
|
|
|
|
**Layout**:
|
|
```
|
|
┌─────────────────────────────────────┐
|
|
│ Quick Start Templates │
|
|
├─────────────────────────────────────┤
|
|
│ [AI Preset 1] [AI Preset 2] ... │
|
|
│ │
|
|
│ My Templates (5) │
|
|
│ [Template 1] [Template 2] ... │
|
|
│ │
|
|
│ + Create New Template │
|
|
└─────────────────────────────────────┘
|
|
```
|
|
|
|
#### 1.3 Template Management
|
|
**Feature**: Edit, delete, duplicate, and organize templates
|
|
|
|
**Actions**:
|
|
- **Edit**: Modify template name, keywords, config
|
|
- **Delete**: Remove template with confirmation
|
|
- **Duplicate**: Create copy of template
|
|
- **Favorite**: Mark frequently used templates
|
|
- **Category**: Organize into categories (e.g., "Marketing", "Technical", "Competitive Analysis")
|
|
|
|
---
|
|
|
|
### Phase 2: Enhanced Template Features (Medium Priority)
|
|
|
|
#### 2.1 Template Categories & Tags
|
|
**Feature**: Organize templates with categories and tags
|
|
|
|
**Categories**:
|
|
- Content Marketing
|
|
- Competitive Analysis
|
|
- Industry Trends
|
|
- Technical Research
|
|
- Product Research
|
|
- Custom categories
|
|
|
|
**Tags**:
|
|
- Multiple tags per template
|
|
- Filter by tags
|
|
- Tag suggestions based on keywords
|
|
|
|
#### 2.2 Template Analytics
|
|
**Feature**: Track template usage and effectiveness
|
|
|
|
**Metrics**:
|
|
- Usage count (how many times used)
|
|
- Last used date
|
|
- Success rate (research completion)
|
|
- Average research time
|
|
- Most popular templates
|
|
|
|
**UI**:
|
|
- Show usage stats on template cards
|
|
- "Most Used" section
|
|
- "Recently Used" section
|
|
|
|
#### 2.3 Smart Template Suggestions
|
|
**Feature**: AI suggests templates based on user behavior
|
|
|
|
**Logic**:
|
|
- Suggest templates based on:
|
|
- Similar keywords used before
|
|
- Same industry/audience
|
|
- Time of day/week patterns
|
|
- Recent research topics
|
|
|
|
**UI**:
|
|
- "Suggested for You" section
|
|
- "Based on your recent research" badge
|
|
|
|
---
|
|
|
|
### Phase 3: Advanced Template Features (Low Priority)
|
|
|
|
#### 3.1 Template Sharing
|
|
**Feature**: Share templates with team members or community
|
|
|
|
**Implementation**:
|
|
- Public/private toggle
|
|
- Share link generation
|
|
- Team workspace templates
|
|
- Template marketplace (future)
|
|
|
|
#### 3.2 Template Variables
|
|
**Feature**: Templates with placeholders that users can fill
|
|
|
|
**Example**:
|
|
```typescript
|
|
{
|
|
name: "Competitive Analysis: {company}",
|
|
keywords: "Research {company} marketing strategies and product positioning",
|
|
// User fills in {company} when using template
|
|
}
|
|
```
|
|
|
|
**UI**:
|
|
- Variable input dialog when using template
|
|
- Pre-fill common variables from user data
|
|
|
|
#### 3.3 Template Workflows
|
|
**Feature**: Chain multiple templates together
|
|
|
|
**Use Case**:
|
|
1. Run "Industry Trends" template
|
|
2. Then run "Competitive Analysis" template
|
|
3. Then run "Content Ideas" template
|
|
|
|
**UI**:
|
|
- "Create Workflow" button
|
|
- Drag-and-drop template ordering
|
|
- Save workflow as single template
|
|
|
|
---
|
|
|
|
## 🏗️ Implementation Plan
|
|
|
|
### Step 1: Database Schema
|
|
```sql
|
|
CREATE TABLE research_templates (
|
|
id VARCHAR(100) PRIMARY KEY,
|
|
user_id VARCHAR(100) NOT NULL,
|
|
name VARCHAR(200) NOT NULL,
|
|
description TEXT,
|
|
keywords TEXT NOT NULL,
|
|
industry VARCHAR(100),
|
|
target_audience VARCHAR(200),
|
|
research_mode VARCHAR(20),
|
|
config JSON NOT NULL,
|
|
icon VARCHAR(10),
|
|
gradient VARCHAR(200),
|
|
category VARCHAR(100),
|
|
tags JSON,
|
|
usage_count INT DEFAULT 0,
|
|
is_favorite BOOLEAN DEFAULT FALSE,
|
|
is_public BOOLEAN DEFAULT FALSE,
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
last_used_at DATETIME,
|
|
INDEX idx_user_id (user_id),
|
|
INDEX idx_category (category),
|
|
INDEX idx_created_at (created_at)
|
|
);
|
|
```
|
|
|
|
### Step 2: Backend API Endpoints
|
|
```python
|
|
# backend/api/research/router.py
|
|
|
|
@router.post("/templates/save")
|
|
async def save_research_template(
|
|
request: SaveTemplateRequest,
|
|
current_user: Dict = Depends(get_current_user)
|
|
):
|
|
"""Save current research configuration as template"""
|
|
pass
|
|
|
|
@router.get("/templates")
|
|
async def get_user_templates(
|
|
current_user: Dict = Depends(get_current_user),
|
|
category: Optional[str] = None,
|
|
favorite_only: bool = False
|
|
):
|
|
"""Get user's saved templates"""
|
|
pass
|
|
|
|
@router.put("/templates/{template_id}")
|
|
async def update_template(
|
|
template_id: str,
|
|
request: UpdateTemplateRequest,
|
|
current_user: Dict = Depends(get_current_user)
|
|
):
|
|
"""Update existing template"""
|
|
pass
|
|
|
|
@router.delete("/templates/{template_id}")
|
|
async def delete_template(
|
|
template_id: str,
|
|
current_user: Dict = Depends(get_current_user)
|
|
):
|
|
"""Delete template"""
|
|
pass
|
|
|
|
@router.post("/templates/{template_id}/use")
|
|
async def use_template(
|
|
template_id: str,
|
|
current_user: Dict = Depends(get_current_user)
|
|
):
|
|
"""Use template and increment usage count"""
|
|
pass
|
|
```
|
|
|
|
### Step 3: Frontend Components
|
|
|
|
#### 3.1 TemplateCard Component
|
|
```typescript
|
|
interface TemplateCardProps {
|
|
template: ResearchTemplate;
|
|
onUse: (template: ResearchTemplate) => void;
|
|
onEdit: (template: ResearchTemplate) => void;
|
|
onDelete: (templateId: string) => void;
|
|
onToggleFavorite: (templateId: string) => void;
|
|
}
|
|
```
|
|
|
|
#### 3.2 TemplateLibrary Component
|
|
```typescript
|
|
interface TemplateLibraryProps {
|
|
aiPresets: ResearchPreset[];
|
|
userTemplates: ResearchTemplate[];
|
|
onUseTemplate: (template: ResearchTemplate | ResearchPreset) => void;
|
|
onCreateTemplate: () => void;
|
|
}
|
|
```
|
|
|
|
#### 3.3 SaveTemplateDialog Component
|
|
```typescript
|
|
interface SaveTemplateDialogProps {
|
|
open: boolean;
|
|
onClose: () => void;
|
|
onSave: (template: Partial<ResearchTemplate>) => void;
|
|
initialData: {
|
|
keywords: string;
|
|
industry: string;
|
|
target_audience: string;
|
|
research_mode: ResearchMode;
|
|
config: ResearchConfig;
|
|
};
|
|
}
|
|
```
|
|
|
|
### Step 4: Integration Points
|
|
|
|
#### 4.1 IntentConfirmationPanel
|
|
- Add "Save as Template" button after research configuration is confirmed
|
|
- Show template icon if current config matches a saved template
|
|
|
|
#### 4.2 ResearchTest Page
|
|
- Replace "Quick Start Presets" with "Template Library"
|
|
- Show AI presets + user templates
|
|
- Add "Create Template" button
|
|
|
|
#### 4.3 ResearchWizard
|
|
- Accept template as initial data
|
|
- Pre-fill all fields from template
|
|
- Track template usage
|
|
|
|
---
|
|
|
|
## 📋 Implementation Checklist
|
|
|
|
### Phase 1: Core Template System
|
|
- [ ] Create database schema for `research_templates`
|
|
- [ ] Create Pydantic models for templates
|
|
- [ ] Implement backend API endpoints (save, get, update, delete, use)
|
|
- [ ] Create frontend TypeScript interfaces
|
|
- [ ] Build TemplateCard component
|
|
- [ ] Build TemplateLibrary component
|
|
- [ ] Build SaveTemplateDialog component
|
|
- [ ] Integrate "Save as Template" in IntentConfirmationPanel
|
|
- [ ] Update ResearchTest page to show templates
|
|
- [ ] Add template usage tracking
|
|
|
|
### Phase 2: Enhanced Features
|
|
- [ ] Add category system
|
|
- [ ] Add tag system
|
|
- [ ] Implement template search/filter
|
|
- [ ] Add template analytics (usage count, last used)
|
|
- [ ] Add favorite functionality
|
|
- [ ] Add template sorting (most used, recently used, alphabetical)
|
|
|
|
### Phase 3: Advanced Features
|
|
- [ ] Template sharing (public/private)
|
|
- [ ] Template variables/placeholders
|
|
- [ ] Template workflows
|
|
- [ ] Template marketplace (future)
|
|
|
|
---
|
|
|
|
## 🎨 UI/UX Design Considerations
|
|
|
|
### Template Card Design
|
|
```
|
|
┌─────────────────────────────────┐
|
|
│ 📊 Competitive Analysis ⭐ │
|
|
│ │
|
|
│ Research top competitors in... │
|
|
│ │
|
|
│ Marketing • B2B SaaS │
|
|
│ │
|
|
│ Used 12 times • Last: 2d ago │
|
|
│ │
|
|
│ [Use] [Edit] [Delete] │
|
|
└─────────────────────────────────┘
|
|
```
|
|
|
|
### Template Library Layout
|
|
```
|
|
┌─────────────────────────────────────────┐
|
|
│ Template Library │
|
|
├─────────────────────────────────────────┤
|
|
│ [Search templates...] │
|
|
│ │
|
|
│ Categories: [All] [Marketing] [Tech] │
|
|
│ │
|
|
│ ┌─ AI-Generated Presets ───────────┐ │
|
|
│ │ [Preset 1] [Preset 2] [Preset 3] │ │
|
|
│ └───────────────────────────────────┘ │
|
|
│ │
|
|
│ ┌─ My Templates (5) ────────────────┐ │
|
|
│ │ [Template 1] [Template 2] ... │ │
|
|
│ └───────────────────────────────────┘ │
|
|
│ │
|
|
│ [+ Create New Template] │
|
|
└─────────────────────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## 🔄 Migration from Presets to Templates
|
|
|
|
### Backward Compatibility
|
|
- Keep AI-generated presets as "read-only templates"
|
|
- Show presets in same UI as templates
|
|
- Allow users to "Save Preset as Template" to customize
|
|
|
|
### Data Migration
|
|
- No migration needed (presets are generated on-demand)
|
|
- Templates are new feature, doesn't affect existing presets
|
|
|
|
---
|
|
|
|
## 📊 Success Metrics
|
|
|
|
### Adoption Metrics
|
|
- % of users who create at least one template
|
|
- Average templates per user
|
|
- Template usage rate (templates used / total research operations)
|
|
|
|
### Engagement Metrics
|
|
- Most used templates
|
|
- Template reuse rate
|
|
- Time saved (estimated based on template usage)
|
|
|
|
### Quality Metrics
|
|
- Research completion rate with templates vs without
|
|
- User satisfaction with templates
|
|
- Template effectiveness (research quality)
|
|
|
|
---
|
|
|
|
## 🚀 Quick Win: Minimal Viable Template System
|
|
|
|
### MVP Features (Can implement in 2-3 days)
|
|
1. **Save Template**: Button in IntentConfirmationPanel
|
|
2. **Template List**: Show user templates in ResearchTest sidebar
|
|
3. **Use Template**: Click template to pre-fill research wizard
|
|
4. **Delete Template**: Remove template with confirmation
|
|
|
|
### MVP Database
|
|
- Simple table with: id, user_id, name, keywords, industry, target_audience, research_mode, config, created_at
|
|
|
|
### MVP UI
|
|
- Simple template cards in sidebar
|
|
- "Save as Template" button
|
|
- Basic template list
|
|
|
|
---
|
|
|
|
## ✅ Next Steps
|
|
|
|
1. **Review & Approve**: Get feedback on template system design
|
|
2. **Start with MVP**: Implement minimal viable template system
|
|
3. **Iterate**: Add features based on user feedback
|
|
4. **Scale**: Add advanced features (sharing, workflows, etc.)
|
|
|
|
---
|
|
|
|
**Status**: Ready for Implementation
|