SiteMente - AI-Powered Lead Generation Platform
Features: - Mission Control dashboard - HP Submissions tracking - AI Agents integration - Lead management CRM - Marketing email templates - Chrome extension support Tech: Next.js, TypeScript, Tailwind CSS, MySQL
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
import { NextResponse } from 'next/server'
|
||||
import fs from 'fs'
|
||||
import path from 'path'
|
||||
|
||||
export const dynamic = 'force-dynamic'
|
||||
|
||||
// Get all Hookd items
|
||||
export async function GET(request: Request) {
|
||||
const url = new URL(request.url)
|
||||
const action = url.searchParams.get('action') || 'list'
|
||||
|
||||
try {
|
||||
const possiblePaths = [
|
||||
path.join(process.cwd(), '..', 'chrome-extensions', 'hookd', 'data.json'),
|
||||
'/var/www/hostpioneers.com/public_html/contacts.json',
|
||||
]
|
||||
|
||||
let data: any[] = []
|
||||
|
||||
// Try to read from Hookd storage
|
||||
for (const filePath of possiblePaths) {
|
||||
if (fs.existsSync(filePath)) {
|
||||
const content = fs.readFileSync(filePath, 'utf-8')
|
||||
data = JSON.parse(content)
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if (action === 'stats') {
|
||||
return NextResponse.json({
|
||||
total: data.length,
|
||||
byCategory: data.reduce((acc: any, item) => {
|
||||
const cat = item.category || 'Uncategorized'
|
||||
acc[cat] = (acc[cat] || 0) + 1
|
||||
return acc
|
||||
}, {}),
|
||||
aiProcessed: data.filter((i: any) => i.aiProcessed).length,
|
||||
saved: data.filter((i: any) => i.saved).length,
|
||||
recent: data.slice(0, 10)
|
||||
})
|
||||
}
|
||||
|
||||
return NextResponse.json({ items: data })
|
||||
} catch (error) {
|
||||
console.error('Hookd API error:', error)
|
||||
return NextResponse.json({ items: [], error: 'Failed to fetch' }, { status: 200 })
|
||||
}
|
||||
}
|
||||
|
||||
// Process items with AI
|
||||
export async function POST(request: Request) {
|
||||
try {
|
||||
const body = await request.json()
|
||||
const { items, instruction } = body
|
||||
|
||||
// This would call MiniMax API to process items
|
||||
// For now, return mock AI analysis
|
||||
|
||||
const results = items.map((item: any) => ({
|
||||
id: item.id,
|
||||
category: guessCategory(item),
|
||||
score: guessScore(item),
|
||||
tags: guessTags(item),
|
||||
summary: item.content?.slice(0, 100) + '...'
|
||||
}))
|
||||
|
||||
return NextResponse.json({ results })
|
||||
} catch (error) {
|
||||
console.error('AI processing error:', error)
|
||||
return NextResponse.json({ error: 'Processing failed' }, { status: 500 })
|
||||
}
|
||||
}
|
||||
|
||||
function guessCategory(item: any): string {
|
||||
const content = (item.content || '').toLowerCase()
|
||||
const link = (item.link || '').toLowerCase()
|
||||
|
||||
if (content.includes('ai') || content.includes('gpt') || content.includes('claude') ||
|
||||
content.includes('openai') || content.includes('anthropic') ||
|
||||
link.includes('github.com') || link.includes('huggingface')) {
|
||||
return 'AI'
|
||||
}
|
||||
if (content.includes('news') || content.includes('breaking') || content.includes('just in')) {
|
||||
return 'News'
|
||||
}
|
||||
if (content.includes('idea') || content.includes('thought') || content.includes('what if')) {
|
||||
return 'Ideas'
|
||||
}
|
||||
if (content.includes('lol') || content.includes('meme') || content.includes('funny') || content.includes('😂')) {
|
||||
return 'Memes'
|
||||
}
|
||||
return 'Other'
|
||||
}
|
||||
|
||||
function guessScore(item: any): number {
|
||||
const content = (item.content || '').toLowerCase()
|
||||
let score = 5
|
||||
|
||||
if (item.link) score += 1
|
||||
if (content.length > 100) score += 1
|
||||
if (content.includes('github')) score += 1
|
||||
if (content.includes('ai') || content.includes('gpt')) score += 2
|
||||
|
||||
return Math.min(10, score)
|
||||
}
|
||||
|
||||
function guessTags(item: any): string[] {
|
||||
const tags: string[] = []
|
||||
const content = (item.content || '').toLowerCase()
|
||||
|
||||
if (content.includes('ai')) tags.push('AI')
|
||||
if (content.includes('tool')) tags.push('Tools')
|
||||
if (content.includes('news')) tags.push('News')
|
||||
if (content.includes('tutorial')) tags.push('Tutorial')
|
||||
if (content.includes('github')) tags.push('Code')
|
||||
|
||||
return tags
|
||||
}
|
||||
Reference in New Issue
Block a user