From a3a1484b61697d424697929ffff352852720ffeb Mon Sep 17 00:00:00 2001 From: ajaysi Date: Wed, 6 Aug 2025 16:35:23 +0530 Subject: [PATCH] ALwrity Version 0.5.1 (Fastapi + React) --- Getting Started/API_DOCUMENTATION.md | 524 ---------------- .../COMPREHENSIVE_SEO_ANALYZER_INTEGRATION.md | 325 ---------- .../Option_1_Windows_Quick_Install/README.md | 248 -------- .../install_alwrity_windows.bat | 122 ---- .../Option_2_Python_Users/README.md | 27 - .../Option_2_Python_Users/setup.py | 170 ------ .../Option_3_Docker_Install/Dockerfile | 83 --- .../Option_3_Docker_Install/README.md | 67 -- .../docker-compose.yml | 13 - Getting Started/Option_4_Mac_Users/Dockerfile | 26 - Getting Started/Option_4_Mac_Users/README.md | 23 - Getting Started/Option_4_Mac_Users/setup.py | 78 --- Getting Started/README.md | 25 - .../ZUSTAND_IMPLEMENTATION_SUMMARY.md | 163 ----- Getting Started/docs/MODULAR_DESIGN_SYSTEM.md | 302 --------- .../docs/alwrity_migration_guide.md | 194 ------ Getting Started/docs/api/ai_writers.rst | 127 ---- Getting Started/docs/api/analytics.rst | 12 - Getting Started/docs/api/core.rst | 51 -- Getting Started/docs/api/database.rst | 22 - Getting Started/docs/api/index.rst | 83 --- Getting Started/docs/api/utils.rst | 78 --- Getting Started/docs/api/web_crawlers.rst | 28 - .../docs/architecture/api_design.rst | 449 -------------- .../architecture/architecture_overview.rst | 170 ------ .../docs/architecture/component_diagram.rst | 171 ------ .../docs/architecture/database_schema.rst | 442 -------------- .../docs/architecture/deployment.rst | 571 ------------------ .../diagrams/content_generation_workflow.png | Bin 145226 -> 0 bytes .../diagrams/database_architecture.png | Bin 93620 -> 0 bytes .../diagrams/high_level_architecture.png | Bin 162068 -> 0 bytes Getting Started/docs/architecture/index.rst | 156 ----- .../docs/architecture/security.rst | 335 ---------- Getting Started/docs/introduction.rst | 56 -- .../docs/migration_to_enterprise.md | 139 ----- Getting Started/docs/test_frontend_backend.py | 106 ---- Getting Started/docs/test_onboarding.py | 82 --- 37 files changed, 5468 deletions(-) delete mode 100644 Getting Started/API_DOCUMENTATION.md delete mode 100644 Getting Started/COMPREHENSIVE_SEO_ANALYZER_INTEGRATION.md delete mode 100644 Getting Started/Option_1_Windows_Quick_Install/README.md delete mode 100644 Getting Started/Option_1_Windows_Quick_Install/install_alwrity_windows.bat delete mode 100644 Getting Started/Option_2_Python_Users/README.md delete mode 100644 Getting Started/Option_2_Python_Users/setup.py delete mode 100644 Getting Started/Option_3_Docker_Install/Dockerfile delete mode 100644 Getting Started/Option_3_Docker_Install/README.md delete mode 100644 Getting Started/Option_3_Docker_Install/docker-compose.yml delete mode 100644 Getting Started/Option_4_Mac_Users/Dockerfile delete mode 100644 Getting Started/Option_4_Mac_Users/README.md delete mode 100644 Getting Started/Option_4_Mac_Users/setup.py delete mode 100644 Getting Started/README.md delete mode 100644 Getting Started/ZUSTAND_IMPLEMENTATION_SUMMARY.md delete mode 100644 Getting Started/docs/MODULAR_DESIGN_SYSTEM.md delete mode 100644 Getting Started/docs/alwrity_migration_guide.md delete mode 100644 Getting Started/docs/api/ai_writers.rst delete mode 100644 Getting Started/docs/api/analytics.rst delete mode 100644 Getting Started/docs/api/core.rst delete mode 100644 Getting Started/docs/api/database.rst delete mode 100644 Getting Started/docs/api/index.rst delete mode 100644 Getting Started/docs/api/utils.rst delete mode 100644 Getting Started/docs/api/web_crawlers.rst delete mode 100644 Getting Started/docs/architecture/api_design.rst delete mode 100644 Getting Started/docs/architecture/architecture_overview.rst delete mode 100644 Getting Started/docs/architecture/component_diagram.rst delete mode 100644 Getting Started/docs/architecture/database_schema.rst delete mode 100644 Getting Started/docs/architecture/deployment.rst delete mode 100644 Getting Started/docs/architecture/diagrams/content_generation_workflow.png delete mode 100644 Getting Started/docs/architecture/diagrams/database_architecture.png delete mode 100644 Getting Started/docs/architecture/diagrams/high_level_architecture.png delete mode 100644 Getting Started/docs/architecture/index.rst delete mode 100644 Getting Started/docs/architecture/security.rst delete mode 100644 Getting Started/docs/introduction.rst delete mode 100644 Getting Started/docs/migration_to_enterprise.md delete mode 100644 Getting Started/docs/test_frontend_backend.py delete mode 100644 Getting Started/docs/test_onboarding.py diff --git a/Getting Started/API_DOCUMENTATION.md b/Getting Started/API_DOCUMENTATION.md deleted file mode 100644 index effe2211..00000000 --- a/Getting Started/API_DOCUMENTATION.md +++ /dev/null @@ -1,524 +0,0 @@ -# ALwrity API Documentation - -## ๐Ÿš€ **FastAPI Backend Overview** - -ALwrity's backend is built with **FastAPI**, providing high-performance, async API endpoints with automatic OpenAPI documentation, comprehensive validation, and enterprise-ready architecture. - ---- - -## ๐Ÿ“Š **API Endpoints Summary** - -### **Total Endpoints: 31** -- **Core Onboarding**: 12 endpoints -- **Component Logic**: 19 endpoints (including new Style Detection) -- **Health & Status**: 2 endpoints - ---- - -## ๐Ÿ”ง **Core API Endpoints** - -### **Health & Status** -```python -GET /health # Health check -GET /api/status # Application status -``` - -### **Onboarding Endpoints (12 Total)** -```python -# Progress Management -GET /api/onboarding/status # Get onboarding status -GET /api/onboarding/progress # Get full progress data -GET /api/onboarding/step/{n} # Get step data -POST /api/onboarding/step/{n}/complete # Complete step -POST /api/onboarding/step/{n}/skip # Skip step - -# API Key Management -GET /api/onboarding/api-keys # Get API keys -POST /api/onboarding/api-keys # Save API key - -# Resume Functionality -GET /api/onboarding/resume # Get resume info - -# Provider Information -GET /api/onboarding/providers # Get all providers -GET /api/onboarding/providers/{provider}/setup # Get setup info -POST /api/onboarding/providers/{provider}/validate # Validate key -GET /api/onboarding/validation/enhanced # Enhanced validation -``` - -### **Component Logic Endpoints (19 Total)** - -#### **AI Research Endpoints (4)** -```python -POST /api/onboarding/ai-research/validate-user -POST /api/onboarding/ai-research/configure-preferences -POST /api/onboarding/ai-research/process-research -GET /api/onboarding/ai-research/configuration-options -``` - -#### **Personalization Endpoints (6)** -```python -POST /api/onboarding/personalization/validate-style -POST /api/onboarding/personalization/configure-brand -POST /api/onboarding/personalization/process-settings -GET /api/onboarding/personalization/configuration-options -POST /api/onboarding/personalization/generate-guidelines -``` - -#### **Research Utilities Endpoints (5)** -```python -POST /api/onboarding/research/process-topic -POST /api/onboarding/research/process-results -POST /api/onboarding/research/validate-request -GET /api/onboarding/research/providers-info -POST /api/onboarding/research/generate-report -``` - -#### **Style Detection Endpoints (4) - NEW** -```python -POST /api/onboarding/style-detection/analyze # Analyze content style -POST /api/onboarding/style-detection/crawl # Crawl website content -POST /api/onboarding/style-detection/complete # Complete workflow -GET /api/onboarding/style-detection/configuration-options # Get configuration -``` - ---- - -## ๐Ÿ—๏ธ **Backend Architecture** - -### **Project Structure** -``` -backend/ -โ”œโ”€โ”€ main.py # Main FastAPI application -โ”œโ”€โ”€ api/ -โ”‚ โ”œโ”€โ”€ onboarding.py # Core onboarding endpoints -โ”‚ โ””โ”€โ”€ component_logic.py # Advanced component endpoints -โ”œโ”€โ”€ services/ -โ”‚ โ”œโ”€โ”€ api_key_manager.py # API key management service -โ”‚ โ”œโ”€โ”€ validation.py # Validation services -โ”‚ โ””โ”€โ”€ component_logic/ # Component logic services -โ”‚ โ”œโ”€โ”€ ai_research_logic.py -โ”‚ โ”œโ”€โ”€ personalization_logic.py -โ”‚ โ”œโ”€โ”€ research_utilities.py -โ”‚ โ”œโ”€โ”€ style_detection_logic.py # NEW -โ”‚ โ””โ”€โ”€ web_crawler_logic.py # NEW -โ”œโ”€โ”€ models/ -โ”‚ โ”œโ”€โ”€ onboarding.py # Database models -โ”‚ โ””โ”€โ”€ component_logic.py # Component logic models -โ””โ”€โ”€ requirements.txt # Python dependencies -``` - -### **Service Architecture** -```python -# Core Services -backend/services/ -โ”œโ”€โ”€ api_key_manager.py # API key management (migrated from legacy) -โ”œโ”€โ”€ validation.py # Validation services (enhanced from legacy) -โ””โ”€โ”€ component_logic/ # Component logic services (new) - โ”œโ”€โ”€ ai_research_logic.py # AI Research business logic - โ”œโ”€โ”€ personalization_logic.py # Personalization business logic - โ”œโ”€โ”€ research_utilities.py # Research utilities business logic - โ”œโ”€โ”€ style_detection_logic.py # Style Detection business logic (NEW) - โ””โ”€โ”€ web_crawler_logic.py # Web Crawler business logic (NEW) -``` - ---- - -## ๐Ÿ“‹ **Data Models** - -### **Core Models (Migrated from Legacy)** -```python -# Onboarding Models -class OnboardingStatus(BaseModel): - onboarding_required: bool - onboarding_complete: bool - current_step: Optional[int] = None - -class OnboardingProgress(BaseModel): - steps_completed: List[int] - current_step: int - total_steps: int = 6 - -class APIKeyData(BaseModel): - provider: str - key: str - is_valid: bool = False - -class StepData(BaseModel): - step_number: int - completed: bool - data: Optional[Dict[str, Any]] = None -``` - -### **Component Logic Models (New)** -```python -# AI Research Models -class UserInfoRequest(BaseModel): - full_name: str - email: str - company: str - role: str - -class ResearchPreferencesRequest(BaseModel): - research_depth: str - content_types: List[str] - auto_research: bool - -# Personalization Models -class ContentStyleRequest(BaseModel): - writing_style: str - tone: str - content_length: str - -class BrandVoiceRequest(BaseModel): - personality_traits: List[str] - voice_description: Optional[str] - keywords: Optional[str] - -class PersonalizationSettingsRequest(BaseModel): - content_style: ContentStyleRequest - brand_voice: BrandVoiceRequest - advanced_settings: Dict[str, Any] - -# Research Utilities Models -class ResearchTopicRequest(BaseModel): - topic: str - providers: List[str] - depth: str = "standard" - -class ResearchResultResponse(BaseModel): - summary: str - insights: List[str] - trends: List[str] - metadata: Dict[str, Any] - -# Style Detection Models (NEW) -class StyleAnalysisRequest(BaseModel): - content: Dict[str, Any] - analysis_type: str = "comprehensive" - -class StyleAnalysisResponse(BaseModel): - success: bool - analysis: Optional[Dict[str, Any]] = None - patterns: Optional[Dict[str, Any]] = None - guidelines: Optional[Dict[str, Any]] = None - error: Optional[str] = None - timestamp: str - -class WebCrawlRequest(BaseModel): - url: Optional[str] = None - text_sample: Optional[str] = None - -class WebCrawlResponse(BaseModel): - success: bool - content: Optional[Dict[str, Any]] = None - metrics: Optional[Dict[str, Any]] = None - error: Optional[str] = None - timestamp: str - -class StyleDetectionRequest(BaseModel): - url: Optional[str] = None - text_sample: Optional[str] = None - include_patterns: bool = True - include_guidelines: bool = True - -class StyleDetectionResponse(BaseModel): - success: bool - crawl_result: Optional[Dict[str, Any]] = None - style_analysis: Optional[Dict[str, Any]] = None - style_patterns: Optional[Dict[str, Any]] = None - style_guidelines: Optional[Dict[str, Any]] = None - error: Optional[str] = None - timestamp: str -``` - ---- - -## ๐ŸŽจ **Style Detection Features (NEW)** - -### **Core Functionality** -- **Content Analysis**: AI-powered analysis of writing style, tone, and characteristics -- **Web Crawling**: Extract content from websites for style analysis -- **Text Processing**: Analyze provided text samples -- **Pattern Recognition**: Identify writing patterns and rhetorical devices -- **Guidelines Generation**: Create personalized content guidelines - -### **Analysis Capabilities** -```python -# Writing Style Analysis -{ - "writing_style": { - "tone": "formal/casual/technical/etc", - "voice": "active/passive", - "complexity": "simple/moderate/complex", - "engagement_level": "low/medium/high" - }, - "content_characteristics": { - "sentence_structure": "description", - "vocabulary_level": "basic/intermediate/advanced", - "paragraph_organization": "description", - "content_flow": "description" - }, - "target_audience": { - "demographics": ["list"], - "expertise_level": "beginner/intermediate/advanced", - "industry_focus": "primary industry", - "geographic_focus": "primary region" - }, - "recommended_settings": { - "writing_tone": "recommended tone", - "target_audience": "recommended audience", - "content_type": "recommended type", - "creativity_level": "low/medium/high", - "geographic_location": "recommended location" - } -} -``` - -### **Web Crawling Features** -- **Content Extraction**: Extract main content, titles, descriptions -- **Metadata Analysis**: Analyze meta tags, headings, links -- **Metrics Calculation**: Word count, readability, content density -- **Error Handling**: Comprehensive error handling for failed crawls - -### **Integration Benefits** -- **Personalization**: Enhanced personalization based on style analysis -- **Content Generation**: Better content generation matching user's style -- **Brand Consistency**: Maintain brand voice across all content -- **User Experience**: Improved user experience with style-aware features - ---- - -## ๐Ÿ”ง **Technical Implementation** - -### **FastAPI Features Used** -- **Async/Await**: All endpoints are async for better performance -- **Pydantic Validation**: Automatic request/response validation -- **OpenAPI Documentation**: Auto-generated API docs -- **CORS Configuration**: Cross-origin resource sharing -- **Error Handling**: Comprehensive error management -- **Logging**: Detailed request/response logging - -### **Database Integration** -```python -# SQLAlchemy Models -class OnboardingStatus(Base): - __tablename__ = "onboarding_status" - id = Column(Integer, primary_key=True) - onboarding_required = Column(Boolean, default=True) - onboarding_complete = Column(Boolean, default=False) - current_step = Column(Integer, default=1) - -class APIKey(Base): - __tablename__ = "api_keys" - id = Column(Integer, primary_key=True) - provider = Column(String, nullable=False) - key = Column(String, nullable=False) - is_valid = Column(Boolean, default=False) - created_at = Column(DateTime, default=datetime.utcnow) -``` - -### **Validation Logic** -```python -# Provider-specific validation -def validate_openai_key(api_key: str) -> bool: - return api_key.startswith("sk-") and len(api_key) >= 20 - -def validate_gemini_key(api_key: str) -> bool: - return api_key.startswith("AIza") and len(api_key) >= 30 - -# Comprehensive validation -def validate_all_api_keys(api_keys: Dict[str, str]) -> Dict[str, Any]: - results = {} - for provider, key in api_keys.items(): - results[provider] = { - "valid": validate_provider_key(provider, key), - "message": get_validation_message(provider, key) - } - return results -``` - ---- - -## ๐Ÿงช **Testing & Quality Assurance** - -### **API Testing** -```bash -# Health check -curl http://localhost:8000/health - -# Onboarding status -curl http://localhost:8000/api/onboarding/status - -# API keys -curl http://localhost:8000/api/onboarding/api-keys - -# Component logic -curl -X POST http://localhost:8000/api/onboarding/ai-research/validate-user \ - -H "Content-Type: application/json" \ - -d '{"full_name": "John Doe", "email": "john@example.com", "company": "Test Corp", "role": "Developer"}' - -# Style Detection (NEW) -curl -X POST http://localhost:8000/api/onboarding/style-detection/complete \ - -H "Content-Type: application/json" \ - -d '{"url": "https://example.com", "include_patterns": true, "include_guidelines": true}' -``` - -### **Documentation Access** -- **Swagger UI**: http://localhost:8000/docs -- **ReDoc**: http://localhost:8000/redoc -- **OpenAPI JSON**: http://localhost:8000/openapi.json - ---- - -## ๐Ÿš€ **Performance Features** - -### **Async Processing** -```python -@app.post("/api/onboarding/research/process-topic") -async def process_research_topic(request: ResearchTopicRequest): - """Process research topic asynchronously""" - try: - # Async research processing - results = await research_utilities.research_topic( - request.topic, - request.providers - ) - return ResearchResultResponse(**results) - except Exception as e: - raise HTTPException(status_code=500, detail=str(e)) -``` - -### **Caching Strategy** -```python -# Redis caching for frequently accessed data -@lru_cache(maxsize=128) -def get_provider_setup_info(provider: str) -> Dict[str, Any]: - """Cache provider setup information""" - return PROVIDER_SETUP_INSTRUCTIONS.get(provider, {}) -``` - -### **Error Handling** -```python -# Comprehensive error handling -@app.exception_handler(ValidationError) -async def validation_exception_handler(request: Request, exc: ValidationError): - return JSONResponse( - status_code=422, - content={"detail": "Validation error", "errors": exc.errors()} - ) - -@app.exception_handler(Exception) -async def general_exception_handler(request: Request, exc: Exception): - return JSONResponse( - status_code=500, - content={"detail": "Internal server error"} - ) -``` - ---- - -## ๐Ÿ”’ **Security Features** - -### **API Key Management** -- **Encryption**: API keys are encrypted at rest -- **Validation**: Real-time validation of API keys -- **Masking**: Keys are masked in responses -- **Rotation**: Support for key rotation (future feature) - -### **Input Validation** -```python -# Comprehensive input validation -def validate_email(email: str) -> bool: - """Validate email format""" - pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$' - return bool(re.match(pattern, email)) - -def validate_url(url: str) -> bool: - """Validate URL format""" - try: - result = urlparse(url) - return all([result.scheme, result.netloc]) - except: - return False -``` - -### **CORS Configuration** -```python -# CORS settings for frontend integration -app.add_middleware( - CORSMiddleware, - allow_origins=["http://localhost:3000", "http://127.0.0.1:3000"], - allow_credentials=True, - allow_methods=["*"], - allow_headers=["*"], -) -``` - ---- - -## ๐Ÿ“Š **Monitoring & Logging** - -### **Request Logging** -```python -# Comprehensive request logging -@app.middleware("http") -async def log_requests(request: Request, call_next): - start_time = time.time() - response = await call_next(request) - process_time = time.time() - start_time - - logger.info( - f"{request.method} {request.url.path} - " - f"Status: {response.status_code} - " - f"Time: {process_time:.3f}s" - ) - return response -``` - -### **Performance Metrics** -- **Response Time**: Average < 100ms for most endpoints -- **Throughput**: 1000+ requests/second -- **Error Rate**: < 0.1% for production endpoints -- **Uptime**: 99.9% availability - ---- - -## ๐Ÿ”ฎ **Future Enhancements** - -### **Planned API Features** -1. **Authentication**: JWT token-based authentication -2. **Rate Limiting**: API rate limiting and throttling -3. **Webhooks**: Real-time notifications -4. **GraphQL**: Alternative to REST for complex queries -5. **WebSocket**: Real-time communication - -### **AI Writers Integration** -1. **AI Writer Endpoints**: Content generation APIs -2. **SEO Tools**: SEO analysis and optimization -3. **Analytics**: Usage analytics and reporting -4. **Chatbot**: AI-powered customer support - -### **Style Detection Enhancements** -1. **Advanced Pattern Recognition**: More sophisticated writing pattern analysis -2. **Multi-language Support**: Style analysis for multiple languages -3. **Industry-specific Analysis**: Specialized analysis for different industries -4. **Real-time Style Adaptation**: Dynamic style adjustment during content generation - ---- - -## ๐Ÿ“š **API Documentation Access** - -### **Development** -- **Swagger UI**: http://localhost:8000/docs -- **ReDoc**: http://localhost:8000/redoc -- **OpenAPI JSON**: http://localhost:8000/openapi.json - -### **Production** -- **API Documentation**: https://api.alwrity.com/docs -- **Health Check**: https://api.alwrity.com/health -- **Status Page**: https://status.alwrity.com - ---- - -**This API documentation provides comprehensive details about ALwrity's FastAPI backend implementation, including all endpoints, data models, security features, and performance optimizations. The new Style Detection functionality enhances the platform's personalization capabilities significantly.** \ No newline at end of file diff --git a/Getting Started/COMPREHENSIVE_SEO_ANALYZER_INTEGRATION.md b/Getting Started/COMPREHENSIVE_SEO_ANALYZER_INTEGRATION.md deleted file mode 100644 index 116db32f..00000000 --- a/Getting Started/COMPREHENSIVE_SEO_ANALYZER_INTEGRATION.md +++ /dev/null @@ -1,325 +0,0 @@ -# Comprehensive SEO Analyzer Integration - -## Overview - -This document outlines the comprehensive SEO analyzer that combines all features from the three original modules (CGPT SEO Analyzer, On-Page SEO Analyzer, and WebURL SEO Checker) into a single, powerful solution for the React SEO Dashboard. - -## Combined Features Analysis - -### Original Modules Features: - -#### 1. CGPT SEO Analyzer -- โœ… Keyword density analysis -- โœ… Keyword presence in title, image alt text -- โœ… Headings analysis -- โœ… Internal/external links counting -- โœ… Readability scoring -- โœ… Spelling/grammar error detection -- โœ… Basic SEO scoring -- โœ… Suggestions for improvement - -#### 2. On-Page SEO Analyzer -- โœ… Meta data extraction (title, description, robots, viewport, charset) -- โœ… Headings structure analysis -- โœ… Content analysis (text length, word count) -- โœ… Image analysis with alt text -- โœ… Link analysis (internal/external) -- โœ… Schema markup detection -- โœ… Open Graph and social tags -- โœ… Canonical and hreflang detection -- โœ… HTTP headers analysis -- โœ… Mobile usability -- โœ… Page speed analysis -- โœ… Enhanced keyword density with advertools -- โœ… URL structure analysis -- โœ… CTA detection - -#### 3. WebURL SEO Checker -- โœ… HTTPS security check -- โœ… URL length analysis -- โœ… Hyphen usage check -- โœ… File extension analysis -- โœ… HTTP headers analysis -- โœ… Robots.txt and sitemap detection -- โœ… Enhanced URL structure analysis -- โœ… Security headers analysis - -## Comprehensive SEO Analyzer Features - -### ๐ŸŽฏ Core Analysis Categories - -#### 1. URL Structure & Security (20% weight) -- **HTTPS Implementation**: Critical security and SEO factor -- **URL Length**: Optimal length for user experience and SEO -- **URL Depth**: Proper site structure hierarchy -- **Special Characters**: Clean, readable URLs -- **File Extensions**: Proper content type indication -- **Security Headers**: X-Frame-Options, CSP, HSTS, etc. - -#### 2. Meta Data & Technical SEO (25% weight) -- **Title Tags**: Length, keyword presence, uniqueness -- **Meta Descriptions**: Length, compelling content, keyword inclusion -- **Viewport & Mobile**: Mobile-friendly meta tags -- **Charset Declaration**: Proper encoding -- **Schema Markup**: Structured data implementation -- **Canonical Tags**: Duplicate content prevention -- **Hreflang Tags**: International SEO -- **Open Graph & Social**: Social media optimization - -#### 3. Content Quality & Structure (25% weight) -- **Content Length**: Minimum 300 words for comprehensive coverage -- **Headings Structure**: H1, H2, H3 hierarchy -- **Image Optimization**: Alt text, file sizes, formats -- **Internal Linking**: Site structure and user navigation -- **External Linking**: Authority and relevance -- **Readability**: Flesch Reading Ease score -- **Spelling & Grammar**: Content quality indicators - -#### 4. Keyword Analysis (15% weight) -- **Keyword Density**: Optimal 1-3% range -- **Keyword Placement**: Title, headings, alt text, meta description -- **Keyword Stuffing Detection**: Over-optimization prevention -- **Long-tail Keywords**: Natural language optimization - -#### 5. Technical Performance (10% weight) -- **Page Load Speed**: Under 2 seconds optimal -- **Compression**: GZIP/Brotli implementation -- **Caching**: Proper cache headers -- **HTTP Status Codes**: Proper response codes - -#### 6. Accessibility & UX (5% weight) -- **Alt Text**: Image accessibility -- **Form Labels**: Form accessibility -- **ARIA Attributes**: Screen reader support -- **Mobile Responsiveness**: Mobile-friendly design -- **Call-to-Actions**: User engagement elements -- **Contact Information**: User trust signals - -## Data Points & Actionable Insights - -### ๐Ÿ“Š Key Metrics for Dashboard - -#### Overall Health Score (0-100) -- **90-100**: Excellent - Minimal improvements needed -- **70-89**: Good - Some optimizations recommended -- **50-69**: Needs Improvement - Several areas need attention -- **0-49**: Poor - Significant improvements required - -#### Category Scores -1. **URL Structure Score**: Security and technical foundation -2. **Meta Data Score**: On-page SEO fundamentals -3. **Content Score**: Content quality and structure -4. **Technical SEO Score**: Advanced technical elements -5. **Performance Score**: Speed and optimization -6. **Accessibility Score**: User experience and compliance -7. **User Experience Score**: Engagement and usability -8. **Security Score**: Protection and trust signals - -### ๐ŸŽฏ Actionable Insights for Non-Technical Users - -#### Critical Issues (Must Fix) -- ๐Ÿšจ **Not using HTTPS**: "Your website is not secure. This severely hurts your search rankings and user trust." -- ๐Ÿšจ **Missing title tag**: "Your page has no title. This is critical for SEO and user experience." -- ๐Ÿšจ **Missing H1 tag**: "Your page lacks a main heading. This confuses search engines and users." -- ๐Ÿšจ **Content too short**: "Your content is too brief. Aim for at least 300 words for better rankings." - -#### Warnings (Should Fix) -- โš ๏ธ **Title too long/short**: "Your page title should be 30-60 characters for optimal display." -- โš ๏ธ **Missing meta description**: "Add a compelling description to improve click-through rates." -- โš ๏ธ **Images missing alt text**: "Add descriptions to images for better accessibility and SEO." -- โš ๏ธ **No internal links**: "Add links to other pages on your site to improve navigation." - -#### Recommendations (Could Improve) -- ๐Ÿ’ก **Add schema markup**: "Help search engines understand your content better." -- ๐Ÿ’ก **Optimize page speed**: "Faster pages rank better and provide better user experience." -- ๐Ÿ’ก **Add social media tags**: "Improve how your content appears when shared online." -- ๐Ÿ’ก **Create XML sitemap**: "Help search engines discover all your pages." - -## Enhanced Prompts for Better Results - -### ๐ŸŽจ User-Friendly Language - -The analyzer uses enhanced prompts to make technical SEO concepts accessible to non-technical users: - -```python -ENHANCED_PROMPTS = { - "critical_issue": "๐Ÿšจ CRITICAL: This issue is severely impacting your SEO performance and must be fixed immediately.", - "warning": "โš ๏ธ WARNING: This could be improved to boost your search rankings.", - "recommendation": "๐Ÿ’ก RECOMMENDATION: Implement this to improve your SEO score.", - "excellent": "๐ŸŽ‰ EXCELLENT: Your SEO is performing very well in this area!", - "good": "โœ… GOOD: Your SEO is performing well, with room for minor improvements.", - "needs_improvement": "๐Ÿ”ง NEEDS IMPROVEMENT: Several areas need attention to boost your SEO.", - "poor": "โŒ POOR: Significant improvements needed across multiple areas." -} -``` - -### ๐Ÿ“ Example Enhanced Output - -Instead of: "Missing title tag" -The analyzer outputs: "๐Ÿšจ CRITICAL: This issue is severely impacting your SEO performance and must be fixed immediately. Missing title tag" - -## React Dashboard Integration - -### ๐Ÿ”„ API Endpoints - -#### 1. `/analyze-seo` (POST) -- **Purpose**: Full comprehensive analysis -- **Input**: URL + optional target keywords -- **Output**: Complete analysis with all metrics - -#### 2. `/seo-metrics/{url}` (GET) -- **Purpose**: Dashboard-specific metrics -- **Input**: URL path parameter -- **Output**: Optimized data structure for React dashboard - -#### 3. `/analysis-summary/{url}` (GET) -- **Purpose**: Quick overview -- **Input**: URL path parameter -- **Output**: Summary with top issues and recommendations - -#### 4. `/batch-analyze` (POST) -- **Purpose**: Multiple URL analysis -- **Input**: List of URLs -- **Output**: Batch results for comparison - -### ๐Ÿ“Š Dashboard Data Structure - -```json -{ - "metrics": { - "overall_score": 75, - "health_status": "good", - "url_structure_score": 85, - "meta_data_score": 70, - "content_score": 80, - "technical_score": 65, - "performance_score": 90, - "accessibility_score": 75, - "user_experience_score": 80, - "security_score": 95 - }, - "critical_issues": [ - "๐Ÿšจ CRITICAL: Missing title tag - critical for SEO" - ], - "warnings": [ - "โš ๏ธ WARNING: Title length (25 chars) should be 30-60 characters" - ], - "recommendations": [ - "๐Ÿ’ก RECOMMENDATION: Add compelling meta descriptions (70-160 characters)" - ], - "detailed_analysis": { - "url_structure": { /* detailed data */ }, - "meta_data": { /* detailed data */ }, - "content_analysis": { /* detailed data */ }, - "technical_seo": { /* detailed data */ }, - "performance": { /* detailed data */ }, - "accessibility": { /* detailed data */ }, - "user_experience": { /* detailed data */ }, - "security_headers": { /* detailed data */ }, - "keyword_analysis": { /* detailed data */ } - }, - "timestamp": "2024-01-15T10:30:00Z", - "url": "https://example.com" -} -``` - -### ๐ŸŽจ Dashboard Components Integration - -#### 1. Health Score Component -- Uses `overall_score` and `health_status` -- Color-coded based on score ranges -- Shows trend indicators - -#### 2. Metrics Cards -- Display individual category scores -- Progress bars with color coding -- Quick insights for each category - -#### 3. Issues Panel -- Prioritized list of critical issues -- Collapsible warnings section -- Actionable recommendations - -#### 4. Detailed Analysis Tabs -- Expandable sections for each category -- Technical details for advanced users -- Visual charts and graphs - -#### 5. Recommendations Engine -- Prioritized action items -- Difficulty levels (Easy, Medium, Hard) -- Estimated impact on SEO score - -## Benefits for Non-Technical Users - -### ๐ŸŽฏ Simplified Understanding -- **Plain Language**: Technical concepts explained simply -- **Visual Indicators**: Emojis and colors for quick understanding -- **Priority Levels**: Clear distinction between critical, warning, and recommendation -- **Actionable Steps**: Specific, implementable advice - -### ๐Ÿ“ˆ Progress Tracking -- **Score Improvements**: Track SEO score over time -- **Issue Resolution**: Mark issues as fixed -- **Goal Setting**: Set target scores for different categories -- **Competitor Comparison**: Compare against industry benchmarks - -### ๐Ÿ”ง Implementation Guidance -- **Step-by-Step Instructions**: Detailed how-to guides -- **Resource Links**: Helpful tools and tutorials -- **Priority Order**: Most impactful changes first -- **Time Estimates**: How long each fix might take - -## Technical Implementation - -### ๐Ÿ—๏ธ Architecture -``` -React Dashboard โ†โ†’ FastAPI Backend โ†โ†’ Comprehensive SEO Analyzer - โ†‘ โ†‘ โ†‘ - Zustand Store Pydantic Models BeautifulSoup + Advertools -``` - -### ๐Ÿ”ง Dependencies -- **FastAPI**: REST API framework -- **BeautifulSoup**: HTML parsing -- **Advertools**: Professional SEO analysis -- **Textstat**: Readability scoring -- **Spellchecker**: Content quality -- **Requests**: HTTP client -- **Pandas**: Data manipulation - -### ๐Ÿš€ Performance Optimizations -- **Async Processing**: Non-blocking analysis -- **Caching**: Store results for repeated analysis -- **Batch Processing**: Multiple URLs simultaneously -- **Error Handling**: Graceful failure recovery -- **Rate Limiting**: Prevent API abuse - -## Future Enhancements - -### ๐Ÿ”ฎ Planned Features -1. **AI-Powered Insights**: Machine learning for better recommendations -2. **Competitor Analysis**: Compare against top-ranking pages -3. **Historical Tracking**: Monitor improvements over time -4. **Custom Scoring**: Adjust weights based on industry/niche -5. **Real-time Monitoring**: Continuous SEO health tracking -6. **Integration APIs**: Connect with Google Search Console, Analytics - -### ๐Ÿ“Š Advanced Analytics -- **Trend Analysis**: SEO performance over time -- **Predictive Scoring**: Estimate future ranking potential -- **Industry Benchmarks**: Compare against competitors -- **ROI Calculator**: Estimate traffic improvements from fixes - -## Conclusion - -The Comprehensive SEO Analyzer successfully combines all features from the three original modules while providing: - -โœ… **Complete Coverage**: All major SEO factors analyzed -โœ… **User-Friendly Output**: Non-technical language with clear guidance -โœ… **Actionable Insights**: Specific, implementable recommendations -โœ… **Dashboard Integration**: Optimized data structure for React components -โœ… **Scalable Architecture**: FastAPI backend with async processing -โœ… **Enhanced Prompts**: Better results through improved user communication - -This unified solution provides a powerful, user-friendly SEO analysis tool that guides non-technical users toward significant improvements in their search engine rankings and overall website performance. \ No newline at end of file diff --git a/Getting Started/Option_1_Windows_Quick_Install/README.md b/Getting Started/Option_1_Windows_Quick_Install/README.md deleted file mode 100644 index 0ca0a97d..00000000 --- a/Getting Started/Option_1_Windows_Quick_Install/README.md +++ /dev/null @@ -1,248 +0,0 @@ -## Easy Installation Guide for Content Creators - -### Step 1: Install Python 3.11 -1. Download Python 3.11 installer: - - Visit [Python 3.11.6 Download Page](https://www.python.org/downloads/release/python-3116/) - - Scroll down and click on "Windows installer (64-bit)" - - Save the file to your computer - -2. Run the installer: - - Double click the downloaded file - - โœ… IMPORTANT: Check "Add Python 3.11 to PATH" - - Click "Install Now" - - Wait for installation to complete - - Click "Close" - -### Step 2: Install ALwrity -1. Download this project: - - Click the green "Code" button above - - Select "Download ZIP" - - Extract the ZIP file to your desired location - -2. Open Command Prompt: - - Press Windows + R - - Type "cmd" and press Enter - - Navigate to the extracted folder: - ``` - cd path\to\ALwrity - ``` - -3. Run the automatic installer: - ``` - python setup.py install - ``` - -### Troubleshooting -If you encounter any issues: -1. Make sure Python 3.11 is installed correctly: - - Open Command Prompt - - Type: `python --version` - - Should show: `Python 3.11.x` - -2. Common Issues: - - If you see "Python is not recognized": Restart your computer - - If you get package errors: Run `pip install --upgrade pip` first - -Need help? [Open an issue](../../issues) and we'll assist you! - -## For Developers -If you're a developer or want to contribute: -```bash -# Clone the repository -git clone https://github.com/yourusername/ALwrity.git - -# Create virtual environment -python -m venv venv - -# Activate virtual environment -# On Windows: -.\venv\Scripts\activate -# On Mac/Linux: -source venv/bin/activate - -# Install dependencies -pip install -r requirements.txt -``` - -# ALwrity - AI Content Writing Assistant - -## Quick Start Guide for Non-Technical Users - -### Option 1: One-Click Installation (Recommended) -1. Download this project: - - Click the green "Code" button above - - Select "Download ZIP" - - Extract the ZIP file to your desired location (e.g., Desktop) - -2. Run the installer: - - Double-click `install.bat` in the extracted folder - - If Windows asks for permission, click "Yes" - - Follow the on-screen instructions - - Wait for the installation to complete - -3. Start ALwrity: - - Open Command Prompt (Windows + R, type "cmd", press Enter) - - Navigate to the ALwrity folder: - ``` - cd path\to\ALwrity - ``` - - Type `alwrity` and press Enter - -### Option 2: Manual Installation -If the one-click installer doesn't work, follow these steps: - -1. Install Python 3.11: - - Visit [Python 3.11.6 Download Page](https://www.python.org/downloads/release/python-3116/) - - Click "Windows installer (64-bit)" - - Run the installer - - โœ… IMPORTANT: Check "Add Python 3.11 to PATH" - - Click "Install Now" - - Wait for installation to complete - -2. Install ALwrity: - - Open Command Prompt (Windows + R, type "cmd", press Enter) - - Navigate to the ALwrity folder: - ``` - cd path\to\ALwrity - ``` - - Run the installation: - ``` - python setup.py install - ``` - - Follow any on-screen instructions - -3. Start ALwrity: - - In the same Command Prompt window, type: - ``` - alwrity - ``` - - Press Enter - -### Troubleshooting Guide - -#### Common Issues and Solutions: - -1. "Python is not recognized" - - Solution: Restart your computer after installing Python - - Make sure you checked "Add Python 3.11 to PATH" during installation - -2. "Visual C++ Build Tools not found" - - Solution: Run this command in an administrative PowerShell: - ``` - winget install Microsoft.VisualStudio.2022.BuildTools --silent --override "--wait --quiet --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended" - ``` - -3. "Rust compiler not found" - - Solution: Run these commands in PowerShell: - ``` - Invoke-WebRequest -Uri https://static.rust-lang.org/rustup/dist/x86_64-pc-windows-msvc/rustup-init.exe -OutFile rustup-init.exe - ./rustup-init.exe -y - ``` - -4. Installation Errors - - Check the `install_errors.log` file in the ALwrity folder - - Share the error message with our support team - -#### Need Help? -- Open an issue on GitHub -- Join our support community -- Contact our support team - -### System Requirements -- Windows 10 or later -- Python 3.11.x -- At least 4GB RAM -- 2GB free disk space - -### First-Time Setup -After installation: -1. The first time you run ALwrity, it will ask for your API keys -2. Follow the on-screen instructions to enter your keys -3. Your keys will be saved securely for future use - -### Updating ALwrity -To update to the latest version: -1. Download the latest release -2. Run `install.bat` again -3. Follow the on-screen instructions - -# ALwrity Windows Installer Guide (`install_alwrity.bat`) - ---- - -## What is `install_alwrity.bat`? -`install_alwrity.bat` is a fully automated installer for ALwrity on Windows. It is designed for non-technical users and will set up everything you need with minimal input. - ---- - -## What Does It Do? -- Checks for administrator rights and guides you if not running as admin. -- Checks if Python 3.11 is installed. If not, it downloads and launches the installer for you. -- Checks for Visual C++ Build Tools and Rust compiler. If missing, it downloads and launches their installers. -- Creates a virtual environment for ALwrity. -- Activates the environment and upgrades pip. -- Installs all required Python packages and ALwrity itself. -- Shows you how to start ALwrity after installation. - ---- - -## Prerequisites -- **Windows 10 or later** -- **Internet connection** (to download Python and dependencies) -- **At least 4GB RAM** -- **2GB free disk space** - ---- - -## Step-by-Step Instructions - -### 1. Download ALwrity -- Download the ALwrity ZIP file from GitHub. -- Right-click the ZIP file and select "Extract All..." to unzip it. -- Open the extracted folder. - -### 2. Run the Installer -- Right-click `install_alwrity.bat` in the `Getting Started` folder and select "Run as administrator". -- If Windows asks for permission, click "Yes". -- Follow the on-screen instructions: - - If Python 3.11, Visual C++ Build Tools, or Rust are missing, the installer will download and launch their installers for you. Complete each installation, then re-run `install_alwrity.bat`. - - The installer will set up everything automatically. This may take a few minutes. - -### 3. Start ALwrity -- After installation, open a new Command Prompt window. -- Type: - ``` - alwrity - ``` -- Press Enter. ALwrity will start! - ---- - -## Troubleshooting -- **Not running as administrator:** - - Right-click `install_alwrity.bat` and select "Run as administrator". -- **Python not found:** - - Make sure you installed Python 3.11 and checked "Add Python 3.11 to PATH". - - Restart your computer after installing Python. -- **Permission errors:** - - Make sure you are running as administrator. -- **Other errors:** - - Take a screenshot of the error and [open an issue on GitHub](https://github.com/AJaySi/AI-Writer/issues). - ---- - -## FAQ -- **Do I need to install anything else?** - - No, `install_alwrity.bat` will handle everything for you. -- **Can I run this on Mac or Linux?** - - No, this installer is for Windows only. See the Docker or manual instructions for other systems. -- **Is it safe?** - - Yes, the script only installs ALwrity and its dependencies. - ---- - -## Need More Help? -- [Open an issue on GitHub](https://github.com/AJaySi/AI-Writer/issues) -- Join our support community - ---- diff --git a/Getting Started/Option_1_Windows_Quick_Install/install_alwrity_windows.bat b/Getting Started/Option_1_Windows_Quick_Install/install_alwrity_windows.bat deleted file mode 100644 index b0bde02e..00000000 --- a/Getting Started/Option_1_Windows_Quick_Install/install_alwrity_windows.bat +++ /dev/null @@ -1,122 +0,0 @@ -@echo off -setlocal enabledelayedexpansion - -s :: Set colors for better visibility -color 0A - -:: Set the Python version requirement -set MIN_PYTHON_VERSION=3.9 - -echo =============================================== -echo ALwrity Installation Setup -echo =============================================== -echo. - -echo [1/5] Checking Python installation... -python --version > nul 2>&1 -if errorlevel 1 ( - color 0C - echo [ERROR] Python is not installed! - echo Please install Python %MIN_PYTHON_VERSION% or higher from python.org - echo Press any key to exit... - pause > nul - exit /b 1 -) - -:: Get Python version -for /f "tokens=2" %%V in ('python --version 2^>^&1') do set PYTHON_VERSION=%%V -for /f "tokens=1,2 delims=." %%a in ("%PYTHON_VERSION%") do ( - set PYTHON_MAJOR=%%a - set PYTHON_MINOR=%%b -) - -:: Check Python version -set /a PYTHON_VER=%PYTHON_MAJOR%*100 + %PYTHON_MINOR% -set /a MIN_VER=309 -if %PYTHON_VER% LSS %MIN_VER% ( - color 0C - echo [ERROR] Python version %MIN_PYTHON_VERSION% or higher is required! - echo Current version: %PYTHON_VERSION% - echo Please upgrade Python from python.org - echo Press any key to exit... - pause > nul - exit /b 1 -) - -echo [โœ“] Python %PYTHON_VERSION% detected -echo. - -echo [2/5] Creating virtual environment... -python -m venv "%~dp0..\..\venv" -if errorlevel 1 ( - color 0C - echo [ERROR] Failed to create virtual environment! - echo Press any key to exit... - pause > nul - exit /b 1 -) -echo [โœ“] Virtual environment created -echo. - -echo [3/5] Activating virtual environment... -call "%~dp0..\..\venv\Scripts\activate.bat" -if errorlevel 1 ( - color 0C - echo [ERROR] Failed to activate virtual environment! - echo Press any key to exit... - pause > nul - exit /b 1 -) -echo [โœ“] Virtual environment activated -echo. - -echo [4/5] Upgrading pip... -python -m pip install --upgrade pip -if errorlevel 1 ( - color 0C - echo [ERROR] Failed to upgrade pip! - echo Press any key to exit... - pause > nul - exit /b 1 -) -echo [โœ“] Pip upgraded -echo. - -echo [5/5] Installing requirements... -pip install -r "%~dp0..\..\requirements.txt" -if errorlevel 1 ( - color 0C - echo [ERROR] Failed to install requirements! - echo Press any key to exit... - pause > nul - exit /b 1 -) -echo [โœ“] Requirements installed -echo. - -color 0A -echo =============================================== -echo Installation Completed Successfully! -echo =============================================== -echo. -echo Next steps to run ALwrity: -echo. -echo 1. Open a new Command Prompt window -echo 2. Navigate to the ALwrity root directory by copying and pasting this command: -echo cd /d "%~dp0..\.." -echo. -echo 3. Activate the virtual environment by copying and pasting this command: -echo "%~dp0..\..\venv\Scripts\activate.bat" -echo. -echo 4. Run ALwrity with Streamlit by copying and pasting this command: -echo streamlit run "%~dp0..\..\alwrity.py" -echo. -echo Note: You'll need to activate the virtual environment (step 3) -echo each time you want to run ALwrity. -echo. -echo Troubleshooting: -echo - If you see any errors, make sure Python is in your PATH -echo - For help, visit: https://github.com/yourusername/ALwrity -echo. -echo Press any key to exit... -pause > nul \ No newline at end of file diff --git a/Getting Started/Option_2_Python_Users/README.md b/Getting Started/Option_2_Python_Users/README.md deleted file mode 100644 index 5a7b74ef..00000000 --- a/Getting Started/Option_2_Python_Users/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# ALwrity Installation Guide - -## Quick Start - -1. **Install Python** - - Download and install Python from [python.org](https://www.python.org/downloads/) - - During installation, check "Add Python to PATH" - -2. **Install ALwrity** - - Download this project - - Open the 'Getting Started' folder - - Double-click `setup.py` - - Follow the on-screen instructions - -## Running ALwrity - -1. Open Command Prompt/Terminal in the 'Getting Started' folder -2. Run: `venv\Scripts\activate` (Windows) or `source venv/bin/activate` (Mac/Linux) -3. Run: `streamlit run alwrity.py` - -## Need Help? - -- If you see "pip not found": Re-install Python and check "Add Python to PATH" -- For other issues: [Open a support ticket](https://github.com/AJaySi/AI-Writer/issues) -- Join our support community - ---- diff --git a/Getting Started/Option_2_Python_Users/setup.py b/Getting Started/Option_2_Python_Users/setup.py deleted file mode 100644 index 5edc9084..00000000 --- a/Getting Started/Option_2_Python_Users/setup.py +++ /dev/null @@ -1,170 +0,0 @@ -import sys -import os -import platform -import subprocess -import shutil -import datetime -import socket -import traceback -import pkg_resources -from setuptools import setup, find_packages - -def log_error(error_type, details): - """ - Logs installation errors to a file with timestamp and system information. - """ - log_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'install_errors.log') - timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") - - system_info = { - "OS": platform.system(), - "OS Version": platform.version(), - "Architecture": platform.machine(), - "Python Version": f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}", - "Hostname": socket.gethostname() - } - - log_entry = f"[{timestamp}] ERROR: {error_type}\n" - log_entry += f"Details: {details}\n" - log_entry += "System Information:\n" - for key, value in system_info.items(): - log_entry += f" {key}: {value}\n" - log_entry += "-" * 80 + "\n" - - with open(log_file, 'a') as f: - f.write(log_entry) - - print(f"Error logged to {log_file}") - -def check_system_dependencies(): - """Check for required system dependencies.""" - print("Checking system dependencies...") - all_checks_passed = True - - # User message about system dependencies - print("\nNOTE: Some dependencies like Rust, Visual C++ Build Tools, or Python itself cannot be installed automatically by this script.") - print("This is because installing system-level packages requires admin rights and can differ across operating systems.") - print("For your safety and system stability, please follow the on-screen instructions to install any missing prerequisites manually.\n") - - # Check Python version - print("Checking Python version...") - if sys.version_info < (3, 11) or sys.version_info >= (3, 12): - error_msg = "ALwrity requires Python 3.11.x" - print(f"Error: {error_msg}") - log_error("Python Version Check", error_msg) - all_checks_passed = False - else: - print(f"โœ“ Python {sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro} found") - - # Check Visual C++ Build Tools on Windows - if platform.system() == "Windows": - print("Checking for Visual C++ Build Tools...") - if not shutil.which("cl"): - error_msg = "Visual C++ Build Tools not found" - print("โŒ Visual C++ Build Tools not found") - print("\nTo install Visual C++ Build Tools, run in an administrative PowerShell:") - print("winget install Microsoft.VisualStudio.2022.BuildTools --silent --override \"--wait --quiet --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended\"") - log_error("Visual C++ Build Tools Check", error_msg) - all_checks_passed = False - else: - print("โœ“ Visual C++ Build Tools found") - - # Check Rust compiler - print("Checking for Rust compiler...") - if not shutil.which("rustc"): - error_msg = "Rust compiler not found" - print("โŒ Rust compiler not found") - if platform.system() == "Windows": - print("\nTo install Rust on Windows, run:") - print("Invoke-WebRequest -Uri https://static.rust-lang.org/rustup/dist/x86_64-pc-windows-msvc/rustup-init.exe -OutFile rustup-init.exe") - print("./rustup-init.exe -y") - else: - print("\nTo install Rust on Linux/macOS, run:") - print("curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y") - print("source $HOME/.cargo/env") - log_error("Rust Compiler Check", error_msg) - all_checks_passed = False - else: - print("โœ“ Rust compiler found") - - return all_checks_passed - -def get_requirements(): - """Read requirements from requirements.txt.""" - with open('requirements.txt') as f: - requirements = [line.strip() for line in f if line.strip() and not line.startswith('#')] - return requirements - -def install_requirements(requirements): - """Install each requirement, showing progress.""" - print("Installing required packages...") - for requirement in requirements: - try: - print(f"Installing {requirement}...") - subprocess.check_call([sys.executable, "-m", "pip", "install", requirement]) - except subprocess.CalledProcessError as e: - error_msg = f"Error installing {requirement}: {e}" - print(error_msg) - log_error("Package Installation", error_msg) - sys.exit(1) - -def main(): - """Main installation function.""" - print("ALwrity Installation\n") - - # Check system dependencies - if not check_system_dependencies(): - print("\nPlease install the missing dependencies and try again.") - print("Check the install_errors.log file for detailed error information.") - sys.exit(1) - - # Create virtual environment if it doesn't exist - if not os.path.exists("venv"): - print("\nCreating virtual environment...") - try: - subprocess.check_call([sys.executable, "-m", "venv", "venv"]) - except subprocess.CalledProcessError as e: - error_msg = f"Failed to create virtual environment: {e}" - print(error_msg) - log_error("Virtual Environment Creation", error_msg) - sys.exit(1) - - # Activate virtual environment automatically (Linux/macOS only) - if platform.system() != "Windows": - activate_script = os.path.join("venv", "bin", "activate_this.py") - if os.path.exists(activate_script): - with open(activate_script) as f: - exec(f.read(), {'__file__': activate_script}) - - # Install requirements - requirements = get_requirements() - install_requirements(requirements) - - # Run setup - setup( - name="alwrity", - version="1.0.0", - description="AI-powered content writing assistant", - author="Your Name", - packages=find_packages(), - python_requires=">=3.11, <3.12", - install_requires=requirements, - entry_points={ - 'console_scripts': [ - 'alwrity=alwrity:main', - ], - }, - ) - - print("\nInstallation complete! To start ALwrity:") - print("1. Activate the virtual environment:") - if platform.system() == "Windows": - print(" .\\venv\\Scripts\\activate") - else: - print(" source venv/bin/activate") - print("2. Run the application:") - print(" streamlit run alwrity.py") - print("\nYou can now use the 'alwrity' command as well.") - -if __name__ == '__main__': - main() \ No newline at end of file diff --git a/Getting Started/Option_3_Docker_Install/Dockerfile b/Getting Started/Option_3_Docker_Install/Dockerfile deleted file mode 100644 index b99b6ca0..00000000 --- a/Getting Started/Option_3_Docker_Install/Dockerfile +++ /dev/null @@ -1,83 +0,0 @@ -# ===================================================================== -# ALwrity Automated Dockerfile - Best Practices & Full Functionality -# ===================================================================== -# This Dockerfile is designed for cache efficiency, security, and ease of use. -# It uses multi-stage builds for smaller images and leverages Docker layer caching. -# ===================================================================== - -# 1. Use official Python 3.12 image (builder stage) -FROM python:3.12 - -# 2. Set environment variables for Python -ENV PYTHONDONTWRITEBYTECODE=1 \ - PYTHONUNBUFFERED=1 - -# 3. Install build dependencies first (for cache efficiency) -RUN apt-get update && \ - apt-get install -y --no-install-recommends \ - build-essential \ - gcc \ - git \ - curl \ - wget \ - libffi-dev \ - libssl-dev \ - rustc \ - cargo \ - && rm -rf /var/lib/apt/lists/* - -# 4. Set work directory -WORKDIR /app - -# 5. Copy only requirements.txt first (for better caching) -COPY ../requirements.txt ./ - -# 6. Install Python dependencies in builder -RUN pip install --upgrade pip && \ - pip install --no-cache-dir -r requirements.txt - -# === Start runtime stage === -FROM python:3.12-slim AS runtime - -# 7. Install build tools needed for wordcloud -RUN apt-get update && apt-get install -y --no-install-recommends gcc build-essential && rm -rf /var/lib/apt/lists/* - -# 8. Set work directory -WORKDIR /app - -# 9. Copy app source code, requirements, and .env to runtime image -COPY ../requirements.txt ./ -COPY ../alwrity.py /app/ -COPY ../lib /app/lib - -# Create the .env file with default values -RUN echo "# Default environment variables for ALwrity\n" > /app/.env - -# 10. Install Python dependencies -RUN pip install --upgrade pip && \ - pip install --no-cache-dir -r requirements.txt - -# 11. Create a non-root user for security -RUN useradd -m alwrityuser - -# 12. Change ownership of /app and .env to the non-root user -RUN chown -R alwrityuser:alwrityuser /app - -# 13. Set environment variable for Streamlit (optional: disables telemetry) -ENV STREAMLIT_TELEMETRY=0 - -# 14. Expose Streamlit's default port -EXPOSE 8501 - -# 15. Switch to non-root user -USER alwrityuser - -# 16. Add user local bin to PATH -ENV PATH="/home/alwrityuser/.local/bin:$PATH" - -# 17. Default command: run ALwrity with Streamlit -CMD ["streamlit", "run", "alwrity.py", "--server.port=8501", "--server.address=0.0.0.0"] - -# ===================================================================== -# END OF DOCKERFILE -# ===================================================================== diff --git a/Getting Started/Option_3_Docker_Install/README.md b/Getting Started/Option_3_Docker_Install/README.md deleted file mode 100644 index 35a893fd..00000000 --- a/Getting Started/Option_3_Docker_Install/README.md +++ /dev/null @@ -1,67 +0,0 @@ -cd "Getting Started/Option_3_Docker_Install" -docker-compose up --build--- - -## Using ALwrity with Docker (Recommended for All Users) - -### What is Docker? -Docker lets you run ALwrity in a safe, isolated environment on any computer (Windows, Mac, Linux) without worrying about Python or system setup. Think of it as a "ready-to-go" box for the app. - -### Step 1: Install Docker -- Go to [https://docs.docker.com/get-docker/](https://docs.docker.com/get-docker/) -- Download and install Docker Desktop for your operating system (Windows/Mac) or follow the Linux instructions. -- After installation, restart your computer if prompted. -- To check Docker is working, open a terminal and run: - ```bash - docker --version - ``` - You should see a version number. - -### Step 2: Build and Run ALwrity with Docker Compose (Recommended) -1. Open a terminal. -2. Navigate to the **Option_3_Docker_Install** folder: - ```bash - cd "Getting Started/Option_3_Docker_Install" - ``` -3. Build and start the app using Docker Compose: - ```bash - docker-compose up --build - ``` -4. Wait until you see a message like: - ``` - Local URL: http://localhost:8501 - ``` -5. Open your web browser and go to [http://localhost:8501](http://localhost:8501) -6. Follow the on-screen instructions to set up your API keys and start creating content! - -### Stopping ALwrity -- To stop the app, press `Ctrl+C` in the terminal where Docker Compose is running. -- To remove the containers, run: - ```bash - docker-compose down - ``` - -### Advanced: Manual Docker Build/Run (Optional) -If you prefer not to use Docker Compose, you can build and run manually: -```bash -cd /workspaces/AI-Writer -# Build the image -docker build -t alwrity -f "Getting Started/Option_3_Docker_Install/Dockerfile" . -# Run the container -docker run -p 8501:8501 alwrity -``` - -### Advanced: Saving Your Work -- By default, any files you create inside Docker are lost when the container stops. -- To save your work to your computer, use a volume: - ```bash - docker run -p 8501:8501 -v $(pwd)/alwrity_data:/app/your_data_folder alwrity - ``` - -### Advanced: Publishing to Docker Hub -To build and push your image to Docker Hub: -```bash -docker build -t yourdockerhubusername/alwrity:latest -f "Getting Started/Option_3_Docker_Install/Dockerfile" . -docker push yourdockerhubusername/alwrity:latest -``` - ---- \ No newline at end of file diff --git a/Getting Started/Option_3_Docker_Install/docker-compose.yml b/Getting Started/Option_3_Docker_Install/docker-compose.yml deleted file mode 100644 index 960202d1..00000000 --- a/Getting Started/Option_3_Docker_Install/docker-compose.yml +++ /dev/null @@ -1,13 +0,0 @@ -version: '3.8' -services: - alwrity: - build: - context: ../.. - dockerfile: Getting Started/Option_3_Docker_Install/Dockerfile - ports: - - "8501:8501" - environment: - - STREAMLIT_TELEMETRY=0 - volumes: - - ../../.env:/app/.env - restart: unless-stopped diff --git a/Getting Started/Option_4_Mac_Users/Dockerfile b/Getting Started/Option_4_Mac_Users/Dockerfile deleted file mode 100644 index e4f39152..00000000 --- a/Getting Started/Option_4_Mac_Users/Dockerfile +++ /dev/null @@ -1,26 +0,0 @@ -# Use Python 3.8 slim image optimized for M1/M2 Macs -FROM --platform=linux/arm64 python:3.8-slim - -# Set working directory -WORKDIR /app - -# Install system dependencies -RUN apt-get update && apt-get install -y \ - build-essential \ - curl \ - software-properties-common \ - git \ - && rm -rf /var/lib/apt/lists/* - -# Clone the repository -RUN git clone https://github.com/AJaySi/AI-Writer.git . - -# Install Python dependencies -RUN python -m pip install --upgrade pip -RUN pip install -r requirements.txt - -# Expose Streamlit port -EXPOSE 8501 - -# Run the application -CMD ["streamlit", "run", "alwrity.py"] \ No newline at end of file diff --git a/Getting Started/Option_4_Mac_Users/README.md b/Getting Started/Option_4_Mac_Users/README.md deleted file mode 100644 index 189c4798..00000000 --- a/Getting Started/Option_4_Mac_Users/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# ALwrity Installation for Mac Users - -## Prerequisites -- macOS 10.15 or later -- Terminal access -- Internet connection - -## Installation Methods - -### Method 1: Easy Setup (Recommended) -1. Open Terminal -2. Navigate to this directory -3. Run: `python setup.py` -4. Follow the on-screen instructions - -### Method 2: Docker Installation -1. Install Docker Desktop for Mac - - Visit [Docker Desktop](https://www.docker.com/products/docker-desktop) - - Download and install the Apple Silicon (M1/M2) or Intel version -2. Build and run: - ```bash - docker build -t alwrity . - docker run -p 8501:8501 alwrity \ No newline at end of file diff --git a/Getting Started/Option_4_Mac_Users/setup.py b/Getting Started/Option_4_Mac_Users/setup.py deleted file mode 100644 index 8bc27105..00000000 --- a/Getting Started/Option_4_Mac_Users/setup.py +++ /dev/null @@ -1,78 +0,0 @@ -import sys -import os -import subprocess -import shutil -from pathlib import Path - -def print_step(text): - print(f"\nโ†’ {text}") - -def print_error(text): - print(f"\nError: {text}", file=sys.stderr) - -def check_homebrew(): - try: - subprocess.run(['brew', '--version'], capture_output=True, check=True) - return True - except: - return False - -def setup_homebrew(): - print_step("Homebrew is required for some dependencies") - print("Please install Homebrew by running this command in Terminal:") - print('/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"') - print("\nAfter installing Homebrew, run this setup script again.") - sys.exit(1) - -def create_virtual_environment(venv_path): - try: - if venv_path.exists(): - shutil.rmtree(venv_path) - subprocess.run([sys.executable, '-m', 'venv', str(venv_path)], check=True) - return True - except Exception as e: - print_error(f"Failed to create virtual environment: {e}") - return False - -def install_requirements(venv_python, requirements_path): - try: - subprocess.run([str(venv_python), '-m', 'pip', 'install', '--upgrade', 'pip'], check=True) - subprocess.run([str(venv_python), '-m', 'pip', 'install', '-r', str(requirements_path)], check=True) - return True - except Exception as e: - print_error(f"Failed to install requirements: {e}") - return False - -def main(): - print("\n=== ALwrity Mac Installation ===\n") - - if not check_homebrew(): - setup_homebrew() - - current_dir = Path(__file__).parent - project_root = current_dir.parent.parent - requirements_path = project_root / 'requirements.txt' - venv_path = current_dir / 'venv' - - print_step("Creating virtual environment") - if not create_virtual_environment(venv_path): - return - - print_step("Installing dependencies") - venv_python = venv_path / 'bin' / 'python' - if not install_requirements(venv_python, requirements_path): - return - - print("\nโœ“ Installation completed successfully!") - print("\nTo start ALwrity:") - print("1. Open Terminal in this directory") - print("2. Run: source venv/bin/activate") - print("3. Run: streamlit run alwrity.py") - -if __name__ == '__main__': - try: - main() - except KeyboardInterrupt: - print("\nInstallation cancelled") - except Exception as e: - print_error(f"Unexpected error: {e}") \ No newline at end of file diff --git a/Getting Started/README.md b/Getting Started/README.md deleted file mode 100644 index 3b40d42d..00000000 --- a/Getting Started/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# Getting Started with ALwrity - -Welcome to ALwrity! Choose the installation method that best suits you: - -## Option 1: Quick Install for Windows Users (Recommended for Content Creators) -- No technical knowledge required -- Automatic Python installation -- One-click setup -โ†’ [Go to Windows Quick Install](./Option_1_Windows_Quick_Install) - -## Option 2: Setup for Python Users -- For users who already have Python installed -- More customization options -- Manual virtual environment setup -โ†’ [Go to Python Setup](./Option_2_Python_Users) - -## Option 3: Docker Installation -- For advanced users and developers -- Containerized environment -- Platform-independent setup -โ†’ [Go to Docker Setup](./Option_3_Docker_Install) - -## Need Help? -- Visit our [GitHub Issues](https://github.com/AJaySi/AI-Writer/issues) page -- Check our [Documentation](../docs) diff --git a/Getting Started/ZUSTAND_IMPLEMENTATION_SUMMARY.md b/Getting Started/ZUSTAND_IMPLEMENTATION_SUMMARY.md deleted file mode 100644 index f6440edf..00000000 --- a/Getting Started/ZUSTAND_IMPLEMENTATION_SUMMARY.md +++ /dev/null @@ -1,163 +0,0 @@ -# Zustand Implementation Summary - -## Overview - -After reviewing the MainDashboard and SEODashboard components, I determined that implementing Zustand would provide significant benefits over the current state management approach. The implementation has been completed successfully. - -## Analysis Results - -### Issues with Current State Management - -1. **MainDashboard**: Used a custom `useDashboardState` hook with manual localStorage persistence -2. **SEODashboard**: Used local `useState` hooks for loading, error, and data states -3. **No shared state**: Each dashboard managed its own state independently -4. **Manual localStorage handling**: Favorites were manually persisted -5. **No cross-component communication**: States were isolated between components - -### Benefits of Zustand Implementation - -โœ… **Centralized state management** across both dashboards -โœ… **Automatic persistence** with Zustand's persist middleware -โœ… **Better performance** with selective re-renders -โœ… **Simpler state updates** with immer-like syntax -โœ… **Better debugging** with Redux DevTools support -โœ… **Type safety** with TypeScript interfaces - -## Implementation Details - -### 1. Dashboard Store (`frontend/src/stores/dashboardStore.ts`) - -**Replaces**: `useDashboardState` hook in MainDashboard - -**Features**: -- Automatic persistence of favorites and filter preferences -- Snackbar management with automatic hiding -- Optimized re-renders with selective state subscriptions -- Type-safe state management - -**Key Actions**: -- `toggleFavorite()` - Add/remove tools from favorites -- `setSearchQuery()` - Update search filter -- `setSelectedCategory()` - Update category filter -- `showSnackbar()` - Display notifications -- `clearFilters()` - Reset all filters - -### 2. SEO Dashboard Store (`frontend/src/stores/seoDashboardStore.ts`) - -**Replaces**: Local `useState` hooks in SEODashboard - -**Features**: -- Automatic data fetching on component mount -- Error handling with retry functionality -- Data caching with last updated timestamp -- DevTools integration for debugging - -**Key Actions**: -- `fetchDashboardData()` - Load dashboard data -- `refreshData()` - Refresh dashboard data -- `setError()` - Handle error states -- `clearError()` - Clear error states - -### 3. Shared Dashboard Store (`frontend/src/stores/sharedDashboardStore.ts`) - -**New**: Common functionality for both dashboards - -**Features**: -- Theme switching with system preference detection -- Notification management with auto-cleanup -- Sidebar state management -- Global state for cross-component communication - -**Key Actions**: -- `setTheme()` - Switch between light/dark/auto themes -- `addNotification()` - Add global notifications -- `toggleSidebar()` - Control sidebar visibility - -## Migration Changes - -### MainDashboard Component -```typescript -// Before -const { state, toggleFavorite, setSearchQuery } = useDashboardState(); - -// After -const { favorites, toggleFavorite, setSearchQuery } = useDashboardStore(); -``` - -### SEODashboard Component -```typescript -// Before -const [loading, setLoading] = useState(true); -const [error, setError] = useState(null); -const [data, setData] = useState(null); - -// After -const { loading, error, data, fetchDashboardData } = useSEODashboardStore(); -``` - -## Performance Improvements - -1. **Selective Re-renders**: Components only re-render when their specific state changes -2. **Automatic Persistence**: No manual localStorage management needed -3. **Optimized Updates**: Zustand's internal optimizations reduce unnecessary renders -4. **DevTools Integration**: Better debugging and state inspection - -## Code Quality Improvements - -1. **Type Safety**: All stores have TypeScript interfaces -2. **Separation of Concerns**: Each store handles specific functionality -3. **Reusability**: Stores can be used across multiple components -4. **Testability**: Stores can be tested independently -5. **Maintainability**: Centralized state management is easier to maintain - -## Files Created/Modified - -### New Files -- `frontend/src/stores/dashboardStore.ts` - Main dashboard state management -- `frontend/src/stores/seoDashboardStore.ts` - SEO dashboard state management -- `frontend/src/stores/sharedDashboardStore.ts` - Shared dashboard functionality -- `frontend/src/stores/index.ts` - Store exports -- `frontend/src/stores/README.md` - Implementation documentation - -### Modified Files -- `frontend/src/components/MainDashboard/MainDashboard.tsx` - Updated to use Zustand store -- `frontend/src/components/SEODashboard/SEODashboard.tsx` - Updated to use Zustand store - -## Benefits Achieved - -### For Developers -- **Simpler Code**: No more manual localStorage management -- **Better Debugging**: Redux DevTools integration -- **Type Safety**: Full TypeScript support -- **Reusability**: Stores can be shared across components - -### For Users -- **Better Performance**: Faster re-renders and updates -- **Persistent State**: Favorites and preferences are automatically saved -- **Consistent Experience**: Shared state across dashboard components -- **Reliable Data**: Better error handling and retry mechanisms - -### For Maintenance -- **Centralized Logic**: All state management in one place -- **Easy Testing**: Stores can be tested independently -- **Future-Proof**: Easy to extend with new features -- **Documentation**: Comprehensive documentation provided - -## Next Steps - -1. **Remove Old Code**: The `useDashboardState` hook can be removed after confirming the new implementation works correctly -2. **Add Tests**: Implement comprehensive tests for the stores -3. **Extend Functionality**: Add more features like real-time updates, offline support -4. **Monitor Performance**: Track performance improvements in production - -## Conclusion - -The Zustand implementation successfully addresses all the identified issues with the previous state management approach. The dashboards now have: - -- โœ… Centralized, persistent state management -- โœ… Better performance with selective re-renders -- โœ… Improved developer experience with DevTools -- โœ… Type-safe state management -- โœ… Simplified codebase with less boilerplate - -The implementation is production-ready and provides a solid foundation for future enhancements. \ No newline at end of file diff --git a/Getting Started/docs/MODULAR_DESIGN_SYSTEM.md b/Getting Started/docs/MODULAR_DESIGN_SYSTEM.md deleted file mode 100644 index 82f7cc2d..00000000 --- a/Getting Started/docs/MODULAR_DESIGN_SYSTEM.md +++ /dev/null @@ -1,302 +0,0 @@ -# Modular Design System: Alwrity Onboarding - -## ๐ŸŽฏ **Overview** - -This document outlines the modular design system for Alwrity's onboarding flow, ensuring **consistency**, **reusability**, and **maintainability** across all onboarding steps while preserving all current functionality and styling. - ---- - -## **๐Ÿ—๏ธ Architecture** - -### **Core Components** -``` -frontend/src/components/OnboardingWizard/ -โ”œโ”€โ”€ common/ -โ”‚ โ”œโ”€โ”€ useOnboardingStyles.ts # Centralized styling hook -โ”‚ โ”œโ”€โ”€ onboardingUtils.ts # Shared utility functions -โ”‚ โ”œโ”€โ”€ OnboardingStepLayout.tsx # Reusable layout component -โ”‚ โ”œโ”€โ”€ OnboardingCard.tsx # Reusable card component -โ”‚ โ””โ”€โ”€ OnboardingButton.tsx # Reusable button component -โ”œโ”€โ”€ ApiKeyStep.tsx # Refactored to use design system -โ”œโ”€โ”€ WebsiteStep.tsx # Will be refactored -โ”œโ”€โ”€ ResearchStep.tsx # Will be refactored -โ”œโ”€โ”€ PersonalizationStep.tsx # Will be refactored -โ”œโ”€โ”€ IntegrationsStep.tsx # Will be refactored -โ””โ”€โ”€ FinalStep.tsx # Will be refactored -``` - ---- - -## **๐ŸŽจ Design System Components** - -### **1. useOnboardingStyles Hook** -**Purpose**: Centralized styling for all onboarding components -**Benefits**: -- โœ… Consistent styling across all steps -- โœ… Easy to maintain and update -- โœ… Theme-aware styling -- โœ… Reusable style objects - -```typescript -// Usage in any step component -const styles = useOnboardingStyles(); - -// Apply consistent styling - - Title - - -``` - -### **2. onboardingUtils Functions** -**Purpose**: Shared utility functions for common operations -**Benefits**: -- โœ… DRY (Don't Repeat Yourself) principle -- โœ… Consistent validation logic -- โœ… Reusable animation utilities -- โœ… Standardized error handling - -```typescript -// Validation utilities -const isValid = validateApiKey(key, 'openai'); -const status = getKeyStatus(key, 'openai'); - -// Animation utilities -const delay = getAnimationDelay(index); -const direction = getSlideDirection(current, target); - -// Form utilities -const isValid = isFormValid(formValues); -const progress = calculateProgress(current, total); -``` - -### **3. OnboardingStepLayout Component** -**Purpose**: Consistent layout structure for all steps -**Benefits**: -- โœ… Standardized header structure -- โœ… Consistent spacing and typography -- โœ… Reusable animations -- โœ… Flexible content area - -```typescript -} - title="Connect Your AI Services" - subtitle="Add your API keys to enable AI-powered content creation" -> - {/* Step-specific content */} - -``` - -### **4. OnboardingCard Component** -**Purpose**: Consistent card styling with status indicators -**Benefits**: -- โœ… Standardized card appearance -- โœ… Built-in status validation -- โœ… Consistent hover effects -- โœ… Reusable across all steps - -```typescript -} - status={getKeyStatus(key, 'openai')} - saved={!!savedKeys.openai} -> - - -``` - ---- - -## **๐Ÿ”ง Implementation Guidelines** - -### **1. Step Component Structure** -Every onboarding step should follow this structure: - -```typescript -import { useOnboardingStyles } from './common/useOnboardingStyles'; -import { relevantUtils } from './common/onboardingUtils'; - -const StepComponent: React.FC = ({ onContinue }) => { - const styles = useOnboardingStyles(); - - // State management - const [formData, setFormData] = useState({}); - const [loading, setLoading] = useState(false); - const [error, setError] = useState(null); - - // Validation - const isValid = isFormValid(formData); - - // Event handlers - const handleSave = async () => { - // Implementation - }; - - return ( - - - {/* Header */} - - - {/* Header content */} - - - - {/* Form content */} - - {/* Cards and form elements */} - - - {/* Alerts */} - {/* Action buttons */} - {/* Skip section */} - - - ); -}; -``` - -### **2. Styling Guidelines** -- **Use the styles hook**: Always use `useOnboardingStyles()` for styling -- **Consistent spacing**: Use the predefined spacing values -- **Theme integration**: Leverage Material-UI theme for colors -- **Responsive design**: Use the responsive breakpoints - -### **3. Animation Guidelines** -- **Fade in**: Use `Fade` component for step transitions -- **Zoom effects**: Use `Zoom` for important elements -- **Slide transitions**: Use `Slide` for step navigation -- **Consistent timing**: Use predefined timeouts (300ms, 500ms, 700ms) - -### **4. Validation Guidelines** -- **Real-time validation**: Use debounced validation for better UX -- **Visual feedback**: Show status chips and border colors -- **Error handling**: Use `formatErrorMessage` for consistent error messages -- **Form validation**: Use `isFormValid` for form completeness - ---- - -## **๐Ÿ“‹ Component Checklist** - -### **For Each Step Component** -- [ ] **Import design system**: Use `useOnboardingStyles` and relevant utilities -- [ ] **Consistent structure**: Follow the standard component structure -- [ ] **Proper animations**: Use `Fade`, `Zoom`, and `Slide` components -- [ ] **Form validation**: Implement real-time validation with visual feedback -- [ ] **Error handling**: Use `formatErrorMessage` for error display -- [ ] **Loading states**: Show loading indicators during async operations -- [ ] **Auto-save**: Implement auto-save functionality where appropriate -- [ ] **Skip options**: Provide skip functionality for optional steps -- [ ] **Help sections**: Include collapsible help content -- [ ] **Responsive design**: Ensure mobile-friendly layout - -### **For New Components** -- [ ] **Reusable design**: Make components generic and reusable -- [ ] **Props interface**: Define clear TypeScript interfaces -- [ ] **Default values**: Provide sensible defaults -- [ ] **Documentation**: Add JSDoc comments -- [ ] **Testing**: Include unit tests for utilities - ---- - -## **๐ŸŽฏ Benefits of This System** - -### **1. Consistency** -- โœ… **Visual consistency**: All steps look and feel the same -- โœ… **Behavior consistency**: Same interactions across all steps -- โœ… **Animation consistency**: Standardized transitions and effects -- โœ… **Error handling**: Consistent error messages and recovery - -### **2. Reusability** -- โœ… **Shared components**: Common components used across steps -- โœ… **Shared utilities**: Validation, animation, and form utilities -- โœ… **Shared styles**: Centralized styling system -- โœ… **Shared logic**: Common business logic extracted to utilities - -### **3. Maintainability** -- โœ… **Single source of truth**: Styles and utilities in one place -- โœ… **Easy updates**: Change once, affects all components -- โœ… **Clear structure**: Consistent file and component organization -- โœ… **Type safety**: Full TypeScript support with proper interfaces - -### **4. Performance** -- โœ… **Optimized animations**: Efficient animation utilities -- โœ… **Debounced operations**: Prevent excessive API calls -- โœ… **Lazy loading**: Components load only when needed -- โœ… **Memory management**: Proper cleanup in useEffect hooks - ---- - -## **๐Ÿš€ Migration Strategy** - -### **Phase 1: Foundation (Complete)** -- โœ… Create design system components -- โœ… Implement utility functions -- โœ… Create styling hook -- โœ… Refactor ApiKeyStep as example - -### **Phase 2: Component Migration** -- [ ] Refactor WebsiteStep -- [ ] Refactor ResearchStep -- [ ] Refactor PersonalizationStep -- [ ] Refactor IntegrationsStep -- [ ] Refactor FinalStep - -### **Phase 3: Enhancement** -- [ ] Add more utility functions as needed -- [ ] Create additional reusable components -- [ ] Implement advanced animations -- [ ] Add accessibility features - -### **Phase 4: Testing & Optimization** -- [ ] Add unit tests for utilities -- [ ] Add integration tests for components -- [ ] Performance optimization -- [ ] Accessibility audit - ---- - -## **๐Ÿ“š Usage Examples** - -### **Creating a New Step** -```typescript -// 1. Import design system -import { useOnboardingStyles } from './common/useOnboardingStyles'; -import { validateRequired, formatErrorMessage } from './common/onboardingUtils'; - -// 2. Use the styles hook -const styles = useOnboardingStyles(); - -// 3. Implement consistent structure -const NewStep: React.FC = ({ onContinue }) => { - // State and logic - return ( - - - {/* Header */} - {/* Content */} - {/* Actions */} - - - ); -}; -``` - -### **Adding New Utilities** -```typescript -// Add to onboardingUtils.ts -export const validateEmail = (email: string): boolean => { - const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; - return emailRegex.test(email); -}; - -export const formatPhoneNumber = (phone: string): string => { - // Implementation -}; -``` - ---- - -**This modular design system ensures that all onboarding steps are consistent, maintainable, and provide an excellent user experience while reducing development time and improving code quality.** \ No newline at end of file diff --git a/Getting Started/docs/alwrity_migration_guide.md b/Getting Started/docs/alwrity_migration_guide.md deleted file mode 100644 index b1bb77d0..00000000 --- a/Getting Started/docs/alwrity_migration_guide.md +++ /dev/null @@ -1,194 +0,0 @@ -# Alwrity Migration Guide: From Streamlit to React + FastAPI - -## Overview -This guide explains how to migrate from the current Streamlit-based `alwrity.py` to the new React + FastAPI architecture while maintaining all present functionality. - ---- - -## Architecture Changes - -### Before (Streamlit) -``` -alwrity.py (Streamlit app) -โ”œโ”€โ”€ Onboarding (API key setup) -โ”œโ”€โ”€ Main UI (sidebar navigation) -โ””โ”€โ”€ All features (AI writers, SEO tools, etc.) -``` - -### After (React + FastAPI) -``` -Backend (FastAPI) -โ”œโ”€โ”€ backend/main.py (replaces alwrity.py) -โ”œโ”€โ”€ backend/api/onboarding.py (onboarding endpoints) -โ”œโ”€โ”€ backend/services/api_key_manager.py (API key management) -โ””โ”€โ”€ backend/models/onboarding.py (database models) - -Frontend (React) -โ”œโ”€โ”€ frontend/src/App.tsx (main app with onboarding check) -โ”œโ”€โ”€ frontend/src/components/OnboardingWizard/ (onboarding flow) -โ””โ”€โ”€ frontend/src/components/MainApp.tsx (main application) -``` - ---- - -## Key Changes - -### 1. **alwrity.py โ†’ backend/main.py** -- **Before**: Single Streamlit file handling everything -- **After**: FastAPI backend with separate React frontend -- **Maintained**: All environment setup, API key checking, logging - -### 2. **Onboarding Flow** -- **Before**: Streamlit-based onboarding in `alwrity.py` -- **After**: React wizard with FastAPI backend -- **Maintained**: Same onboarding steps and validation logic - -### 3. **Application Flow** -- **Before**: Direct access to all features after onboarding -- **After**: Onboarding check โ†’ React wizard (first-time) โ†’ Main app (returning users) -- **Maintained**: All existing functionality preserved - ---- - -## How to Run the New Architecture - -### Option 1: Development Mode -```bash -# Terminal 1: Start FastAPI backend -cd backend -python main.py -# Backend runs on http://localhost:8000 - -# Terminal 2: Start React frontend -cd frontend -npm start -# Frontend runs on http://localhost:3000 -``` - -### Option 2: Production Mode -```bash -# Build React app -cd frontend -npm run build - -# Serve with FastAPI -cd backend -python main.py -# Both frontend and backend served from http://localhost:8000 -``` - ---- - -## Migration Steps - -### Phase 1: Backend Setup โœ… -1. โœ… Extract API key management to `backend/services/api_key_manager.py` -2. โœ… Create FastAPI onboarding endpoints in `backend/api/onboarding.py` -3. โœ… Set up database models in `backend/models/onboarding.py` -4. โœ… Create main FastAPI app in `backend/main.py` - -### Phase 2: Frontend Setup โœ… -1. โœ… Create React onboarding wizard -2. โœ… Implement API integration -3. โœ… Create main app structure -4. โœ… Set up onboarding flow - -### Phase 3: Feature Migration (Next Steps) -1. **Migrate AI Writers**: Wrap existing AI writer modules as FastAPI endpoints -2. **Migrate SEO Tools**: Create API endpoints for SEO functionality -3. **Migrate UI Components**: Convert Streamlit UI to React components -4. **Add Authentication**: Implement user management and sessions - ---- - -## Maintaining Present Functionality - -### โœ… Preserved Features -- **API Key Management**: Same validation and storage logic -- **Onboarding Flow**: Same steps, improved UI -- **Environment Setup**: All paths and configurations preserved -- **Logging**: Same logging configuration -- **Error Handling**: Enhanced with better user feedback - -### ๐Ÿ”„ Enhanced Features -- **UI/UX**: Modern React interface with Material-UI -- **Performance**: Faster loading and better responsiveness -- **Scalability**: Backend can handle multiple users -- **Maintainability**: Separated concerns, easier to extend - ---- - -## API Endpoints - -### Onboarding Endpoints -- `GET /api/check-onboarding` - Check if onboarding is required -- `POST /api/onboarding/start` - Start onboarding session -- `GET /api/onboarding/step` - Get current step -- `POST /api/onboarding/step` - Set current step -- `GET /api/onboarding/api-keys` - Get saved API keys -- `POST /api/onboarding/api-keys` - Save API key -- `GET /api/onboarding/progress` - Get onboarding progress -- `POST /api/onboarding/progress` - Set onboarding progress - -### Application Endpoints -- `GET /api/status` - Get application status -- `GET /health` - Health check - ---- - -## Development Workflow - -### For First-Time Users -1. User visits application -2. `App.tsx` checks onboarding status via `/api/check-onboarding` -3. If onboarding required โ†’ Show `Wizard.tsx` -4. User completes 6-step onboarding process -5. On completion โ†’ Switch to `MainApp.tsx` - -### For Returning Users -1. User visits application -2. `App.tsx` checks onboarding status -3. If onboarding complete โ†’ Show `MainApp.tsx` directly -4. User accesses all features - ---- - -## Next Steps - -### Immediate -1. **Test the onboarding flow** end-to-end -2. **Install dependencies** for React and FastAPI -3. **Configure development environment** - -### Short-term -1. **Migrate AI Writers** to FastAPI endpoints -2. **Create React components** for main features -3. **Add authentication** and user management - -### Long-term -1. **Add enterprise features** (SSO, multi-user, audit) -2. **Optimize performance** and scalability -3. **Add advanced features** (real-time collaboration, etc.) - ---- - -## Troubleshooting - -### Common Issues -1. **CORS errors**: Ensure CORS middleware is configured -2. **API connection errors**: Check backend is running on correct port -3. **Database errors**: Ensure SQLite database is created -4. **React build errors**: Install all required dependencies - -### Dependencies Required -```bash -# Backend -pip install fastapi uvicorn sqlalchemy python-dotenv - -# Frontend -npm install react @mui/material @mui/icons-material axios -``` - ---- - -**The migration maintains all present functionality while providing a modern, scalable foundation for enterprise features.** \ No newline at end of file diff --git a/Getting Started/docs/api/ai_writers.rst b/Getting Started/docs/api/ai_writers.rst deleted file mode 100644 index dcc5e25f..00000000 --- a/Getting Started/docs/api/ai_writers.rst +++ /dev/null @@ -1,127 +0,0 @@ -AI Writers -========= - -This section documents the AI writer modules that provide specialized content generation for different platforms. - -LinkedIn Writer -------------- - -.. automodule:: lib.ai_writers.linkedin_writer - :members: - :undoc-members: - :show-inheritance: - -LinkedIn Post Generator -~~~~~~~~~~~~~~~~~~~~~ - -.. automodule:: lib.ai_writers.linkedin_writer.modules.post_generator - :members: - :undoc-members: - :show-inheritance: - -LinkedIn Article Generator -~~~~~~~~~~~~~~~~~~~~~~~~ - -.. automodule:: lib.ai_writers.linkedin_writer.modules.article_generator - :members: - :undoc-members: - :show-inheritance: - -LinkedIn Profile Optimizer -~~~~~~~~~~~~~~~~~~~~~~~~ - -.. automodule:: lib.ai_writers.linkedin_writer.modules.profile_optimizer - :members: - :undoc-members: - :show-inheritance: - -Twitter Writer ------------- - -.. automodule:: lib.ai_writers.twitter_writers - :members: - :undoc-members: - :show-inheritance: - -Tweet Generator -~~~~~~~~~~~~~ - -.. automodule:: lib.ai_writers.twitter_writers.tweet_generator - :members: - :undoc-members: - :show-inheritance: - -Facebook Writer -------------- - -.. automodule:: lib.ai_writers.ai_facebook_writer - :members: - :undoc-members: - :show-inheritance: - -Facebook Ad Copy Generator -~~~~~~~~~~~~~~~~~~~~~~~~ - -.. automodule:: lib.ai_writers.ai_facebook_writer.modules.ad_copy_generator - :members: - :undoc-members: - :show-inheritance: - -Facebook Carousel Generator -~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. automodule:: lib.ai_writers.ai_facebook_writer.modules.facebook_carousel - :members: - :undoc-members: - :show-inheritance: - -YouTube Writers -------------- - -.. automodule:: lib.ai_writers.youtube_writers - :members: - :undoc-members: - :show-inheritance: - -Story Writer ----------- - -.. automodule:: lib.ai_writers.ai_story_writer - :members: - :undoc-members: - :show-inheritance: - -Copywriter ---------- - -.. automodule:: lib.ai_writers.ai_copywriter - :members: - :undoc-members: - :show-inheritance: - -Blog Writers ----------- - -GitHub Blogs -~~~~~~~~~~~ - -.. automodule:: lib.ai_writers.github_blogs - :members: - :undoc-members: - :show-inheritance: - -Scholar Blogs -~~~~~~~~~~~ - -.. automodule:: lib.ai_writers.scholar_blogs - :members: - :undoc-members: - :show-inheritance: - -Speech to Blog -~~~~~~~~~~~~ - -.. automodule:: lib.ai_writers.speech_to_blog - :members: - :undoc-members: - :show-inheritance: \ No newline at end of file diff --git a/Getting Started/docs/api/analytics.rst b/Getting Started/docs/api/analytics.rst deleted file mode 100644 index 3de96983..00000000 --- a/Getting Started/docs/api/analytics.rst +++ /dev/null @@ -1,12 +0,0 @@ -Analytics -========= - -This section documents the analytics modules that provide content performance tracking and visualization. - -Analytics Engine --------------- - -.. automodule:: lib.analytics - :members: - :undoc-members: - :show-inheritance: \ No newline at end of file diff --git a/Getting Started/docs/api/core.rst b/Getting Started/docs/api/core.rst deleted file mode 100644 index fb490b6d..00000000 --- a/Getting Started/docs/api/core.rst +++ /dev/null @@ -1,51 +0,0 @@ -Core API -======== - -This section documents the core modules of the AI-Writer platform. - -Main Application --------------- - -.. automodule:: alwrity - :members: - :undoc-members: - :show-inheritance: - -GPT Providers ------------ - -Text Generation -~~~~~~~~~~~~~ - -.. automodule:: lib.gpt_providers.text_generation.gemini_pro_text - :members: - :undoc-members: - :show-inheritance: - -.. automodule:: lib.gpt_providers.text_generation.mistral_chat_completion - :members: - :undoc-members: - :show-inheritance: - -.. automodule:: lib.gpt_providers.text_generation.deepseek_text_gen - :members: - :undoc-members: - :show-inheritance: - -Image Generation -~~~~~~~~~~~~~~ - -.. automodule:: lib.gpt_providers.text_to_image_generation.main_generate_image_from_prompt - :members: - :undoc-members: - :show-inheritance: - -.. automodule:: lib.gpt_providers.text_to_image_generation.gen_gemini_images - :members: - :undoc-members: - :show-inheritance: - -.. automodule:: lib.gpt_providers.text_to_image_generation.gen_dali3_images - :members: - :undoc-members: - :show-inheritance: \ No newline at end of file diff --git a/Getting Started/docs/api/database.rst b/Getting Started/docs/api/database.rst deleted file mode 100644 index d89eb8c7..00000000 --- a/Getting Started/docs/api/database.rst +++ /dev/null @@ -1,22 +0,0 @@ -Database -======== - -This section documents the database modules that handle content storage, retrieval, and vector search capabilities. - -Database Models -------------- - -.. automodule:: lib.database - :members: - :undoc-members: - :show-inheritance: - -Vector Database -------------- - -The vector database provides semantic search capabilities for content retrieval. - -.. automodule:: lib.workspace.alwrity_data.vectordb - :members: - :undoc-members: - :show-inheritance: \ No newline at end of file diff --git a/Getting Started/docs/api/index.rst b/Getting Started/docs/api/index.rst deleted file mode 100644 index 56d387e2..00000000 --- a/Getting Started/docs/api/index.rst +++ /dev/null @@ -1,83 +0,0 @@ -.. _api-reference: - -API Reference -============ - -This section provides detailed documentation for the AI-Writer API, including module references, class hierarchies, and function specifications. - -.. toctree:: - :maxdepth: 2 - :caption: API Documentation: - - core - ai_writers - database - utils - analytics - web_crawlers - -Core Modules ------------ - -.. automodule:: alwrity - :members: - :undoc-members: - :show-inheritance: - -AI Writers ---------- - -The AI Writers modules provide specialized content generation for different platforms and content types. - -.. toctree:: - :maxdepth: 1 - - ai_writers/linkedin - ai_writers/twitter - ai_writers/blog - ai_writers/email - -Database -------- - -The database modules handle content storage, retrieval, and vector search capabilities. - -.. toctree:: - :maxdepth: 1 - - database/models - database/vector_store - database/relational_store - -Utilities --------- - -Utility modules provide supporting functionality across the application. - -.. toctree:: - :maxdepth: 1 - - utils/api_key_manager - utils/ui_setup - utils/seo_tools - -Analytics --------- - -Analytics modules provide content performance tracking and visualization. - -.. toctree:: - :maxdepth: 1 - - analytics/content_analyzer - analytics/analytics_ui - -Web Crawlers ------------ - -Web crawler modules provide research capabilities by extracting information from the web. - -.. toctree:: - :maxdepth: 1 - - web_crawlers/async_web_crawler \ No newline at end of file diff --git a/Getting Started/docs/api/utils.rst b/Getting Started/docs/api/utils.rst deleted file mode 100644 index fafc02da..00000000 --- a/Getting Started/docs/api/utils.rst +++ /dev/null @@ -1,78 +0,0 @@ -Utilities -========= - -This section documents the utility modules that provide supporting functionality across the application. - -API Key Manager -------------- - -.. automodule:: lib.utils.api_key_manager - :members: - :undoc-members: - :show-inheritance: - -Website Analyzer --------------- - -.. automodule:: lib.utils.website_analyzer - :members: - :undoc-members: - :show-inheritance: - -UI Components ------------ - -.. automodule:: lib.alwrity_ui - :members: - :undoc-members: - :show-inheritance: - -SEO Tools --------- - -.. automodule:: lib.ai_seo_tools - :members: - :undoc-members: - :show-inheritance: - -Marketing Tools -------------- - -.. automodule:: lib.ai_marketing_tools - :members: - :undoc-members: - :show-inheritance: - -Blog Processing -------------- - -.. automodule:: lib.blog_metadata - :members: - :undoc-members: - :show-inheritance: - -.. automodule:: lib.blog_postprocessing - :members: - :undoc-members: - :show-inheritance: - -.. automodule:: lib.blog_sections - :members: - :undoc-members: - :show-inheritance: - -Content Planning --------------- - -.. automodule:: lib.content_planning_calender - :members: - :undoc-members: - :show-inheritance: - -Personalization -------------- - -.. automodule:: lib.personalization - :members: - :undoc-members: - :show-inheritance: \ No newline at end of file diff --git a/Getting Started/docs/api/web_crawlers.rst b/Getting Started/docs/api/web_crawlers.rst deleted file mode 100644 index 4a10ca33..00000000 --- a/Getting Started/docs/api/web_crawlers.rst +++ /dev/null @@ -1,28 +0,0 @@ -Web Crawlers -============ - -This section documents the web crawler modules that provide research capabilities by extracting information from the web. - -Web Researcher ------------- - -.. automodule:: lib.ai_web_researcher - :members: - :undoc-members: - :show-inheritance: - -Web Crawlers ----------- - -.. automodule:: lib.web_crawlers - :members: - :undoc-members: - :show-inheritance: - -Research Storage --------------- - -.. automodule:: lib.workspace.alwrity_web_research - :members: - :undoc-members: - :show-inheritance: \ No newline at end of file diff --git a/Getting Started/docs/architecture/api_design.rst b/Getting Started/docs/architecture/api_design.rst deleted file mode 100644 index 9f148e85..00000000 --- a/Getting Started/docs/architecture/api_design.rst +++ /dev/null @@ -1,449 +0,0 @@ -API Design -========= - -This document outlines the API design principles and specifications for the AI-Writer platform. - -API Design Principles -------------------- - -The AI-Writer API follows these core design principles: - -1. **RESTful Architecture** - - * Resource-oriented design - * Standard HTTP methods (GET, POST, PUT, DELETE) - * Consistent URL structure - * Stateless interactions - -2. **Consistent Response Format** - - * JSON as the primary data format - * Standard error response structure - * Pagination for list endpoints - * Hypermedia links where appropriate - -3. **Versioning** - - * API versioning in URL path (e.g., `/api/v1/`) - * Backward compatibility within major versions - * Deprecation notices before removing features - -4. **Security** - - * Authentication via API keys or OAuth 2.0 - * Rate limiting to prevent abuse - * Input validation to prevent injection attacks - * HTTPS for all communications - -5. **Documentation** - - * OpenAPI/Swagger specification - * Interactive documentation - * Code examples for common operations - * Changelog for API updates - -API Endpoints ------------ - -Content Management -~~~~~~~~~~~~~~~~ - -.. code-block:: text - - # Create content - POST /api/v1/content - - # Get content by ID - GET /api/v1/content/{content_id} - - # Update content - PUT /api/v1/content/{content_id} - - # Delete content - DELETE /api/v1/content/{content_id} - - # List content with filtering - GET /api/v1/content?type={type}&limit={limit}&offset={offset} - - # Get content versions - GET /api/v1/content/{content_id}/versions - - # Revert to specific version - POST /api/v1/content/{content_id}/revert/{version_id} - -AI Generation -~~~~~~~~~~~ - -.. code-block:: text - - # Generate content from keywords - POST /api/v1/generate/content - - # Generate blog post - POST /api/v1/generate/blog - - # Generate social media post - POST /api/v1/generate/social - - # Generate email - POST /api/v1/generate/email - - # Generate outline - POST /api/v1/generate/outline - - # Generate image for content - POST /api/v1/generate/image - -Web Research -~~~~~~~~~~ - -.. code-block:: text - - # Perform web research - POST /api/v1/research - - # Get research results - GET /api/v1/research/{research_id} - - # Search previous research - GET /api/v1/research/search?query={query} - -SEO Tools -~~~~~~~~ - -.. code-block:: text - - # Analyze content for SEO - POST /api/v1/seo/analyze - - # Generate meta description - POST /api/v1/seo/meta-description - - # Generate SEO-friendly title - POST /api/v1/seo/title - - # Generate structured data - POST /api/v1/seo/structured-data - - # Generate alt text for images - POST /api/v1/seo/alt-text - -User Management -~~~~~~~~~~~~~ - -.. code-block:: text - - # Create user - POST /api/v1/users - - # Get user profile - GET /api/v1/users/{user_id} - - # Update user profile - PUT /api/v1/users/{user_id} - - # Delete user - DELETE /api/v1/users/{user_id} - - # Get user settings - GET /api/v1/users/{user_id}/settings - - # Update user settings - PUT /api/v1/users/{user_id}/settings - -API Key Management -~~~~~~~~~~~~~~~ - -.. code-block:: text - - # Create API key - POST /api/v1/api-keys - - # List API keys - GET /api/v1/api-keys - - # Revoke API key - DELETE /api/v1/api-keys/{key_id} - -Analytics -~~~~~~~~ - -.. code-block:: text - - # Get content analytics - GET /api/v1/analytics/content/{content_id} - - # Get user analytics - GET /api/v1/analytics/user/{user_id} - - # Get system analytics - GET /api/v1/analytics/system - -Request and Response Examples ---------------------------- - -Create Content -~~~~~~~~~~~~ - -Request: - -.. code-block:: json - - POST /api/v1/content - Content-Type: application/json - Authorization: Bearer {api_key} - - { - "title": "How to Improve SEO with AI", - "content_type": "blog", - "content": "# How to Improve SEO with AI\n\nIn this article, we'll explore...", - "metadata": { - "keywords": ["SEO", "AI", "content marketing"], - "category": "digital marketing", - "language": "en" - } - } - -Response: - -.. code-block:: json - - HTTP/1.1 201 Created - Content-Type: application/json - - { - "id": "c123e4567-e89b-12d3-a456-426614174000", - "title": "How to Improve SEO with AI", - "content_type": "blog", - "content": "# How to Improve SEO with AI\n\nIn this article, we'll explore...", - "metadata": { - "keywords": ["SEO", "AI", "content marketing"], - "category": "digital marketing", - "language": "en" - }, - "created_at": "2023-01-01T12:00:00Z", - "updated_at": "2023-01-01T12:00:00Z", - "user_id": "u123e4567-e89b-12d3-a456-426614174000", - "links": { - "self": "/api/v1/content/c123e4567-e89b-12d3-a456-426614174000", - "versions": "/api/v1/content/c123e4567-e89b-12d3-a456-426614174000/versions", - "analytics": "/api/v1/analytics/content/c123e4567-e89b-12d3-a456-426614174000" - } - } - -Generate Blog Post -~~~~~~~~~~~~~~~ - -Request: - -.. code-block:: json - - POST /api/v1/generate/blog - Content-Type: application/json - Authorization: Bearer {api_key} - - { - "keywords": ["artificial intelligence", "content creation"], - "title": "The Future of Content Creation with AI", - "tone": "informative", - "length": "medium", - "include_research": true, - "target_audience": "marketers" - } - -Response: - -.. code-block:: json - - HTTP/1.1 200 OK - Content-Type: application/json - - { - "id": "g123e4567-e89b-12d3-a456-426614174000", - "title": "The Future of Content Creation with AI", - "content": "# The Future of Content Creation with AI\n\nArtificial intelligence is revolutionizing...", - "metadata": { - "keywords": ["artificial intelligence", "content creation"], - "tone": "informative", - "length": "medium", - "word_count": 1250, - "research_sources": [ - { - "title": "AI in Content Marketing Report 2023", - "url": "https://example.com/report", - "accessed_at": "2023-01-01T10:30:00Z" - } - ] - }, - "created_at": "2023-01-01T12:05:00Z", - "links": { - "save": "/api/v1/content", - "regenerate": "/api/v1/generate/blog", - "edit": "/api/v1/generate/edit" - } - } - -Error Response -~~~~~~~~~~~~ - -.. code-block:: json - - HTTP/1.1 400 Bad Request - Content-Type: application/json - - { - "error": { - "code": "invalid_request", - "message": "The request was invalid", - "details": [ - { - "field": "keywords", - "issue": "required", - "description": "The keywords field is required" - } - ] - }, - "request_id": "req_123456", - "documentation_url": "https://docs.alwrity.com/api/errors#invalid_request" - } - -API Authentication ----------------- - -The AI-Writer API supports the following authentication methods: - -1. **API Key Authentication** - - * Include the API key in the Authorization header: - `Authorization: Bearer {api_key}` - * API keys can be generated and managed through the API or web interface - * Different permission levels can be assigned to API keys - -2. **OAuth 2.0 (for multi-user deployments)** - - * Standard OAuth 2.0 flow with authorization code - * Supports scopes for fine-grained permissions - * Refresh token rotation for enhanced security - -Rate Limiting ------------ - -To ensure fair usage and system stability, the API implements rate limiting: - -* Rate limits are based on the user's plan -* Limits are applied per API key -* Rate limit information is included in response headers: - * `X-RateLimit-Limit`: Total requests allowed in the current period - * `X-RateLimit-Remaining`: Requests remaining in the current period - * `X-RateLimit-Reset`: Time when the rate limit resets (Unix timestamp) - -When a rate limit is exceeded, the API returns a 429 Too Many Requests response. - -Pagination ---------- - -List endpoints support pagination with the following parameters: - -* `limit`: Number of items per page (default: 20, max: 100) -* `offset`: Number of items to skip (for offset-based pagination) -* `cursor`: Cursor for the next page (for cursor-based pagination) - -Response includes pagination metadata: - -.. code-block:: json - - { - "data": [...], - "pagination": { - "total": 45, - "limit": 20, - "offset": 0, - "next_cursor": "cursor_for_next_page", - "has_more": true - } - } - -Filtering and Sorting -------------------- - -List endpoints support filtering and sorting: - -* Filtering: `?field=value&another_field=another_value` -* Range filtering: `?created_at_gte=2023-01-01&created_at_lte=2023-01-31` -* Sorting: `?sort=field` (ascending) or `?sort=-field` (descending) -* Multiple sort fields: `?sort=-created_at,title` - -Versioning Strategy ------------------ - -The API uses a versioning strategy to ensure backward compatibility: - -1. **Major Versions** - - * Included in the URL path: `/api/v1/`, `/api/v2/`, etc. - * Major versions may introduce breaking changes - * Previous major versions are supported for at least 12 months after a new version is released - -2. **Minor Updates** - - * Backward-compatible changes within a major version - * New endpoints or parameters may be added - * Existing functionality remains unchanged - -3. **Deprecation Process** - - * Features to be removed are marked as deprecated - * Deprecation notices are included in response headers - * Deprecated features are supported for at least 6 months before removal - -API Changelog ------------ - -The API changelog is maintained to track changes: - -* **v1.0.0 (2023-01-01)** - - * Initial release with core content management features - * Basic AI generation capabilities - * User management and authentication - -* **v1.1.0 (2023-03-15)** - - * Added SEO analysis endpoints - * Enhanced content generation with research integration - * Improved error handling and validation - -* **v1.2.0 (2023-06-30)** - - * Added analytics endpoints - * Introduced cursor-based pagination - * Added support for content versioning - -Future API Roadmap ----------------- - -Planned API enhancements: - -1. **Content Collaboration** - - * Endpoints for collaborative editing - * Comment and feedback functionality - * Role-based access control - -2. **Advanced Analytics** - - * Predictive performance metrics - * Competitive analysis - * Content optimization recommendations - -3. **Workflow Automation** - - * Scheduled content generation - * Approval workflows - * Integration with publishing platforms - -4. **Multi-modal Content** - - * Enhanced image generation - * Audio content generation - * Video script generation \ No newline at end of file diff --git a/Getting Started/docs/architecture/architecture_overview.rst b/Getting Started/docs/architecture/architecture_overview.rst deleted file mode 100644 index 4811371a..00000000 --- a/Getting Started/docs/architecture/architecture_overview.rst +++ /dev/null @@ -1,170 +0,0 @@ -Architecture Overview -==================== - -This document provides a comprehensive overview of the AI-Writer architecture, explaining the system's components, their interactions, and the design principles behind the implementation. - -High-Level Architecture ----------------------- - -.. image:: diagrams/high_level_architecture.png - :alt: High-level architecture diagram of AI-Writer - :width: 100% - -The AI-Writer platform consists of several key components: - -1. **User Interface Layer** - - * Streamlit-based web interface - * Command-line interface for automation - * API endpoints for programmatic access - -2. **Core Services Layer** - - * AI Writers: Various specialized content generation modules - * Web Research: Tools for gathering factual information from the internet - * SEO Tools: Utilities for optimizing content for search engines - * Analytics: Content performance tracking and analysis - -3. **Data Storage Layer** - - * Vector Database (ChromaDB): Stores embeddings for semantic search - * Relational Database (SQLite): Stores structured data like user preferences and content metadata - -4. **External Integrations Layer** - - * LLM Providers: OpenAI, Google Gemini, Anthropic, etc. - * Search Providers: Tavily, SerperDev, Exa, etc. - * Image Generation: Stability AI - * Publishing Platforms: WordPress, Jekyll, etc. - -Database Architecture --------------------- - -.. image:: diagrams/database_architecture.png - :alt: Database architecture diagram of AI-Writer - :width: 100% - -The database architecture consists of two main components: - -1. **Vector Storage** - - * Uses ChromaDB for storing and retrieving text embeddings - * Enables semantic search capabilities - * Stores content in collections for efficient retrieval - -2. **Relational Storage** - - * Uses SQLite for structured data storage - * Key models include: - - User: Stores user preferences and settings - - ContentItem: Represents content created by users - - ContentVersion: Tracks version history of content - - Analytics: Stores performance metrics for content - -Content Generation Workflow --------------------------- - -.. image:: diagrams/content_generation_workflow.png - :alt: Content generation workflow diagram of AI-Writer - :width: 100% - -The content generation process follows these steps: - -1. **Input Phase** - - * User provides keywords, topics, or other input parameters - * System configures the generation process based on user preferences - -2. **Research Phase** - - * Web research is conducted using various search providers - * Relevant information is gathered and processed - * Facts are extracted and organized for use in content generation - -3. **Content Creation Phase** - - * Content outline is generated based on research - * Initial draft is created using AI models - * Final content is refined and polished - -4. **Enhancement Phase** - - * SEO optimization is applied to improve search visibility - * Images are generated or selected to complement the content - * Metadata is generated for better categorization and discovery - -5. **Storage Phase** - - * Content is stored in both vector and relational databases - * Embeddings are created for semantic search capabilities - * Metadata is indexed for efficient retrieval - -6. **Publishing Phase** - - * Content is formatted for the target platform - * Publishing options include WordPress, Markdown, and others - * Content is delivered to the user or published directly - -Design Principles ----------------- - -The AI-Writer architecture is built on the following design principles: - -1. **Modularity** - - * Components are designed to be independent and interchangeable - * New AI models and services can be added with minimal changes - * Functionality is organized into logical modules - -2. **Extensibility** - - * The system is designed to be easily extended with new features - * Plugin architecture allows for custom integrations - * Configuration options enable customization without code changes - -3. **Reliability** - - * Error handling is implemented throughout the system - * Fallback mechanisms ensure continued operation - * Logging provides visibility into system behavior - -4. **Performance** - - * Caching is used to improve response times - * Asynchronous processing for long-running tasks - * Efficient data storage and retrieval mechanisms - -5. **Security** - - * API keys are securely stored and managed - * User data is protected with appropriate measures - * Input validation prevents common security issues - -Future Architecture Enhancements -------------------------------- - -Planned improvements to the architecture include: - -1. **Distributed Processing** - - * Support for distributed content generation - * Load balancing for improved scalability - * Parallel processing of research and generation tasks - -2. **Advanced Caching** - - * Intelligent caching of common queries and results - * Cache invalidation strategies for fresh content - * Distributed cache for multi-user environments - -3. **Enhanced Security** - - * Role-based access control - * End-to-end encryption for sensitive data - * Advanced authentication mechanisms - -4. **Containerization** - - * Docker containers for easier deployment - * Kubernetes support for orchestration - * Microservices architecture for better scalability \ No newline at end of file diff --git a/Getting Started/docs/architecture/component_diagram.rst b/Getting Started/docs/architecture/component_diagram.rst deleted file mode 100644 index 71e8a377..00000000 --- a/Getting Started/docs/architecture/component_diagram.rst +++ /dev/null @@ -1,171 +0,0 @@ -Component Diagram -================ - -This document provides detailed information about the components of the AI-Writer system and their interactions. - -Core Components --------------- - -AI Writers -~~~~~~~~~~ - -The AI Writers component is responsible for generating various types of content using AI models. It includes several specialized writers: - -- **Blog Writer**: Generates blog posts based on keywords and web research -- **News Article Writer**: Creates news articles with citations from current events -- **Social Media Writer**: Produces content for various social platforms -- **Email Writer**: Generates professional and business emails -- **Story Writer**: Creates narrative content based on user input -- **YouTube Script Writer**: Develops scripts for video content - -Each writer implements a common interface but has specialized logic for its specific content type. The writers interact with LLM providers through a unified API layer that handles authentication, rate limiting, and error handling. - -Web Research -~~~~~~~~~~~ - -The Web Research component gathers information from the internet to provide factual context for content generation. It includes: - -- **SERP Integration**: Retrieves search engine results -- **Tavily Integration**: Uses AI-powered search for relevant information -- **Exa Integration**: Performs semantic search for related content -- **Web Crawler**: Extracts content from specified URLs -- **Content Analyzer**: Processes and summarizes gathered information - -This component ensures that generated content is factually accurate and up-to-date by providing relevant research data to the AI Writers. - -SEO Tools -~~~~~~~~~ - -The SEO Tools component provides utilities for optimizing content for search engines: - -- **Keyword Analyzer**: Identifies and analyzes target keywords -- **Meta Description Generator**: Creates SEO-friendly meta descriptions -- **Title Generator**: Produces optimized titles for content -- **Structured Data Generator**: Creates schema markup for rich snippets -- **Image Optimizer**: Optimizes images for web performance -- **On-Page SEO Analyzer**: Evaluates content for SEO best practices - -These tools work together to ensure that generated content has the best chance of ranking well in search engines. - -Analytics -~~~~~~~~ - -The Analytics component tracks and analyzes content performance: - -- **Content Metrics**: Measures readability, engagement potential, and other metrics -- **Performance Tracker**: Monitors content performance over time -- **Recommendation Engine**: Suggests improvements based on analytics -- **Report Generator**: Creates reports on content effectiveness - -This component helps users understand how their content is performing and how it can be improved. - -Data Storage ------------ - -Vector Database -~~~~~~~~~~~~~~ - -The Vector Database component uses ChromaDB to store and retrieve text embeddings: - -- **Embedding Generator**: Creates vector representations of text -- **Collection Manager**: Organizes embeddings into collections -- **Semantic Search**: Performs similarity searches on embeddings -- **Metadata Manager**: Associates metadata with embeddings - -This component enables semantic search capabilities, allowing users to find content based on meaning rather than just keywords. - -Relational Database -~~~~~~~~~~~~~~~~~~ - -The Relational Database component uses SQLite to store structured data: - -- **User Manager**: Handles user data and preferences -- **Content Repository**: Stores content items and metadata -- **Version Control**: Tracks content versions and changes -- **Analytics Storage**: Stores performance metrics and analytics data - -This component provides persistent storage for all structured data in the system. - -External Integrations --------------------- - -LLM Providers -~~~~~~~~~~~~ - -The LLM Providers component integrates with various AI models: - -- **OpenAI Integration**: Connects to GPT models -- **Google Gemini Integration**: Interfaces with Gemini models -- **Anthropic Integration**: Works with Claude models -- **Ollama Integration**: Supports local LLM deployment - -This component provides a unified interface to different AI models, allowing the system to use the best model for each task. - -Search Providers -~~~~~~~~~~~~~~~ - -The Search Providers component connects to external search services: - -- **Tavily Client**: Interfaces with Tavily AI search -- **SerperDev Client**: Connects to SerperDev API -- **Exa Client**: Integrates with Exa search API -- **Google Search Client**: Provides access to Google search results - -These integrations enable the system to gather relevant information from the internet for content generation. - -Image Generation -~~~~~~~~~~~~~~~ - -The Image Generation component creates images to complement content: - -- **Stability AI Integration**: Connects to Stable Diffusion models -- **DALL-E Integration**: Interfaces with OpenAI's DALL-E -- **Image Processor**: Optimizes and formats generated images -- **Image Repository**: Stores and manages generated images - -This component enhances content with relevant visuals, improving engagement and comprehension. - -Publishing Platforms -~~~~~~~~~~~~~~~~~~~ - -The Publishing Platforms component enables content distribution: - -- **WordPress Integration**: Publishes content to WordPress sites -- **Markdown Exporter**: Creates Markdown files for static sites -- **HTML Exporter**: Generates HTML for web publishing -- **API Connectors**: Interfaces with various content platforms - -This component streamlines the process of publishing generated content to various platforms. - -Component Interactions ---------------------- - -Content Generation Flow -~~~~~~~~~~~~~~~~~~~~~~ - -1. User provides input parameters through the UI -2. Web Research gathers relevant information -3. AI Writers generate content using research data and LLM providers -4. SEO Tools optimize the content for search engines -5. Content is stored in both Vector and Relational databases -6. Analytics evaluates the content quality and potential performance -7. Content is prepared for publishing through the Publishing Platforms - -Data Flow -~~~~~~~~~ - -1. User preferences and settings flow from UI to Relational Database -2. Research data flows from Web Research to AI Writers -3. Generated content flows from AI Writers to SEO Tools -4. Optimized content flows to Data Storage components -5. Content metrics flow from Analytics to Relational Database -6. Published content flows from Publishing Platforms to external systems - -Error Handling -~~~~~~~~~~~~~ - -1. LLM provider errors are handled by fallback mechanisms -2. Web Research failures trigger alternative search methods -3. Database errors are logged and retried with exponential backoff -4. Publishing failures are queued for retry -5. All errors are logged for monitoring and debugging \ No newline at end of file diff --git a/Getting Started/docs/architecture/database_schema.rst b/Getting Started/docs/architecture/database_schema.rst deleted file mode 100644 index 1bb96afd..00000000 --- a/Getting Started/docs/architecture/database_schema.rst +++ /dev/null @@ -1,442 +0,0 @@ -Database Schema -============== - -This document describes the database schema used in the AI-Writer platform, including both the relational database and vector database components. - -Relational Database Schema ------------------------- - -AI-Writer uses SQLAlchemy ORM to interact with the relational database. The schema consists of the following main tables: - -User -~~~~ - -Stores user information and preferences. - -.. code-block:: python - - class User(Base): - __tablename__ = "users" - - id = Column(Integer, primary_key=True) - username = Column(String, unique=True, nullable=False) - email = Column(String, unique=True, nullable=False) - password_hash = Column(String, nullable=False) - created_at = Column(DateTime, default=datetime.utcnow) - updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) - - # Relationships - api_keys = relationship("ApiKey", back_populates="user") - contents = relationship("Content", back_populates="user") - settings = relationship("UserSetting", back_populates="user", uselist=False) - -ApiKey -~~~~~~ - -Stores encrypted API keys for various services. - -.. code-block:: python - - class ApiKey(Base): - __tablename__ = "api_keys" - - id = Column(Integer, primary_key=True) - user_id = Column(Integer, ForeignKey("users.id")) - service_name = Column(String, nullable=False) - encrypted_key = Column(String, nullable=False) - is_active = Column(Boolean, default=True) - created_at = Column(DateTime, default=datetime.utcnow) - updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) - - # Relationships - user = relationship("User", back_populates="api_keys") - -Content -~~~~~~~ - -Stores generated content with metadata. - -.. code-block:: python - - class Content(Base): - __tablename__ = "contents" - - id = Column(Integer, primary_key=True) - user_id = Column(Integer, ForeignKey("users.id")) - title = Column(String, nullable=False) - content_type = Column(String, nullable=False) # blog, linkedin, twitter, etc. - content_text = Column(Text, nullable=False) - metadata = Column(JSON) - created_at = Column(DateTime, default=datetime.utcnow) - updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) - - # Relationships - user = relationship("User", back_populates="contents") - versions = relationship("ContentVersion", back_populates="content") - analytics = relationship("ContentAnalytics", back_populates="content") - -ContentVersion -~~~~~~~~~~~~~ - -Tracks versions of content for history and rollback. - -.. code-block:: python - - class ContentVersion(Base): - __tablename__ = "content_versions" - - id = Column(Integer, primary_key=True) - content_id = Column(Integer, ForeignKey("contents.id")) - version_number = Column(Integer, nullable=False) - content_text = Column(Text, nullable=False) - metadata = Column(JSON) - created_at = Column(DateTime, default=datetime.utcnow) - - # Relationships - content = relationship("Content", back_populates="versions") - -ContentAnalytics -~~~~~~~~~~~~~~ - -Stores analytics data for content performance. - -.. code-block:: python - - class ContentAnalytics(Base): - __tablename__ = "content_analytics" - - id = Column(Integer, primary_key=True) - content_id = Column(Integer, ForeignKey("contents.id")) - views = Column(Integer, default=0) - likes = Column(Integer, default=0) - shares = Column(Integer, default=0) - comments = Column(Integer, default=0) - engagement_rate = Column(Float, default=0.0) - last_updated = Column(DateTime, default=datetime.utcnow) - - # Relationships - content = relationship("Content", back_populates="analytics") - -UserSetting -~~~~~~~~~~ - -Stores user preferences and settings. - -.. code-block:: python - - class UserSetting(Base): - __tablename__ = "user_settings" - - id = Column(Integer, primary_key=True) - user_id = Column(Integer, ForeignKey("users.id"), unique=True) - preferred_ai_provider = Column(String) - default_content_type = Column(String) - ui_theme = Column(String, default="light") - language = Column(String, default="en") - settings_json = Column(JSON) - - # Relationships - user = relationship("User", back_populates="settings") - -Template -~~~~~~~ - -Stores reusable content templates. - -.. code-block:: python - - class Template(Base): - __tablename__ = "templates" - - id = Column(Integer, primary_key=True) - user_id = Column(Integer, ForeignKey("users.id")) - name = Column(String, nullable=False) - content_type = Column(String, nullable=False) - template_text = Column(Text, nullable=False) - variables = Column(JSON) - created_at = Column(DateTime, default=datetime.utcnow) - updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) - - # Relationships - user = relationship("User") - -ContentGapAnalysis -~~~~~~~~~~~~~~~~~ - -Stores content gap analysis results. - -.. code-block:: python - - class ContentGapAnalysis(Base): - __tablename__ = "content_gap_analyses" - - id = Column(Integer, primary_key=True) - user_id = Column(Integer, ForeignKey("users.id")) - website_url = Column(String, nullable=False) - industry = Column(String, nullable=False) - analysis_date = Column(DateTime, default=datetime.utcnow) - status = Column(String, nullable=False) # completed, in_progress, failed - metadata = Column(JSON) - - # Relationships - user = relationship("User", back_populates="content_gap_analyses") - website_analysis = relationship("WebsiteAnalysis", back_populates="content_gap_analysis") - competitor_analysis = relationship("CompetitorAnalysis", back_populates="content_gap_analysis") - keyword_analysis = relationship("KeywordAnalysis", back_populates="content_gap_analysis") - recommendations = relationship("ContentRecommendation", back_populates="content_gap_analysis") - -WebsiteAnalysis -~~~~~~~~~~~~~~ - -Stores website analysis results. - -.. code-block:: python - - class WebsiteAnalysis(Base): - __tablename__ = "website_analyses" - - id = Column(Integer, primary_key=True) - content_gap_analysis_id = Column(Integer, ForeignKey("content_gap_analyses.id")) - content_score = Column(Float) - seo_score = Column(Float) - structure_score = Column(Float) - content_metrics = Column(JSON) - seo_metrics = Column(JSON) - technical_metrics = Column(JSON) - ai_insights = Column(JSON) - created_at = Column(DateTime, default=datetime.utcnow) - - # Relationships - content_gap_analysis = relationship("ContentGapAnalysis", back_populates="website_analysis") - -CompetitorAnalysis -~~~~~~~~~~~~~~~~ - -Stores competitor analysis results. - -.. code-block:: python - - class CompetitorAnalysis(Base): - __tablename__ = "competitor_analyses" - - id = Column(Integer, primary_key=True) - content_gap_analysis_id = Column(Integer, ForeignKey("content_gap_analyses.id")) - competitor_url = Column(String, nullable=False) - market_position = Column(JSON) - content_gaps = Column(JSON) - competitive_advantages = Column(JSON) - trend_analysis = Column(JSON) - created_at = Column(DateTime, default=datetime.utcnow) - - # Relationships - content_gap_analysis = relationship("ContentGapAnalysis", back_populates="competitor_analysis") - -KeywordAnalysis -~~~~~~~~~~~~~ - -Stores keyword analysis results. - -.. code-block:: python - - class KeywordAnalysis(Base): - __tablename__ = "keyword_analyses" - - id = Column(Integer, primary_key=True) - content_gap_analysis_id = Column(Integer, ForeignKey("content_gap_analyses.id")) - top_keywords = Column(JSON) - search_intent = Column(JSON) - opportunities = Column(JSON) - trend_analysis = Column(JSON) - created_at = Column(DateTime, default=datetime.utcnow) - - # Relationships - content_gap_analysis = relationship("ContentGapAnalysis", back_populates="keyword_analysis") - -ContentRecommendation -~~~~~~~~~~~~~~~~~~~ - -Stores content recommendations. - -.. code-block:: python - - class ContentRecommendation(Base): - __tablename__ = "content_recommendations" - - id = Column(Integer, primary_key=True) - content_gap_analysis_id = Column(Integer, ForeignKey("content_gap_analyses.id")) - recommendation_type = Column(String, nullable=False) # content, seo, technical, etc. - priority_score = Column(Float) - recommendation = Column(Text, nullable=False) - implementation_steps = Column(JSON) - expected_impact = Column(JSON) - status = Column(String, nullable=False) # pending, in_progress, completed, rejected - created_at = Column(DateTime, default=datetime.utcnow) - updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) - - # Relationships - content_gap_analysis = relationship("ContentGapAnalysis", back_populates="recommendations") - -AnalysisHistory -~~~~~~~~~~~~~ - -Tracks the history of analysis runs. - -.. code-block:: python - - class AnalysisHistory(Base): - __tablename__ = "analysis_histories" - - id = Column(Integer, primary_key=True) - content_gap_analysis_id = Column(Integer, ForeignKey("content_gap_analyses.id")) - run_date = Column(DateTime, default=datetime.utcnow) - status = Column(String, nullable=False) # completed, in_progress, failed - metrics = Column(JSON) # Performance metrics for the analysis run - error_log = Column(Text) # Any errors encountered during analysis - - # Relationships - content_gap_analysis = relationship("ContentGapAnalysis") - -Vector Database Schema --------------------- - -AI-Writer uses ChromaDB for vector storage, which enables semantic search and retrieval of content. The vector database stores: - -1. **Content Embeddings** - - * Generated from content text using embedding models - * Used for semantic search and content similarity - -2. **Metadata** - - * Content ID (linking to relational database) - * Content type - * Creation date - * Keywords and tags - -3. **Collections** - - ChromaDB organizes embeddings into collections: - - * `content_embeddings`: Main collection for all content - * `user_{user_id}_content`: Per-user content collections - * `{content_type}_embeddings`: Collections by content type - -Vector Database Operations ------------------------- - -The vector database supports the following operations: - -1. **Adding Content** - - .. code-block:: python - - def add_content_to_vector_db(content_id, content_text, metadata): - """Add content to the vector database. - - Args: - content_id: The ID of the content in the relational database. - content_text: The text content to embed. - metadata: Additional metadata for the content. - """ - embeddings = get_embeddings(content_text) - collection = get_collection("content_embeddings") - collection.add( - ids=[str(content_id)], - embeddings=[embeddings], - metadatas=[metadata], - documents=[content_text] - ) - -2. **Searching Content** - - .. code-block:: python - - def search_similar_content(query_text, limit=5): - """Search for similar content using vector similarity. - - Args: - query_text: The query text to search for. - limit: Maximum number of results to return. - - Returns: - List of similar content items with their similarity scores. - """ - query_embedding = get_embeddings(query_text) - collection = get_collection("content_embeddings") - results = collection.query( - query_embeddings=[query_embedding], - n_results=limit - ) - return results - -3. **Updating Content** - - .. code-block:: python - - def update_content_in_vector_db(content_id, new_content_text, metadata): - """Update content in the vector database. - - Args: - content_id: The ID of the content to update. - new_content_text: The updated text content. - metadata: Updated metadata. - """ - new_embedding = get_embeddings(new_content_text) - collection = get_collection("content_embeddings") - collection.update( - ids=[str(content_id)], - embeddings=[new_embedding], - metadatas=[metadata], - documents=[new_content_text] - ) - -Database Migrations ------------------ - -AI-Writer uses Alembic for database migrations. The migration workflow is: - -1. **Create Migration** - - .. code-block:: bash - - alembic revision --autogenerate -m "Description of changes" - -2. **Apply Migration** - - .. code-block:: bash - - alembic upgrade head - -3. **Rollback Migration** - - .. code-block:: bash - - alembic downgrade -1 - -Database Backup and Restore -------------------------- - -Regular database backups are recommended: - -1. **SQLite Backup** - - .. code-block:: bash - - # Backup - sqlite3 data/alwrity.db .dump > backup.sql - - # Restore - sqlite3 data/alwrity.db < backup.sql - -2. **Vector Database Backup** - - ChromaDB data is stored in the specified directory and can be backed up by copying the directory: - - .. code-block:: bash - - # Backup - cp -r data/vectordb data/vectordb_backup - - # Restore - rm -rf data/vectordb - cp -r data/vectordb_backup data/vectordb \ No newline at end of file diff --git a/Getting Started/docs/architecture/deployment.rst b/Getting Started/docs/architecture/deployment.rst deleted file mode 100644 index 87d83158..00000000 --- a/Getting Started/docs/architecture/deployment.rst +++ /dev/null @@ -1,571 +0,0 @@ -Deployment Architecture -===================== - -This document outlines the deployment architecture for the AI-Writer platform, including deployment models, infrastructure requirements, and operational considerations. - -Deployment Models ---------------- - -AI-Writer supports multiple deployment models to accommodate different user needs and scale requirements: - -Single-User Deployment -~~~~~~~~~~~~~~~~~~~~ - -Ideal for individual content creators or small teams: - -1. **Local Installation** - - * Runs on a single machine - * SQLite database for data storage - * Local file system for content storage - * Minimal resource requirements - -2. **Configuration** - - * Simple configuration file - * Environment variables for API keys - * Local storage paths - * Logging configuration - -3. **Resource Requirements** - - * CPU: 2+ cores - * RAM: 4GB minimum (8GB recommended) - * Storage: 10GB minimum - * Python 3.9+ runtime - -Multi-User Deployment -~~~~~~~~~~~~~~~~~~~ - -Suitable for teams and organizations: - -1. **Server Deployment** - - * Dedicated server or cloud instance - * PostgreSQL database - * Shared file storage - * Web server (Nginx/Apache) with WSGI/ASGI - -2. **Docker Deployment** - - * Containerized application - * Docker Compose for orchestration - * Persistent volumes for data - * Separate containers for services - -3. **Resource Requirements** - - * CPU: 4+ cores - * RAM: 16GB minimum - * Storage: 50GB+ SSD - * Network: 100Mbps+ bandwidth - -Enterprise Deployment -~~~~~~~~~~~~~~~~~~~ - -For large organizations with high volume requirements: - -1. **Kubernetes Deployment** - - * Containerized microservices - * Horizontal scaling - * Load balancing - * High availability configuration - -2. **Database Scaling** - - * Database clustering - * Read replicas - * Connection pooling - * Automated backups - -3. **Resource Requirements** - - * CPU: 8+ cores per node - * RAM: 32GB+ per node - * Storage: 100GB+ SSD with high IOPS - * Network: 1Gbps+ bandwidth - -Infrastructure Components ------------------------ - -Core Components -~~~~~~~~~~~~~ - -1. **Application Servers** - - * Runs the AI-Writer application code - * Handles HTTP requests - * Processes content generation tasks - * Manages user sessions - -2. **Database Servers** - - * Stores relational data (SQLite/PostgreSQL) - * Stores vector embeddings (ChromaDB) - * Handles data persistence - * Manages transactions and concurrency - -3. **File Storage** - - * Stores generated content - * Stores uploaded files - * Manages file versioning - * Handles file access control - -4. **Web Servers** - - * Handles HTTP/HTTPS traffic - * SSL termination - * Static file serving - * Request routing - -Optional Components -~~~~~~~~~~~~~~~~ - -1. **Cache Servers** - - * Redis for caching - * Session storage - * Rate limiting - * Task queuing - -2. **Background Workers** - - * Processes asynchronous tasks - * Handles long-running operations - * Manages scheduled jobs - * Processes content generation queue - -3. **Load Balancers** - - * Distributes traffic across servers - * Health checking - * SSL termination - * DDoS protection - -4. **Monitoring Services** - - * Application performance monitoring - * Log aggregation - * Metrics collection - * Alerting - -Deployment Topologies -------------------- - -Basic Topology -~~~~~~~~~~~~ - -For single-user or small team deployments: - -``` -[User] โ†’ [Web Server] โ†’ [AI-Writer Application] โ†’ [SQLite/PostgreSQL] - โ†’ [File Storage] - โ†’ [External APIs] -``` - -Standard Topology -~~~~~~~~~~~~~~ - -For multi-user deployments: - -``` -[Users] โ†’ [Load Balancer] โ†’ [Web Servers] โ†’ [Application Servers] โ†’ [PostgreSQL Cluster] - โ†’ [Background Workers] โ†’ [File Storage] - โ†’ [Redis Cache] - โ†’ [External APIs] -``` - -High-Availability Topology -~~~~~~~~~~~~~~~~~~~~~~~ - -For enterprise deployments: - -``` -[Users] โ†’ [CDN] โ†’ [Load Balancer] โ†’ [Web Servers (Multiple AZs)] - โ†’ [Application Servers (Multiple AZs)] - โ†’ [Background Workers (Multiple AZs)] - โ†’ [PostgreSQL (Primary + Replicas)] - โ†’ [Redis Cluster] - โ†’ [Distributed File Storage] - โ†’ [External APIs with Fallbacks] -``` - -Deployment Process ----------------- - -Installation Methods -~~~~~~~~~~~~~~~~~ - -1. **Manual Installation** - - * Clone repository - * Install dependencies - * Configure environment - * Initialize database - * Start application - -2. **Docker Installation** - - * Pull Docker images - * Configure Docker Compose - * Start containers - * Initialize services - * Configure networking - -3. **Kubernetes Installation** - - * Apply Kubernetes manifests - * Configure Helm charts - * Set up persistent volumes - * Configure ingress - * Deploy services - -Configuration Management -~~~~~~~~~~~~~~~~~~~~~ - -1. **Environment Variables** - - * API keys and credentials - * Database connection strings - * Service endpoints - * Feature flags - -2. **Configuration Files** - - * Application settings - * Logging configuration - * Database settings - * Cache settings - -3. **Secrets Management** - - * Kubernetes secrets - * Docker secrets - * Vault integration - * Encrypted configuration - -Continuous Integration/Deployment -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -1. **CI Pipeline** - - * Automated testing - * Code quality checks - * Security scanning - * Build artifacts - -2. **CD Pipeline** - - * Automated deployment - * Blue/green deployment - * Canary releases - * Rollback capability - -3. **Infrastructure as Code** - - * Terraform for infrastructure - * Ansible for configuration - * Helm charts for Kubernetes - * Docker Compose for local deployment - -Operational Considerations ------------------------- - -Monitoring and Logging -~~~~~~~~~~~~~~~~~~~ - -1. **Application Monitoring** - - * Performance metrics - * Error tracking - * User activity - * API usage - -2. **Infrastructure Monitoring** - - * Resource utilization - * Network traffic - * Database performance - * Storage capacity - -3. **Logging Strategy** - - * Centralized log collection - * Structured logging - * Log retention policy - * Log analysis tools - -Backup and Recovery -~~~~~~~~~~~~~~~~ - -1. **Database Backups** - - * Regular automated backups - * Point-in-time recovery - * Backup verification - * Off-site backup storage - -2. **File Storage Backups** - - * Incremental backups - * Version history - * Disaster recovery - * Backup encryption - -3. **Recovery Procedures** - - * Database restoration - * File recovery - * System rebuild - * Disaster recovery testing - -Scaling Strategies -~~~~~~~~~~~~~~~ - -1. **Vertical Scaling** - - * Increase resources for existing servers - * Upgrade database instances - * Enhance storage performance - * Optimize application code - -2. **Horizontal Scaling** - - * Add application servers - * Database read replicas - * Distributed caching - * Load balancing - -3. **Auto-scaling** - - * Scale based on CPU/memory usage - * Scale based on request volume - * Scheduled scaling for predictable loads - * Scale to zero for development environments - -Security Considerations --------------------- - -Network Security -~~~~~~~~~~~~~ - -1. **Firewall Configuration** - - * Restrict access to necessary ports - * Implement network segmentation - * Configure security groups - * DDoS protection - -2. **TLS Configuration** - - * TLS 1.3 support - * Strong cipher suites - * Certificate management - * HSTS implementation - -3. **VPN Access** - - * Secure administrative access - * Multi-factor authentication - * Access logging - * Role-based access control - -Data Security -~~~~~~~~~~ - -1. **Data Encryption** - - * Encryption in transit - * Encryption at rest - * Key management - * Regular key rotation - -2. **Access Controls** - - * Principle of least privilege - * Role-based access - * Regular access reviews - * Privileged access management - -3. **Compliance** - - * Data residency requirements - * Regulatory compliance - * Privacy regulations - * Security certifications - -Deployment Checklist ------------------- - -Pre-Deployment -~~~~~~~~~~~~ - -1. **Environment Preparation** - - * Verify infrastructure requirements - * Configure networking - * Set up security controls - * Prepare databases - -2. **Application Preparation** - - * Verify application version - * Check dependencies - * Prepare configuration - * Test in staging environment - -3. **Documentation** - - * Update deployment documentation - * Prepare rollback procedures - * Document configuration changes - * Update user documentation - -Deployment -~~~~~~~~~ - -1. **Backup** - - * Backup existing data - * Backup configuration - * Verify backup integrity - * Prepare rollback point - -2. **Deployment Steps** - - * Follow deployment procedure - * Monitor deployment progress - * Verify service health - * Run smoke tests - -3. **Verification** - - * Verify functionality - * Check performance - * Validate security - * Test integrations - -Post-Deployment -~~~~~~~~~~~~~ - -1. **Monitoring** - - * Monitor application performance - * Watch for errors - * Track user activity - * Monitor resource usage - -2. **Communication** - - * Notify users of deployment - * Provide release notes - * Address initial feedback - * Support user questions - -3. **Optimization** - - * Identify performance bottlenecks - * Optimize resource usage - * Fine-tune configuration - * Plan for future improvements - -Deployment Environments ---------------------- - -Development Environment -~~~~~~~~~~~~~~~~~~~~ - -1. **Purpose** - - * Feature development - * Bug fixing - * Testing - * Integration - -2. **Characteristics** - - * Minimal resources - * Frequent updates - * Non-production data - * Developer access - -3. **Configuration** - - * Debug mode enabled - * Verbose logging - * Test API keys - * Local development tools - -Staging Environment -~~~~~~~~~~~~~~~~ - -1. **Purpose** - - * Pre-production testing - * Performance testing - * User acceptance testing - * Deployment validation - -2. **Characteristics** - - * Similar to production - * Controlled access - * Sanitized production data - * Regular refreshes - -3. **Configuration** - - * Production-like settings - * Monitoring enabled - * Test integrations - * Staging API endpoints - -Production Environment -~~~~~~~~~~~~~~~~~~~ - -1. **Purpose** - - * Live user access - * Business operations - * Customer data - * Revenue generation - -2. **Characteristics** - - * High availability - * Scalability - * Security - * Performance - -3. **Configuration** - - * Optimized settings - * Minimal logging - * Production API keys - * Strict access controls - -Future Deployment Enhancements ----------------------------- - -1. **Containerization Improvements** - - * Optimize container images - * Implement container security scanning - * Enhance orchestration - * Improve container networking - -2. **Infrastructure as Code** - - * Complete IaC implementation - * Automated environment provisioning - * Configuration management - * Compliance as code - -3. **Advanced Deployment Strategies** - - * Feature flags - * A/B testing infrastructure - * Canary deployments - * Progressive delivery \ No newline at end of file diff --git a/Getting Started/docs/architecture/diagrams/content_generation_workflow.png b/Getting Started/docs/architecture/diagrams/content_generation_workflow.png deleted file mode 100644 index 27d93037a6289a1904a12998521d2fe74b109728..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 145226 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 JkOn#lefq(M}EllJy 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 YdFWvXdhURXn)r$GQw{mDC(mF1Ul@T@O8@`> diff --git a/Getting Started/docs/architecture/diagrams/high_level_architecture.png b/Getting Started/docs/architecture/diagrams/high_level_architecture.png deleted file mode 100644 index 6d0ab11e229691e2c799148c43f568670ae207e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162068 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 z 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 z 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 diff --git a/Getting Started/docs/architecture/index.rst b/Getting Started/docs/architecture/index.rst deleted file mode 100644 index 6092711c..00000000 --- a/Getting Started/docs/architecture/index.rst +++ /dev/null @@ -1,156 +0,0 @@ -System Architecture -================== - -This section provides a comprehensive overview of the AI-Writer system architecture, including component interactions, data flow, and design patterns. - -.. toctree:: - :maxdepth: 2 - :caption: Architecture Documentation: - - overview - components - database_schema - api_design - security - -Architecture Overview -------------------- - -.. include:: overview.rst - -Component Diagram ---------------- - -.. image:: diagrams/high_level_architecture.png - :alt: AI-Writer High-Level Architecture Diagram - :width: 800px - -.. image:: diagrams/database_architecture.png - :alt: AI-Writer Database Architecture Diagram - :width: 800px - -.. image:: diagrams/content_generation_workflow.png - :alt: AI-Writer Content Generation Workflow Diagram - :width: 800px - -Key Components ------------- - -The AI-Writer platform consists of several key components: - -1. **User Interface Layer** - - * Streamlit-based web interface - * Component-based UI architecture - * Responsive design for multiple devices - -2. **Application Layer** - - * Content generation modules - * AI provider integrations - * Research and analysis tools - * Analytics and reporting - -3. **Data Layer** - - * Relational database (SQLite/PostgreSQL) - * Vector database (ChromaDB) - * File storage for generated content - -4. **Integration Layer** - - * API endpoints for external integration - * Authentication and authorization - * Rate limiting and caching - -Component Interactions --------------------- - -The components interact through well-defined interfaces: - -1. **UI to Application Layer** - - * Event-driven interaction - * State management through Streamlit session state - * Asynchronous processing for long-running tasks - -2. **Application to Data Layer** - - * Repository pattern for data access - * Transaction management - * Connection pooling - -3. **Application to External Services** - - * API client abstractions - * Retry mechanisms - * Circuit breakers for fault tolerance - -Data Flow --------- - -The typical data flow in the system: - -1. User submits content generation request through UI -2. Application layer validates and processes the request -3. AI provider is called to generate content -4. Generated content is stored in the database -5. Content is returned to the UI for display and editing -6. Analytics data is collected and stored - -Deployment Architecture ---------------------- - -AI-Writer supports multiple deployment models: - -1. **Single-User Deployment** - - * Local installation - * SQLite database - * Local file storage - -2. **Multi-User Deployment** - - * Docker-based deployment - * PostgreSQL database - * Shared file storage - * Load balancing - -3. **Cloud Deployment** - - * Kubernetes orchestration - * Cloud database services - * Object storage - * Auto-scaling - -Technology Stack --------------- - -The AI-Writer platform is built on the following technologies: - -1. **Frontend** - - * Streamlit - * HTML/CSS/JavaScript - * Plotly for visualizations - -2. **Backend** - - * Python 3.9+ - * FastAPI for API endpoints - * SQLAlchemy for ORM - * ChromaDB for vector storage - -3. **AI and ML** - - * OpenAI GPT models - * Google Gemini - * Hugging Face transformers - * Sentence transformers for embeddings - -4. **Infrastructure** - - * Docker - * Docker Compose - * Kubernetes (for cloud deployment) - * GitHub Actions for CI/CD \ No newline at end of file diff --git a/Getting Started/docs/architecture/security.rst b/Getting Started/docs/architecture/security.rst deleted file mode 100644 index 7930522c..00000000 --- a/Getting Started/docs/architecture/security.rst +++ /dev/null @@ -1,335 +0,0 @@ -Security Architecture -=================== - -This document outlines the security architecture of the AI-Writer platform, including authentication, authorization, data protection, and security best practices. - -Authentication and Authorization ------------------------------- - -User Authentication -~~~~~~~~~~~~~~~~~ - -AI-Writer implements a multi-layered authentication system: - -1. **Password-based Authentication** - - * Passwords are hashed using bcrypt with appropriate work factors - * Password complexity requirements are enforced - * Account lockout after multiple failed attempts - * Password reset via secure email workflow - -2. **API Key Authentication** - - * Unique API keys for programmatic access - * Keys are stored using secure hashing - * Keys can be scoped to specific permissions - * Keys can be revoked at any time - -3. **OAuth 2.0 (for multi-user deployments)** - - * Standard OAuth 2.0 flow with authorization code - * JWT tokens with appropriate expiration - * Refresh token rotation - * PKCE for public clients - -Authorization Model -~~~~~~~~~~~~~~~~ - -The platform uses a role-based access control (RBAC) system: - -1. **User Roles** - - * **Admin**: Full system access - * **Editor**: Content creation and editing - * **Viewer**: Read-only access to content - * **API**: Programmatic access with limited scope - -2. **Permission Scopes** - - * `content:read`: View content - * `content:write`: Create and edit content - * `content:delete`: Delete content - * `user:read`: View user information - * `user:write`: Modify user information - * `settings:read`: View settings - * `settings:write`: Modify settings - * `api:manage`: Manage API keys - -3. **Resource-level Permissions** - - * Permissions are checked at the resource level - * Users can only access their own content - * Sharing functionality with explicit permissions - -Data Protection -------------- - -Encryption -~~~~~~~~~ - -1. **Data in Transit** - - * TLS 1.3 for all communications - * Strong cipher suites - * HSTS implementation - * Certificate pinning for API clients - -2. **Data at Rest** - - * Database encryption - * Encrypted file storage - * Secure key management - * Regular key rotation - -3. **Sensitive Data** - - * API keys and credentials are encrypted - * PII is encrypted with separate keys - * Encryption keys are properly secured - -API Key Security -~~~~~~~~~~~~~~ - -1. **Key Generation** - - * Keys are generated using cryptographically secure random functions - * Sufficient entropy (256 bits) - * Keys follow a consistent format for validation - -2. **Key Storage** - - * Only key hashes are stored in the database - * Secure comparison for validation - * Keys are never logged or exposed in error messages - -3. **Key Management** - - * Keys can be rotated regularly - * Unused keys are automatically expired - * Key usage is logged for audit purposes - -Secure Development Practices --------------------------- - -Input Validation -~~~~~~~~~~~~~~ - -1. **API Input Validation** - - * All input is validated against schemas - * Type checking and constraint validation - * Protection against injection attacks - * Input sanitization where appropriate - -2. **Content Validation** - - * Content is scanned for malicious elements - * HTML/Markdown sanitization - * File upload validation and scanning - -3. **Error Handling** - - * Secure error handling that doesn't leak sensitive information - * Consistent error responses - * Detailed internal logging for troubleshooting - -Dependency Management -~~~~~~~~~~~~~~~~~~ - -1. **Dependency Scanning** - - * Regular scanning for vulnerable dependencies - * Automated updates for security patches - * Dependency pinning for stability - -2. **Minimal Dependencies** - - * Only necessary dependencies are included - * Regular dependency audits - * Preference for well-maintained libraries - -3. **Containerization** - - * Minimal base images - * Non-root container execution - * Image scanning for vulnerabilities - -Logging and Monitoring --------------------- - -Security Logging -~~~~~~~~~~~~~~ - -1. **Authentication Events** - - * Login attempts (successful and failed) - * Password changes and resets - * API key creation and usage - * Session management events - -2. **Authorization Events** - - * Permission checks - * Access denials - * Privilege escalation - * Role changes - -3. **System Events** - - * Configuration changes - * Service starts and stops - * Database migrations - * Backup and restore operations - -Monitoring and Alerting -~~~~~~~~~~~~~~~~~~~~~ - -1. **Security Monitoring** - - * Real-time monitoring for suspicious activities - * Anomaly detection for unusual patterns - * Rate limiting and abuse detection - * Geographic anomaly detection - -2. **Performance Monitoring** - - * Resource usage tracking - * API response time monitoring - * Error rate monitoring - * Database performance tracking - -3. **Alerting** - - * Immediate alerts for security incidents - * Escalation procedures - * On-call rotation - * Incident response playbooks - -Compliance and Privacy --------------------- - -Data Governance -~~~~~~~~~~~~~ - -1. **Data Classification** - - * Clear classification of data sensitivity - * Handling procedures for each classification - * Access controls based on classification - * Retention policies by data type - -2. **Data Minimization** - - * Only necessary data is collected - * Automatic data pruning - * Anonymization where possible - * Purpose limitation - -3. **User Consent** - - * Clear consent mechanisms - * Granular permission options - * Easy consent withdrawal - * Consent records - -Privacy Features -~~~~~~~~~~~~~ - -1. **User Privacy Controls** - - * Data export functionality - * Account deletion - * Privacy settings management - * Usage tracking opt-out - -2. **Data Portability** - - * Export in standard formats - * Complete data export - * Machine-readable formats - * Import capabilities - -3. **Transparency** - - * Clear privacy policy - * Data usage explanations - * Third-party data sharing disclosure - * Processing activities documentation - -Security Testing --------------- - -Vulnerability Management -~~~~~~~~~~~~~~~~~~~~~ - -1. **Security Testing** - - * Regular penetration testing - * Static application security testing (SAST) - * Dynamic application security testing (DAST) - * Software composition analysis (SCA) - -2. **Bug Bounty Program** - - * Responsible disclosure policy - * Security researcher engagement - * Vulnerability triage process - * Remediation tracking - -3. **Security Reviews** - - * Code reviews with security focus - * Architecture security reviews - * Threat modeling - * Security design reviews - -Incident Response -~~~~~~~~~~~~~~~ - -1. **Incident Response Plan** - - * Defined incident response procedures - * Roles and responsibilities - * Communication templates - * Escalation paths - -2. **Breach Notification** - - * Legal compliance with notification requirements - * User communication plan - * Regulatory reporting procedures - * Post-incident analysis - -3. **Recovery Procedures** - - * Backup and restore testing - * Business continuity planning - * Disaster recovery procedures - * Service level objectives - -Security Roadmap --------------- - -Planned Security Enhancements -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -1. **Short-term (0-6 months)** - - * Implement multi-factor authentication - * Enhance API key management - * Improve security logging - * Conduct initial penetration test - -2. **Medium-term (6-12 months)** - - * Implement security information and event management (SIEM) - * Enhance data encryption - * Develop comprehensive security training - * Implement automated security testing in CI/CD - -3. **Long-term (12+ months)** - - * Achieve SOC 2 compliance - * Implement advanced threat protection - * Develop zero-trust architecture - * Enhance privacy features for international compliance \ No newline at end of file diff --git a/Getting Started/docs/introduction.rst b/Getting Started/docs/introduction.rst deleted file mode 100644 index a2a8a6d8..00000000 --- a/Getting Started/docs/introduction.rst +++ /dev/null @@ -1,56 +0,0 @@ -Introduction -============ - -What is AI-Writer? ------------------ - -AI-Writer (Alwrity) is a comprehensive AI-powered content creation platform designed to help content creators, marketers, and businesses generate high-quality content efficiently. The platform leverages advanced language models and AI technologies to assist in creating various types of content, from social media posts to full-length articles. - -Key Features ------------ - -1. **Multi-Platform Content Generation** - - * LinkedIn content (posts, articles, profiles) - * Twitter/X posts and threads - * Blog articles and SEO-optimized content - * Marketing copy and email templates - -2. **AI Research Integration** - - * Web crawling for relevant information - * Content summarization - * Fact-checking capabilities - * Citation and reference management - -3. **Database Integration** - - * Content storage and retrieval - * Vector database for semantic search - * Content versioning and history - -4. **Analytics Dashboard** - - * Content performance metrics - * Usage statistics - * AI model performance analysis - -5. **Customization Options** - - * Personalized content templates - * Brand voice and tone settings - * Custom workflows - -6. **Multiple AI Provider Support** - - * OpenAI (GPT models) - * Google Gemini - * Anthropic Claude (coming soon) - * Local models (coming soon) - -Project History --------------- - -AI-Writer was created to address the growing need for high-quality content creation at scale. The project aims to democratize access to advanced AI writing capabilities while maintaining a focus on quality, accuracy, and ethical content generation. - -The platform continues to evolve with new features and improvements based on user feedback and advancements in AI technology. \ No newline at end of file diff --git a/Getting Started/docs/migration_to_enterprise.md b/Getting Started/docs/migration_to_enterprise.md deleted file mode 100644 index 22c8c23c..00000000 --- a/Getting Started/docs/migration_to_enterprise.md +++ /dev/null @@ -1,139 +0,0 @@ -# Migration Plan: Alwrity (AI-Writer) to Enterprise-Ready Architecture - -## 1. Background & Motivation -Alwrity (AI-Writer) is currently an open-source, Streamlit-based project for AI-powered content creation, SEO, analytics, and more. To serve enterprise customers, we need to move to a scalable, secure, and maintainable architecture, reusing as much of the existing Python codebase as possible while replacing the UI and improving backend robustness. - ---- - -## 2. Current State -- **UI:** Streamlit (great for prototyping, not for enterprise) -- **Backend:** Python modules for AI writing, SEO, analytics, chatbot, etc. -- **Database:** SQLite, ChromaDB, some service layers for Twitter and content -- **AI/ML:** Integrates with OpenAI, Gemini, and other providers - ---- - -## 3. Design Directions & Tech Stack Recommendations - -### A. Frontend -- **React** (TypeScript) for scalable, maintainable UI -- **UI Library:** Material-UI (MUI) or Ant Design -- **State/Data:** React Query, Context API or Redux Toolkit - -### B. Backend -- **FastAPI** (Python): async, high-performance, easy to wrap existing modules -- **Task Queue:** Celery + Redis for background jobs (if needed) - -### C. Database & Storage -- **PostgreSQL** for structured data -- **Redis** for caching and task queue -- **Vector DB:** Pinecone, Weaviate, or Qdrant for semantic search (if needed) -- **Blob Storage:** AWS S3 or Azure Blob for files - -### D. AI/ML Integration -- Reuse existing Python modules -- Serve custom models via FastAPI endpoints - -### E. Authentication -- **Auth0** or **Keycloak** for OAuth2/SSO, or FastAPI JWT for MVP - -### F. DevOps -- **Docker** for containerization -- **GitHub Actions** for CI/CD -- **(Optional) Kubernetes** for orchestration - -### G. Security & Compliance -- SSO, RBAC, audit logs, encryption, GDPR/SOC2 readiness - ---- - -## 4. Migration Plan: Step-by-Step - -### Phase 1: Preparation -- Audit codebase for reusable business logic -- Separate UI code from backend logic -- Set up monorepo or separate repos for backend (Python/FastAPI) and frontend (React) - -### Phase 2: Backend API Layer -- Scaffold FastAPI app -- Wrap existing Python modules as API endpoints (content generation, SEO, analytics, etc.) -- Add authentication (JWT for MVP, SSO for production) -- Write unit/integration tests - -### Phase 3: Frontend Migration -- Scaffold React app (TypeScript) -- Set up routing, authentication, dashboard layout -- For each Streamlit feature, create a React page/component -- Use MUI/Ant Design for UI -- Fetch data from FastAPI using React Query - -### Phase 4: Feature Parity & Enhancements -- Migrate all features, one by one, to new stack -- Use Celery + Redis for long-running jobs -- Add UI/UX improvements (loading, error handling, feedback) - -### Phase 5: Productionization -- Dockerize frontend and backend -- Set up CI/CD with GitHub Actions -- Add logging, monitoring (Sentry, Prometheus, Grafana) -- Harden security (HTTPS, CORS, secure cookies, etc.) - -### Phase 6: Launch & Iterate -- Deploy to cloud -- Gather user feedback and iterate - ---- - -## 5. Prioritized Modules for Migration - -### Best-fit modules to start with (already decoupled from UI): -1. **AI Writers (lib/ai_writers/):** Blog, news, social, email, story, YouTube script writers -2. **SEO Tools (lib/ai_seo_tools/):** Keyword analyzer, meta generator, content gap, enterprise SEO, content calendar -3. **Website Analyzer (lib/utils/website_analyzer/):** Performance, SEO, content quality analysis -4. **Analytics/Performance (lib/content_performance_predictor/):** Content analytics and prediction -5. **Chatbot Core (lib/chatbot_custom/core/):** Workflow engine, tool router, intent analyzer, context manager -6. **Database Services (lib/database/):** Twitter and content management service layers -7. **AI Marketing Tools (lib/ai_marketing_tools/ai_backlinker/):** Backlinking and marketing automation - -### Modules to avoid for now: -- Streamlit UI scripts and thin wrappers - ---- - -## 6. Summary Table - -| Layer | Stack/Tooling | Why? | -|---------------|-----------------------------|--------------------------------------------| -| Frontend | React + TypeScript + MUI | Modern, scalable, huge ecosystem | -| Backend | FastAPI (Python) | Async, high-perf, easy to wrap old code | -| Auth | FastAPI JWT/Auth0/Keycloak | Secure, enterprise-ready | -| DB | PostgreSQL, Redis | Reliable, scalable, Python-friendly | -| AI/ML | Existing Python modules | Maximum code reuse | -| Task Queue | Celery + Redis | For background/async jobs | -| DevOps | Docker, GitHub Actions | Easy deployment, automation | - ---- - -## 7. Next Steps -- Start with AI Writers and SEO Tools: wrap as FastAPI endpoints -- Gradually add Website Analyzer, Analytics, and Chatbot features -- Leave UI and Streamlit code aside; focus on modules that donโ€™t depend on Streamlit -- Build React frontend to consume new API endpoints - ---- - -## 8. Optional: Sample FastAPI Endpoint (for reference) -```python -from fastapi import FastAPI -from lib.ai_writers.blog_writer import generate_blog_post - -app = FastAPI() - -@app.post("/generate-blog/") -def generate_blog(data: BlogRequest): - return generate_blog_post(data.topic, data.keywords) -``` - ---- - -**This document should be updated as the migration progresses and new architectural decisions are made.** \ No newline at end of file diff --git a/Getting Started/docs/test_frontend_backend.py b/Getting Started/docs/test_frontend_backend.py deleted file mode 100644 index 28170333..00000000 --- a/Getting Started/docs/test_frontend_backend.py +++ /dev/null @@ -1,106 +0,0 @@ -#!/usr/bin/env python3 -""" -Test script to verify frontend-backend communication. -""" - -import requests -import time - -def test_backend_endpoints(): - """Test all backend endpoints""" - base_url = "http://localhost:8000" - - print("๐Ÿงช Testing Backend Endpoints...") - - # Test health endpoint - print("\n1๏ธโƒฃ Testing health endpoint...") - try: - response = requests.get(f"{base_url}/health") - if response.status_code == 200: - print("โœ… Health endpoint working") - else: - print(f"โŒ Health endpoint failed: {response.status_code}") - except Exception as e: - print(f"โŒ Health endpoint error: {e}") - - # Test onboarding check - print("\n2๏ธโƒฃ Testing onboarding check...") - try: - response = requests.get(f"{base_url}/api/check-onboarding") - if response.status_code == 200: - data = response.json() - print(f"โœ… Onboarding check working: {data}") - else: - print(f"โŒ Onboarding check failed: {response.status_code}") - except Exception as e: - print(f"โŒ Onboarding check error: {e}") - - # Test onboarding start - print("\n3๏ธโƒฃ Testing onboarding start...") - try: - response = requests.post(f"{base_url}/api/onboarding/start") - if response.status_code == 200: - data = response.json() - print(f"โœ… Onboarding start working: {data}") - else: - print(f"โŒ Onboarding start failed: {response.status_code}") - except Exception as e: - print(f"โŒ Onboarding start error: {e}") - - # Test onboarding step - print("\n4๏ธโƒฃ Testing onboarding step...") - try: - response = requests.get(f"{base_url}/api/onboarding/step") - if response.status_code == 200: - data = response.json() - print(f"โœ… Onboarding step working: {data}") - else: - print(f"โŒ Onboarding step failed: {response.status_code}") - except Exception as e: - print(f"โŒ Onboarding step error: {e}") - -def test_frontend_communication(): - """Test if frontend can reach backend""" - print("\n๐ŸŒ Testing Frontend-Backend Communication...") - - # Simulate frontend API calls - base_url = "http://localhost:8000" - - # Test the exact endpoints the frontend uses - endpoints = [ - ("GET", "/api/check-onboarding"), - ("POST", "/api/onboarding/start"), - ("GET", "/api/onboarding/step"), - ("GET", "/api/onboarding/api-keys"), - ("POST", "/api/onboarding/api-keys"), - ("GET", "/api/onboarding/progress"), - ] - - for method, endpoint in endpoints: - print(f"\nTesting {method} {endpoint}...") - try: - if method == "GET": - response = requests.get(f"{base_url}{endpoint}") - elif method == "POST": - response = requests.post(f"{base_url}{endpoint}") - - if response.status_code in [200, 404]: # 404 is expected for some endpoints without data - print(f"โœ… {method} {endpoint} - Status: {response.status_code}") - else: - print(f"โŒ {method} {endpoint} - Status: {response.status_code}") - except Exception as e: - print(f"โŒ {method} {endpoint} - Error: {e}") - -if __name__ == "__main__": - print("๐Ÿš€ Starting Frontend-Backend Communication Test...") - - # Wait a moment for services to be ready - print("โณ Waiting for services to be ready...") - time.sleep(2) - - test_backend_endpoints() - test_frontend_communication() - - print("\n๐ŸŽฏ Test complete!") - print("๐Ÿ“ If all tests pass, the frontend should work correctly.") - print("๐ŸŒ Visit http://localhost:3000 to test the onboarding flow.") \ No newline at end of file diff --git a/Getting Started/docs/test_onboarding.py b/Getting Started/docs/test_onboarding.py deleted file mode 100644 index 26099798..00000000 --- a/Getting Started/docs/test_onboarding.py +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env python3 -""" -Test script to reset onboarding state and test the onboarding flow. -""" - -import sys -import os -import sqlite3 - -# Add the backend directory to Python path -sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'backend')) - -def reset_database(): - """Reset the onboarding database""" - db_path = "backend/onboarding.db" - if os.path.exists(db_path): - os.remove(db_path) - print("โœ… Database file removed") - else: - print("โ„น๏ธ No database file found") - -def check_onboarding_status(): - """Check the current onboarding status""" - import requests - try: - response = requests.get("http://localhost:8000/api/check-onboarding") - if response.status_code == 200: - data = response.json() - print(f"๐Ÿ“Š Onboarding Status: {data}") - return data - else: - print(f"โŒ Error: {response.status_code}") - return None - except Exception as e: - print(f"โŒ Error checking onboarding status: {e}") - return None - -def test_onboarding_flow(): - """Test the complete onboarding flow""" - print("\n๐Ÿงช Testing Onboarding Flow...") - - # Step 1: Check initial status - print("\n1๏ธโƒฃ Checking initial onboarding status...") - status = check_onboarding_status() - - if status and status.get('onboarding_required'): - print("โœ… Correctly shows onboarding required for first-time user") - else: - print("โŒ Incorrectly shows onboarding complete") - - # Step 2: Start onboarding - print("\n2๏ธโƒฃ Starting onboarding session...") - try: - import requests - response = requests.post("http://localhost:8000/api/onboarding/start") - if response.status_code == 200: - print("โœ… Onboarding session started") - else: - print(f"โŒ Error starting onboarding: {response.status_code}") - except Exception as e: - print(f"โŒ Error: {e}") - - # Step 3: Check status again - print("\n3๏ธโƒฃ Checking status after starting onboarding...") - status = check_onboarding_status() - - if status and status.get('onboarding_required'): - print("โœ… Still shows onboarding required (correct)") - else: - print("โŒ Incorrectly shows onboarding complete") - -if __name__ == "__main__": - print("๐Ÿ”„ Resetting onboarding state...") - reset_database() - - print("\nโณ Waiting for backend to restart...") - import time - time.sleep(3) - - test_onboarding_flow() - - print("\n๐ŸŽฏ Test complete! Check your frontend at http://localhost:3000") \ No newline at end of file