Skip to content

Product Roadmap ​

Canonical delivery status for EloSync modules and platform capabilities. Keep this page aligned with module dependencies, changelog, user-guide overviews, and the marketing site roadmap.

Legend: Shipped = available in product; Deferred = documented later work; Demand-driven = only when beta tenants ask.


Phase 1 — CRM Foundation (shipped) ​

CapabilityStatus
Leads, Tasks, ToDosShipped (default-included; Leads 1.9.0 inactivity manager digest; 1.8.0 real-time board sync; 1.7.0 convert opportunity gates; Tasks 1.8.0 real-time board sync; 1.5.0 milestone link + dependencies)
Contacts, CompaniesShipped (Contacts 1.7.0 follow-ups + import/export; Companies 1.5.0 duplicate matching and merge, 1.4.0 follow-ups + import/export)
Calendar, MeetingsShipped (Meetings requires Calendar; Calendar 1.10.0 named-calendar provider sync/watches + per-provider mappings; 1.9.0 named team/department calendars; 1.8.0 webhook-driven near real-time inbound; 1.7.0 Project/Contact/Company overlay push; 1.6.0 two-way sync + External pull; 1.5.0 Meeting/Task/Lead overlay push; 1.4.0 OAuth push)
Activities, Communication TemplatesShipped
Module MarketplaceShipped
Meta Lead Ads / inbound webhooksShipped
WhatsApp CloudShipped (billable; Help Desk auto-ticket + note sync 1.6.0; escalate 1.5.0; media + Automation triggers + interactive buttons/lists 1.4.0)

Planned / deferred after Phase 1 MVP ​

  • WhatsApp: alternate BSPs, AI WhatsApp features

Shipped depth (CRM): Calendar Task/Lead overlays (calendar 1.1.0); meeting invitee Calendar ACL (calendar 1.2.0); Lead convert polish (leads 1.5.0); Lead created_by / updated_by filters and columns (leads 1.6.0); Lead convert opportunity settings (leads 1.7.0); Lead real-time board sync (leads 1.8.0); Lead inactivity manager digest (leads 1.9.0); Tasks real-time board sync (tasks 1.8.0); Calendar Google/Outlook sync Phase 1 — per-user OAuth connect, one-way push for manual events (calendar 1.4.0); Meeting/Task/Lead overlay provider push (calendar 1.5.0); Project/Contact/Company overlay provider push (calendar 1.7.0); webhook-driven near real-time inbound sync (calendar 1.8.0); named team/department calendars (calendar 1.9.0); named-calendar provider sync/watches + per-provider event mappings (calendar 1.10.0).


Phase 2 — Sales Expansion (shipped) ​

CapabilityStatus
Opportunities (pipeline + Kanban)Shipped (1.3.0 real-time board sync)
QuotationsShipped (requires Opportunities; customer e-signature accept links 1.9.0)
ContractsShipped (requires Opportunities; PDF + e-signature 1.5.0; renewal reminders 1.6.0; accept evidence toggles 1.7.0; auto-renew 1.8.0)
Resellers / Reseller PayoutsShipped (free Sales opt-ins; Payments → Resellers → Payouts chain)

Deferred ​

  • Quotation multi-signer / third-party e-sign providers; multi-currency; approval workflows beyond status enums
  • Contract multi-signer / third-party e-sign providers
  • Reseller cross-workspace identity; reseller portal; automated bank disbursement

Phase 3 — Billing (shipped) ​

Tenant customer billing — not a redesign of Central Marketplace billing.

CapabilityStatus
InvoicesShipped
EstimatesShipped (requires Invoices)
Credit NotesShipped 1.2.0 (requires Invoices; PDF + email; applied refund)
PaymentsShipped 1.7.0 (Stripe PaymentIntent refunds; tenant Stripe portal Checkout 1.6.0; requires Invoices; receipt PDF + email; ledger refunds 1.5.0)

Deferred ​

  • Credit Notes: standalone notes not tied to an invoice; multi-currency
  • Invoices / Estimates / Payments: multi-currency conversion

Phase 4 — Purchasing (shipped) ​

