Files
sitemente/app/api/hookd/route.ts
T
horus d5575b58e3 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
2026-03-19 17:38:12 +01:00

119 lines
3.5 KiB
TypeScript

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
}