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:
2026-03-19 17:38:12 +01:00
parent 9981d2a9d2
commit d5575b58e3
34 changed files with 3061 additions and 22 deletions
+159
View File
@@ -0,0 +1,159 @@
// Service Worker - Hookd Extension
const STORAGE_KEY = 'hookd_items';
const SETTINGS_KEY = 'hookd_settings';
const LISTS_KEY = 'hookd_lists';
const defaultSettings = {
categories: ['AI', 'News', 'Ideas', 'Memes', 'Other'],
userHandle: 'HaithamEKhalifa',
relayEnabled: true
};
const defaultLists = [
{ id: 'dev', name: 'Dev Friends', emoji: '👨‍💻', contacts: [] },
{ id: 'memes', name: 'Meme Buddies', emoji: '😂', contacts: [] },
{ id: 'business', name: 'Business', emoji: '💼', contacts: [] },
{ id: 'family', name: 'Family', emoji: '👨‍👩‍👧', contacts: [] }
];
// Initialize
chrome.runtime.onInstalled.addListener(() => {
console.log('Hookd installed');
chrome.storage.local.set({
[STORAGE_KEY]: [],
[SETTINGS_KEY]: defaultSettings,
[LISTS_KEY]: defaultLists
});
});
// Handle messages
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
// Get items
if (message.type === 'GET_ITEMS') {
chrome.storage.local.get([STORAGE_KEY], (r) => sendResponse(r[STORAGE_KEY] || []));
return true;
}
// Get lists
if (message.type === 'GET_LISTS') {
chrome.storage.local.get([LISTS_KEY], (r) => sendResponse(r[LISTS_KEY] || defaultLists));
return true;
}
// Add contact to list
if (message.type === 'ADD_CONTACT') {
chrome.storage.local.get([LISTS_KEY], (r) => {
const lists = r[LISTS_KEY] || defaultLists;
const list = lists.find(l => l.id === message.listId);
if (list && !list.contacts.find(c => c.username === message.contact.username)) {
list.contacts.push(message.contact);
chrome.storage.local.set({ [LISTS_KEY]: lists });
}
sendResponse({ success: true });
});
return true;
}
// Remove contact from list
if (message.type === 'REMOVE_CONTACT') {
chrome.storage.local.get([LISTS_KEY], (r) => {
const lists = r[LISTS_KEY] || defaultLists;
const list = lists.find(l => l.id === message.listId);
if (list) {
list.contacts = list.contacts.filter(c => c.username !== message.username);
chrome.storage.local.set({ [LISTS_KEY]: lists });
}
sendResponse({ success: true });
});
return true;
}
// Create new list
if (message.type === 'CREATE_LIST') {
chrome.storage.local.get([LISTS_KEY], (r) => {
const lists = r[LISTS_KEY] || defaultLists;
lists.push({
id: Date.now().toString(),
name: message.name,
emoji: message.emoji || '📌',
contacts: []
});
chrome.storage.local.set({ [LISTS_KEY]: lists });
sendResponse({ success: true });
});
return true;
}
// Delete list
if (message.type === 'DELETE_LIST') {
chrome.storage.local.get([LISTS_KEY], (r) => {
let lists = r[LISTS_KEY] || defaultLists;
lists = lists.filter(l => l.id !== message.listId);
chrome.storage.local.set({ [LISTS_KEY]: lists });
sendResponse({ success: true });
});
return true;
}
// Share item to list
if (message.type === 'SHARE_TO_LIST') {
chrome.storage.local.get([STORAGE_KEY], (r) => {
const items = r[STORAGE_KEY] || [];
// Mark item as shared
const item = items.find(i => i.id === message.itemId);
if (item) {
item.sharedTo = item.sharedTo || [];
item.sharedTo.push(message.listId);
chrome.storage.local.set({ [STORAGE_KEY]: items });
}
sendResponse({ success: true });
});
return true;
}
// Save item
if (message.type === 'SAVE_ITEM') {
chrome.storage.local.get([STORAGE_KEY], (r) => {
const items = r[STORAGE_KEY] || [];
const newItem = {
id: Date.now(),
...message.data,
type: message.data.source || 'dm',
saved: false,
aiProcessed: false,
sharedTo: [],
time: new Date().toISOString()
};
items.unshift(newItem);
chrome.storage.local.set({ [STORAGE_KEY]: items });
sendResponse({ success: true, item: newItem });
});
return true;
}
// Delete items
if (message.type === 'DELETE_ITEMS') {
chrome.storage.local.get([STORAGE_KEY], (r) => {
const items = r[STORAGE_KEY] || [];
const remaining = items.filter(i => !message.ids.includes(i.id));
chrome.storage.local.set({ [STORAGE_KEY]: remaining });
sendResponse({ success: true, deleted: message.ids.length });
});
return true;
}
// Update item
if (message.type === 'UPDATE_ITEM') {
chrome.storage.local.get([STORAGE_KEY], (r) => {
const items = r[STORAGE_KEY] || [];
const idx = items.findIndex(i => i.id === message.data.id);
if (idx !== -1) {
items[idx] = { ...items[idx], ...message.data };
chrome.storage.local.set({ [STORAGE_KEY]: items });
}
sendResponse({ success: true });
});
return true;
}
});