CapabilityStatus
VendorsShipped
Purchase OrdersShipped (requires Vendors; PDF + email; per-line partial receive 1.5.0)
ExpensesShipped (soft Vendor / PO links; convert-from-PO; itemized lines 1.7.0; unpay 1.6.0)

Deferred ​

  • Vendor portal / scorecards
  • Expense reimbursement workflows beyond paid

Phase 5 — Inventory (shipped) ​

CapabilityStatus
Products & categoriesShipped
Warehouses & InventoryShipped (Inventory requires Products; serial/lot MVP inventory 1.3.0 / products 1.5.0; serial/lot PO receive + transfers inventory 1.4.0 / purchase-orders 1.7.0; moving-average valuation inventory 1.5.0)
PO receipt → stock-in (soft)Shipped

Deferred ​

  • FIFO / layered cost methods beyond moving average

Phase 6 — Finance (shipped) ​

CapabilityStatus
Accounting (CoA, journals, GL)Shipped
Financial Reports (TB, P&L, BS)Shipped (requires Accounting)
Soft cash movements from Payments / Expenses / transfersShipped
Soft AP from purchase-order receipts and inventory / COGS journalsShipped (accounting 1.8.0)
Pay vendor settle AP from cash/bankShipped (accounting 1.9.0 / purchase-orders 1.6.0)

Deferred ​

  • Multi-currency accounting / FX; budgets

Phase 7 — HR (shipped) ​

CapabilityStatus
EmployeesShipped
Leave ManagementShipped (requires Employees)
AttendanceShipped (requires Employees; check-in/out timer)
PayrollShipped (requires Employees; Accounting Mark paid Paid-from + optional draft accrual; own pay slips)

Deferred ​

  • Org chart; employee self-service portal; leave accrual engines; biometric / geofencing; tax engines / bank file export

Phase 8 — Operations (shipped) ​

CapabilityStatus
Help DeskShipped 1.18.0 (WhatsApp auto-ticket + bidirectional public-note sync; human-readable status timing 1.17.1; WhatsApp escalate intake 1.16.0; customer reply reopen 1.15.0; public replies 1.14.0; TipTap + attachments; portal note authorship 1.13.0; real-time board sync 1.12.0; SLA + IMAP; @mentions; status Kanban; soft Communication Templates; shell File a complaint)
Customer PortalShipped 1.4.0 (portal Stripe invoice Pay now; magic-link + portal 2FA + public KB 1.3.0; Support replies 1.2.0; projects/tasks 1.1.0; invite-only Contact accounts; invoices/payments/quotations/contracts; Help Desk submit/track; hard dep Contacts)
ProjectsShipped 1.8.0 (real-time board sync; workload heatmap 1.6.0; portfolio Gantt 1.5.0; milestones 1.4.0; soft Task project_id + dependencies tasks 1.5.0; Automation create_project via automation 1.4.0)
Knowledge BaseShipped (internal articles)
AssetsShipped
DocumentsShipped 1.7.0 (requires Storage; nested folders + file version history — readiness)
Reports / AnalyticsShipped
AnnouncementsShipped
Live ChatShipped 1.6.0 (department-routed first-chat FCM; assignee-only follow-up; idle department alert; per-bubble agent name)

Help Desk deferred ​

  • Social network DMs (Instagram / Messenger / X / Telegram) (WhatsApp escalate + opt-in auto-ticket + public-note sync + Live Chat escalate + Portal + IMAP already ship — see Help Desk 1.18.0 / WhatsApp Cloud 1.6.0)

Customer Portal (shipped) ​

CapabilityStatus
Customer PortalShipped 1.4.0 (portal Stripe Pay now; magic-link, portal 2FA, public KB 1.3.0; projects/tasks 1.1.0; Support 1.2.0)

Deferred beyond 1.4.0: portal passkeys.

Other Operations deferred ​

  • Knowledge Base: anonymous public URLs (portal published read shipped customer-portal 1.3.0); nested categories
  • Documents: check-in/check-out; in-browser preview; recursive descendant folder filters (folders + version history shipped 1.7.0; soft record links shipped earlier)
  • Assets: Product/Inventory FKs; maintenance → Help Desk
  • Automation: Marketing campaigns / email campaigns (separate SKUs); standalone send_whatsapp_document action (auto_send_whatsapp on generate_* shipped 1.7.0; generate_order PO shipped 1.8.0; if/else branches shipped 1.9.0)

