A professional web dashboard that:
cd C:\dev\itblogpros\_automation\webapp
npm install
What this installs:
Make sure you have:
C:\dev\itblogpros\_automation\gemini-article-generator.jsC:\dev\itblogpros\_automation\.env (with GEMINI_API_KEY)C:\dev\itblogpros\.eleventy.jsOption A: Double-Click
Double-click: START-DASHBOARD.bat
Option B: Command Line
npm start
Dashboard opens automatically at: http://localhost:3000
┌─────────────────────────────────────────────────┐
│ Dashboard (http://localhost:3000) │
│ - Enter keyword │
│ - Select options │
│ - Monitor progress │
└────────────┬────────────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────┐
│ article-workflow.js │
│ - Orchestrates entire process │
│ - Real-time status updates via WebSocket │
└────────────┬────────────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────┐
│ Stage 1: Analyze (10%) │
│ - Parse keyword │
│ - Identify product type │
│ - Extract ISP if mentioned │
└────────────┬────────────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────┐
│ Stage 2: Generate (30%) │
│ - Call gemini-article-generator.js │
│ - Create 1350±100 word article │
│ - Include 3+ Amazon products │
└────────────┬────────────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────┐
│ Stage 3: Validate (60%) │
│ - Run gemini-enhanced.js validator │
│ - Test all Amazon ASINs │
│ - Check for meta-commentary │
│ - Calculate quality score │
└────────────┬────────────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────┐
│ Stage 4: Build (80%) │
│ - Run Eleventy build │
│ - Generate preview │
└────────────┬────────────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────┐
│ Stage 5: Complete (100%) │
│ - Save to tracking database │
│ - Display in dashboard │
│ - Ready for preview/publish │
└──────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────┐
│ Click "Start Preview Server" │
└────────────┬────────────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────┐
│ Launch Eleventy Dev Server (port 3001) │
│ - Watches for file changes │
│ - Auto-rebuilds on changes │
│ - Serves _site/ directory │
└────────────┬────────────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────┐
│ Click "Preview" on any article │
│ Opens: http://localhost:3001/posts/article-url │
└──────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────┐
│ Click "Publish" on article │
└────────────┬────────────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────┐
│ git add posts/article-file.md │
│ git commit -m "Add article: filename" │
│ git push origin main │
└────────────┬────────────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────┐
│ GitHub triggers Cloudflare Pages deployment │
│ - Build runs on Cloudflare │
│ - Site updates in 2-3 minutes │
│ - Live at https://itblogpros.com │
└──────────────────────────────────────────────────┘
webapp/
├── server.js # Main Express server
│ └── Port: 3000
│ └── Handles API requests
│ └── WebSocket server
│
├── article-workflow.js # Workflow orchestration
│ └── Connects all systems
│ └── Tracks progress
│ └── Manages article lifecycle
│
├── system-adapter.js # System integration
│ └── Bridges existing scripts
│ └── Loads Gemini generator
│ └── Validates environment
│
├── index.html # Dashboard UI
│ └── Beautiful interface
│ └── Real-time updates
│ └── Responsive design
│
├── package.json # Dependencies
│ └── Express
│ └── WebSocket (ws)
│ └── simple-git
│ └── chokidar (file watching)
│
├── START-DASHBOARD.bat # Windows launcher
│ └── Auto-installs dependencies
│ └── Launches server
│ └── Opens browser
│
└── README.md # User guide
webapp/
└── article-tracking.json # Article database
└── All article metadata
└── Generation history
└── Publish status
Create C:\dev\itblogpros\_automation\.env:
# Required
GEMINI_API_KEY=your_gemini_key_here
# Optional (defaults shown)
DASHBOARD_PORT=3000
PREVIEW_PORT=3001
SITE_URL=https://itblogpros.com
# Optional for Bing submission
BING_API_KEY=your_bing_key_here
If ports conflict, change in your .env:
DASHBOARD_PORT=4000 # Instead of 3000
PREVIEW_PORT=4001 # Instead of 3001
Then restart dashboard.
┌─────────────────────────────────────────────────┐
│ 🚀 ITBlogPros Article Dashboard │
│ Generate, preview, and publish articles │
└─────────────────────────────────────────────────┘
┌──────────────────────┬──────────────────────────┐
│ 📝 Generate New │ 📚 Articles │
│ Article │ │
│ │ ┌─────────────────────┐ │
│ Keyword: │ │ Total │ 5 │ │
│ [____________] │ │ Drafts │ 2 │ │
│ │ │ Published │ 3 │ │
│ Product Type: │ └─────────────────────┘ │
│ [Routers ▼] │ │
│ │ Article Cards: │
│ [Generate Article] │ ┌──────────────────── ┐ │
│ │ │ WiFi 7 slower... │ │
│ ────────────────── │ │ Score: 85/100 │ │
│ │ │ [Preview][Publish] │ │
│ 🔍 Preview Controls │ └──────────────────── ┘ │
│ │ │
│ [Start Preview] │ ┌──────────────────── ┐ │
│ [Stop Preview] │ │ Best router for... │ │
│ [Rebuild Site] │ │ Score: 92/100 │ │
│ │ │ [Preview][Delete] │ │
│ Preview running at: │ └──────────────────── ┘ │
│ localhost:3001 │ │
└──────────────────────┴──────────────────────────┘
When generating:
Progress Bar: [████████░░░░░░░░░░] 60%
Messages:
✓ 🔍 Analyzing keyword and fetching Bing opportunities...
✓ 🤖 Generating article with Gemini AI...
⟳ 🔍 Validating Amazon links and content...
🏗️ Building site preview...
✅ Complete!
┌─────────────────────────────────────────────┐
│ WiFi 7 slower than expected │ [Draft]
├─────────────────────────────────────────────┤
│ 📝 1,350 words │ 🔗 3 Amazon links │
│ Score: 85/100 │ ✓ No meta-commentary │
├─────────────────────────────────────────────┤
│ [🔍 Preview] [🚀 Publish] [🗑️ Delete] │
└─────────────────────────────────────────────┘
cd C:\dev\itblogpros\_automation\webapp
dir server.js
dir article-workflow.js
dir index.html
npm list express
npm list ws
npm list simple-git
cd ..
node gemini-article-generator.js
# Should show help or run successfully
⚠️ Only if ready to publish!
# Find and kill process
netstat -ano | findstr :3000
taskkill /PID [number] /F
# Or change port in .env
echo DASHBOARD_PORT=4000 > .env
cd C:\dev\itblogpros\_automation\webapp
npm install
Check file exists:
dir C:\dev\itblogpros\_automation\gemini-article-generator.js
If missing, you need the generator script.
# Check git status
cd C:\dev\itblogpros
git status
# Configure git
git config user.email "[email protected]"
git config user.name "Your Name"
# Test connection
git fetch
Check Gemini API key:
cd C:\dev\itblogpros\_automation
type .env
# Should show GEMINI_API_KEY=...
Check API key valid:
Server shows detailed logs:
🔌 Client connected
📨 Received: {type: 'generation-update'}
✅ Article generated successfully
🔌 Client disconnected
View all articles:
type C:\dev\itblogpros\_automation\webapp\article-tracking.json
Structure:
{
"articles": [
{
"keyword": "WiFi 7 slower than expected",
"article": {
"filename": "2025-11-26-wifi-7-slower...",
"wordCount": 1350,
"qualityScore": 85
},
"published": false,
"createdAt": "2025-11-26T10:30:00.000Z"
}
]
}
Generate multiple articles by calling API:
const keywords = [
'WiFi 7 slower than expected',
'best router for Virgin Media',
'smart home setup guide'
];
for (const keyword of keywords) {
await fetch('http://localhost:3000/api/generate', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({ keyword })
});
// Wait 5 minutes between generations
await new Promise(r => setTimeout(r, 300000));
}
Edit article-workflow.js to add rules:
async validateCustomRules(article) {
// Minimum word count
if (article.wordCount < 1200) {
throw new Error('Article too short');
}
// Require specific products
if (!article.content.includes('TP-Link')) {
throw new Error('Must mention TP-Link products');
}
return true;
}
Get notified when articles publish:
// In article-workflow.js
async publishArticle(filename, commitMessage) {
const result = await super.publishArticle(filename, commitMessage);
// Send webhook
await fetch('https://hooks.slack.com/your-webhook', {
method: 'POST',
body: JSON.stringify({
text: `📝 New article published: ${filename}`
})
});
return result;
}
Best keywords:
Examples:
Always preview before publishing:
webapp/README.mdarticle-tracking.jsonarticle-workflow.jsYour complete article dashboard is set up and ready to use.
Start generating articles now:
Double-click: START-DASHBOARD.bat
Then enter a keyword and watch the automation magic! ✨
Time saved per article: 20-35 minutes Quality improvement: Automated validation ensures consistency Peace of mind: Preview before publishing
Welcome to streamlined article production! 🚀