From 9cc1ffd47ed6024028b706fb6a27b6c47deaeb68 Mon Sep 17 00:00:00 2001 From: ajaysi Date: Thu, 9 Oct 2025 13:07:09 +0530 Subject: [PATCH] ALwrity + Wix + Wordpress + GSC integration + Production API calls fixes --- DEPLOYMENT_GUIDE.md | 293 ------------------ VERCEL_DEPLOYMENT_GUIDE.md | 206 ------------ ...ress_user_33Gz1FPI86VDXhRY8QN4ragRFGN.json | 246 ++++++++------- frontend/env.production.example | 11 +- frontend/src/api/client.ts | 3 +- .../BlogWriter/HallucinationChecker.tsx | 9 +- .../BlogWriter/SEO/SEOProcessor.tsx | 19 +- .../BlogWriter/SEOAnalysisModal.tsx | 21 +- .../BlogWriter/SEOMetadataModal.tsx | 21 +- .../components/SystemStatusIndicator.tsx | 43 ++- .../tabs/CreateTab.tsx | 30 +- .../RegisterLinkedInActions.tsx | 39 +-- .../components/BrainstormFlow.tsx | 48 +-- .../OnboardingWizard/ApiKeyStep.tsx | 61 +++- .../ApiKeyStep/utils/useApiKeyStep.ts | 70 +++-- .../OnboardingWizard/StyleDetectionStep.tsx | 17 +- .../common/usePlatformConnections.ts | 9 +- .../WixCallbackPage/WixCallbackPage.tsx | 22 +- frontend/src/utils/errorReporting.ts | 28 +- vercel.json => frontend/vercel.json | 0 20 files changed, 350 insertions(+), 846 deletions(-) delete mode 100644 DEPLOYMENT_GUIDE.md delete mode 100644 VERCEL_DEPLOYMENT_GUIDE.md rename vercel.json => frontend/vercel.json (100%) diff --git a/DEPLOYMENT_GUIDE.md b/DEPLOYMENT_GUIDE.md deleted file mode 100644 index 8dfd66ca..00000000 --- a/DEPLOYMENT_GUIDE.md +++ /dev/null @@ -1,293 +0,0 @@ -# 🚀 ALwrity Deployment Guide - -## Vercel Deployment Strategy - -Since Vercel is optimized for frontend applications, we'll deploy the frontend on Vercel and the backend on a separate platform. - -### **Architecture Overview** -``` -Frontend (Vercel) ←→ Backend (Railway/Render) ←→ Database (SQLite/PostgreSQL) -``` - ---- - -## 🎯 **Step-by-Step Deployment** - -### **Part 1: Deploy Backend (Railway - Recommended)** - -#### **Option A: Railway (Recommended)** - -1. **Install Railway CLI:** - ```bash - npm install -g @railway/cli - ``` - -2. **Login to Railway:** - ```bash - railway login - ``` - -3. **Initialize Project:** - ```bash - cd backend - railway init - ``` - -4. **Add Environment Variables:** - ```bash - railway variables set GEMINI_API_KEY=your_gemini_key - railway variables set OPENAI_API_KEY=your_openai_key - railway variables set ANTHROPIC_API_KEY=your_anthropic_key - railway variables set MISTRAL_API_KEY=your_mistral_key - railway variables set TAVILY_API_KEY=your_tavily_key - railway variables set EXA_API_KEY=your_exa_key - railway variables set SERPER_API_KEY=your_serper_key - railway variables set CLERK_SECRET_KEY=your_clerk_secret - railway variables set GSC_REDIRECT_URI=https://your-frontend.vercel.app/gsc/callback - railway variables set WORDPRESS_REDIRECT_URI=https://your-frontend.vercel.app/wp/callback - railway variables set WIX_REDIRECT_URI=https://your-frontend.vercel.app/wix/callback - ``` - -5. **Deploy:** - ```bash - railway up - ``` - -6. **Get Backend URL:** - ```bash - railway domain - ``` - Copy the URL (e.g., `https://your-app.railway.app`) - -#### **Option B: Render** - -1. Go to [render.com](https://render.com) and connect your GitHub -2. Create a new "Web Service" -3. Select your repository -4. Configure: - - **Build Command:** `pip install -r requirements.txt` - - **Start Command:** `python start_alwrity_backend.py` - - **Environment:** Python 3 -5. Add all environment variables in the dashboard -6. Deploy and get your backend URL - ---- - -### **Part 2: Deploy Frontend (Vercel)** - -#### **1. Prepare Frontend for Production** - -Create a `.env.production` file in the `frontend` directory: -```env -REACT_APP_API_URL=https://your-backend-url.railway.app -REACT_APP_ENVIRONMENT=production -``` - -#### **2. Deploy to Vercel** - -1. **Connect to Vercel:** - - Go to [vercel.com](https://vercel.com) - - Click "New Project" - - Import your GitHub repository - -2. **Configure Project:** - - **Framework Preset:** Create React App - - **Root Directory:** `frontend` - - **Build Command:** `npm run build` - - **Output Directory:** `build` - -3. **Add Environment Variables:** - ``` - REACT_APP_API_URL = https://your-backend-url.railway.app - REACT_APP_ENVIRONMENT = production - ``` - -4. **Deploy:** - - Click "Deploy" - - Wait for deployment to complete - - Get your frontend URL (e.g., `https://your-app.vercel.app`) - -#### **3. Update Backend URLs** - -After getting your frontend URL, update the backend environment variables: - -```bash -# Update redirect URIs with your actual Vercel URL -railway variables set GSC_REDIRECT_URI=https://your-app.vercel.app/gsc/callback -railway variables set WORDPRESS_REDIRECT_URI=https://your-app.vercel.app/wp/callback -railway variables set WIX_REDIRECT_URI=https://your-app.vercel.app/wix/callback -``` - ---- - -## 🔧 **Alternative: Full-Stack on Vercel (Advanced)** - -If you want to deploy everything on Vercel, you can use Vercel's serverless functions: - -### **1. Create API Routes** - -Create `api/` directory in your project root: - -``` -api/ -├── auth/ -│ └── [...auth].ts -├── content/ -│ └── generate.ts -└── seo/ - └── analyze.ts -``` - -### **2. Convert FastAPI to Vercel Functions** - -This requires significant refactoring of your backend code to work with Vercel's serverless functions. - -### **3. Deploy as Monorepo** - -```bash -# Install Vercel CLI -npm i -g vercel - -# Deploy -vercel --prod -``` - ---- - -## 🛠️ **Environment Variables Checklist** - -### **Backend Environment Variables:** -```bash -# AI API Keys -GEMINI_API_KEY=your_gemini_key -OPENAI_API_KEY=your_openai_key -ANTHROPIC_API_KEY=your_anthropic_key -MISTRAL_API_KEY=your_mistral_key - -# Research APIs -TAVILY_API_KEY=your_tavily_key -EXA_API_KEY=your_exa_key -SERPER_API_KEY=your_serper_key - -# Authentication -CLERK_SECRET_KEY=your_clerk_secret - -# OAuth Redirects (update with your Vercel URL) -GSC_REDIRECT_URI=https://your-app.vercel.app/gsc/callback -WORDPRESS_REDIRECT_URI=https://your-app.vercel.app/wp/callback -WIX_REDIRECT_URI=https://your-app.vercel.app/wix/callback -``` - -### **Frontend Environment Variables:** -```bash -REACT_APP_API_URL=https://your-backend-url.railway.app -REACT_APP_ENVIRONMENT=production -``` - ---- - -## 🚀 **Post-Deployment Steps** - -### **1. Test Your Deployment** -- Visit your Vercel URL -- Complete the onboarding process -- Test content generation -- Verify OAuth integrations - -### **2. Configure Custom Domain (Optional)** -- In Vercel dashboard, go to your project -- Click "Domains" -- Add your custom domain -- Update redirect URIs with custom domain - -### **3. Monitor Performance** -- Check Vercel analytics -- Monitor Railway/Render logs -- Set up error tracking (Sentry, etc.) - ---- - -## 🔍 **Troubleshooting** - -### **Common Issues:** - -1. **CORS Errors:** - - Add your Vercel domain to backend CORS settings - - Update `allowed_origins` in FastAPI CORS middleware - -2. **Environment Variables:** - - Ensure all variables are set in both platforms - - Check variable names match exactly - -3. **OAuth Redirects:** - - Update all redirect URIs with production URLs - - Test OAuth flows end-to-end - -4. **Database Issues:** - - Consider upgrading to PostgreSQL for production - - Set up database backups - -### **Performance Optimization:** - -1. **Frontend:** - - Enable Vercel's edge caching - - Optimize bundle size - - Use CDN for static assets - -2. **Backend:** - - Implement connection pooling - - Add caching layers - - Monitor memory usage - ---- - -## 📊 **Monitoring & Maintenance** - -### **Health Checks:** -- Frontend: `https://your-app.vercel.app/health` -- Backend: `https://your-backend.railway.app/health` - -### **Logs:** -- Vercel: Built-in function logs -- Railway: `railway logs` -- Render: Dashboard logs section - -### **Scaling:** -- Vercel: Automatic scaling -- Railway: Manual scaling in dashboard -- Render: Auto-scaling available - ---- - -## 🎯 **Recommended Architecture** - -``` -┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ -│ Frontend │ │ Backend │ │ Database │ -│ (Vercel) │◄──►│ (Railway) │◄──►│ (PostgreSQL) │ -│ │ │ │ │ │ -│ • React App │ │ • FastAPI │ │ • User Data │ -│ • Static Files │ │ • AI Services │ │ • Content │ -│ • CDN Cached │ │ • OAuth APIs │ │ • Analytics │ -└─────────────────┘ └─────────────────┘ └─────────────────┘ -``` - -This setup provides: -- ✅ **Fast frontend delivery** via Vercel's global CDN -- ✅ **Scalable backend** with Railway's infrastructure -- ✅ **Reliable database** with PostgreSQL -- ✅ **Easy maintenance** with separate concerns -- ✅ **Cost-effective** scaling based on usage - ---- - -## 🚀 **Next Steps** - -1. **Deploy backend** to Railway/Render -2. **Deploy frontend** to Vercel -3. **Configure environment variables** -4. **Test all integrations** -5. **Set up monitoring** -6. **Configure custom domain** (optional) - -Your ALwrity platform will be live and accessible worldwide! 🌍 diff --git a/VERCEL_DEPLOYMENT_GUIDE.md b/VERCEL_DEPLOYMENT_GUIDE.md deleted file mode 100644 index b9ab4493..00000000 --- a/VERCEL_DEPLOYMENT_GUIDE.md +++ /dev/null @@ -1,206 +0,0 @@ -# 🚀 Vercel Frontend Deployment Guide - -## 📋 Prerequisites - -- ✅ Backend deployed on Render at: `https://alwrity.onrender.com` -- ✅ GitHub repository connected -- ✅ Vercel account created - ---- - -## 🎯 Step-by-Step Deployment - -### **1. Initial Setup** - -1. Go to [vercel.com](https://vercel.com) -2. Click "New Project" -3. Import your GitHub repository: `AJaySi/ALwrity` - -### **2. Configure Project Settings** - -#### **Framework Preset:** -- Select: **Create React App** - -#### **Root Directory:** -- Leave as: **.** (root) -- The `vercel.json` will handle the frontend directory - -#### **Build Settings:** -- **Build Command:** `cd frontend && npm install && npm run build` -- **Output Directory:** `frontend/build` -- **Install Command:** `npm install` (auto-detected) - -### **3. Environment Variables** - -Add these in Vercel dashboard under "Environment Variables": - -```bash -# Required -REACT_APP_API_URL=https://alwrity.onrender.com -REACT_APP_ENVIRONMENT=production - -# Clerk (from your Clerk dashboard) -REACT_APP_CLERK_PUBLISHABLE_KEY=pk_test_... -``` - -**Important:** -- Get your Clerk publishable key from: https://dashboard.clerk.com -- After deployment, update OAuth redirect URIs in: - - Google Search Console - - WordPress - - Wix - ---- - -## 🔧 Post-Deployment Configuration - -### **1. Update Backend CORS** - -After getting your Vercel URL (e.g., `https://alwrity.vercel.app`), update backend CORS: - -Edit `backend/app.py`: -```python -app.add_middleware( - CORSMiddleware, - allow_origins=[ - "http://localhost:3000", - "https://alwrity.vercel.app", # Add your Vercel URL - "https://your-custom-domain.com" # If using custom domain - ], - allow_credentials=True, - allow_methods=["*"], - allow_headers=["*"], -) -``` - -### **2. Update OAuth Redirect URIs** - -Update these in respective platforms: - -**Google Search Console:** -- Redirect URI: `https://alwrity.vercel.app/gsc/callback` - -**WordPress:** -- Redirect URI: `https://alwrity.vercel.app/wp/callback` - -**Wix:** -- Redirect URI: `https://alwrity.vercel.app/wix/callback` - -**Clerk:** -- Add allowed origins in Clerk dashboard - -### **3. Update Backend Environment Variables** - -On Render, update these environment variables: -```bash -GSC_REDIRECT_URI=https://alwrity.vercel.app/gsc/callback -WORDPRESS_REDIRECT_URI=https://alwrity.vercel.app/wp/callback -WIX_REDIRECT_URI=https://alwrity.vercel.app/wix/callback -``` - ---- - -## ✅ Verification Checklist - -After deployment: - -- [ ] Frontend loads at Vercel URL -- [ ] Health check works: `https://alwrity.vercel.app` -- [ ] Backend API accessible from frontend -- [ ] Clerk authentication works -- [ ] Google Search Console OAuth works -- [ ] WordPress OAuth works -- [ ] Wix OAuth works -- [ ] All routes work (React Router) - ---- - -## 🔍 Troubleshooting - -### **Issue: Blank page or 404 errors** -- Check browser console for errors -- Verify `REACT_APP_API_URL` is set correctly -- Check that `vercel.json` has proper rewrites - -### **Issue: API calls failing** -- Verify backend CORS includes Vercel URL -- Check backend is deployed and healthy -- Verify `REACT_APP_API_URL` doesn't have trailing slash - -### **Issue: OAuth redirects failing** -- Verify redirect URIs match exactly (including https://) -- Check environment variables in Vercel dashboard -- Verify Clerk allowed origins - -### **Issue: Build failures** -- Check TypeScript errors (we fixed Wix issue) -- Verify all dependencies install correctly -- Check build logs in Vercel dashboard - ---- - -## 📊 Performance Optimization - -Vercel automatically provides: -- ✅ Global CDN -- ✅ Automatic HTTPS -- ✅ Edge caching -- ✅ Gzip compression -- ✅ Brotli compression - -Additional optimizations in `vercel.json`: -- Static asset caching (1 year) -- Security headers -- SPA routing support - ---- - -## 🎨 Custom Domain (Optional) - -1. Go to your Vercel project -2. Click "Settings" → "Domains" -3. Add your custom domain -4. Update DNS records as instructed -5. Update all OAuth redirect URIs with new domain - ---- - -## 🚀 Continuous Deployment - -Vercel is now set up for automatic deployments: - -- **Push to `main`** → Deploys to production -- **Pull requests** → Creates preview deployments -- **Any branch** → Can create preview deployments - ---- - -## 📝 Quick Commands - -```bash -# Test build locally -cd frontend -npm run build -npx serve -s build - -# Check for TypeScript errors -npm run build - -# Clear node_modules if issues -rm -rf node_modules package-lock.json -npm install -``` - ---- - -## 🔗 Important URLs - -- **Vercel Dashboard:** https://vercel.com/dashboard -- **Backend (Render):** https://alwrity.onrender.com -- **Backend Health:** https://alwrity.onrender.com/health -- **Backend API Docs:** https://alwrity.onrender.com/api/docs - ---- - -Your ALwrity frontend is now ready to deploy on Vercel! 🎉 - diff --git a/backend/.onboarding_progress_user_33Gz1FPI86VDXhRY8QN4ragRFGN.json b/backend/.onboarding_progress_user_33Gz1FPI86VDXhRY8QN4ragRFGN.json index 360b671e..16ad3df1 100644 --- a/backend/.onboarding_progress_user_33Gz1FPI86VDXhRY8QN4ragRFGN.json +++ b/backend/.onboarding_progress_user_33Gz1FPI86VDXhRY8QN4ragRFGN.json @@ -195,7 +195,7 @@ "title": "AI Research", "description": "Configure AI research capabilities", "status": "completed", - "completed_at": "2025-10-06T13:13:50.365756", + "completed_at": "2025-10-08T19:44:28.242759", "data": { "corePersona": { "analysis_notes": "This persona is generated based on general best practices for professional and engaging content, as no specific website, content, audience, or brand data was provided. The details are inferred to create a functional, albeit generic, persona. For a truly precise and actionable persona, comprehensive input data across all specified categories (website analysis, content insights, audience intelligence, brand voice, technical metrics, competitive analysis, content strategy, research preferences) is essential. The current persona serves as a foundational template that would be significantly refined and customized with actual data.", @@ -711,7 +711,7 @@ "blog" ], "stepType": "research", - "completedAt": "2025-10-06T07:43:49.994Z", + "completedAt": "2025-10-08T14:14:27.895Z", "competitors": [ { "url": "https://addlly.ai/ai-writer/", @@ -721,7 +721,7 @@ "author": "Saiful Haris", "favicon": null, "image": "https://addlly.ai/wp-content/uploads/2024/09/AI-Writer.webp", - "summary": "Addlly AI Writer is a free AI text generation tool designed for businesses, marketers, and writers, offering 6 credits to create high-quality SEO content. Its target audience includes those looking to enhance their content strategy with customizable tones and styles that align with brand voice. The tool generates original content that can rank on Google if optimized correctly, making it suitable for various industries. \n\nAddlly AI emphasizes user ownership of generated content, ensuring complete rights for editing and distribution. It is safe to use, adhering to privacy protocols, and is beneficial for non-English writers by improving grammar and structure. The AI Writer can produce long-form content and stands out for its ease of use and SEO capabilities. While it can streamline content creation, it is intended to complement rather than replace human writers, leveraging AI's efficiency alongside human creativity.", + "summary": "Addlly AI Writer is a free AI text generator designed for businesses, marketers, and writers, offering 6 free credits to create high-quality SEO content. Its target audience includes those looking to enhance their content strategy with customizable tones and styles that align with brand voice. The tool generates original content that can rank on Google if optimized correctly, making it suitable for various industries. Addlly AI emphasizes user ownership of generated content, ensuring full rights for editing and distribution. While it can produce long-form content and assist non-English writers, it serves as a complement to human creativity rather than a replacement. Overall, Addlly AI Writer is positioned as a valuable resource for businesses aiming to streamline their content creation process while maintaining quality and engagement.", "highlights": [ "**Yes, Addlly AI offers a free version with 6 credits that allows users to generate high-quality SEO content at no cost. ** This is ideal for businesses, writers, and marketers wanting to test the tool before upgrading to a paid plan. Yes, AI writers can generate content in various tones and styles, from formal and professional to casual and creative.", "Many businesses and marketers are using popular AI writing tools like Addlly AI and Jasper. These tools help create content quickly and efficiently while offering customization and SEO optimization to suit various industries and needs. Yes, AI-generated content can rank on Google if it\u2019s SEO-optimized and provides value to the audience.", @@ -748,9 +748,7 @@ }, "competitive_analysis": { "threat_level": "medium", - "competitive_strengths": [ - "Comprehensive solution" - ], + "competitive_strengths": [], "competitive_weaknesses": [], "market_share_estimate": "unknown", "differentiation_opportunities": [ @@ -770,7 +768,7 @@ "brand_positioning": "unknown", "competitive_advantage": "unknown" }, - "enhanced_timestamp": "2025-10-05T09:23:45.119221" + "enhanced_timestamp": "2025-10-08T09:33:16.130245" }, { "url": "https://aiwrita.com/", @@ -780,7 +778,7 @@ "author": "", "favicon": "https://aiwrita.com/uploads/brand/CL4CgZ4lB92xQ2D696SioMnzq55qffmelB6IT1C3.png", "image": "/img/AIWrita Sharing Cover.png", - "summary": "AI Writa is a free AI copywriting assistant designed to help copywriters, marketers, and entrepreneurs generate unique content quickly and efficiently. The platform offers a variety of AI-powered writing tools and templates, enabling users to create marketing materials, documents, and media content while saving time and boosting conversions.\n\n**Business Model:** AI Writa operates on a freemium model, providing a free tier with limited features and paid plans (Starter and Premium) that offer increased capabilities, such as higher word limits, document creation, and additional features like image generation and transcriptions.\n\n**Target Audience:** The primary users include over 15,000 copywriters, marketers, and entrepreneurs who require assistance in content creation. The platform is particularly beneficial for those struggling to keep up with content demands, such as bloggers and journalists.\n\n**Content Strategy:** AI Writa emphasizes automation and efficiency in content generation, offering over 50 templates for various content types (e.g., blog posts, advertisements, FAQs). It supports multilingual content creation, catering to a global audience. The platform also features interactive chat capabilities for immediate assistance, enhancing user engagement and satisfaction.", + "summary": "AI Writa is a free AI copywriting assistant designed to help copywriters, marketers, and entrepreneurs generate unique content quickly and efficiently. With over 15,000 users, it offers tools for creating marketing materials, documents, and media content, leveraging AI to enhance productivity and engagement.\n\n**Business Model:** AI Writa operates on a freemium model, providing a free tier with limited features and paid plans (Starter and Premium) that offer more extensive capabilities, such as increased word limits, document generation, and image creation. Pricing starts at $9.99 per month for the Starter plan and $14.99 for the Premium plan, which includes unlimited features.\n\n**Target Audience:** The platform primarily targets copywriters, marketers, bloggers, and entrepreneurs who need to produce content efficiently. It caters to users who require assistance with various content types, including articles, blog posts, advertisements, and social media content.\n\n**Content Strategy:** AI Writa's content strategy focuses on providing over 50 customizable templates for different writing needs, enabling users to automate content creation. The tool supports multilingual content generation, making it accessible to a global audience. Additionally, it offers features like chat interactions for immediate assistance and transcription services for audio content, enhancing its utility for diverse content creation tasks.", "highlights": [ "Leverage our AI-powered writing tools and templates for unique, engaging marketing material and content. Save time, increase conversions, and boost sales. Artificial Intelligence is a rapidly developing field of computer science and engineering that focuses on creating intelligent machines that can think and act like humans." ], @@ -797,7 +795,7 @@ }, "content_analysis": { "content_depth": "high", - "technical_sophistication": "high", + "technical_sophistication": "medium", "content_freshness": "unknown", "engagement_potential": "medium" }, @@ -823,7 +821,7 @@ "brand_positioning": "unknown", "competitive_advantage": "unknown" }, - "enhanced_timestamp": "2025-10-05T09:23:45.119276" + "enhanced_timestamp": "2025-10-08T09:33:16.130289" }, { "url": "https://jaqnjil.ai/", @@ -833,7 +831,7 @@ "author": "", "favicon": null, "image": "https://jaqnjil.ai/imgs/Card-Dark-2.png", - "summary": "**Summary: Jaq & Jil - AI Writing Assistant**\n\nJaq & Jil is an AI-powered writing assistant designed to enhance content creation for businesses, particularly targeting marketing agencies and freelancers. With over 4,000 users, it focuses on generating high-quality, engaging content quickly, including blog posts, digital ad copy, sales copy, social media content, and more. \n\n**Business Model:** Jaq & Jil operates on a freemium model, offering 5,000 free words to new users without requiring credit card information. Users can then opt for paid plans to access additional features and bulk content generation capabilities.\n\n**Target Audience:** The primary audience includes marketing agencies, freelancers, and businesses looking to streamline their content creation processes. The platform is particularly beneficial for those facing writer's block or needing to produce content at scale while maintaining quality.\n\n**Content Strategy:** Jaq & Jil emphasizes SEO-optimized content creation, allowing users to customize outlines and generate articles efficiently. It also features an advanced text editor for refining content and offers seamless publishing options to platforms like WordPress. The tool differentiates itself from competitors like ChatGPT by simplifying the workflow and preserving brand voice, ensuring that the generated content aligns with the user's unique style.\n\nOverall, Jaq & Jil aims to revolutionize content creation, making it faster and more effective for its users.", + "summary": "**Summary: Jaq & Jil - AI Writing Assistant**\n\nJaq & Jil is an AI-powered writing assistant designed to enhance content creation for businesses, particularly targeting marketing agencies, freelancers, and brands. With over 4,000 users and 25 million AI-generated words, it offers a streamlined solution for producing high-quality content quickly and efficiently.\n\n**Business Model:** Jaq & Jil operates on a subscription-based model, providing users with a free trial of 5,000 words without requiring credit card information. The platform focuses on bulk content generation, allowing users to create various types of content, including blog posts, digital ad copy, sales copy, social media content, and more, all tailored to their specific business needs.\n\n**Target Audience:** The primary audience includes marketing agencies, freelancers, and businesses looking to improve their content marketing efforts. The tool is particularly beneficial for those facing writer's block or needing to produce large volumes of content efficiently.\n\n**Content Strategy:** Jaq & Jil emphasizes SEO-optimized content creation, enabling users to boost their blog's Google ranking effortlessly. It features customizable templates and an advanced text editor for refining content. The platform also allows for easy publishing to WordPress and sharing in multiple formats, making it a versatile tool for content strategists aiming to enhance their online presence and engagement.\n\nOverall, Jaq & Jil simplifies the content creation process, focusing on quality and efficiency while maintaining a brand's unique voice.", "highlights": [ "\u26a1\ufe0f Unleash the AI magic for lightning-fast, professional content generation. A smart writing assistant that can craft Craft high-quality content for all your marketing needs with ease. Whether it's SEO-optimized blog articles, engaging social post", "It's Jaq & Jil leverages various AI models to generate the best content including the same underlying OpenAI technology as ChatGPT, tailored to meet the unique needs of marketers across Yes, we have a powerful content editor that can help you", @@ -869,7 +867,7 @@ }, "content_insights": { "content_focus": "business", - "target_audience": "unknown", + "target_audience": "enterprise", "content_types": [], "publishing_frequency": "unknown", "content_quality": "high" @@ -880,7 +878,7 @@ "brand_positioning": "unknown", "competitive_advantage": "unknown" }, - "enhanced_timestamp": "2025-10-05T09:23:45.119336" + "enhanced_timestamp": "2025-10-08T09:33:16.130338" }, { "url": "https://www.copywriterpro.ai/", @@ -890,7 +888,7 @@ "author": "", "favicon": "https://img.sedoparking.com/templates/logos/sedo_logo.png", "image": null, - "summary": "CopywriterPro.ai is an open-source AI writing platform designed primarily for SEO and ad copy creation. Its business model revolves around offering a free tool that allows users to generate high-quality content efficiently, leveraging their own API keys without additional costs. The target audience includes marketers, content creators, and businesses looking to enhance their online presence through engaging blog posts, ad copy, and website content. \n\nThe platform emphasizes user-friendly features and seamless integration, making it accessible for both novice and experienced writers. Content strategy focuses on producing SEO-friendly material that attracts readers and converts visitors into customers. Testimonials highlight its effectiveness in saving time and improving content quality, indicating a strong user satisfaction rate. Overall, CopywriterPro aims to empower users in their content creation efforts while maintaining flexibility and control over their writing processes.", + "summary": "CopywriterPro is an open-source AI writing platform designed to assist users in creating SEO-friendly content, engaging ad copy, and effective website copy. Its business model revolves around providing a free tool that allows users to leverage their own API keys without additional costs, making it accessible for individuals and businesses alike. \n\nThe target audience includes marketers, content creators, and businesses looking to enhance their content creation process efficiently. Testimonials from users highlight the platform's ease of use, flexibility, and effective customer service, indicating a strong user satisfaction rate.\n\nIn terms of content strategy, CopywriterPro focuses on delivering high-quality, optimized content quickly, appealing to users who need to produce articles and ads rapidly. The platform emphasizes user control over content generation and seamless integration with existing APIs, catering to those who value customization and efficiency in their writing tasks.", "highlights": [ "CopywriterPro is the world\u2019s first open-source AI writing tool that helps you create great content in a snap. It\u2019s like having your very own AI writing assistant free online that\u2019s always ready to lend a helping hand. With our open-source AI writer agent, you can:", "- Write SEO-friendly blog posts that people will love to read - Create engaging ad copy that makes people want to buy your products - Write website copy that converts visitors into paying users. Join thousands of satisfied users who have transformed their content creation process with CopywriterPro.", @@ -937,7 +935,7 @@ "brand_positioning": "unknown", "competitive_advantage": "unknown" }, - "enhanced_timestamp": "2025-10-05T09:23:45.119384" + "enhanced_timestamp": "2025-10-08T09:33:16.130384" }, { "url": "https://www.blogseo.ai/", @@ -947,7 +945,7 @@ "author": "", "favicon": null, "image": "https://cdn.prod.website-files.com/6481bb338e41f40e20299ed3/64a41657fd3c8f9b27b3173a_blog-seo-cover.webp", - "summary": "**Summary: BlogSEO AI Overview**\n\nBlogSEO AI is an automated content generation tool designed to enhance SEO and drive organic traffic for businesses of all sizes. Its primary business model revolves around providing a subscription-based service that enables users to create SEO-optimized content in 31 languages, perform keyword research, and auto-publish articles seamlessly.\n\n**Target Audience:**\nThe platform targets a diverse audience, including bloggers, small to medium-sized businesses, and larger enterprises looking to improve their online presence. It is particularly beneficial for those struggling with content creation, such as individuals facing writer's block or businesses needing to scale their content output efficiently.\n\n**Content Strategy:**\nBlogSEO AI's content strategy focuses on generating personalized, high-quality articles based on real-time data and competitive analysis. Users can leverage features like keyword research, competitor insights, and AI-generated images to create engaging content. The platform also offers an auto-blogging feature, allowing users to schedule and publish posts automatically, ensuring a consistent flow of fresh content. Additionally, BlogSEO provides a managed service for those who prefer professional assistance in content creation and SEO optimization.\n\nOverall, BlogSEO AI aims to simplify the content creation process while maximizing SEO effectiveness, making it an appealing choice for businesses looking to enhance their online visibility.", + "summary": "**Summary: BlogSEO AI Overview**\n\nBlogSEO AI is an automated AI writing tool designed to enhance SEO and blogging efforts for businesses of all sizes. Its primary business model revolves around providing a comprehensive platform for generating SEO-optimized content in 31 languages, enabling users to drive organic traffic effortlessly. The service is trusted by over 80,000 users, including top brands, and offers features such as keyword research, competitor analysis, and real-time performance monitoring.\n\n**Target Audience:**\nThe platform caters to a diverse audience, including small businesses, bloggers, and larger enterprises looking to streamline their content creation and SEO strategies. It is particularly beneficial for those struggling with writer's block or seeking to automate their blogging processes.\n\n**Content Strategy:**\nBlogSEO AI employs a holistic content strategy that includes:\n- **Personalized Content Creation:** Utilizing real-time data to recommend trending topics and generate tailored articles.\n- **Auto-Publishing:** Users can schedule and automate the publishing of high-quality blog posts directly to their websites.\n- **Keyword and Competitor Research:** Tools to discover relevant keywords and analyze competitors to enhance content effectiveness.\n- **AI Image Generation and YouTube Summarization:** Additional features that allow users to create visual content and convert YouTube videos into blog posts.\n\nOverall, BlogSEO AI aims to simplify the content creation process while ensuring high-quality, SEO-driven output that can significantly boost web traffic.", "highlights": [ "BlogSEO AI lets you generate **holistic** SEO content in 31 languages that drive organic traffic. Perform **keyword research** and **auto-publish** blog articles **without sacrificing quality** or ethics. It's a new service started by the people behind BlogSEO app.", "With our managed blog service, you provide the keywords, and we do the rest\u2014creating, optimizing, and posting SEO-driven content that boosts your rankings and drives traffic to your site. # \" I struggle with writer's block often. But AI content generation tools in BlogSEO have been a godsend.", @@ -974,7 +972,9 @@ }, "competitive_analysis": { "threat_level": "medium", - "competitive_strengths": [], + "competitive_strengths": [ + "Comprehensive solution" + ], "competitive_weaknesses": [], "market_share_estimate": "unknown", "differentiation_opportunities": [ @@ -983,7 +983,7 @@ }, "content_insights": { "content_focus": "business", - "target_audience": "enterprise", + "target_audience": "startups_small_business", "content_types": [], "publishing_frequency": "unknown", "content_quality": "high" @@ -991,10 +991,10 @@ "market_positioning": { "market_tier": "enterprise", "pricing_position": "unknown", - "brand_positioning": "unknown", + "brand_positioning": "trusted_leader", "competitive_advantage": "unknown" }, - "enhanced_timestamp": "2025-10-05T09:23:45.119430" + "enhanced_timestamp": "2025-10-08T09:33:16.130417" }, { "url": "https://agilitywriter.ai/", @@ -1004,7 +1004,7 @@ "author": "A.W.", "favicon": null, "image": null, - "summary": "Agility Writer is an AI-driven SEO content creation tool designed for businesses looking to enhance their online presence through high-ranking long-form articles. Its business model operates on a per-article pricing structure, making it accessible for various users, including SEO professionals and content marketers. The platform has garnered over 5,000 users and boasts a 4.7 out of 5 rating based on customer reviews.\n\nThe target audience primarily includes SEO teams, content creators, and digital marketers who need to streamline their content production processes. Agility Writer offers a comprehensive four-step workflow: planning with AI-driven topical maps, drafting content using real-time SERP data, optimizing according to Google's guidelines, and publishing across multiple channels, including WordPress and social media.\n\nIn terms of content strategy, Agility Writer emphasizes creating SEO-friendly articles by utilizing topical maps to identify content clusters and gaps, generating drafts in various modes (like YouTube-to-Article), and refining drafts with a Smart Editor that enhances tone and readability. The tool also supports bulk content generation and integrates with platforms like Zapier for automation, making it a robust solution for scaling content efforts while ensuring alignment with SEO best practices.", + "summary": "Agility Writer is an AI-driven SEO content creation tool designed for businesses looking to enhance their online presence through high-ranking long-form articles. Its business model operates on a per-article pricing structure, making it accessible for various users, including SEO professionals and content marketers. The platform has garnered over 5,000 users and boasts a 4.7 out of 5 rating based on customer reviews.\n\nThe target audience primarily includes SEO teams, digital marketers, and content creators who require efficient content planning and optimization. Agility Writer offers a comprehensive four-step workflow: planning with AI-driven topical maps, drafting content using real-time SERP data, optimizing articles according to Google's guidelines, and publishing across multiple channels, including WordPress and social media platforms.\n\nFor content strategy, Agility Writer emphasizes creating SEO-friendly articles by utilizing topical maps to organize ideas, multiple writing modes for diverse content types, and a Smart Editor for refining drafts. The tool also integrates with platforms like Zapier for automation and provides features for auditing existing content to enhance overall website performance. This makes it a valuable resource for businesses aiming to improve their content strategy and drive organic traffic.", "highlights": [ "AgilityWriterisanAISEOwriterbuiltforlong-formcontent.ThisSEOwritingAIplanstopicalmaps,draftsfromliveSERPdata,andoptimizesentities,internallinks,andschema,soyourSEOarticlewriterworkflowisfasterandmoreaccurate. Build a [topical map](https://agilitywriter.ai/review/best-tools-for-seo-topical-map/) from your seed topics and search intent.", "Agility Writer provides powerful AI article writing tools to create factual, SEO-optimized articles for blogs, product reviews, and roundup reviews\u2014all in just a few clicks. Agility Writer specializes in creating well-crafted, highly relevant articles that pass AI detection tools.", @@ -1053,7 +1053,7 @@ "brand_positioning": "unknown", "competitive_advantage": "unknown" }, - "enhanced_timestamp": "2025-10-05T09:23:45.119483" + "enhanced_timestamp": "2025-10-08T09:33:16.130462" }, { "url": "https://aiwordfy.com/", @@ -1063,7 +1063,7 @@ "author": "", "favicon": "https://aiwordfy.com/img/brand/favicon.ico", "image": null, - "summary": "**Summary of Aiwordfy's Business Model, Target Audience, and Content Strategy**\n\nAiwordfy is an AI-driven platform designed to streamline content creation across various formats, including articles, blog posts, social media ads, and voiceovers. The business model revolves around offering a suite of AI tools that cater to diverse writing needs, allowing users to generate high-quality content quickly and efficiently. \n\n**Target Audience:** \nThe platform primarily targets content creators, marketers, businesses, and individuals seeking to enhance their writing capabilities without the need for extensive writing skills. This includes bloggers, social media managers, and professionals looking to produce engaging content rapidly.\n\n**Content Strategy:** \nAiwordfy employs a user-friendly approach, guiding users through a three-step process: selecting a writing tool, providing topic details, and generating content. The platform features over 70 templates to assist users in various writing tasks, ensuring versatility and efficiency. Additionally, Aiwordfy offers AI-generated voiceovers, image creation, and code generation, making it a comprehensive solution for content needs. The emphasis on speed and quality positions Aiwordfy as a valuable resource for anyone looking to improve their content production process.", + "summary": "**Summary of Aiwordfy: Business Model, Target Audience, and Content Strategy**\n\nAiwordfy is an AI-powered content creation platform designed to streamline the process of generating various types of content, including articles, blog posts, social media ads, and voiceovers. The business model revolves around offering a suite of AI tools that cater to diverse writing needs, allowing users to create high-quality content quickly and efficiently.\n\n**Target Audience:**\nThe platform targets a wide range of users, including marketers, content creators, businesses, and individuals seeking to enhance their writing capabilities. With over 12,577 satisfied customers, Aiwordfy appeals to those looking for user-friendly solutions to generate compelling content without the need for extensive writing skills.\n\n**Content Strategy:**\nAiwordfy employs a straightforward three-step process for content generation:\n1. **Select a Writing Tool:** Users can choose from various AI tools tailored for specific writing tasks.\n2. **Provide Details:** Users input comprehensive information about the desired content topic.\n3. **Generate Content:** The AI processes the input and produces human-like content in seconds.\n\nAdditionally, Aiwordfy offers features such as AI chatbots, image creation, voice synthesis, transcription services, and code generation, enhancing its value proposition by catering to multiple content needs. The platform emphasizes efficiency and quality, aiming to save users time while improving their writing proficiency.", "highlights": [ "Our AI Chat Bots have been extensively trained by industry and conversion experts, equipping them with the necessary knowledge to excel in their role. They are fully capable of promptly addressing your queries, providing instant answers, and delivering the requested information with utmost efficiency.", " Aiwordfy offers versatile assistance for a range of writing tasks, spanning from crafting compelling blog posts and enhancing resumes and job descriptions to composing engaging emails, social media content, and more. With a collection of over 70 templates, we not only save you valuable time but also enhance your writing proficiency", @@ -1107,12 +1107,12 @@ "content_quality": "high" }, "market_positioning": { - "market_tier": "premium", + "market_tier": "unknown", "pricing_position": "unknown", "brand_positioning": "unknown", "competitive_advantage": "unknown" }, - "enhanced_timestamp": "2025-10-05T09:23:45.119528" + "enhanced_timestamp": "2025-10-08T09:33:16.130504" }, { "url": "https://www.siuuu.ai/", @@ -1122,7 +1122,7 @@ "author": "", "favicon": "https://cdn.prod.website-files.com/6618d721789c46a73769cebb/66274ed8f408c72b1c8de260_20240423-140118.png", "image": "https://cdn.prod.website-files.com/6618d721789c46a73769cebb/6628cae73124e0ee3def1d83_Group%20427323190ai-writing-generator.png", - "summary": "Siuuu.ai is an AI writing tool designed to assist a diverse range of users, including writers, students, educators, marketers, and corporate professionals. Its business model focuses on providing intuitive writing solutions that enhance productivity and creativity across various writing tasks.\n\n**Target Audience:**\n1. **Writers:** For novelists and storytellers, it offers features like story setting, character development, and dialogue crafting.\n2. **Marketing Teams:** It helps generate engaging content for social media, email newsletters, and website copy, ensuring consistent messaging.\n3. **Students and Educators:** The tool supports essay writing, research papers, and lesson plans, facilitating effective communication of ideas.\n4. **Corporate Professionals:** It aids in creating reports, proposals, and presentations, improving clarity and productivity in corporate communications.\n\n**Content Strategy:**\nSiuuu.ai emphasizes user-friendly features such as AI story writing, research paper assistance, and content marketing tools. These features include options to expand, summarize, and polish text, making it suitable for various writing needs. The platform promotes itself with a free trial, encouraging users to experience its capabilities firsthand.", + "summary": "Siuuu.ai is an AI writing tool designed to assist a diverse range of users, including writers, marketers, students, and corporate professionals. Its business model revolves around providing intuitive writing solutions that enhance productivity and creativity across various writing tasks.\n\n### Target Audience:\n1. **Writers**: Novelists and content creators looking to overcome writer's block and develop narratives.\n2. **Marketing Teams**: Professionals needing to generate engaging content for social media, blogs, and advertisements quickly and effectively.\n3. **Students and Educators**: Individuals seeking assistance with essays, research papers, and educational materials to improve clarity and expression.\n4. **Corporate Professionals**: Employees across departments who require tools for writing reports, proposals, and internal communications.\n\n### Content Strategy:\nSiuuu.ai employs a content strategy that emphasizes versatility and user-friendliness, offering features like:\n- **AI Story Writer**: Helps create compelling stories and overcome writer's block.\n- **AI Research Paper Writer**: Aids in writing and refining academic papers.\n- **Content Marketing Writer**: Facilitates the rapid creation of SEO-friendly content tailored to specific tones and audiences.\n\nOverall, Siuuu.ai aims to streamline the writing process for its users, making it a valuable resource for anyone involved in content creation.", "highlights": [ "Writers can utilize the AI writing tool to develop intricate plots, flesh out compelling characters, and craft authentic dialogue, thus enhancing the overall narrative structure and literary quality of their works. Marketing teams can leverage the tool to generate compelling content for various channels, including social media posts, email newsletters, and website copy, ensuring consistency in messaging and driving audience engagement.", "Students and educators can benefit from the tool for writing essays, research papers, lesson plans, and educational materials, enabling them to express ideas more effectively and facilitating the learning process. Corporate professionals across departments can use the tool for writing reports, proposals, presentations, and internal communications, enhancing productivity and ensuring clarity in corporate messaging.", @@ -1135,7 +1135,7 @@ ], "relevance_score": 0.39765625, "competitive_insights": { - "business_model": "Platform", + "business_model": "Product", "target_audience": "Marketers", "value_proposition": "Writers can utilize the AI writing tool to develop intricate plots, flesh out compelling characters,...", "competitive_advantages": [], @@ -1169,7 +1169,7 @@ "brand_positioning": "unknown", "competitive_advantage": "unknown" }, - "enhanced_timestamp": "2025-10-05T09:23:45.119574" + "enhanced_timestamp": "2025-10-08T09:33:16.130546" }, { "url": "https://contentowl.ai/", @@ -1179,7 +1179,7 @@ "author": "", "favicon": null, "image": "https://contentowl.ai/landing.jpg", - "summary": "ContentOwl.ai is an AI-powered content generation platform designed to assist bloggers, marketers, and business owners in creating high-quality content efficiently. Its business model offers a free plan with limited features and two paid options (monthly and yearly) that provide more extensive capabilities, including unlimited content generation and image creation.\n\nThe target audience includes individuals and businesses looking to enhance their content strategy by overcoming writer's block, generating engaging blog posts, and optimizing SEO with alternative titles and meta descriptions. ContentOwl.ai also provides tools for creating social media posts and offers flexible export options in HTML or Markdown formats.\n\nThe platform emphasizes user control, allowing users to input specific context to tailor content to their unique style. Additionally, it offers features like topic suggestions and image generation to inspire creativity and streamline the content creation process.", + "summary": "ContentOwl.ai is an AI-driven content generation platform designed to assist bloggers, marketers, and business owners in creating high-quality content efficiently. Its business model offers a free plan with limited features and two paid options: a monthly subscription at $29 and an annual plan for $232, both providing substantial AI credits for content generation.\n\nThe target audience includes individuals and businesses looking to enhance their content strategy by overcoming writer's block, generating blog posts, social media content, and optimizing for SEO. Key features include unlimited content creation, customizable writing styles, image generation, topic suggestions, and flexible export options in HTML or Markdown formats.\n\nContentOwl.ai aims to streamline the content creation process, making it easier for users to produce engaging and shareable content while maximizing their online visibility.", "highlights": [ "Create high-quality, engaging blog posts effortlessly with ContentOwl.ai's advanced AI technology. Say goodbye to writer's block and hello to endless content possibilities. With ContentOwl.ai, the sky's the limit. Write as much as you want without worrying about word counts or character limits.", "Your content, your way. ContentOwl.ai doesn't just generate content; it sparks creativity. Get topic suggestions and title ideas to kickstart your writing journey effortlessly. ContentOwl.ai is an AI-powered content generation platform that helps streamline your content creation process.", @@ -1226,7 +1226,7 @@ "brand_positioning": "unknown", "competitive_advantage": "unknown" }, - "enhanced_timestamp": "2025-10-05T09:23:45.119615" + "enhanced_timestamp": "2025-10-08T09:33:16.130583" }, { "url": "https://texta.ai/", @@ -1236,7 +1236,7 @@ "author": "", "favicon": null, "image": "https://texta.ai/images/favicon.png", - "summary": "Texta.ai is an AI-driven platform designed to streamline content creation, particularly for blogs. Its business model revolves around offering automated writing tools that help users generate high-quality articles, optimize SEO, and enhance reader engagement. The service targets small business owners, marketers, and content creators looking to save time and improve their online presence.\n\nKey features include:\n\n1. **AI Blog Writer**: Generates SEO-optimized articles quickly, allowing users to maintain a consistent posting schedule without manual effort.\n2. **Automated Publishing**: Users can schedule and auto-publish content with a single click, ensuring fresh updates to their blogs.\n3. **Smart Linking**: The tool enhances SEO by adding internal and external links, making articles more discoverable by search engines.\n4. **Keyword Research**: Texta.ai provides keyword suggestions to help users rank higher in search results, simplifying the content strategy process.\n5. **Integration**: The platform seamlessly integrates with popular website builders like WordPress, Shopify, and Wix, making it accessible for a wide range of users.\n\nOverall, Texta.ai positions itself as a comprehensive solution for businesses looking to automate their content strategy while improving web traffic and engagement.", + "summary": "Texta.ai is an AI-powered blog writing tool designed to streamline content creation for businesses. Its primary business model revolves around offering automated blog writing, email generation, and writing assistance, making it ideal for small business owners, marketers, and content creators looking to enhance their online presence.\n\n**Target Audience:** The platform caters to a diverse audience, including small business owners, marketers, and website managers who require high-quality, SEO-optimized content without the time investment typically associated with writing. Users benefit from features like automated publishing, keyword research, and smart linking, which help improve SEO rankings and reader engagement.\n\n**Content Strategy:** Texta.ai's content strategy focuses on providing users with tools to generate and publish articles effortlessly. Key features include:\n- **Automated Blog Generation:** Users can create high-quality articles quickly and schedule them for automatic posting.\n- **SEO Optimization:** The AI recommends popular keywords and integrates smart internal and external linking to enhance search engine visibility.\n- **Multimedia Integration:** The platform can add relevant images and videos to blog posts, enriching the content and improving user engagement.\n\nOverall, Texta.ai positions itself as a comprehensive solution for businesses looking to automate their content creation process while maintaining quality and SEO effectiveness.", "highlights": [ "[Blog Automation](https://texta.ai/ai-blog-writer-generator-case) [Email/Letter Writer](https://texta.ai/ai-email-writer-generator-case) [Writing Assistant](https://texta.ai/ai-writing-assistant-case) [Pricing](https://texta.ai/pricing-page) [Log In](https://app.texta.ai/login) [Try for Free](https://app.texta.ai/) \u201cTexta.ai is revolutionizing the way people create content. Its AI Blog Writer tool is", "Lightning - fast, enabling users to write high-quality articles and auto-publish directly to the blog.\u201d Prepare yourself for a game-changer. AI Blog writer enables you to schedule, generate and publish articles automatically, effectively running your blog on auto-pilot.", @@ -1285,7 +1285,7 @@ "brand_positioning": "unknown", "competitive_advantage": "unknown" }, - "enhanced_timestamp": "2025-10-05T09:23:45.119665" + "enhanced_timestamp": "2025-10-08T09:33:16.130636" } ], "researchSummary": { @@ -1306,21 +1306,21 @@ "sitemap_url": "https://www.alwrity.com/sitemap.xml", "analysis_data": { "sitemap_url": "https://www.alwrity.com/sitemap.xml", - "analysis_date": "2025-10-05T09:24:22.348160", - "total_urls": 394, + "analysis_date": "2025-10-08T09:33:34.365804", + "total_urls": 397, "structure_analysis": { - "total_urls": 394, + "total_urls": 397, "url_patterns": { - "post": 281, - "resources-ai-writer": 60, - "ai-product-description-writer": 1, - "ai-youtube-script-writer": 1, - "ai-app-copywriting-formula-generator": 1, - "ai-business-plan-generator-tool": 1, + "post": 283, + "resources-ai-writer": 61, + "ai-paragraph-rewriter-free-tool": 1, + "ai-acca-copywriting-formula-generator": 1, + "ai-youtube-title-generator": 1, + "ai-google-ads-generator": 1, "ai-quora-answer-generator-free-tool": 1, - "ai-blog-title-generator": 1, - "ai-tweet-generator": 1, - "ai-youyube-channel-name-generator-tool": 1 + "ai-paraphrasing-tool": 1, + "ai-social-media-tools": 1, + "privacy-policy": 1 }, "file_types": {}, "average_path_depth": 2.01, @@ -1330,8 +1330,8 @@ "content_trends": { "date_range": { "earliest": "2024-04-26T00:00:00", - "latest": "2025-10-04T00:00:00", - "span_days": 526 + "latest": "2025-10-08T00:00:00", + "span_days": 530 }, "monthly_distribution": { "2024-06": 1, @@ -1344,15 +1344,15 @@ "2025-05": 3, "2025-07": 10, "2025-08": 264, - "2025-09": 16, - "2025-10": 60 + "2025-09": 15, + "2025-10": 64 }, "yearly_distribution": { "2024": 25, - "2025": 369 + "2025": 372 }, "publishing_velocity": 0.749, - "total_dated_urls": 394, + "total_dated_urls": 397, "trends": [ "Decreasing publishing frequency", "Irregular publishing pattern" @@ -1367,22 +1367,26 @@ ] }, "ai_insights": { - "summary": "**3. Publishing Pattern Analysis (Content Frequency and Consistency)**", + "summary": "**3. Publishing Pattern Analysis**", "content_strategy": [], "seo_opportunities": [ - "Technical SEO Opportunities (Sitemap Optimization Suggestions)**" + "Technical SEO Opportunities**" ], "technical_recommendations": [ - "Business Impact of Technical SEO:**" + "Business Impact:** Technical SEO improvements will:", + "Improve website crawlability and indexability.", + "Enhance user experience.", + "Increase search engine rankings.", + "Drive more organic traffic." ], "growth_recommendations": [ - "Growth Recommendations (Specific Actions for Content Expansion)**" + "Growth Recommendations**" ] }, "seo_recommendations": [], - "execution_time": 19.686748, + "execution_time": 16.707454, "onboarding_insights": { - "competitive_positioning": "By implementing these recommendations, alwrity.com can improve its competitive positioning, attract more organic traffic, and establish itself as a leader in the AI-powered writing niche.", + "competitive_positioning": "**1. COMPETITIVE POSITIONING** * **Content Structure Comparison:** Alwrity.com heavily emphasizes blog posts (283 URLs) with a supporting structure of tools and resources. This is a common strategy, however, the focus on tools is much less than the blog posts. * **Industry Standard Alignment:** The site aligns with industry standards by using blog content as a primary driver for SEO and traffic acquisition. The presence of AI-powered tools is also in line with current market trends. * **Differentiation:** Alwrity differentiates itself with a high volume of blog content, which may indicate a focus on broad keyword targeting. However, the limited number of tools may represent an area for growth to match competitors.", "content_gaps": [], "growth_opportunities": [], "industry_benchmarks": [], @@ -1404,18 +1408,18 @@ ] }, "onboarding_insights": { - "competitive_positioning": "By implementing these recommendations, alwrity.com can improve its competitive positioning, attract more organic traffic, and establish itself as a leader in the AI-powered writing niche.", + "competitive_positioning": "**1. COMPETITIVE POSITIONING** * **Content Structure Comparison:** Alwrity.com heavily emphasizes blog posts (283 URLs) with a supporting structure of tools and resources. This is a common strategy, however, the focus on tools is much less than the blog posts. * **Industry Standard Alignment:** The site aligns with industry standards by using blog content as a primary driver for SEO and traffic acquisition. The presence of AI-powered tools is also in line with current market trends. * **Differentiation:** Alwrity differentiates itself with a high volume of blog content, which may indicate a focus on broad keyword targeting. However, the limited number of tools may represent an area for growth to match competitors.", "content_gaps": [], "growth_opportunities": [], "industry_benchmarks": [], "strategic_recommendations": [] }, - "analysis_timestamp": "2025-10-05T09:24:34.417558", + "analysis_timestamp": "2025-10-08T09:33:43.030712", "discovery_method": "intelligent_search", "error": null }, "userUrl": "", - "analysisTimestamp": "2025-10-06T07:43:48.750Z" + "analysisTimestamp": "2025-10-08T14:14:18.241Z" }, "validation_errors": [] }, @@ -1424,7 +1428,7 @@ "title": "Personalization", "description": "Set up personalization features", "status": "completed", - "completed_at": "2025-10-08T10:11:26.328940", + "completed_at": "2025-10-09T13:05:12.886271", "data": { "corePersona": { "analysis_notes": "This persona is generated based on general best practices for professional and engaging content, as no specific website, content, audience, or brand data was provided. The details are inferred to create a functional, albeit generic, persona. For a truly precise and actionable persona, comprehensive input data across all specified categories (website analysis, content insights, audience intelligence, brand voice, technical metrics, competitive analysis, content strategy, research preferences) is essential. The current persona serves as a foundational template that would be significantly refined and customized with actual data.", @@ -1940,7 +1944,7 @@ "blog" ], "stepType": "research", - "completedAt": "2025-10-06T07:43:49.994Z", + "completedAt": "2025-10-08T14:14:27.895Z", "competitors": [ { "url": "https://addlly.ai/ai-writer/", @@ -1950,7 +1954,7 @@ "author": "Saiful Haris", "favicon": null, "image": "https://addlly.ai/wp-content/uploads/2024/09/AI-Writer.webp", - "summary": "Addlly AI Writer is a free AI text generation tool designed for businesses, marketers, and writers, offering 6 credits to create high-quality SEO content. Its target audience includes those looking to enhance their content strategy with customizable tones and styles that align with brand voice. The tool generates original content that can rank on Google if optimized correctly, making it suitable for various industries. \n\nAddlly AI emphasizes user ownership of generated content, ensuring complete rights for editing and distribution. It is safe to use, adhering to privacy protocols, and is beneficial for non-English writers by improving grammar and structure. The AI Writer can produce long-form content and stands out for its ease of use and SEO capabilities. While it can streamline content creation, it is intended to complement rather than replace human writers, leveraging AI's efficiency alongside human creativity.", + "summary": "Addlly AI Writer is a free AI text generator designed for businesses, marketers, and writers, offering 6 free credits to create high-quality SEO content. Its target audience includes those looking to enhance their content strategy with customizable tones and styles that align with brand voice. The tool generates original content that can rank on Google if optimized correctly, making it suitable for various industries. Addlly AI emphasizes user ownership of generated content, ensuring full rights for editing and distribution. While it can produce long-form content and assist non-English writers, it serves as a complement to human creativity rather than a replacement. Overall, Addlly AI Writer is positioned as a valuable resource for businesses aiming to streamline their content creation process while maintaining quality and engagement.", "highlights": [ "**Yes, Addlly AI offers a free version with 6 credits that allows users to generate high-quality SEO content at no cost. ** This is ideal for businesses, writers, and marketers wanting to test the tool before upgrading to a paid plan. Yes, AI writers can generate content in various tones and styles, from formal and professional to casual and creative.", "Many businesses and marketers are using popular AI writing tools like Addlly AI and Jasper. These tools help create content quickly and efficiently while offering customization and SEO optimization to suit various industries and needs. Yes, AI-generated content can rank on Google if it\u2019s SEO-optimized and provides value to the audience.", @@ -1977,9 +1981,7 @@ }, "competitive_analysis": { "threat_level": "medium", - "competitive_strengths": [ - "Comprehensive solution" - ], + "competitive_strengths": [], "competitive_weaknesses": [], "market_share_estimate": "unknown", "differentiation_opportunities": [ @@ -1999,7 +2001,7 @@ "brand_positioning": "unknown", "competitive_advantage": "unknown" }, - "enhanced_timestamp": "2025-10-05T09:23:45.119221" + "enhanced_timestamp": "2025-10-08T09:33:16.130245" }, { "url": "https://aiwrita.com/", @@ -2009,7 +2011,7 @@ "author": "", "favicon": "https://aiwrita.com/uploads/brand/CL4CgZ4lB92xQ2D696SioMnzq55qffmelB6IT1C3.png", "image": "/img/AIWrita Sharing Cover.png", - "summary": "AI Writa is a free AI copywriting assistant designed to help copywriters, marketers, and entrepreneurs generate unique content quickly and efficiently. The platform offers a variety of AI-powered writing tools and templates, enabling users to create marketing materials, documents, and media content while saving time and boosting conversions.\n\n**Business Model:** AI Writa operates on a freemium model, providing a free tier with limited features and paid plans (Starter and Premium) that offer increased capabilities, such as higher word limits, document creation, and additional features like image generation and transcriptions.\n\n**Target Audience:** The primary users include over 15,000 copywriters, marketers, and entrepreneurs who require assistance in content creation. The platform is particularly beneficial for those struggling to keep up with content demands, such as bloggers and journalists.\n\n**Content Strategy:** AI Writa emphasizes automation and efficiency in content generation, offering over 50 templates for various content types (e.g., blog posts, advertisements, FAQs). It supports multilingual content creation, catering to a global audience. The platform also features interactive chat capabilities for immediate assistance, enhancing user engagement and satisfaction.", + "summary": "AI Writa is a free AI copywriting assistant designed to help copywriters, marketers, and entrepreneurs generate unique content quickly and efficiently. With over 15,000 users, it offers tools for creating marketing materials, documents, and media content, leveraging AI to enhance productivity and engagement.\n\n**Business Model:** AI Writa operates on a freemium model, providing a free tier with limited features and paid plans (Starter and Premium) that offer more extensive capabilities, such as increased word limits, document generation, and image creation. Pricing starts at $9.99 per month for the Starter plan and $14.99 for the Premium plan, which includes unlimited features.\n\n**Target Audience:** The platform primarily targets copywriters, marketers, bloggers, and entrepreneurs who need to produce content efficiently. It caters to users who require assistance with various content types, including articles, blog posts, advertisements, and social media content.\n\n**Content Strategy:** AI Writa's content strategy focuses on providing over 50 customizable templates for different writing needs, enabling users to automate content creation. The tool supports multilingual content generation, making it accessible to a global audience. Additionally, it offers features like chat interactions for immediate assistance and transcription services for audio content, enhancing its utility for diverse content creation tasks.", "highlights": [ "Leverage our AI-powered writing tools and templates for unique, engaging marketing material and content. Save time, increase conversions, and boost sales. Artificial Intelligence is a rapidly developing field of computer science and engineering that focuses on creating intelligent machines that can think and act like humans." ], @@ -2026,7 +2028,7 @@ }, "content_analysis": { "content_depth": "high", - "technical_sophistication": "high", + "technical_sophistication": "medium", "content_freshness": "unknown", "engagement_potential": "medium" }, @@ -2052,7 +2054,7 @@ "brand_positioning": "unknown", "competitive_advantage": "unknown" }, - "enhanced_timestamp": "2025-10-05T09:23:45.119276" + "enhanced_timestamp": "2025-10-08T09:33:16.130289" }, { "url": "https://jaqnjil.ai/", @@ -2062,7 +2064,7 @@ "author": "", "favicon": null, "image": "https://jaqnjil.ai/imgs/Card-Dark-2.png", - "summary": "**Summary: Jaq & Jil - AI Writing Assistant**\n\nJaq & Jil is an AI-powered writing assistant designed to enhance content creation for businesses, particularly targeting marketing agencies and freelancers. With over 4,000 users, it focuses on generating high-quality, engaging content quickly, including blog posts, digital ad copy, sales copy, social media content, and more. \n\n**Business Model:** Jaq & Jil operates on a freemium model, offering 5,000 free words to new users without requiring credit card information. Users can then opt for paid plans to access additional features and bulk content generation capabilities.\n\n**Target Audience:** The primary audience includes marketing agencies, freelancers, and businesses looking to streamline their content creation processes. The platform is particularly beneficial for those facing writer's block or needing to produce content at scale while maintaining quality.\n\n**Content Strategy:** Jaq & Jil emphasizes SEO-optimized content creation, allowing users to customize outlines and generate articles efficiently. It also features an advanced text editor for refining content and offers seamless publishing options to platforms like WordPress. The tool differentiates itself from competitors like ChatGPT by simplifying the workflow and preserving brand voice, ensuring that the generated content aligns with the user's unique style.\n\nOverall, Jaq & Jil aims to revolutionize content creation, making it faster and more effective for its users.", + "summary": "**Summary: Jaq & Jil - AI Writing Assistant**\n\nJaq & Jil is an AI-powered writing assistant designed to enhance content creation for businesses, particularly targeting marketing agencies, freelancers, and brands. With over 4,000 users and 25 million AI-generated words, it offers a streamlined solution for producing high-quality content quickly and efficiently.\n\n**Business Model:** Jaq & Jil operates on a subscription-based model, providing users with a free trial of 5,000 words without requiring credit card information. The platform focuses on bulk content generation, allowing users to create various types of content, including blog posts, digital ad copy, sales copy, social media content, and more, all tailored to their specific business needs.\n\n**Target Audience:** The primary audience includes marketing agencies, freelancers, and businesses looking to improve their content marketing efforts. The tool is particularly beneficial for those facing writer's block or needing to produce large volumes of content efficiently.\n\n**Content Strategy:** Jaq & Jil emphasizes SEO-optimized content creation, enabling users to boost their blog's Google ranking effortlessly. It features customizable templates and an advanced text editor for refining content. The platform also allows for easy publishing to WordPress and sharing in multiple formats, making it a versatile tool for content strategists aiming to enhance their online presence and engagement.\n\nOverall, Jaq & Jil simplifies the content creation process, focusing on quality and efficiency while maintaining a brand's unique voice.", "highlights": [ "\u26a1\ufe0f Unleash the AI magic for lightning-fast, professional content generation. A smart writing assistant that can craft Craft high-quality content for all your marketing needs with ease. Whether it's SEO-optimized blog articles, engaging social post", "It's Jaq & Jil leverages various AI models to generate the best content including the same underlying OpenAI technology as ChatGPT, tailored to meet the unique needs of marketers across Yes, we have a powerful content editor that can help you", @@ -2098,7 +2100,7 @@ }, "content_insights": { "content_focus": "business", - "target_audience": "unknown", + "target_audience": "enterprise", "content_types": [], "publishing_frequency": "unknown", "content_quality": "high" @@ -2109,7 +2111,7 @@ "brand_positioning": "unknown", "competitive_advantage": "unknown" }, - "enhanced_timestamp": "2025-10-05T09:23:45.119336" + "enhanced_timestamp": "2025-10-08T09:33:16.130338" }, { "url": "https://www.copywriterpro.ai/", @@ -2119,7 +2121,7 @@ "author": "", "favicon": "https://img.sedoparking.com/templates/logos/sedo_logo.png", "image": null, - "summary": "CopywriterPro.ai is an open-source AI writing platform designed primarily for SEO and ad copy creation. Its business model revolves around offering a free tool that allows users to generate high-quality content efficiently, leveraging their own API keys without additional costs. The target audience includes marketers, content creators, and businesses looking to enhance their online presence through engaging blog posts, ad copy, and website content. \n\nThe platform emphasizes user-friendly features and seamless integration, making it accessible for both novice and experienced writers. Content strategy focuses on producing SEO-friendly material that attracts readers and converts visitors into customers. Testimonials highlight its effectiveness in saving time and improving content quality, indicating a strong user satisfaction rate. Overall, CopywriterPro aims to empower users in their content creation efforts while maintaining flexibility and control over their writing processes.", + "summary": "CopywriterPro is an open-source AI writing platform designed to assist users in creating SEO-friendly content, engaging ad copy, and effective website copy. Its business model revolves around providing a free tool that allows users to leverage their own API keys without additional costs, making it accessible for individuals and businesses alike. \n\nThe target audience includes marketers, content creators, and businesses looking to enhance their content creation process efficiently. Testimonials from users highlight the platform's ease of use, flexibility, and effective customer service, indicating a strong user satisfaction rate.\n\nIn terms of content strategy, CopywriterPro focuses on delivering high-quality, optimized content quickly, appealing to users who need to produce articles and ads rapidly. The platform emphasizes user control over content generation and seamless integration with existing APIs, catering to those who value customization and efficiency in their writing tasks.", "highlights": [ "CopywriterPro is the world\u2019s first open-source AI writing tool that helps you create great content in a snap. It\u2019s like having your very own AI writing assistant free online that\u2019s always ready to lend a helping hand. With our open-source AI writer agent, you can:", "- Write SEO-friendly blog posts that people will love to read - Create engaging ad copy that makes people want to buy your products - Write website copy that converts visitors into paying users. Join thousands of satisfied users who have transformed their content creation process with CopywriterPro.", @@ -2166,7 +2168,7 @@ "brand_positioning": "unknown", "competitive_advantage": "unknown" }, - "enhanced_timestamp": "2025-10-05T09:23:45.119384" + "enhanced_timestamp": "2025-10-08T09:33:16.130384" }, { "url": "https://www.blogseo.ai/", @@ -2176,7 +2178,7 @@ "author": "", "favicon": null, "image": "https://cdn.prod.website-files.com/6481bb338e41f40e20299ed3/64a41657fd3c8f9b27b3173a_blog-seo-cover.webp", - "summary": "**Summary: BlogSEO AI Overview**\n\nBlogSEO AI is an automated content generation tool designed to enhance SEO and drive organic traffic for businesses of all sizes. Its primary business model revolves around providing a subscription-based service that enables users to create SEO-optimized content in 31 languages, perform keyword research, and auto-publish articles seamlessly.\n\n**Target Audience:**\nThe platform targets a diverse audience, including bloggers, small to medium-sized businesses, and larger enterprises looking to improve their online presence. It is particularly beneficial for those struggling with content creation, such as individuals facing writer's block or businesses needing to scale their content output efficiently.\n\n**Content Strategy:**\nBlogSEO AI's content strategy focuses on generating personalized, high-quality articles based on real-time data and competitive analysis. Users can leverage features like keyword research, competitor insights, and AI-generated images to create engaging content. The platform also offers an auto-blogging feature, allowing users to schedule and publish posts automatically, ensuring a consistent flow of fresh content. Additionally, BlogSEO provides a managed service for those who prefer professional assistance in content creation and SEO optimization.\n\nOverall, BlogSEO AI aims to simplify the content creation process while maximizing SEO effectiveness, making it an appealing choice for businesses looking to enhance their online visibility.", + "summary": "**Summary: BlogSEO AI Overview**\n\nBlogSEO AI is an automated AI writing tool designed to enhance SEO and blogging efforts for businesses of all sizes. Its primary business model revolves around providing a comprehensive platform for generating SEO-optimized content in 31 languages, enabling users to drive organic traffic effortlessly. The service is trusted by over 80,000 users, including top brands, and offers features such as keyword research, competitor analysis, and real-time performance monitoring.\n\n**Target Audience:**\nThe platform caters to a diverse audience, including small businesses, bloggers, and larger enterprises looking to streamline their content creation and SEO strategies. It is particularly beneficial for those struggling with writer's block or seeking to automate their blogging processes.\n\n**Content Strategy:**\nBlogSEO AI employs a holistic content strategy that includes:\n- **Personalized Content Creation:** Utilizing real-time data to recommend trending topics and generate tailored articles.\n- **Auto-Publishing:** Users can schedule and automate the publishing of high-quality blog posts directly to their websites.\n- **Keyword and Competitor Research:** Tools to discover relevant keywords and analyze competitors to enhance content effectiveness.\n- **AI Image Generation and YouTube Summarization:** Additional features that allow users to create visual content and convert YouTube videos into blog posts.\n\nOverall, BlogSEO AI aims to simplify the content creation process while ensuring high-quality, SEO-driven output that can significantly boost web traffic.", "highlights": [ "BlogSEO AI lets you generate **holistic** SEO content in 31 languages that drive organic traffic. Perform **keyword research** and **auto-publish** blog articles **without sacrificing quality** or ethics. It's a new service started by the people behind BlogSEO app.", "With our managed blog service, you provide the keywords, and we do the rest\u2014creating, optimizing, and posting SEO-driven content that boosts your rankings and drives traffic to your site. # \" I struggle with writer's block often. But AI content generation tools in BlogSEO have been a godsend.", @@ -2203,7 +2205,9 @@ }, "competitive_analysis": { "threat_level": "medium", - "competitive_strengths": [], + "competitive_strengths": [ + "Comprehensive solution" + ], "competitive_weaknesses": [], "market_share_estimate": "unknown", "differentiation_opportunities": [ @@ -2212,7 +2216,7 @@ }, "content_insights": { "content_focus": "business", - "target_audience": "enterprise", + "target_audience": "startups_small_business", "content_types": [], "publishing_frequency": "unknown", "content_quality": "high" @@ -2220,10 +2224,10 @@ "market_positioning": { "market_tier": "enterprise", "pricing_position": "unknown", - "brand_positioning": "unknown", + "brand_positioning": "trusted_leader", "competitive_advantage": "unknown" }, - "enhanced_timestamp": "2025-10-05T09:23:45.119430" + "enhanced_timestamp": "2025-10-08T09:33:16.130417" }, { "url": "https://agilitywriter.ai/", @@ -2233,7 +2237,7 @@ "author": "A.W.", "favicon": null, "image": null, - "summary": "Agility Writer is an AI-driven SEO content creation tool designed for businesses looking to enhance their online presence through high-ranking long-form articles. Its business model operates on a per-article pricing structure, making it accessible for various users, including SEO professionals and content marketers. The platform has garnered over 5,000 users and boasts a 4.7 out of 5 rating based on customer reviews.\n\nThe target audience primarily includes SEO teams, content creators, and digital marketers who need to streamline their content production processes. Agility Writer offers a comprehensive four-step workflow: planning with AI-driven topical maps, drafting content using real-time SERP data, optimizing according to Google's guidelines, and publishing across multiple channels, including WordPress and social media.\n\nIn terms of content strategy, Agility Writer emphasizes creating SEO-friendly articles by utilizing topical maps to identify content clusters and gaps, generating drafts in various modes (like YouTube-to-Article), and refining drafts with a Smart Editor that enhances tone and readability. The tool also supports bulk content generation and integrates with platforms like Zapier for automation, making it a robust solution for scaling content efforts while ensuring alignment with SEO best practices.", + "summary": "Agility Writer is an AI-driven SEO content creation tool designed for businesses looking to enhance their online presence through high-ranking long-form articles. Its business model operates on a per-article pricing structure, making it accessible for various users, including SEO professionals and content marketers. The platform has garnered over 5,000 users and boasts a 4.7 out of 5 rating based on customer reviews.\n\nThe target audience primarily includes SEO teams, digital marketers, and content creators who require efficient content planning and optimization. Agility Writer offers a comprehensive four-step workflow: planning with AI-driven topical maps, drafting content using real-time SERP data, optimizing articles according to Google's guidelines, and publishing across multiple channels, including WordPress and social media platforms.\n\nFor content strategy, Agility Writer emphasizes creating SEO-friendly articles by utilizing topical maps to organize ideas, multiple writing modes for diverse content types, and a Smart Editor for refining drafts. The tool also integrates with platforms like Zapier for automation and provides features for auditing existing content to enhance overall website performance. This makes it a valuable resource for businesses aiming to improve their content strategy and drive organic traffic.", "highlights": [ "AgilityWriterisanAISEOwriterbuiltforlong-formcontent.ThisSEOwritingAIplanstopicalmaps,draftsfromliveSERPdata,andoptimizesentities,internallinks,andschema,soyourSEOarticlewriterworkflowisfasterandmoreaccurate. Build a [topical map](https://agilitywriter.ai/review/best-tools-for-seo-topical-map/) from your seed topics and search intent.", "Agility Writer provides powerful AI article writing tools to create factual, SEO-optimized articles for blogs, product reviews, and roundup reviews\u2014all in just a few clicks. Agility Writer specializes in creating well-crafted, highly relevant articles that pass AI detection tools.", @@ -2282,7 +2286,7 @@ "brand_positioning": "unknown", "competitive_advantage": "unknown" }, - "enhanced_timestamp": "2025-10-05T09:23:45.119483" + "enhanced_timestamp": "2025-10-08T09:33:16.130462" }, { "url": "https://aiwordfy.com/", @@ -2292,7 +2296,7 @@ "author": "", "favicon": "https://aiwordfy.com/img/brand/favicon.ico", "image": null, - "summary": "**Summary of Aiwordfy's Business Model, Target Audience, and Content Strategy**\n\nAiwordfy is an AI-driven platform designed to streamline content creation across various formats, including articles, blog posts, social media ads, and voiceovers. The business model revolves around offering a suite of AI tools that cater to diverse writing needs, allowing users to generate high-quality content quickly and efficiently. \n\n**Target Audience:** \nThe platform primarily targets content creators, marketers, businesses, and individuals seeking to enhance their writing capabilities without the need for extensive writing skills. This includes bloggers, social media managers, and professionals looking to produce engaging content rapidly.\n\n**Content Strategy:** \nAiwordfy employs a user-friendly approach, guiding users through a three-step process: selecting a writing tool, providing topic details, and generating content. The platform features over 70 templates to assist users in various writing tasks, ensuring versatility and efficiency. Additionally, Aiwordfy offers AI-generated voiceovers, image creation, and code generation, making it a comprehensive solution for content needs. The emphasis on speed and quality positions Aiwordfy as a valuable resource for anyone looking to improve their content production process.", + "summary": "**Summary of Aiwordfy: Business Model, Target Audience, and Content Strategy**\n\nAiwordfy is an AI-powered content creation platform designed to streamline the process of generating various types of content, including articles, blog posts, social media ads, and voiceovers. The business model revolves around offering a suite of AI tools that cater to diverse writing needs, allowing users to create high-quality content quickly and efficiently.\n\n**Target Audience:**\nThe platform targets a wide range of users, including marketers, content creators, businesses, and individuals seeking to enhance their writing capabilities. With over 12,577 satisfied customers, Aiwordfy appeals to those looking for user-friendly solutions to generate compelling content without the need for extensive writing skills.\n\n**Content Strategy:**\nAiwordfy employs a straightforward three-step process for content generation:\n1. **Select a Writing Tool:** Users can choose from various AI tools tailored for specific writing tasks.\n2. **Provide Details:** Users input comprehensive information about the desired content topic.\n3. **Generate Content:** The AI processes the input and produces human-like content in seconds.\n\nAdditionally, Aiwordfy offers features such as AI chatbots, image creation, voice synthesis, transcription services, and code generation, enhancing its value proposition by catering to multiple content needs. The platform emphasizes efficiency and quality, aiming to save users time while improving their writing proficiency.", "highlights": [ "Our AI Chat Bots have been extensively trained by industry and conversion experts, equipping them with the necessary knowledge to excel in their role. They are fully capable of promptly addressing your queries, providing instant answers, and delivering the requested information with utmost efficiency.", " Aiwordfy offers versatile assistance for a range of writing tasks, spanning from crafting compelling blog posts and enhancing resumes and job descriptions to composing engaging emails, social media content, and more. With a collection of over 70 templates, we not only save you valuable time but also enhance your writing proficiency", @@ -2336,12 +2340,12 @@ "content_quality": "high" }, "market_positioning": { - "market_tier": "premium", + "market_tier": "unknown", "pricing_position": "unknown", "brand_positioning": "unknown", "competitive_advantage": "unknown" }, - "enhanced_timestamp": "2025-10-05T09:23:45.119528" + "enhanced_timestamp": "2025-10-08T09:33:16.130504" }, { "url": "https://www.siuuu.ai/", @@ -2351,7 +2355,7 @@ "author": "", "favicon": "https://cdn.prod.website-files.com/6618d721789c46a73769cebb/66274ed8f408c72b1c8de260_20240423-140118.png", "image": "https://cdn.prod.website-files.com/6618d721789c46a73769cebb/6628cae73124e0ee3def1d83_Group%20427323190ai-writing-generator.png", - "summary": "Siuuu.ai is an AI writing tool designed to assist a diverse range of users, including writers, students, educators, marketers, and corporate professionals. Its business model focuses on providing intuitive writing solutions that enhance productivity and creativity across various writing tasks.\n\n**Target Audience:**\n1. **Writers:** For novelists and storytellers, it offers features like story setting, character development, and dialogue crafting.\n2. **Marketing Teams:** It helps generate engaging content for social media, email newsletters, and website copy, ensuring consistent messaging.\n3. **Students and Educators:** The tool supports essay writing, research papers, and lesson plans, facilitating effective communication of ideas.\n4. **Corporate Professionals:** It aids in creating reports, proposals, and presentations, improving clarity and productivity in corporate communications.\n\n**Content Strategy:**\nSiuuu.ai emphasizes user-friendly features such as AI story writing, research paper assistance, and content marketing tools. These features include options to expand, summarize, and polish text, making it suitable for various writing needs. The platform promotes itself with a free trial, encouraging users to experience its capabilities firsthand.", + "summary": "Siuuu.ai is an AI writing tool designed to assist a diverse range of users, including writers, marketers, students, and corporate professionals. Its business model revolves around providing intuitive writing solutions that enhance productivity and creativity across various writing tasks.\n\n### Target Audience:\n1. **Writers**: Novelists and content creators looking to overcome writer's block and develop narratives.\n2. **Marketing Teams**: Professionals needing to generate engaging content for social media, blogs, and advertisements quickly and effectively.\n3. **Students and Educators**: Individuals seeking assistance with essays, research papers, and educational materials to improve clarity and expression.\n4. **Corporate Professionals**: Employees across departments who require tools for writing reports, proposals, and internal communications.\n\n### Content Strategy:\nSiuuu.ai employs a content strategy that emphasizes versatility and user-friendliness, offering features like:\n- **AI Story Writer**: Helps create compelling stories and overcome writer's block.\n- **AI Research Paper Writer**: Aids in writing and refining academic papers.\n- **Content Marketing Writer**: Facilitates the rapid creation of SEO-friendly content tailored to specific tones and audiences.\n\nOverall, Siuuu.ai aims to streamline the writing process for its users, making it a valuable resource for anyone involved in content creation.", "highlights": [ "Writers can utilize the AI writing tool to develop intricate plots, flesh out compelling characters, and craft authentic dialogue, thus enhancing the overall narrative structure and literary quality of their works. Marketing teams can leverage the tool to generate compelling content for various channels, including social media posts, email newsletters, and website copy, ensuring consistency in messaging and driving audience engagement.", "Students and educators can benefit from the tool for writing essays, research papers, lesson plans, and educational materials, enabling them to express ideas more effectively and facilitating the learning process. Corporate professionals across departments can use the tool for writing reports, proposals, presentations, and internal communications, enhancing productivity and ensuring clarity in corporate messaging.", @@ -2364,7 +2368,7 @@ ], "relevance_score": 0.39765625, "competitive_insights": { - "business_model": "Platform", + "business_model": "Product", "target_audience": "Marketers", "value_proposition": "Writers can utilize the AI writing tool to develop intricate plots, flesh out compelling characters,...", "competitive_advantages": [], @@ -2398,7 +2402,7 @@ "brand_positioning": "unknown", "competitive_advantage": "unknown" }, - "enhanced_timestamp": "2025-10-05T09:23:45.119574" + "enhanced_timestamp": "2025-10-08T09:33:16.130546" }, { "url": "https://contentowl.ai/", @@ -2408,7 +2412,7 @@ "author": "", "favicon": null, "image": "https://contentowl.ai/landing.jpg", - "summary": "ContentOwl.ai is an AI-powered content generation platform designed to assist bloggers, marketers, and business owners in creating high-quality content efficiently. Its business model offers a free plan with limited features and two paid options (monthly and yearly) that provide more extensive capabilities, including unlimited content generation and image creation.\n\nThe target audience includes individuals and businesses looking to enhance their content strategy by overcoming writer's block, generating engaging blog posts, and optimizing SEO with alternative titles and meta descriptions. ContentOwl.ai also provides tools for creating social media posts and offers flexible export options in HTML or Markdown formats.\n\nThe platform emphasizes user control, allowing users to input specific context to tailor content to their unique style. Additionally, it offers features like topic suggestions and image generation to inspire creativity and streamline the content creation process.", + "summary": "ContentOwl.ai is an AI-driven content generation platform designed to assist bloggers, marketers, and business owners in creating high-quality content efficiently. Its business model offers a free plan with limited features and two paid options: a monthly subscription at $29 and an annual plan for $232, both providing substantial AI credits for content generation.\n\nThe target audience includes individuals and businesses looking to enhance their content strategy by overcoming writer's block, generating blog posts, social media content, and optimizing for SEO. Key features include unlimited content creation, customizable writing styles, image generation, topic suggestions, and flexible export options in HTML or Markdown formats.\n\nContentOwl.ai aims to streamline the content creation process, making it easier for users to produce engaging and shareable content while maximizing their online visibility.", "highlights": [ "Create high-quality, engaging blog posts effortlessly with ContentOwl.ai's advanced AI technology. Say goodbye to writer's block and hello to endless content possibilities. With ContentOwl.ai, the sky's the limit. Write as much as you want without worrying about word counts or character limits.", "Your content, your way. ContentOwl.ai doesn't just generate content; it sparks creativity. Get topic suggestions and title ideas to kickstart your writing journey effortlessly. ContentOwl.ai is an AI-powered content generation platform that helps streamline your content creation process.", @@ -2455,7 +2459,7 @@ "brand_positioning": "unknown", "competitive_advantage": "unknown" }, - "enhanced_timestamp": "2025-10-05T09:23:45.119615" + "enhanced_timestamp": "2025-10-08T09:33:16.130583" }, { "url": "https://texta.ai/", @@ -2465,7 +2469,7 @@ "author": "", "favicon": null, "image": "https://texta.ai/images/favicon.png", - "summary": "Texta.ai is an AI-driven platform designed to streamline content creation, particularly for blogs. Its business model revolves around offering automated writing tools that help users generate high-quality articles, optimize SEO, and enhance reader engagement. The service targets small business owners, marketers, and content creators looking to save time and improve their online presence.\n\nKey features include:\n\n1. **AI Blog Writer**: Generates SEO-optimized articles quickly, allowing users to maintain a consistent posting schedule without manual effort.\n2. **Automated Publishing**: Users can schedule and auto-publish content with a single click, ensuring fresh updates to their blogs.\n3. **Smart Linking**: The tool enhances SEO by adding internal and external links, making articles more discoverable by search engines.\n4. **Keyword Research**: Texta.ai provides keyword suggestions to help users rank higher in search results, simplifying the content strategy process.\n5. **Integration**: The platform seamlessly integrates with popular website builders like WordPress, Shopify, and Wix, making it accessible for a wide range of users.\n\nOverall, Texta.ai positions itself as a comprehensive solution for businesses looking to automate their content strategy while improving web traffic and engagement.", + "summary": "Texta.ai is an AI-powered blog writing tool designed to streamline content creation for businesses. Its primary business model revolves around offering automated blog writing, email generation, and writing assistance, making it ideal for small business owners, marketers, and content creators looking to enhance their online presence.\n\n**Target Audience:** The platform caters to a diverse audience, including small business owners, marketers, and website managers who require high-quality, SEO-optimized content without the time investment typically associated with writing. Users benefit from features like automated publishing, keyword research, and smart linking, which help improve SEO rankings and reader engagement.\n\n**Content Strategy:** Texta.ai's content strategy focuses on providing users with tools to generate and publish articles effortlessly. Key features include:\n- **Automated Blog Generation:** Users can create high-quality articles quickly and schedule them for automatic posting.\n- **SEO Optimization:** The AI recommends popular keywords and integrates smart internal and external linking to enhance search engine visibility.\n- **Multimedia Integration:** The platform can add relevant images and videos to blog posts, enriching the content and improving user engagement.\n\nOverall, Texta.ai positions itself as a comprehensive solution for businesses looking to automate their content creation process while maintaining quality and SEO effectiveness.", "highlights": [ "[Blog Automation](https://texta.ai/ai-blog-writer-generator-case) [Email/Letter Writer](https://texta.ai/ai-email-writer-generator-case) [Writing Assistant](https://texta.ai/ai-writing-assistant-case) [Pricing](https://texta.ai/pricing-page) [Log In](https://app.texta.ai/login) [Try for Free](https://app.texta.ai/) \u201cTexta.ai is revolutionizing the way people create content. Its AI Blog Writer tool is", "Lightning - fast, enabling users to write high-quality articles and auto-publish directly to the blog.\u201d Prepare yourself for a game-changer. AI Blog writer enables you to schedule, generate and publish articles automatically, effectively running your blog on auto-pilot.", @@ -2514,7 +2518,7 @@ "brand_positioning": "unknown", "competitive_advantage": "unknown" }, - "enhanced_timestamp": "2025-10-05T09:23:45.119665" + "enhanced_timestamp": "2025-10-08T09:33:16.130636" } ], "researchSummary": { @@ -2535,21 +2539,21 @@ "sitemap_url": "https://www.alwrity.com/sitemap.xml", "analysis_data": { "sitemap_url": "https://www.alwrity.com/sitemap.xml", - "analysis_date": "2025-10-05T09:24:22.348160", - "total_urls": 394, + "analysis_date": "2025-10-08T09:33:34.365804", + "total_urls": 397, "structure_analysis": { - "total_urls": 394, + "total_urls": 397, "url_patterns": { - "post": 281, - "resources-ai-writer": 60, - "ai-product-description-writer": 1, - "ai-youtube-script-writer": 1, - "ai-app-copywriting-formula-generator": 1, - "ai-business-plan-generator-tool": 1, + "post": 283, + "resources-ai-writer": 61, + "ai-paragraph-rewriter-free-tool": 1, + "ai-acca-copywriting-formula-generator": 1, + "ai-youtube-title-generator": 1, + "ai-google-ads-generator": 1, "ai-quora-answer-generator-free-tool": 1, - "ai-blog-title-generator": 1, - "ai-tweet-generator": 1, - "ai-youyube-channel-name-generator-tool": 1 + "ai-paraphrasing-tool": 1, + "ai-social-media-tools": 1, + "privacy-policy": 1 }, "file_types": {}, "average_path_depth": 2.01, @@ -2559,8 +2563,8 @@ "content_trends": { "date_range": { "earliest": "2024-04-26T00:00:00", - "latest": "2025-10-04T00:00:00", - "span_days": 526 + "latest": "2025-10-08T00:00:00", + "span_days": 530 }, "monthly_distribution": { "2024-06": 1, @@ -2573,15 +2577,15 @@ "2025-05": 3, "2025-07": 10, "2025-08": 264, - "2025-09": 16, - "2025-10": 60 + "2025-09": 15, + "2025-10": 64 }, "yearly_distribution": { "2024": 25, - "2025": 369 + "2025": 372 }, "publishing_velocity": 0.749, - "total_dated_urls": 394, + "total_dated_urls": 397, "trends": [ "Decreasing publishing frequency", "Irregular publishing pattern" @@ -2596,22 +2600,26 @@ ] }, "ai_insights": { - "summary": "**3. Publishing Pattern Analysis (Content Frequency and Consistency)**", + "summary": "**3. Publishing Pattern Analysis**", "content_strategy": [], "seo_opportunities": [ - "Technical SEO Opportunities (Sitemap Optimization Suggestions)**" + "Technical SEO Opportunities**" ], "technical_recommendations": [ - "Business Impact of Technical SEO:**" + "Business Impact:** Technical SEO improvements will:", + "Improve website crawlability and indexability.", + "Enhance user experience.", + "Increase search engine rankings.", + "Drive more organic traffic." ], "growth_recommendations": [ - "Growth Recommendations (Specific Actions for Content Expansion)**" + "Growth Recommendations**" ] }, "seo_recommendations": [], - "execution_time": 19.686748, + "execution_time": 16.707454, "onboarding_insights": { - "competitive_positioning": "By implementing these recommendations, alwrity.com can improve its competitive positioning, attract more organic traffic, and establish itself as a leader in the AI-powered writing niche.", + "competitive_positioning": "**1. COMPETITIVE POSITIONING** * **Content Structure Comparison:** Alwrity.com heavily emphasizes blog posts (283 URLs) with a supporting structure of tools and resources. This is a common strategy, however, the focus on tools is much less than the blog posts. * **Industry Standard Alignment:** The site aligns with industry standards by using blog content as a primary driver for SEO and traffic acquisition. The presence of AI-powered tools is also in line with current market trends. * **Differentiation:** Alwrity differentiates itself with a high volume of blog content, which may indicate a focus on broad keyword targeting. However, the limited number of tools may represent an area for growth to match competitors.", "content_gaps": [], "growth_opportunities": [], "industry_benchmarks": [], @@ -2633,18 +2641,18 @@ ] }, "onboarding_insights": { - "competitive_positioning": "By implementing these recommendations, alwrity.com can improve its competitive positioning, attract more organic traffic, and establish itself as a leader in the AI-powered writing niche.", + "competitive_positioning": "**1. COMPETITIVE POSITIONING** * **Content Structure Comparison:** Alwrity.com heavily emphasizes blog posts (283 URLs) with a supporting structure of tools and resources. This is a common strategy, however, the focus on tools is much less than the blog posts. * **Industry Standard Alignment:** The site aligns with industry standards by using blog content as a primary driver for SEO and traffic acquisition. The presence of AI-powered tools is also in line with current market trends. * **Differentiation:** Alwrity differentiates itself with a high volume of blog content, which may indicate a focus on broad keyword targeting. However, the limited number of tools may represent an area for growth to match competitors.", "content_gaps": [], "growth_opportunities": [], "industry_benchmarks": [], "strategic_recommendations": [] }, - "analysis_timestamp": "2025-10-05T09:24:34.417558", + "analysis_timestamp": "2025-10-08T09:33:43.030712", "discovery_method": "intelligent_search", "error": null }, "userUrl": "", - "analysisTimestamp": "2025-10-06T07:43:48.750Z" + "analysisTimestamp": "2025-10-08T14:14:18.241Z" }, "validation_errors": [] }, @@ -2669,7 +2677,7 @@ ], "current_step": 5, "started_at": "2025-09-29T17:22:14.375002", - "last_updated": "2025-10-08T10:11:26.329043", + "last_updated": "2025-10-09T13:05:12.888068", "is_completed": false, "completed_at": null } \ No newline at end of file diff --git a/frontend/env.production.example b/frontend/env.production.example index c9d68e2b..95ad81e5 100644 --- a/frontend/env.production.example +++ b/frontend/env.production.example @@ -1,8 +1,15 @@ # Production Environment Variables for Vercel # Copy this file to .env.production and update with your actual values -# Backend API URL (from Railway/Render deployment) -REACT_APP_API_URL=https://your-backend-url.railway.app +# Backend API URL (from your deployment platform) +# Examples: +# REACT_APP_API_URL=https://alwrity.onrender.com +# REACT_APP_API_URL=https://your-app.railway.app +# REACT_APP_API_URL=https://your-app.herokuapp.com +REACT_APP_API_URL=https://alwrity.onrender.com + +# Alternative backend URL (fallback) +# REACT_APP_BACKEND_URL=https://alwrity.onrender.com # Environment REACT_APP_ENVIRONMENT=production diff --git a/frontend/src/api/client.ts b/frontend/src/api/client.ts index ab20f912..0851950c 100644 --- a/frontend/src/api/client.ts +++ b/frontend/src/api/client.ts @@ -10,7 +10,8 @@ export const setAuthTokenGetter = (getter: () => Promise) => { // Get API URL from environment variables const getApiUrl = () => { if (process.env.NODE_ENV === 'production') { - return process.env.REACT_APP_API_URL || 'https://your-backend-url.railway.app'; + // In production, use the environment variable or fallback + return process.env.REACT_APP_API_URL || process.env.REACT_APP_BACKEND_URL; } return ''; // Use proxy in development }; diff --git a/frontend/src/components/BlogWriter/HallucinationChecker.tsx b/frontend/src/components/BlogWriter/HallucinationChecker.tsx index 5bd19275..8729525d 100644 --- a/frontend/src/components/BlogWriter/HallucinationChecker.tsx +++ b/frontend/src/components/BlogWriter/HallucinationChecker.tsx @@ -1,6 +1,7 @@ import React, { useState } from 'react'; import { useCopilotAction } from '@copilotkit/react-core'; import DiffPreview from './DiffPreview'; +import { apiClient } from '../../api/client'; interface HallucinationCheckerProps { buildFullMarkdown: () => string; @@ -27,12 +28,8 @@ export const HallucinationChecker: React.FC = ({ parameters: [], handler: async () => { const content = buildFullMarkdown(); - const res = await fetch('/api/blog/quality/hallucination-check', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ text: content }) - }); - const data = await res.json(); + const res = await apiClient.post('/api/blog/quality/hallucination-check', { text: content }); + const data = res.data; setHallucinationResult(data); return { success: true, total_claims: data?.total_claims }; }, diff --git a/frontend/src/components/BlogWriter/SEO/SEOProcessor.tsx b/frontend/src/components/BlogWriter/SEO/SEOProcessor.tsx index e2c89754..09c4c724 100644 --- a/frontend/src/components/BlogWriter/SEO/SEOProcessor.tsx +++ b/frontend/src/components/BlogWriter/SEO/SEOProcessor.tsx @@ -1,6 +1,7 @@ import React from 'react'; import { useCopilotAction } from '@copilotkit/react-core'; import { blogWriterApi, BlogSEOMetadataResponse } from '../../../services/blogWriterApi'; +import { apiClient } from '../../../api/client'; interface SEOProcessorProps { buildFullMarkdown: () => string; @@ -50,22 +51,12 @@ export const SEOProcessor: React.FC = ({ if (!current) return { success: false, message: 'No content yet for this section' }; // Use comprehensive SEO analysis endpoint - const response = await fetch('/api/blog-writer/seo/analyze', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - content: current, - keywords: [] - }) + const response = await apiClient.post('/api/blog-writer/seo/analyze', { + content: current, + keywords: [] }); - if (!response.ok) { - throw new Error('Failed to analyze blog content'); - } - - const res = await response.json(); + const res = response.data; onSEOAnalysis(res); return { success: true, message: 'Analysis ready' }; }, diff --git a/frontend/src/components/BlogWriter/SEOAnalysisModal.tsx b/frontend/src/components/BlogWriter/SEOAnalysisModal.tsx index c597e626..b83d099d 100644 --- a/frontend/src/components/BlogWriter/SEOAnalysisModal.tsx +++ b/frontend/src/components/BlogWriter/SEOAnalysisModal.tsx @@ -27,6 +27,7 @@ import { IconButton, Tooltip } from '@mui/material'; +import { apiClient } from '../../api/client'; import { CheckCircle, Cancel, @@ -187,23 +188,13 @@ export const SEOAnalysisModal: React.FC = ({ } // Make API call to analyze blog content - const response = await fetch('/api/blog-writer/seo/analyze', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - blog_content: blogContent, - blog_title: blogTitle, - research_data: researchData - }) + const response = await apiClient.post('/api/blog-writer/seo/analyze', { + blog_content: blogContent, + blog_title: blogTitle, + research_data: researchData }); - if (!response.ok) { - throw new Error('Failed to analyze blog content'); - } - - const result = await response.json(); + const result = response.data; console.log('🔍 Backend SEO Analysis Response:', result); // Convert API response to frontend format - fail fast if data is missing diff --git a/frontend/src/components/BlogWriter/SEOMetadataModal.tsx b/frontend/src/components/BlogWriter/SEOMetadataModal.tsx index f9ec2868..76f594a5 100644 --- a/frontend/src/components/BlogWriter/SEOMetadataModal.tsx +++ b/frontend/src/components/BlogWriter/SEOMetadataModal.tsx @@ -44,6 +44,7 @@ import { Tag as TagIcon, Refresh as RefreshIcon } from '@mui/icons-material'; +import { apiClient } from '../../api/client'; // Import metadata display components import { CoreMetadataTab } from './SEO/MetadataDisplay/CoreMetadataTab'; @@ -113,23 +114,13 @@ export const SEOMetadataModal: React.FC = ({ console.log('🚀 Starting SEO metadata generation...'); // Make API call to generate metadata - const response = await fetch('/api/blog/seo/metadata', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - content: blogContent, - title: blogTitle, - research_data: researchData - }) + const response = await apiClient.post('/api/blog/seo/metadata', { + content: blogContent, + title: blogTitle, + research_data: researchData }); - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - - const result = await response.json(); + const result = response.data; console.log('✅ SEO metadata generation response:', result); if (!result.success) { diff --git a/frontend/src/components/ContentPlanningDashboard/components/SystemStatusIndicator.tsx b/frontend/src/components/ContentPlanningDashboard/components/SystemStatusIndicator.tsx index 82e003c5..390ab12a 100644 --- a/frontend/src/components/ContentPlanningDashboard/components/SystemStatusIndicator.tsx +++ b/frontend/src/components/ContentPlanningDashboard/components/SystemStatusIndicator.tsx @@ -25,6 +25,7 @@ import { CardHeader, Avatar } from '@mui/material'; +import { apiClient } from '../../../api/client'; import { CheckCircle as HealthyIcon, Warning as WarningIcon, @@ -104,12 +105,8 @@ const SystemStatusIndicator: React.FC = ({ className setError(null); try { - const response = await fetch('/api/content-planning/monitoring/lightweight-stats'); - if (!response.ok) { - throw new Error('Failed to fetch system status'); - } - - const result = await response.json(); + const response = await apiClient.get('/api/content-planning/monitoring/lightweight-stats'); + const result = response.data; if (result.status === 'success') { setStatusData(result.data); } else { @@ -132,25 +129,23 @@ const SystemStatusIndicator: React.FC = ({ className const fetchDetailedStats = async () => { try { - const response = await fetch('/api/content-planning/monitoring/api-stats'); - if (response.ok) { - const result = await response.json(); - if (result.status === 'success') { - setDetailedStats(result.data); - if (result.data?.cache_performance) { - setCachePerf(result.data.cache_performance); - } - - // Generate chart data - const chartData = result.data.top_endpoints.slice(0, 5).map((endpoint: any, index: number) => ({ - name: endpoint.endpoint.split(' ')[1].split('/').pop() || 'API', - requests: endpoint.count, - avgTime: endpoint.avg_time, - errors: endpoint.errors, - hitRate: endpoint.cache_hit_rate - })); - setChartData(chartData); + const response = await apiClient.get('/api/content-planning/monitoring/api-stats'); + const result = response.data; + if (result.status === 'success') { + setDetailedStats(result.data); + if (result.data?.cache_performance) { + setCachePerf(result.data.cache_performance); } + + // Generate chart data + const chartData = result.data.top_endpoints.slice(0, 5).map((endpoint: any, index: number) => ({ + name: endpoint.endpoint.split(' ')[1].split('/').pop() || 'API', + requests: endpoint.count, + avgTime: endpoint.avg_time, + errors: endpoint.errors, + hitRate: endpoint.cache_hit_rate + })); + setChartData(chartData); } } catch (err) { console.error('Error fetching detailed stats:', err); diff --git a/frontend/src/components/ContentPlanningDashboard/tabs/CreateTab.tsx b/frontend/src/components/ContentPlanningDashboard/tabs/CreateTab.tsx index c0b2f897..5976f393 100644 --- a/frontend/src/components/ContentPlanningDashboard/tabs/CreateTab.tsx +++ b/frontend/src/components/ContentPlanningDashboard/tabs/CreateTab.tsx @@ -16,6 +16,7 @@ import { useLocation } from 'react-router-dom'; import ContentStrategyBuilder from '../components/ContentStrategyBuilder'; import CalendarGenerationWizard from '../components/CalendarGenerationWizard'; import { CalendarGenerationModal } from '../components/CalendarGenerationModal'; +import { apiClient } from '../../../api/client'; // Import hooks and services import { useStrategyCalendarContext } from '../../../contexts/StrategyCalendarContext'; @@ -130,39 +131,26 @@ const CreateTab: React.FC = () => { while (retryCount < maxRetries) { try { - startResponse = await fetch('/api/content-planning/calendar-generation/start', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify(requestData), - }); - - if (startResponse.ok) { - break; // Success, exit retry loop - } else { - console.warn(`⚠️ Attempt ${retryCount + 1} failed with status: ${startResponse.status}`); - retryCount++; - if (retryCount < maxRetries) { - // Wait before retry (exponential backoff) - await new Promise(resolve => setTimeout(resolve, 1000 * retryCount)); - } - } - } catch (error) { + const response = await apiClient.post('/api/content-planning/calendar-generation/start', requestData); + startResponse = { ok: true, data: response.data }; + break; // Success, exit retry loop + } catch (error: any) { console.warn(`⚠️ Attempt ${retryCount + 1} failed with error:`, error); retryCount++; if (retryCount < maxRetries) { // Wait before retry (exponential backoff) await new Promise(resolve => setTimeout(resolve, 1000 * retryCount)); + } else { + startResponse = { ok: false, data: null }; } } } if (!startResponse || !startResponse.ok) { - throw new Error(`Failed to start calendar generation after ${maxRetries} attempts: ${startResponse?.statusText || 'Network error'}`); + throw new Error(`Failed to start calendar generation after ${maxRetries} attempts`); } - const startData = await startResponse.json(); + const startData = startResponse.data; const sessionId = startData.session_id; console.log('🎯 Backend response received, session ID:', sessionId); diff --git a/frontend/src/components/LinkedInWriter/RegisterLinkedInActions.tsx b/frontend/src/components/LinkedInWriter/RegisterLinkedInActions.tsx index eb1cbae2..6121348b 100644 --- a/frontend/src/components/LinkedInWriter/RegisterLinkedInActions.tsx +++ b/frontend/src/components/LinkedInWriter/RegisterLinkedInActions.tsx @@ -9,6 +9,7 @@ import { readPrefs } from './utils/linkedInWriterUtils'; import { PostHITL, ArticleHITL, CarouselHITL, VideoScriptHITL, CommentResponseHITL } from './components'; +import { apiClient } from '../../api/client'; const useCopilotActionTyped = useCopilotAction as any; @@ -25,22 +26,14 @@ const RegisterLinkedInActions: React.FC = () => { ], handler: async (args: any) => { try { - const response = await fetch('/api/linkedin/generate-image-prompts', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - content_type: args.content_type, - topic: args.topic, - industry: args.industry, - content: args.content - }) + const response = await apiClient.post('/api/linkedin/generate-image-prompts', { + content_type: args.content_type, + topic: args.topic, + industry: args.industry, + content: args.content }); - if (!response.ok) { - throw new Error(`Failed to generate image prompts: ${response.status}`); - } - - const result = await response.json(); + const result = response.data; return { success: true, prompts: result, @@ -66,21 +59,13 @@ const RegisterLinkedInActions: React.FC = () => { ], handler: async (args: any) => { try { - const response = await fetch('/api/linkedin/generate-image', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - prompt: args.prompt, - content_context: args.content_context, - aspect_ratio: args.aspect_ratio || '1:1' - }) + const response = await apiClient.post('/api/linkedin/generate-image', { + prompt: args.prompt, + content_context: args.content_context, + aspect_ratio: args.aspect_ratio || '1:1' }); - if (!response.ok) { - throw new Error(`Failed to generate image: ${response.status}`); - } - - const result = await response.json(); + const result = response.data; if (result.success) { return { success: true, diff --git a/frontend/src/components/LinkedInWriter/components/BrainstormFlow.tsx b/frontend/src/components/LinkedInWriter/components/BrainstormFlow.tsx index cd86636a..7177ab93 100644 --- a/frontend/src/components/LinkedInWriter/components/BrainstormFlow.tsx +++ b/frontend/src/components/LinkedInWriter/components/BrainstormFlow.tsx @@ -1,5 +1,6 @@ import React, { useCallback, useMemo, useState } from 'react'; import { usePlatformPersonaContext } from '../../shared/PersonaContext/PlatformPersonaProvider'; +import { apiClient } from '../../../api/client'; // Define the cache data type interface BrainstormCacheData { @@ -201,33 +202,22 @@ const BrainstormFlow: React.FC = ({ // First: run grounded search for the seed prompt let results: any[] = []; try { - const sr = await fetch('/api/brainstorm/search', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ prompt: finalSeed }) - }); - if (sr.ok) { - const data = await sr.json(); - results = data?.results || []; - } + const sr = await apiClient.post('/api/brainstorm/search', { prompt: finalSeed }); + results = sr.data?.results || []; } catch {} setSearchResults(results); // Then: request persona-aware brainstorm ideas using the search results try { - const ir = await fetch('/api/brainstorm/ideas', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - seed: finalSeed, - persona: corePersona || null, - platformPersona: platformPersona || null, - results, - count: 5 - }) + const ir = await apiClient.post('/api/brainstorm/ideas', { + seed: finalSeed, + persona: corePersona || null, + platformPersona: platformPersona || null, + results, + count: 5 }); - if (ir.ok) { - const data = await ir.json(); + if (ir.data) { + const data = ir.data; const list = Array.isArray(data?.ideas) ? data.ideas : []; setIdeas(list); setAiSearchPrompts(list.map((x: any) => x.prompt)); @@ -477,19 +467,9 @@ const BrainstormFlow: React.FC = ({ onClick={async () => { // Use existing Google grounding flow via backend LinkedInService try { - const resp = await fetch('/api/brainstorm/search', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ prompt: selectedPrompt }) - }); - if (resp.ok) { - const data = await resp.json(); - setSearchResults(data?.results || []); - setBrainstormStage('results'); - } else { - setSearchResults([]); - setBrainstormStage('results'); - } + const resp = await apiClient.post('/api/brainstorm/search', { prompt: selectedPrompt }); + setSearchResults(resp.data?.results || []); + setBrainstormStage('results'); } catch { setSearchResults([]); setBrainstormStage('results'); diff --git a/frontend/src/components/OnboardingWizard/ApiKeyStep.tsx b/frontend/src/components/OnboardingWizard/ApiKeyStep.tsx index afd4e914..204f9ac7 100644 --- a/frontend/src/components/OnboardingWizard/ApiKeyStep.tsx +++ b/frontend/src/components/OnboardingWizard/ApiKeyStep.tsx @@ -6,6 +6,7 @@ import { Fade, Container, Grid, + Snackbar, } from '@mui/material'; import { Lock } from '@mui/icons-material'; import OnboardingButton from './common/OnboardingButton'; @@ -23,7 +24,6 @@ interface ApiKeyStepProps { } const ApiKeyStep: React.FC = ({ onContinue, updateHeaderContent }) => { - const [currentProvider, setCurrentProvider] = useState(0); const [focusedProvider, setFocusedProvider] = useState(null); const { @@ -36,6 +36,10 @@ const ApiKeyStep: React.FC = ({ onContinue, updateHeaderContent selectedProvider, providers, isValid, + currentProviderIndex, + setCurrentProviderIndex, + showCompletionToast, + setShowCompletionToast, setShowHelp, handleContinue, handleBenefitsClick, @@ -55,13 +59,14 @@ const ApiKeyStep: React.FC = ({ onContinue, updateHeaderContent // Set initial focused provider if (providers.length > 0) { - setFocusedProvider(providers[currentProvider] ?? providers[0]); + setFocusedProvider(providers[currentProviderIndex] ?? providers[0]); } - }, [updateHeaderContent, providers, currentProvider]); + }, [updateHeaderContent, providers, currentProviderIndex]); return ( - - + <> + +
{ e.preventDefault(); handleContinue(); }}> {/* Main Content Layout */} @@ -69,8 +74,8 @@ const ApiKeyStep: React.FC = ({ onContinue, updateHeaderContent @@ -80,7 +85,7 @@ const ApiKeyStep: React.FC = ({ onContinue, updateHeaderContent @@ -169,7 +174,7 @@ const ApiKeyStep: React.FC = ({ onContinue, updateHeaderContent } }} > - {isValid ? 'Continue to Website Analysis' : 'Complete All Required API Keys'} + {isValid ? 'Continue' : 'Complete All Required API Keys'} @@ -197,8 +202,42 @@ const ApiKeyStep: React.FC = ({ onContinue, updateHeaderContent -
-
+
+
+ + {/* Completion Toast */} + setShowCompletionToast(false)} + anchorOrigin={{ vertical: 'top', horizontal: 'center' }} + sx={{ + '& .MuiSnackbarContent-root': { + background: 'linear-gradient(135deg, #10B981 0%, #059669 100%)', + color: 'white', + fontWeight: 600, + fontSize: '1rem', + borderRadius: '12px', + boxShadow: '0 8px 32px rgba(16, 185, 129, 0.3)', + }, + }} + > + setShowCompletionToast(false)} + severity="success" + sx={{ + width: '100%', + background: 'transparent', + color: 'white', + '& .MuiAlert-icon': { + color: 'white', + }, + }} + > + 🎉 All API keys configured! Click Continue to proceed to Website Analysis. + + + ); }; diff --git a/frontend/src/components/OnboardingWizard/ApiKeyStep/utils/useApiKeyStep.ts b/frontend/src/components/OnboardingWizard/ApiKeyStep/utils/useApiKeyStep.ts index c5c2ceae..8acfbf8e 100644 --- a/frontend/src/components/OnboardingWizard/ApiKeyStep/utils/useApiKeyStep.ts +++ b/frontend/src/components/OnboardingWizard/ApiKeyStep/utils/useApiKeyStep.ts @@ -3,6 +3,7 @@ import { useAuth } from '@clerk/clerk-react'; import { getApiKeysForOnboarding, getStep1ApiKeysFromProgress, saveApiKey } from '../../../../api/onboarding'; import { getKeyStatus, formatErrorMessage } from '../../common/onboardingUtils'; import { Provider } from './ProviderCard'; +import { apiClient } from '../../../../api/client'; export const useApiKeyStep = (onContinue: (stepData?: any) => void) => { const { getToken } = useAuth(); @@ -20,6 +21,8 @@ export const useApiKeyStep = (onContinue: (stepData?: any) => void) => { const [benefitsModalOpen, setBenefitsModalOpen] = useState(false); const [selectedProvider, setSelectedProvider] = useState(null); const [keysLoaded, setKeysLoaded] = useState(false); + const [currentProviderIndex, setCurrentProviderIndex] = useState(0); + const [showCompletionToast, setShowCompletionToast] = useState(false); const loadExistingKeys = useCallback(async () => { try { @@ -131,34 +134,22 @@ export const useApiKeyStep = (onContinue: (stepData?: any) => void) => { // Complete step 1 with the API keys data console.log('ApiKeyStep: Attempting to complete step 1 with data:', stepData); - let response; try { - response = await fetch('/api/onboarding/step/1/complete', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'Authorization': `Bearer ${await getToken()}` - }, - body: JSON.stringify({ data: stepData }) - }); - console.log('ApiKeyStep: Step completion response status:', response.status); + const response = await apiClient.post('/api/onboarding/step/1/complete', { data: stepData }); + console.log('ApiKeyStep: Step completion response:', response.data); } catch (fetchError: any) { - console.error('Network error completing step:', fetchError); - setError('Network error. Please check your connection and try again.'); - setLoading(false); - return; - } - - if (!response.ok) { - let errorMessage = 'Failed to complete step'; - try { - const errorData = await response.json(); - console.log('ApiKeyStep: Error response data:', errorData); - errorMessage = errorData.detail || errorMessage; - } catch (parseError) { - console.error('Error parsing error response:', parseError); - errorMessage = `Server error (${response.status}). Please try again.`; + console.error('Error completing step:', fetchError); + let errorMessage = 'Failed to complete step. Please try again.'; + + if (fetchError.response) { + // Server responded with an error + console.log('ApiKeyStep: Error response data:', fetchError.response.data); + errorMessage = fetchError.response.data?.detail || errorMessage; + } else if (fetchError.request) { + // Request made but no response + errorMessage = 'Network error. Please check your connection and try again.'; } + console.log('ApiKeyStep: Setting error message:', errorMessage); setError(errorMessage); setLoading(false); @@ -228,6 +219,31 @@ export const useApiKeyStep = (onContinue: (stepData?: any) => void) => { // All three keys are required const isValid = geminiKey.trim() && exaKey.trim() && copilotkitKey.trim(); + // Auto-scroll to next provider when current one is valid + useEffect(() => { + if (currentProviderIndex < 2) { + const currentKey = currentProviderIndex === 0 ? geminiKey : + currentProviderIndex === 1 ? exaKey : copilotkitKey; + + if (currentKey.trim() && getKeyStatus(currentKey, currentProviderIndex === 0 ? 'gemini' : + currentProviderIndex === 1 ? 'exa' : 'copilotkit') === 'valid') { + // Auto-scroll to next provider after a short delay + setTimeout(() => { + setCurrentProviderIndex(prev => prev + 1); + }, 1000); + } + } + }, [geminiKey, exaKey, copilotkitKey, currentProviderIndex]); + + // Show completion toast when all keys are valid + useEffect(() => { + if (isValid && keysLoaded) { + setShowCompletionToast(true); + // Auto-hide toast after 5 seconds + setTimeout(() => setShowCompletionToast(false), 5000); + } + }, [isValid, keysLoaded]); + const handleBenefitsClick = (provider: Provider) => { setSelectedProvider(provider); setBenefitsModalOpen(true); @@ -260,6 +276,10 @@ export const useApiKeyStep = (onContinue: (stepData?: any) => void) => { keysLoaded, providers, isValid, + currentProviderIndex, + setCurrentProviderIndex, + showCompletionToast, + setShowCompletionToast, // Actions setShowHelp, diff --git a/frontend/src/components/OnboardingWizard/StyleDetectionStep.tsx b/frontend/src/components/OnboardingWizard/StyleDetectionStep.tsx index b39e1f53..ba0219cc 100644 --- a/frontend/src/components/OnboardingWizard/StyleDetectionStep.tsx +++ b/frontend/src/components/OnboardingWizard/StyleDetectionStep.tsx @@ -17,6 +17,7 @@ import { IconButton, Tooltip } from '@mui/material'; +import { apiClient } from '../../api/client'; import { ExpandMore as ExpandMoreIcon, ContentCopy as CopyIcon, @@ -93,21 +94,13 @@ const StyleDetectionStep: React.FC = ({ onContinue }) = include_guidelines: true }; - const response = await fetch('/api/onboarding/style-detection/complete', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify(requestData), - }); + const response = await apiClient.post('/api/onboarding/style-detection/complete', requestData); - const result = await response.json(); - - if (result.success) { - setAnalysis(result.style_analysis); + if (response.data.success) { + setAnalysis(response.data.style_analysis); setSuccess('Style analysis completed successfully!'); } else { - setError(result.error || 'Analysis failed'); + setError(response.data.error || 'Analysis failed'); } } catch (err) { setError('Failed to analyze content. Please try again.'); diff --git a/frontend/src/components/OnboardingWizard/common/usePlatformConnections.ts b/frontend/src/components/OnboardingWizard/common/usePlatformConnections.ts index 200bcc44..21aa3600 100644 --- a/frontend/src/components/OnboardingWizard/common/usePlatformConnections.ts +++ b/frontend/src/components/OnboardingWizard/common/usePlatformConnections.ts @@ -63,8 +63,13 @@ export const usePlatformConnections = () => { const redirectUri = `${redirectOrigin}/wix/callback`; const oauthData = await wixClient.auth.generateOAuthData(redirectUri); - // Use sessionStorage to ensure data is scoped to this tab/session (like WixTestPage) - sessionStorage.setItem('wix_oauth_data', JSON.stringify(oauthData)); + // Persist OAuth data robustly so callback can always recover it + // 1) SessionStorage for same-origin same-tab flows + try { sessionStorage.setItem('wix_oauth_data', JSON.stringify(oauthData)); } catch {} + // 2) Key by state so callback can look up by state value + try { sessionStorage.setItem(`wix_oauth_data_${oauthData.state}`, JSON.stringify(oauthData)); } catch {} + // 3) window.name persists across top-level redirects even when origin changes + try { (window as any).name = `WIX_OAUTH::${btoa(JSON.stringify(oauthData))}`; } catch {} const { authUrl } = await wixClient.auth.getAuthUrl(oauthData); window.location.href = authUrl; } catch (error) { diff --git a/frontend/src/components/WixCallbackPage/WixCallbackPage.tsx b/frontend/src/components/WixCallbackPage/WixCallbackPage.tsx index 15edbf4a..a4d2a5db 100644 --- a/frontend/src/components/WixCallbackPage/WixCallbackPage.tsx +++ b/frontend/src/components/WixCallbackPage/WixCallbackPage.tsx @@ -1,6 +1,7 @@ import React, { useEffect, useState } from 'react'; import { Box, CircularProgress, Typography, Alert } from '@mui/material'; import { createClient, OAuthStrategy } from '@wix/sdk'; +import { apiClient } from '../../api/client'; const WixCallbackPage: React.FC = () => { const [error, setError] = useState(null); @@ -14,22 +15,37 @@ const WixCallbackPage: React.FC = () => { setError(`${error}: ${errorDescription || ''}`); return; } + // Recover oauthData via multiple fallbacks + let oauthData: any | null = null; const saved = sessionStorage.getItem('wix_oauth_data') || localStorage.getItem('wix_oauth_data'); - if (!saved) { + if (saved) { + try { oauthData = JSON.parse(saved); } catch {} + } + if (!oauthData && state) { + const byState = sessionStorage.getItem(`wix_oauth_data_${state}`); + if (byState) { + try { oauthData = JSON.parse(byState); } catch {} + } + } + if (!oauthData && typeof window.name === 'string' && window.name.startsWith('WIX_OAUTH::')) { + try { oauthData = JSON.parse(atob(window.name.replace('WIX_OAUTH::',''))); } catch {} + } + if (!oauthData) { setError('Missing OAuth state. Please start the connection again.'); return; } - const oauthData = JSON.parse(saved); // Use the originally generated state to avoid SDK "Invalid _state" errors const tokens = await wixClient.auth.getMemberTokens(code, state, oauthData); wixClient.auth.setTokens(tokens); // Persist tokens for subsequent API calls on this tab try { sessionStorage.setItem('wix_tokens', JSON.stringify(tokens)); } catch {} // optional: ping backend to mark connected - try { await fetch('/api/wix/test/connection/status'); } catch {} + try { await apiClient.get('/api/wix/test/connection/status'); } catch {} // Cleanup saved oauth data sessionStorage.removeItem('wix_oauth_data'); + sessionStorage.removeItem(`wix_oauth_data_${state}`); localStorage.removeItem('wix_oauth_data'); + try { (window as any).name = ''; } catch {} // Mark frontend session as connected for onboarding UI sessionStorage.setItem('wix_connected', 'true'); // Notify opener (if opened as popup) and close; otherwise fallback to redirect diff --git a/frontend/src/utils/errorReporting.ts b/frontend/src/utils/errorReporting.ts index 2a717206..97840646 100644 --- a/frontend/src/utils/errorReporting.ts +++ b/frontend/src/utils/errorReporting.ts @@ -5,6 +5,8 @@ * Integrates with external services like Sentry, LogRocket, etc. */ +import { apiClient } from '../api/client'; + export interface ErrorReport { error: Error | string; context?: string; @@ -67,22 +69,16 @@ const sendToBackend = async (report: ErrorReport): Promise => { try { // Only send in production or if explicitly enabled if (process.env.NODE_ENV === 'production' || process.env.REACT_APP_ENABLE_ERROR_REPORTING === 'true') { - await fetch('/api/log-error', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - error_message: report.error instanceof Error ? report.error.message : report.error, - error_stack: report.error instanceof Error ? report.error.stack : undefined, - context: report.context, - user_id: report.userId, - metadata: report.metadata, - severity: report.severity, - timestamp: report.timestamp, - user_agent: navigator.userAgent, - url: window.location.href, - }), + await apiClient.post('/api/log-error', { + error_message: report.error instanceof Error ? report.error.message : report.error, + error_stack: report.error instanceof Error ? report.error.stack : undefined, + context: report.context, + user_id: report.userId, + metadata: report.metadata, + severity: report.severity, + timestamp: report.timestamp, + user_agent: navigator.userAgent, + url: window.location.href, }); } } catch (e) { diff --git a/vercel.json b/frontend/vercel.json similarity index 100% rename from vercel.json rename to frontend/vercel.json