Platform add-ons (shipped) ​

CapabilityStatus
Branded (white-label)Shipped (billable)
AutomationShipped (billable; 1.4.0 create_project; 1.5.0 WhatsApp interactive + generate quote/invoice; 1.6.0 email auto_send; 1.7.0 WhatsApp PDF auto-send; 1.8.0 generate_order PO; 1.9.0 if/else branches)
AI AssistantShipped (billable; Lead Copilot + workspace search 1.3.0 + Help Desk triage 1.4.0 + Task triage 1.5.0 + Opportunity triage 1.6.0 + Invoice triage 1.7.0 + Expense triage 1.8.0 + Project triage 1.9.0 + PO triage 1.10.0 + Payment triage 1.11.0 + Lead assign/note 1.12.0 + Estimate triage 1.13.0 + Quotation triage 1.14.0 + Credit Note triage 1.15.0 + Leave triage 1.16.0 + Contract triage 1.17.0 + Contact triage 1.18.0 + Company triage 1.19.0 + product guidance 1.20.0 + Vendor triage 1.21.0 + Inventory triage 1.22.0 + confirmed writes)
StorageShipped (free packs / quota)
Tenant API & WebhooksShipped (Settings → Developers; payment / Help Desk / credit-note events + endpoint edit)
Desktop wake pushShipped (FCM only)

EloSync Mobile ​

Native iOS/Android tenant app (Expo SDK 57). Broad module coverage shipped PR-by-PR (CRM, sales, billing, purchasing, HR, Ops, AI, Branded, Storage, etc.). Remaining gaps are module-specific (stats KPIs, trash, some PDF/settings panels remain web-only on mobile v1). See mobile user guide.


Near-term depth ​

Depth program 0 → 3c complete (2026-08-31): webhooks event catalog + Developers edit; Credit Notes applied refund (1.2.0); Help Desk @mentions 1.5.0, Kanban 1.6.0, Communication Template replies 1.7.0.

AI workspace search shipped (ai 1.3.0): search_workspace fans out across entitled Wave A+B+C modules (CRM/sales/billing/purchasing/ops docs & calendar records).

Help Desk AI triage shipped (ai 1.4.0): get_help_desk_ticket plus confirmed writes for status, assign, and notes (mirrors Help Desk API authz including close/reopen).

Task AI triage shipped (ai 1.5.0): get_task plus confirmed writes for status, assign, and notes (mirrors Task API authz including complete/reopen).

Opportunity AI triage shipped (ai 1.6.0): get_opportunity and get_opportunity_stages plus confirmed writes for stage, assign, and notes (mirrors Opportunity API authz; stage via stage_id).

Invoice AI triage shipped (ai 1.7.0): get_invoice plus confirmed writes for status, assign, and notes (mirrors Invoice HTTP /status authz including send/void gates; overdue list returns assignee id).

Expense AI triage shipped (ai 1.8.0): get_expense plus confirmed writes for status, assign, and notes (mirrors Expense HTTP /status authz including submit/approve/reject/pay/cancel gates; pending-approval list returns assignee id).

Project AI triage shipped (ai 1.9.0): confirmed writes for status, assign, and notes on existing project reads (mirrors Project HTTP /status; get returns assignee id).

Purchase Order AI triage shipped (ai 1.10.0): get_purchase_order plus confirmed writes for status, assign, and notes (mirrors PO HTTP /status authz including send/receive/cancel gates).

Payment AI triage shipped (ai 1.11.0): get_payment plus confirmed writes for status, assign, and notes (Posted→post(), Void→void(); Draft target rejected).

Lead assign + note shipped (ai 1.12.0): confirmed assign_lead / add_lead_note alongside existing Lead reads and status write.

Estimate AI triage shipped (ai 1.13.0): get_estimate plus confirmed writes for status, assign, and notes (mirrors Estimate HTTP /status authz including send/accept gates).

Quotation AI triage shipped (ai 1.14.0): get_quotation plus confirmed writes for status, assign, and notes (mirrors Quotation HTTP /status authz including send/accept gates; title only — no number field; assign uses EligibleOpportunityAssignee).

