Local-first Print-ready documents Responsive dashboard

Welcome to Easy Suite

Launch quotes, invoices, orders, receipts, statements, payroll, inventory, and CRM tools in seconds. Search instantly, pin your favourites, and resume recent work without sending data to a server.

Filter by tags

All modules

Search by title, description, or tag.

ES

Easy Suite

Feature-Rich Document Generator Dashboard

Offline-friendly Print-ready documents Fast workflows

Welcome to Easy Suite

Launch any module in seconds â€" Quotes, Invoices, Orders, Receipts, Statements and more. Use search, pin your favourites, and pick up where you left off.

const tagButton = event.target.closest('[data-tag]'); if (tagButton) { selectTag(tagButton.getAttribute('data-tag') || ''); return; } const moduleLink = event.target.closest('[data-module-link]'); if (moduleLink) { const moduleId = moduleLink.getAttribute('data-module-link'); if (moduleId) addRecent(moduleId); } }); document.addEventListener('keydown', event => { const isEditable = ['INPUT', 'TEXTAREA', 'SELECT'].includes(document.activeElement?.tagName); if (event.key === '/' && !event.ctrlKey && !event.metaKey && !isEditable) { event.preventDefault(); document.getElementById('search')?.focus(); } if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'k') { event.preventDefault(); document.getElementById('search')?.focus(); } }); window.addEventListener('online', updateOnlineBadge, { passive: true }); window.addEventListener('offline', updateOnlineBadge, { passive: true }); } window.addEventListener('DOMContentLoaded', () => { applyTheme(localStorage.getItem(LS_THEME) || (document.documentElement.classList.contains('dark') ? 'dark' : 'light')); bindStaticEvents(); renderAll(); updateOnlineBadge(); }, { once: true });