Projects Software

Projects Software – build, iterate, and ship
Voice uses OpenAI Realtime. Allow microphone when prompted.

Click 'Load Projects' to sync with 1CRM

Click 'Load Projects' to view software projects



AI Chat – powered by OpenAI
Voice uses OpenAI Realtime. Allow microphone when prompted.
Documents – Manage your documents
File Manager – Create, Edit & View Files
List Manager – Task & Checklist System
Voice Commands: "create list [name]", "add [item] to list", "mark [item] as complete", "remove [item]"
Notes – Quick thoughts & ideas
'); viewer.document.close(); showNotification('Image opened in new window', 'success'); }; img.src = filepath; } function openPDFViewer(filepath) { window.open(filepath, '_blank'); showNotification('PDF opened in new window', 'success'); } function downloadFile(filename) { const link = document.createElement('a'); link.href = 'data/generated/' + filename; link.download = filename; link.click(); showNotification('File downloaded: ' + filename, 'success'); } function deleteFileConfirm(filename) { if (!confirm('Delete file: ' + filename + '?')) return; const fd = new FormData(); fd.append('filename', filename); fetch('?action=FileManager.delete_file', {method: 'POST', body: fd}) .then(r => r.json()) .then(data => { if (data.ok) { showNotification(data.message, 'success'); loadFiles(); } else { showNotification('Error: ' + (data.error || 'Unknown error'), 'error'); } }) .catch(err => { console.error('Delete error:', err); showNotification('Delete failed: ' + err.message, 'error'); }); } function refreshFiles() { loadFiles(); showNotification('Files refreshed', 'success'); } function getFileIcon(type) { const icons = { 'csv': 'fa-file-csv text-success', 'excel': 'fa-file-excel text-success', 'pdf': 'fa-file-pdf text-danger', 'image': 'fa-file-image text-primary', 'text': 'fa-file-alt text-secondary', 'json': 'fa-file-code text-info' }; return icons[type] || 'fa-file'; } function formatFileSize(bytes) { if (bytes < 1024) return bytes + ' B'; if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(2) + ' KB'; return (bytes / (1024 * 1024)).toFixed(2) + ' MB'; } function escapeHtml(text) { const div = document.createElement('div'); div.textContent = text; return div.innerHTML; } // Initialize on load if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } return { createCSV, createExcel, uploadFile, processUpload, loadFiles, openFile, downloadFile, deleteFileConfirm, refreshFiles, saveCSV, renderCSVEditor, addCSVRow, addCSVColumn, deleteCSVRow, updateHeader, updateCell }; })();