Credit Note AI triage shipped (ai 1.15.0): get_credit_note plus confirmed writes for status, assign, and notes (Issued→issue(), Applied→apply(), Void→void(), Refunded→refund(); Draft target rejected; assign uses EligibleCreditNoteAssignee).

Leave AI triage shipped (ai 1.16.0): get_leave_request + get_pending_leave_requests plus confirmed approve_leave_request / reject_leave_request (mirrors Leave HTTP approve/reject; no assign/notes; self-approve blocked for non-admin).

Contract AI triage shipped (ai 1.17.0): get_contract plus confirmed writes for status, assign, and notes (Sent→send() with acceptance token; Active from Sent→accept(); other targets→changeStatus with update; assign uses EligibleOpportunityAssignee).

Contact AI triage shipped (ai 1.18.0): get_contact plus confirmed writes for lifecycle status (on_boarded/off_boarded), assign, and notes (EligibleContactAssignee).

Company AI triage shipped (ai 1.19.0): get_company plus confirmed writes for assign and notes (EligibleCompanyAssignee; companies have no lifecycle status).

Automation create_project shipped (automation 1.4.0): creates a Planned project with soft opportunity/company/contact links from the trigger and a note on the related record; template opportunity_stage_create_project.

Contract PDF + e-signature shipped (contracts 1.5.0): branded PDF download, send-for-signature, customer accept links (reuse Quotation accept pattern), staff activate from sent, email with optional PDF + sign link.

Phased depth Steps 1–4 + convert polish (2026-09-16): Projects milestones (projects 1.4.0) + task dependencies / milestone_id (tasks 1.5.0); contract renewal reminders via crm:send-due-notifications + contract_renewal_notice_days (contracts 1.6.0); PO per-line partial quantity receive (purchase-orders 1.5.0); Calendar Task/Lead overlays (calendar 1.1.0); Lead convert polish — LeadConverted / Automation lead.converted, company activity ConvertedFromLead, optional company_id/company_name, conversion_meta names (leads 1.5.0).

Projects portfolio Gantt (2026-09-29): GET /projects/gantt + SPA Gantt view — catalog projects 1.5.0.

Projects workload heatmap (2026-09-29): GET /projects/heatmap + SPA Heatmap view — catalog projects 1.6.0.

Workspace record cohesion (2026-09-29): Contact/Company related hubs (opportunities, help desk, projects, documents); Email CRM links UI (email 1.4.0); Documents reverse list filter (documents 1.6.0); catalog contacts 1.6.0 / companies 1.3.0. Go-live: production readiness (Go).

Contact/Company follow-ups + import/export (2026-09-30): Follow-ups CRUD + complete on Contacts and Companies (next_follow_up_at, Calendar projection, daily due/overdue reminders via crm:send-due-notifications); CSV/XLSX import wizard (upload → map → options → preview → run, no equal-distribute assignment mode) and CSV/XLSX export. Catalog contacts 1.6.0 → 1.7.0, companies 1.3.0 → 1.4.0. Closes the "Contact/Company follow-ups / import-export" residual noted in workspace record cohesion readiness. Go-live: production readiness.

Leads real-time board sync (2026-09-30): Private Reverb channel tenant.{id}.leads.board (auth: same tenant + leads.view, mirrors the Live Chat inbox channel) broadcasts LeadCreated / LeadUpdated / LeadStageChanged / LeadAssigned / LeadDeleted from LeadEventSubscriber; SPA useLeadsBoardRealtime hook debounce-invalidates leads/board + leads/stats while the Kanban view is open. Catalog leads 1.7.0 → 1.8.0. Closes the "Leads: real-time board sync" deferred item above. Go-live: production readiness.

Opportunities real-time board sync (2026-10-04): Private Reverb channel tenant.{id}.opportunities.board (auth: same tenant + opportunities.view, mirrors Leads 1.8.0) broadcasts OpportunityCreated / OpportunityUpdated / OpportunityStageChanged / OpportunityAssigned / OpportunityDeleted from OpportunityEventSubscriber; SPA useOpportunitiesBoardRealtime hook debounce-invalidates opportunities/board + opportunities/stats while the Kanban view is open. Catalog opportunities 1.2.0 → 1.3.0. Closes the Opportunities deferred "Real-time board sync" item. Go-live: production readiness.

Tasks real-time board sync (2026-10-04): Private Reverb channel tenant.{id}.tasks.board (auth: same tenant + tasks.view, mirrors Leads 1.8.0 / Opportunities 1.3.0) broadcasts TaskCreated / TaskUpdated / TaskStatusChanged (with previous_status) / TaskAssigned / TaskDeleted from TaskEventSubscriber; SPA useTasksBoardRealtime hook debounce-invalidates tasks/board + tasks/stats while the Kanban view is open. Catalog tasks 1.7.0 → 1.8.0. Closes the Tasks deferred "Real-time board sync" item. Go-live: production readiness.

Help Desk real-time board sync (2026-10-05): Private Reverb channel tenant.{id}.help-desk.board (auth: same tenant + help-desk.view, mirrors Tasks 1.8.0) broadcasts HelpDeskTicketCreated / HelpDeskTicketUpdated / HelpDeskTicketStatusChanged (with previous_status) / HelpDeskTicketAssigned / HelpDeskTicketDeleted from HelpDeskEventSubscriber; SPA useHelpDeskBoardRealtime hook debounce-invalidates help-desk/board + help-desk/stats while the Kanban view is open. Catalog help-desk 1.11.0 → 1.12.0. Go-live: production readiness.

Projects real-time board sync (2026-10-05): Private Reverb channel tenant.{id}.projects.board (auth: same tenant + projects.view, mirrors Help Desk 1.12.0) broadcasts ProjectCreated / ProjectUpdated / ProjectStatusChanged (with previous_status) / ProjectAssigned / ProjectDeleted from ProjectEventSubscriber; SPA useProjectsBoardRealtime hook debounce-invalidates projects/board + projects/stats while the Kanban view is open. Catalog projects 1.7.0 → 1.8.0. Go-live: production readiness.

Automation WhatsApp interactive + document draft actions (2026-10-01): Actions send_whatsapp_interactive (module whatsapp-cloud, wraps queueInteractive), generate_quotation (module quotations, requires opportunity_id, draft only), and generate_invoice (module invoices, draft only, soft-links from the trigger) via ActionRunner; starter templates opportunity_stage_generate_quotation and whatsapp_inbound_quick_replies. Catalog automation 1.4.0 → 1.5.0 (no whatsapp-cloud bump). Closes the "Automation interactive send" and "generate quote/invoice" deferred items above (generate_order and auto-send remain deferred). Go-live: production readiness.

Calendar Google/Outlook sync Phase 1 (2026-09-30): Per-user OAuth connect (platform-wide Google + Microsoft OAuth apps, env client id/secret) with token storage + refresh + disconnect (calendar_provider_connections). One-way EloSync → provider push (create/update/cancel) for manual calendar events only, queued via PushCalendarEventToProviderJob with safe soft-fail (a broken integration never blocks calendar writes). External event ID mapping on calendar_events (external_provider / external_event_id). New permission calendar.manage_integrations. Catalog calendar 1.3.0 → 1.4.0. Closes the "Calendar: Google/Outlook sync" deferred item above — two-way sync, named team calendars, and pushing meeting/task/lead overlays remain deferred. Go-live: production readiness.

Calendar overlay provider push (2026-10-05): CalendarEventSourceEnum::shouldPushToProvider() gates PushCalendarEventToProviderJob for manual + meeting + task + lead (create/update/cancel/delete). Project/Contact/Company overlays remain deferred. Catalog calendar 1.4.0 → 1.5.0. Pest + Playwright one-session overlay sync. Go-live: production readiness.

Automation document auto-send (2026-10-05): Optional auto_send on generate_quotation / generate_invoice — after create, send() then email PDF to bill-to contact/company; fails the run when no recipient email. Catalog automation 1.5.0 → 1.6.0. Go-live: production readiness.

Automation WhatsApp document auto-send (2026-10-08): Optional auto_send_whatsapp on generate_quotation / generate_invoice — queues PDF via queueMedia into an open 24h conversation (AutomationDocumentWhatsAppSender). Catalog automation 1.6.0 → 1.7.0. Go-live: production readiness.

Automation generate_order / Purchase Order (2026-10-08): Action generate_order creates a Purchase Order draft (purchase-orders); optional email + WhatsApp auto-send; template manual_generate_purchase_order. Catalog automation 1.7.0 → 1.8.0. Closes the generate_order + WhatsApp document auto-send deferred leftovers. Go-live: production readiness.

Calendar two-way inbound (2026-10-05): Provider → EloSync pull as source=external (read-only); Sync now + hourly calendar:pull-provider-events; EloSync-owned mapped events skipped. Catalog calendar 1.5.0 → 1.6.0. Go-live: production readiness.

Calendar Project/Contact/Company overlay provider push (2026-10-08): CalendarEventSourceEnum::shouldPushToProvider() extended to Project + Contact + Company overlays (alongside the existing manual/meeting/task/lead sources), so every sourced calendar event now pushes to connected Google/Outlook accounts the same soft-fail way. Catalog calendar 1.6.0 → 1.7.0.

Calendar webhook-driven inbound sync (2026-10-08): Google channel + Microsoft Graph subscription watches (createWatch/renewWatch/stopWatch, soft-fail) persisted on calendar_provider_connections.meta; ensured on OAuth connect + Sync now. Public POST /webhooks/calendar-sync/{provider} resolves the connection and queues the existing inbound pull job — near real-time instead of waiting for the hourly backstop. Daily calendar:renew-provider-watches renews before Graph's ~3-day expiry. Catalog calendar 1.7.0 → 1.8.0.

Help Desk multi-channel intake (2026-10-08): WhatsApp escalate → ticket (source=whatsapp) peers Live Chat escalate / Portal / IMAP; Help Desk source badges. Catalog help-desk 1.15.0 → 1.16.0, whatsapp-cloud 1.4.0 → 1.5.0. Closes the “chat beyond IMAP” deferred item (social DMs remain). Go-live: production readiness.

Help Desk status timing (2026-10-13): started_at / resolved_at + status_changed durations + detail timing (human-readable, e.g. 3h), mirroring Tasks 1.10.1. Catalog help-desk 1.16.0 → 1.17.1. Go-live: production readiness.

WhatsApp Help Desk auto-ticket + bidirectional note sync (2026-10-13): Opt-in auto_create_help_desk_tickets; public notes sync WA ↔ Help Desk inside the 24h window (no SLA first response on customer inbound). Catalog whatsapp-cloud 1.5.0 → 1.6.0, help-desk 1.17.x → 1.18.0. Go-live: production readiness.

Calendar named team/department calendars (2026-10-08): New calendars table (name/slug, optional soft-linked department_id, creator); calendar_events.calendar_id nullable FK (null stays personal). GET/POST/PUT/DELETE /calendar/calendars behind new calendar.manage_calendars permission (admin/manager default). Visibility adds creator + department members/manager (only when Departments is entitled) + calendar.view_all; posting to a named calendar needs calendar.create and membership. SPA filter chips (All/Personal/named), manage-calendars dialog, and an event-form calendar picker. Catalog calendar 1.8.0 → 1.9.0. Closes the "Calendar: named team calendars" deferred item above.

Calendar named-calendar provider sync/watches (2026-10-13): Secondary Google/Outlook calendars + watches for named EloSync calendars (calendar_provider_links); per-provider calendar_event_provider_mappings; Google full calendar scope. Catalog calendar 1.9.0 → 1.10.0. Go-live: production readiness.

Tenant Stripe + portal invoice Checkout (2026-10-13): Workspace-owned Stripe keys (sandbox/live), payments.manage_integrations, portal POST …/invoices/{id}/checkout, webhook POST /webhooks/tenant/{tenant}/stripe/customer-payments posts gateway CustomerPayment. Catalog payments 1.5.0 → 1.6.0, customer-portal 1.3.0 → 1.4.0. Go-live: production readiness.

Payments Stripe refunds (2026-10-17): Posted payments with gateway_provider=stripe refund the captured PaymentIntent on the workspace Stripe account, then record the existing ledger refund (stripe_refund_id). Manual methods stay ledger-only. refund.created books a dashboard refund once. Catalog payments 1.6.0 → 1.7.0. Go-live: production readiness.

Automation if/else branches (2026-10-17): Shared actions still run in order. Optional branches run the first match; one otherwise branch is the fallback. Branch conditions do not gate the workflow. Template manual_priority_branch. Catalog automation 1.8.0 → 1.9.0. Go-live: production readiness.

Accounting purchase receipts and inventory journals (2026-10-17): Receiving a purchase order posts Dr Inventory 1200 or Operating Expenses 6000 / Cr Accounts Payable 2000 when Accounting is entitled. Manual stock in credits Owner Equity 3000; stock out debits Cost of Goods Sold 5000. Transfers post nothing. An existing purchase-order expense skips the payable journal, and convert-to-expense is blocked after that journal exists. Catalog accounting 1.7.2 → 1.8.0. Go-live: production readiness.

Inventory serial + lot tracking MVP (2026-10-17): Products may enable Track serials or Track lots (mutually exclusive; zero on-hand to enable). Stock in/out require matching serials[] or lot. Catalog products → 1.5.0, inventory → 1.3.0. Go-live: production readiness.

Inventory serial/lot PO receive + transfers (2026-10-17): PO receive accepts per-line serials/lots; transfer complete moves serials and lot quantities between warehouses. Catalog inventory 1.3.0 → 1.4.0, purchase-orders → 1.7.0. Go-live: production readiness.

Inventory moving-average valuation (2026-10-17): Stock in / PO receive update products.cost as a moving average; stock list and stats expose on-hand value. Catalog inventory 1.4.0 → 1.5.0. Go-live: production readiness.

Inventory AI triage (2026-10-17): Ask EloSync get_product, get_low_stock, get_inventory_stats, confirmed add_product_note. Catalog ai 1.21.0 → 1.22.0. Go-live: production readiness.

Asset depreciation journals (2026-10-18): Straight-line monthly depreciation. First post capitalizes Dr Fixed Assets 1500 / Cr Owner Equity 3000; each month debits Depreciation Expense 6500 and credits Accumulated Depreciation 1550. Catalog assets 1.2.0 → 1.3.0, accounting 1.9.0 → 1.10.0. Go-live: production readiness.

Expense unpay (2026-10-19): POST /expenses/{id}/unpay returns a paid expense to approved and voids its payment journal when Accounting is entitled. A locked period leaves the expense paid. Catalog expenses 1.5.0 → 1.6.0. Go-live: production readiness.

Expense itemized lines (2026-10-19): Optional lines on create/update. Header amount and tax are the sums; header category is set only when every line shares one category. List category filter matches the header or any line. Purchase-order convert copies each PO line and splits header tax across them. Pay still posts one debit for the gross. Catalog expenses 1.6.0 → 1.7.0. Go-live: production readiness.

Still deferred: multi-currency; PO/Vendor portals; Automation marketing campaigns; portal passkeys; FIFO cost layers. If/else branches shipped in Automation 1.9.0. Purchase-order and inventory auto-post shipped in Accounting 1.8.0.

Customer Portal depth + Help Desk reopen (2026-10-08): Magic-link + TOTP 2FA + portal published KB; Help Desk closed/resolved reopen on customer reply + dedicated email toggles. Catalog customer-portal 1.2.0 → 1.3.0, help-desk 1.14.0 → 1.15.0.

Documents folders + versions (2026-10-20): Nested folders (max depth 5) + file version history on replace. Catalog documents 1.6.0 → 1.7.0. Go-live: production readiness (Go). Further Documents depth (check-in/check-out, in-browser preview, recursive folder filters, mobile folders/versions) is paused until tenant feedback.

Next when prioritized: demand-driven items below only (no speculative module depth). Broader AI tools may continue lightly when cheap and patterned.


Demand-driven / parked ​

ItemNotes
Customer Portal magic-link loginBeyond 1.1.0 hub — on demand
RecruitmentHR expansion — on demand
Documents check-in/check-out / preview / recursive filters / mobile foldersNested folders + version history shipped documents 1.7.0; paused pending tenant ask
Marketing campaigns / email campaignsSeparate SKUs; Automation deferred
Vendor PortalParked
Multi-currency / multi-branchParked
Report builder depthParked
Manufacturing, QA, POS, e-commerceOut of active scope unless demanded

Official documentation for the EloSync SaaS Platform.