> For the complete documentation index, see [llms.txt](https://docs.xenoraa.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.xenoraa.com/xenoraa-release-notes/v4.x-releases.md).

# v4.x Releases

## v4.x Release Series

> 42 releases in this series. Last updated: 2026-07-09 17:52 UTC

### v4.99.0 — Xena AI Phase 3 — Daily Business Snapshot

**Released:** 2026-07-06  |  **Category:** Xena AI  |  **Commit:**

* New DB table: xena\_daily\_snapshots (user\_id, snapshot\_date, leads\_total, leads\_7d, leads\_uncontacted,
* pipeline\_value, deals\_open, deals\_won, activities\_pending, activities\_overdue, invoices\_unpaid,
* invoices\_unpaid\_amt, income\_30d, expense\_30d, net\_profit\_30d, pos\_revenue\_today, pos\_orders\_7d,
* pos\_low\_stock\_count, ecom\_orders\_7d, ecom\_revenue\_7d, insights JSON, alerts JSON)
* New Artisan command: xena:daily-snapshot \[--user=ID] — computes all metrics + auto-generates
* alerts (uncontacted leads, overdue activities, revenue drop >20%, low stock) and insights
* (profit margin, pipeline health, lead velocity)
* Laravel scheduler: runs xena:daily-snapshot daily at 06:00 for all active tenants
* Crontab installed on server: \* \* \* \* \* php artisan schedule:run
* XenaController buildSystemPrompt() now injects today's snapshot as 'DAILY BUSINESS SNAPSHOT'
* section — GPT answers trend/alert questions without any tool call
* Fixed column names: crm\_invoices.grand\_total (not total\_amount), crm\_products.qty\_in\_stock/reorder\_level
* Verified: 'What are my key business alerts for today?' returns alerts + insights from snapshot
* (22 uncontacted leads, 2 overdue activities, 30% revenue drop, 57% profit margin)
* GitHub commits: e4dc865 (v4.99.2 column fixes)

***

### v4.98.0 — Xena AI Phase 2 — Enriched System Prompt with Platform Knowledge + Live Tenant Profile

**Released:** 2026-07-06  |  **Category:** Xena AI  |  **Commit:** [`1411f6b`](https://github.com/goesscay/xenoraa/commit/1411f6b)

* Added buildTenantProfile() method: single DB query fetching live tenant stats at chat time
* (leads total/new/today, contacts, deals open/pipeline value, activities pending/overdue,
* invoices, products, POS orders, ecom orders, lead sources via STRING\_AGG)
* Injected tenant profile snapshot into every system prompt as 'TENANT PROFILE (live data as of now)'
* Replaced sparse 9-line platform knowledge with comprehensive 6-module knowledge block:
* CRM (leads/contacts/accounts/deals/activities — all fields, statuses, navigation URLs)
* Inventory & Billing (products/quotes/sales orders/invoices/vendors — navigation)
* Accounts (income/expense ledger, reports — navigation)
* POS (terminal, sessions, products — navigation)
* Ecommerce (online store, orders — navigation)
* Projects (tasks, milestones — navigation)
* Added full CRM workflow: Lead -> Contact -> Account -> Deal -> Quote -> Sales Order -> Invoice
* Added Indian number formatting rule (Rs., lakhs/crores)
* Added how-to question handling: answer with navigation path and steps (no tool needed)
* Verified: 'How do I convert a lead to a deal? Also what is my pipeline value?' correctly
* answered both parts — workflow from knowledge + Rs.5,180,000 pipeline from live DB
* GitHub commit: 1411f6b

***

### v4.97.0 — Xena AI Phase 1 — OpenAI Function Calling (Tools API)

**Released:** 2026-07-06  |  **Category:** Xena AI  |  **Commit:** [`43eb402`](https://github.com/goesscay/xenoraa/commit/43eb402)

* Replaced XenaIntentParser regex with OpenAI Tools API — 20 tool definitions covering all Xenoraa modules
* GPT now natively understands any phrasing and extracts all params accurately without regex
* Fixed PHP empty properties: (object)\[] serializes to JSON {} not \[] (OpenAI requires object not array)
* Tools: crm\_list\_leads, crm\_create\_lead, crm\_list\_contacts, crm\_search\_contacts, crm\_list\_deals,
* crm\_pipeline\_value, crm\_list\_activities, crm\_create\_activity, accounts\_summary, accounts\_unpaid\_invoices,
* accounts\_create\_income, accounts\_create\_expense, pos\_today\_sales, pos\_low\_stock, pos\_list\_products,
* ecommerce\_recent\_orders, ecommerce\_order\_stats, projects\_list, projects\_overdue\_tasks, general\_dashboard\_stats
* toolToActionKey() auto-maps crm\_create\_lead -> crm.create\_lead (underscore to dot notation)
* XenaIntentParser no longer used for intent detection (kept for backward compat)
* Verified: 'I need to add a new prospect named Priya Sharma, she works at TechSoft India, her mobile is 9988776655'
* correctly calls crm\_create\_lead with name/company/phone extracted by GPT natively
* GitHub commit: 43eb402

***

### v4.96.0 — Xena AI — Lead Creation, Tenant Scoping, Contact Search, Response Quality

**Released:** 2026-07-06  |  **Category:** Xena AI  |  **Commit:** [`534782f`](https://github.com/goesscay/xenoraa/commit/534782f)

* Bug 1 (extractParams): Added 4 regex patterns to cover all name formats including 'Create lead Kavin from SGT Technologies' — previously only matched 'for/named/called CapitalName'
* Bug 2 (crmCreateLead): Now sets first\_name, last\_name, lead\_status='Not Contacted', source='xena\_ai' — lead now appears correctly in the Leads landing page
* Bug 3 (crmListContacts): New action added to actionMap and dispatch — 'show contacts' / 'how many contacts' now works
* Bug 4 (crmSearchContacts): Fixed SQL from 'name' column (doesn't exist) to first\_name/last\_name/mobile — contact search no longer crashes
* Bug 5 (logAction): Fixed column names: app/action/params/success instead of action\_type/action\_params/status — action logging now works
* Bug 6 (dispatch): Now returns 'summary' field from action result so XenaController can pass exact data to GPT
* Bug 7 (buildSystemPrompt): Added actionError param — when action fails, GPT explains the failure in plain language instead of saying 'I cannot access data'
* Bug 8 (buildSuggestions): Added crm.list\_contacts suggestion chips
* Tenant scoping: All actions use $this->userId (Auth::id()) — confirmed all DB queries scoped by user\_id
* Verified: Lead 'Kavin from SGT Technologies' created via Xena and visible at top of Leads page
* GitHub commit: 534782f

***

### v4.95.0 — Xena AI Response Quality Improvements

**Released:** 2026-07-06  |  **Category:** Xena AI  |  **Commit:** [`b009338`](https://github.com/goesscay/xenoraa/commit/b009338)

* Root cause: XenaController never passed action result data to GPT — it only said "action was executed" without sharing the actual numbers/names/amounts retrieved from DB
* Fix 1 (XenaController): Extract `summary` field from action result and inject into system prompt as "ACTION RESULT — use these exact numbers/data in your response"
* Fix 2 (XenaController): Added instruction "NEVER say you cannot access data" to prevent hallucinated refusals when data is already retrieved
* Fix 3 (XenaIntentParser): Added missing patterns: 'how many lead', 'total lead', 'lead count', 'today.\*lead', 'number of lead'
* Fix 4 (XenaIntentParser): Added new `crm.list_contacts` action with patterns: show/list/all/my/view/how many/total/get contacts
* Fix 5 (XenaIntentParser): Added 'search a contact', 'find a contact', 'look for contact', 'search for contact' to crm.search\_contacts
* Fix 6 (XenaActionService): Fixed crm\_contacts SQL — column is `full_name` not `name`; added `summary` field to all action results
* Verified: Xena responds with exact DB data ("You have 150 leads"), shows action card with lead names/companies/statuses, suggestion chips work
* GitHub commit: b009338

***

### v4.94.4 — Fix Xena AI Streaming — CURLOPT\_RETURNTRANSFER Conflict

**Released:** 2026-07-06  |  **Category:** Xena AI  |  **Commit:** [`d2d553c`](https://github.com/goesscay/xenoraa/commit/d2d553c)

* Root cause: CURLOPT\_RETURNTRANSFER => false was conflicting with CURLOPT\_WRITEFUNCTION in PHP curl
* When both are set, PHP ignores the write function and dumps raw SSE data to stdout (0 chunks received, empty assistant bubble)
* Fix: Removed CURLOPT\_RETURNTRANSFER => false from XenaController.php curl\_setopt\_array
* Also fixed: config/openai.php added api\_base key; XenaController changed env('OPENAI\_API\_KEY') to config('openai.api\_key') (env() returns null when config cache is active)
* Also fixed: Nginx gopi.blog SSE location block with fastcgi\_buffering off and correct SCRIPT\_FILENAME → index.php
* Verified: Xena responds with live data (20 leads), suggestion chips appear, streaming works end-to-end
* GitHub commit: d2d553c

***

### v4.94.3 — Fix Xena Drawer Double-Listener Bug

**Released:** 2026-07-06  |  **Category:** Xena AI  |  **Commit:** [`2ba2ea1`](https://github.com/goesscay/xenoraa/commit/2ba2ea1)

* Root cause: xenaOpenBtn had BOTH onclick attribute (window\.xenaToggle) AND addEventListener('click', xenaToggle) from DOMContentLoaded in xena.js
* Each click fired xenaToggle TWICE → open then immediately close → drawer appeared to do nothing
* Fix: Removed onclick attribute from xenaOpenBtn in admin.blade.php (line 439)
* The single addEventListener in xena.js DOMContentLoaded now handles the click correctly
* Verified: Drawer opens and stays open on single click; drawerClass=open, drawerRight=0px, btnOnclick=null
* GitHub commit: 2ba2ea1

***

### v4.94.0 — Xena AI Agent 2.0 — Full Rebuild

**Released:** 2026-07-06  |  **Category:** Xena AI  |  **Commit:** [`a70b947`](https://github.com/goesscay/xenoraa/commit/a70b947)

* New service: XenaIntentParser — keyword/regex NLP maps natural language to structured intent JSON for all apps
* Rebuilt XenaActionService — all actions return structured result cards (type, title, colour, fields, list rows, stats, view\_url for View buttons)
* Rebuilt XenaController — streaming SSE with 5 thinking steps (Analyzing, Identifying, Finding, Reviewing, Generating), conversation memory (last 8 messages), next-step suggestions, correct OpenAI streaming tool-call argument accumulation
* Rebuilt xena.js v2.0 — streaming SSE renderer, action card HTML builder, thinking bar animation, suggestion chips, auto app context from URL, history session loading, welcome screen with quick prompts, all event listeners use IDs not inline onclick
* Updated admin.blade.php drawer HTML — new IDs (xenaChatArea, xenaChatPane, xenaHistoryPane, xenaTabChat, xenaTabHistory, xenaThinkingBar, xenaSuggestionsRow, xenaWelcome, xenaAttachBtn, xenaMicBtn, xenaCloseBtn, xenaNewChatBtn), welcome screen with personalised greeting and 6 quick prompt buttons
* Updated admin.blade.php CSS — v2.0 styles with action card (xena-card-*, xena-stat-*, xena-list-\*), thinking dot animation, suggestion chips, drawer uses right:-400px/right:0 transition
* GitHub commit: a70b947

***

### v4.93.1 — Xena Phase 5 & 6 Fixes

**Released:** 2026-07-06  |  **Category:** Xena AI  |  **Commit:** [`2b21b69`](https://github.com/goesscay/xenoraa/commit/2b21b69)

* Fixed credits page 500 error: route called creditsPage() but method was named credits() — renamed to match
* Added 'Xena AI Credits' nav link in tenant sidebar under Administration section
* Added 'Xena Agent Mgmt' nav link in superadmin sidebar under Training Hub section
* Fixed superadmin.superadmin.xena doubled route name prefix → superadmin.xena.\*
* Verified: /admin/xena/credits loads (297 credits, 3 used), /superadmin/xena loads (18 tenants, global settings)
* GitHub commit: 2b21b69

***

### v4.93.0 — Xena AI Agent — Full 6-Phase Implementation

**Released:** 2026-07-06  |  **Category:** Xena AI  |  **Commit:** [`05c9f41`](https://github.com/goesscay/xenoraa/commit/05c9f41)

* DB: xena\_credits (user\_id, credits\_used, credits\_total, credits\_reset\_at, is\_active, monthly\_free),
* xena\_conversations (user\_id, session\_id, role, message, app\_context, action\_taken, action\_result, tokens\_used),
* xena\_action\_logs (user\_id, session\_id, action\_type, action\_params JSON, result JSON, status, error\_message)
* Models: XenaCredit (deduct/topup/resetMonthly/ensureExists), XenaConversation, XenaActionLog
* Service: XenaActionService — intent parsing + actions for CRM (list/create/search leads, contacts, deals),
* Accounts (summary, income, expenses), POS (today sales, recent orders), Ecommerce (products, orders),
* Projects (list, summary), cross-app dashboard summary
* Controller: XenaController (chat POST with OpenAI GPT-4o-mini, history GET, session GET,
* creditsStatus GET, creditsPage GET, upload POST with file attachment support)
* Controller: SuperAdminXenaController (index, saveSettings, topupCredits, toggleTenant, tenantLogs)
* Views: resources/views/admin/xena/credits.blade.php (tenant credit management page),
* resources/views/admin/superadmin/xena.blade.php (global Xena management panel),
* resources/views/admin/superadmin/xena-tenant-logs.blade.php (per-tenant conversation logs)
* Frontend: public/js/xena.js — drawer open/close (slide from right), SSE streaming responses,
* Web Speech API voice input, file attachment (image/PDF/CSV), app context chips
* (For You/CRM/Accounts/POS/Ecommerce/Projects), quick prompt buttons, Chat/History tabs, credit counter
* UI: 'Xena' button in topbar (before user avatar), right-side drawer 380px wide with dark overlay
* Routes: 6 tenant routes (admin.xena.*) + 5 superadmin routes (superadmin.xena.*)
* Credits: 300 free monthly credits per tenant, 1 credit per message, auto-reset monthly
* Security: CSRF on all POST, auth+subscribed middleware, user\_id scoping on all DB queries
* Keyboard shortcut: Ctrl+Shift+X opens/closes Xena drawer
* GitHub commit: 05c9f41

***

### v4.92.2 — User Management Page Redesign

**Released:** 2026-07-06  |  **Category:** Platform  |  **Commit:** [`fc625c8`](https://github.com/goesscay/xenoraa/commit/fc625c8)

* Replaced legacy generic CSS (btn, form-control, card, table, badge-*) with crm2-* design system
* All colours use CSS variables — full dark/light theme support
* License bar, filter bar, table, user cell avatars, role/status badges, action buttons all redesigned
* GitHub commit: fc625c8

***

### v4.92.1 — Lead Ad Forms Polish

**Released:** 2026-07-06  |  **Category:** Platform  |  **Commit:** [`141a37c`](https://github.com/goesscay/xenoraa/commit/141a37c)

* Sidebar: single 'Lead Ad Forms' menu item (removed separate Meta/Google links)
* Dark theme: all hardcoded colours replaced with CSS vars in lead-sources blade
* Step 3 alignment fixed in setup guide
* GitHub commit: 141a37c

***

### v4.92.0 — Meta Lead Ads + Google Lead Forms Integration

**Released:** 2026-07-06  |  **Category:** Platform  |  **Commit:** [`47e0040`](https://github.com/goesscay/xenoraa/commit/47e0040)

* New: CRM > Integrations > Lead Source Integrations page
* DB: crm\_lead\_integrations table (user\_id, platform, is\_active, webhook\_token, meta\_app\_id,
* meta\_app\_secret, meta\_page\_id, meta\_access\_token, meta\_verify\_token, google\_webhook\_key,
* field\_mapping JSON, leads\_received, last\_synced\_at)
* Model: App\Models\CrmLeadIntegration with encrypt/decrypt helpers, generateToken(), defaultMapping()
* Controller (CrmModuleController): leadIntegrations(), leadIntegrationsMetaSave(),
* leadIntegrationsGoogleSave(), leadIntegrationsMetaRegenerateToken(),
* leadIntegrationsGoogleRegenerateToken(), \_metaSubscribePage() (Graph API subscription)
* WebhookController (new public controller):
* metaVerify() — GET hub.challenge handshake for Meta webhook verification
* metaReceive() — POST receives Meta lead payload, validates HMAC-SHA256 signature
* googleReceive() — POST receives Google lead payload, validates google\_key
* \_insertLead() — applies field\_mapping JSON, inserts into crm\_leads with source tag
* Routes: 5 admin routes (admin.crm2.integrations.lead-sources.\*) + 3 public webhook routes
* (webhook.meta.verify, webhook.meta.receive, webhook.google.receive — no auth middleware)
* UI: two-column card layout, each card has enable toggle, step-by-step setup guide,
* webhook URL + verify token with copy buttons, credential inputs (secrets masked),
* field mapping table (add/remove rows), stats bar, save + regenerate token buttons
* Sidebar: Integrations flyout + sub-panel updated with Meta Lead Ads and Google Lead Forms links
* GitHub commit: 47e0040

***

### v4.91.4 — Professional Mobile Header Redesign

**Released:** 2026-07-06  |  **Category:** Platform  |  **Commit:** [`c37c66a`](https://github.com/goesscay/xenoraa/commit/c37c66a)

* Mobile topbar: clean 3-item layout — 9-dots launcher | App›Page breadcrumb | hamburger + avatar
* Hidden on mobile via CSS @media (max-width:1024px): desktop 3-line toggle, App Name, divider, AI On, Dark mode, POS link, View Site link
* Shown on mobile via CSS @media: #xnMobileMenuBtn hamburger, .xn-topbar-mobile-title breadcrumb
* Mobile breadcrumb: two-line (app name in --accent colour + page title in bold)
* Profile button: icon-only on mobile (username + chevron hidden via .xn-profile-username/.xn-profile-chevron CSS classes)
* Launcher panel: full-width on mobile (left:8px right:8px auto width)
* Edge tab: hidden on mobile (display:none !important — no hover on touch)
* Sidebar: full-width drawer on mobile, slides in from left with dark overlay
* xnToggleSidebar(): mobile-aware — calls xnMobileToggle() when window\.innerWidth<=1024px
* Removed fragile JS window\.innerWidth hack; CSS @media handles all visibility
* DOMContentLoaded: auto-close sidebar drawer when any .xn-nav-link or .xn-nav-sub-link is tapped on mobile
* \#xnMobileMenuBtn: default display:none on desktop, shown only via @media
* GitHub commit: c37c66a

***

### v4.91.3 — Fix Broken Route Names in Admin Sidebar + Edge-Tab Hover

**Released:** 2026-07-06  |  **Category:** Platform  |  **Commit:** [`40b5005`](https://github.com/goesscay/xenoraa/commit/40b5005)

* Root cause: admin.blade.php had wrong route names in flyout JS onmouseenter handlers and nav link hrefs
* Fixed 9 broken route references:
* admin.accounts.trial-balance → admin.accounts.reports.trial-balance
* admin.accounts.general-ledger → admin.accounts.reports.general-ledger
* admin.accounts.gst-report → admin.accounts.reports.gst
* admin.accounts.comparative-pl → admin.accounts.reports.comparative-pl
* admin.accounts.segment-report → admin.accounts.reports.segment
* admin.ecommerce.integrations → admin.ecommerce.integrations.mail-config
* admin.ecommerce.settings → admin.ecommerce.settings.mail-templates
* admin.crm2.settings.document → admin.crm2.settings.document-templates
* admin.crm2.projects.index → admin.crm2.projects.list
* Added flyout onmouseenter/onmouseleave to ALL CRM and Accounts nav group buttons
* (previously many buttons were missing flyout handlers)
* Edge-tab hover fix: CSS .xn-sidebar:hover \~ .xn-sidebar-edge-tab (broken CSS sibling selector
* since edge tab was before sidebar in DOM) replaced with JS mouseenter/mouseleave on #xnSidebar
* toggling .show class on edge tab; CSS updated to .xn-sidebar-edge-tab.show{opacity:1}
* All routes verified with artisan route:list — zero broken routes remaining
* GitHub commit: 40b5005

***

### v4.9.2 — Professional Compact Tenant Dashboard (Final)

**Released:** 2026-06-12  |  **Category:** Platform  |  **Commit:** [`fbbbc6f`](https://github.com/goesscay/xenoraa/commit/fbbbc6f)

* Fully self-contained CSS with hardcoded colour values (no CSS variable chain dependency)
* Fixed all wrong route names: admin.ecommerce.products, admin.users.index, admin.crm2.activities.tasks, admin.chat.index
* KPI cards: CRM (7 cards) + Inventory (6 cards) in proper multi-column grid with icons and sub-badges
* Charts: Invoice Revenue line chart + Deal Pipeline bar chart (Chart.js 4.4.0)
* Other Modules: Products, POS Orders, Today's Sales, Active Sessions, Blog Posts, Team Members
* Recent Activity: 3-column tables (Leads, Invoices, Deals) + Recent Posts with colour-coded badges
* Quick Actions: 12 shortcut buttons across all modules
* GitHub commit: fbbbc6f

***

### v4.9.1 — Dashboard Grid Layout Fix

**Released:** 2026-06-12  |  **Category:** Platform  |  **Commit:** [`a59b799`](https://github.com/goesscay/xenoraa/commit/a59b799)

* Root cause: crm2-kpi-grid and crm2-charts-grid CSS classes were not applying display:grid correctly on the dashboard page
* Fix: replaced with explicit xn-dashboard-grid / xn-charts-grid classes defined in @push('styles') with display:grid !important
* GitHub commit: a59b799

***

### v4.9.0 — Professional Tenant Dashboard Redesign (CRM Design Language)

**Released:** 2026-06-12  |  **Category:** CRM  |  **Commit:** [`615e450`](https://github.com/goesscay/xenoraa/commit/615e450)

* Replaced generic widget layout with full crm2-page / crm2-kpi-card / crm2-card / crm2-table / crm2-badge design system
* CRM section: 7 KPI cards (Accounts, Contacts, Leads, Deals+won, Activities, Won Revenue, Pipeline Value) — all clickable
* Inventory section: 6 KPI cards (Quotes, SOs, POs, Invoices+pending badge, Vendors, Revenue)
* Charts: Invoice Revenue line chart (last 6 months) + Deal Pipeline bar chart by stage — Chart.js 4.4.0
* Other Modules: Products (active count), POS Orders, Today's POS Sales, Active Sessions, Blog Posts, Team Members
* Recent Activity: 4 tables (Leads, Invoices, Deals, Blog Posts) with crm2-badge status/stage badges
* Quick Actions: 12 one-click shortcuts across all modules
* Controller: added monthlyRevenue (EXTRACT month/PostgreSQL) and dealsByStage queries
* GitHub commit: 615e450

***

### v4.8.0 — Tenant Dashboard Redesign — Module-Aligned Widgets

**Released:** 2026-06-12  |  **Category:** Platform  |  **Commit:** [`e96e5ff`](https://github.com/goesscay/xenoraa/commit/e96e5ff)

* DashboardController: replaced old stats (users/posts/jobs/expenses) with full module counts
* CRM section: Accounts, Contacts, Leads, Deals (open/won breakdown), Open Activities
* Inventory section: Quotes, Sales Orders, POs, Invoices (pending count), Vendors, Revenue (Paid invoices)
* E-Commerce section: Products (active count), Categories, Reviews
* POS section: Total Orders, Today's Sales, Active Sessions, Open Terminal shortcut
* Site Builder section: Published Posts (drafts count), Team Members, Site Settings
* Quick Actions: 12 shortcuts across all modules
* Recent Activity panels: Leads, Deals, Invoices, Blog Posts
* GitHub commit: e96e5ff

***

### v4.7.0 — Checkboxes + 3-dot Bulk/View Menus — All 5 Inventory Sub-modules

**Released:** 2026-06-12  |  **Category:** Platform  |  **Commit:** [`1997864`](https://github.com/goesscay/xenoraa/commit/1997864)

* Listing pages (Price Books, Sales Orders, Purchase Orders, Invoices, Vendors):
* Removed Actions column; added checkbox column (select-all in header)
* Selection badge shows count when rows checked
* 3-dot bulk menu next to New button: Export Selected (CSV), Print Default View, Delete Selected
* View pages (Price Books, Sales Orders, Purchase Orders, Invoices, Vendors):
* Added 3-dot action menu (⋮) in header: Clone, Export to PDF, Print Preview, Send Mail, Delete
* Each module has its own clone/destroy/export-pdf controller method
* 20 new routes registered (bulk-delete, clone, destroy, export-pdf × 5 modules)
* JS toggle with outside-click close on all menus
* GitHub commit: 1997864

***

### v4.6.0 — Quote Listing Checkboxes + Bulk Menu + View 3-dot Actions

**Released:** 2026-06-12  |  **Category:** Platform  |  **Commit:** [`5f38a93`](https://github.com/goesscay/xenoraa/commit/5f38a93)

* Listing Page:
* Removed Actions column; added checkbox as first column (select-all in header)
* Selection count badge ("N selected") appears when rows are checked
* 3-dot bulk menu next to New Quote: Export Selected (CSV), Print Default View, Delete Selected
* quotesBulkDelete() controller method handles bulk DELETE
* View Page:
* 3-dot action menu (⋮) added in header next to Convert button
* Options: Clone, Print Preview, Export to PDF, Send Mail, Delete
* quoteClone(): copies all fields, new QT-XXXXXXXX number, stage=draft
* quoteExportPdf(): builds HTML invoice PDF (wkhtmltopdf → Dompdf → HTML fallback)
* quoteDestroy(): single delete, redirects to listing
* Both Convert and Actions dropdowns close on outside click
* New Routes: bulk-delete, clone, destroy, export-pdf
* GitHub commit: 5f38a93

***

### v4.5.0 — Sales Order Convert to Invoice

**Released:** 2026-06-12  |  **Category:** Platform  |  **Commit:** [`388d9c4`](https://github.com/goesscay/xenoraa/commit/388d9c4)

* soConvertToInvoice(): copies all SO fields to new Invoice (sales\_order\_id, account, contact, deal, owner, address, line items, totals, terms, notes); status=Draft; invoice\_date=today; amount\_paid=0; INV-XXXXXXXX number; redirects to new Invoice view
* 1 new POST route: admin.crm2.inventory.sales-orders.convert.invoice
* Green "Convert" dropdown button added to view-sales-order header (next to Edit)
* Single option: Convert to Invoice (amber invoice icon)
* Closes on outside click
* GitHub commit: 388d9c4

***

### v4.4.1 — PostgreSQL Sequence Fix (all 89 tables)

**Released:** 2026-06-12  |  **Category:** POS & E-Commerce  |  **Commit:** [`632c7b9`](https://github.com/goesscay/xenoraa/commit/632c7b9)

* Root cause: MySQL auto\_increment values not carried over during migration
* All 89 table sequences reset to MAX(id)+1 using setval(pg\_get\_serial\_sequence(...))
* Fixes 500 errors on any INSERT (create/convert) across all modules
* Script saved at scripts/fix\_pg\_sequences.py (re-run after any future data import)
* GitHub commit: 632c7b9

***

### v4.4.0 — Quote Conversion — Convert to Sales Order / Invoice

**Released:** 2026-06-12  |  **Category:** Platform  |  **Commit:** [`65c5364`](https://github.com/goesscay/xenoraa/commit/65c5364)

* quoteConvertToSalesOrder(): copies all Quote fields to new Sales Order (quote\_id, account, contact, deal, owner, carrier, address, line items, totals, terms, notes); status=Created; SO-XXXXXXXX number; redirects to new SO view
* quoteConvertToInvoice(): copies all Quote fields to new Invoice (account, contact, deal, owner, address, line items, totals, terms, notes); status=Draft; invoice\_date=today; amount\_paid=0; INV-XXXXXXXX number; redirects to new Invoice view
* 2 new POST routes: admin.crm2.inventory.quotes.convert.sales-order / .invoice
* Green "Convert" dropdown button added to view-quote header (next to Edit)
* Dropdown: Convert to Sales Order (indigo icon) + Convert to Invoice (amber icon)
* Closes on outside click
* GitHub commit: 65c5364

***

### v4.3.0 — Dual-Rail Sidebar Navigation

**Released:** 2026-06-12  |  **Category:** Xena AI  |  **Commit:** [`4c6ef96`](https://github.com/goesscay/xenoraa/commit/4c6ef96)

* Replaced 260px single sidebar with 60px icon rail + 220px slide-out module panel
* Icon rail: Administration, CRM, E-Commerce, AI Hub, POS, Site Builder (icon + label)
* Each module has its own dedicated panel with all sub-menus and sub-group accordions
* Panel auto-opens for the active module on page load (PHP-side active module detection)
* Panel toggle: click rail icon to open/close; X button to close
* Sub-groups inside panels use smooth max-height CSS accordion
* Mobile: rail slides in from left, overlay closes both rail and panel
* Legacy toggleSidebarGroup() kept for backward compatibility with existing blades
* Dark/light theme, profile dropdown, AI toggle, impersonation banner all preserved
* GitHub commit: 4c6ef96

***

### v4.2.0 — Inventory View Pages — Notes/Activities/Attachments/Email Bug Fixes

**Released:** 2026-06-12  |  **Category:** Xena AI  |  **Commit:** [`1c1914f`](https://github.com/goesscay/xenoraa/commit/1c1914f)

* Fixed mail config field name mismatches (smtp\_host/smtp\_user/smtp\_pass/from\_email → mail\_host/mail\_username/mail\_password/from\_address) in all 5 sendMail methods
* Added note DELETE routes for all 6 inventory modules (price-books, quotes, sales-orders, purchase-orders, invoices, vendors)
* Added note destroy controller methods: priceBookNoteDestroy, quoteNoteDestroy, soNoteDestroy, poNoteDestroy, invoiceNoteDestroy, vendorNoteDestroy
* Added note delete buttons (red ✕) with AJAX handlers in all 6 view blades
* Fixed vendor contacts edit route: admin.crm2.contacts.edit → admin.newcrm.contacts.edit
* GitHub commit: 1c1914f

***

### v4.19.0 — About Us + Careers Pages — Xenoraa Public Site

**Released:** 2026-06-13  |  **Category:** Platform  |  **Commit:** [`90144d7`](https://github.com/goesscay/xenoraa/commit/90144d7)

* New page: /xenoraa/about — About Us
* Company story: Go Esscay Solutions Private Limited origin and Xenoraa genesis
* Founder quote card, stats (4+ apps, 10k+ leads, 99.9% uptime), core values grid
* CTA section linking to Get Started and Pricing
* New page: /xenoraa/careers — Careers
* Remote-first culture with 3 benefit cards (Remote-First, High Ownership, Growth & Learning)
* 3 open job listings: Senior Full-Stack Engineer, UI/UX Designer, Technical Support Engineer
* Apply Now mailto links to <careers@esscay.in>
* XenoraaController: added about() and careers() methods
* web.php: registered xenoraa.about and xenoraa.careers routes
* Footer (layouts/xenoraa.blade.php): linked About Us and Careers to their routes
* Both pages use Xenoraa design system (xn-page-hero, xn-feature-tag, xn-heading-xl, xn-btn-primary-lg)
* GitHub commit: 90144d7

***

### v4.15.0 — Sticky Top Action Bar — All 19 CRM Creation Pages

**Released:** 2026-06-13  |  **Category:** CRM  |  **Commit:** [`cb20fa2`](https://github.com/goesscay/xenoraa/commit/cb20fa2)

* Implemented frozen Save/Cancel action bar on all CRM module creation pages
* Bar uses position:fixed (top:60px, left:var(--rail-width), right:0) with GPU compositing
* Shifts right when sidebar panel is open (body.xn-panel-open .xn-sticky-bar)
* CSS class: .xn-sticky-bar (injected via @push('styles') in each blade)
* Each page gets: sticky bar HTML, form id attribute, 64px spacer div, bottom buttons retained
* Pages: create-contact, create-account, create-deal, create-forecast, create-activity,
* create-invoice, create-price-book, create-product, create-purchase-order, create-quote,
* create-sales-order, create-vendor, create-project, create-task, create-booking,
* create-service, create-mail-template, create-case, create-solution
* GitHub commit: cb20fa2

***

### v4.14.3 — Freeze Global Topbar — position:fixed + GPU Compositing

**Released:** 2026-06-13  |  **Category:** POS & E-Commerce  |  **Commit:** [`79235d5`](https://github.com/goesscay/xenoraa/commit/79235d5)

* Changed .topbar from position:sticky to position:fixed in layouts/admin.blade.php
* Fixed positioning: top:0, left:var(--rail-width), right:0, z-index:150
* Added body.xn-panel-open .topbar rule to shift right when sidebar panel opens
* Added will-change:transform + translateZ(0) + backface-visibility:hidden (GPU layer)
* Added transition:left for smooth sidebar animation
* Added padding-top:60px to .main-content to offset fixed topbar height
* Applies globally to ALL admin pages
* GitHub commit: 79235d5

***

### v4.14.2 — Fix sticky bar shaking on scroll

**Released:** 2026-06-13  |  **Category:** Platform  |  **Commit:** [`67bce1d`](https://github.com/goesscay/xenoraa/commit/67bce1d)

* Added html { scrollbar-gutter: stable } to admin layout (prevents page width reflow)
* Added will-change:transform + translateZ(0) + backface-visibility:hidden to .lead-sticky-bar
* GitHub commit: 67bce1d

***

### v4.14.1 — Lead Create Sticky Bar — position:fixed fix

**Released:** 2026-06-13  |  **Category:** POS & E-Commerce  |  **Commit:** [`b504cf3`](https://github.com/goesscay/xenoraa/commit/b504cf3)

* Changed from position:sticky to position:fixed with top:60px, left:var(--rail-width)
* Added body.xn-panel-open rule, spacer div, margin-top on first section
* GitHub commit: b504cf3

***

### v4.14.0 — Lead Create Page — Sticky Top Action Bar + 500 Error Fix

**Released:** 2026-06-13  |  **Category:** Platform  |  **Commit:** [`9d5df0c`](https://github.com/goesscay/xenoraa/commit/9d5df0c)

* 500 Error Root Cause: crm\_leads table was missing 'company' and 'internal\_notes' columns
* Fix: Added migration 2026\_06\_13\_000001\_add\_missing\_columns\_to\_crm\_leads.php
* Both columns now confirmed in PostgreSQL DB
* Sticky Top Action Bar: replaced .lead-form-header with .lead-sticky-bar (position:sticky, top:0, z-index:100)
* Sticky bar shows: 'Create New Lead' title + Cancel + Save & New + Save Lead buttons
* Buttons use form='leadCreateForm' attribute to submit form from outside it
* Removed bottom .lead-form-actions block (buttons now only at top)
* Users can Save/Cancel from any scroll position without scrolling to bottom
* GitHub commit: 9d5df0c

***

### v4.13.0 — Hover-Slide + Click-Lock Sidebar — REVERTED

**Released:** 2026-06-13  |  **Category:** Platform  |  **Commit:**

* Implemented but reverted by user request; click-only behaviour preferred
* Revert commit: 3f8dbc3 (restores be8ee5b admin.blade.php)

***

### v4.12.4 — Accounts Module Theme — Root Cause Fix

**Released:** 2026-06-12  |  **Category:** Accounts & Finance  |  **Commit:** [`be8ee5b`](https://github.com/goesscay/xenoraa/commit/be8ee5b)

* ROOT CAUSE IDENTIFIED: crm2.css was only loaded for admin.crm2\* and admin.ecommerce\* routes, NOT for admin.accounts\* routes
* Fixed layouts/admin.blade.php: Added || request()->routeIs('admin.accounts\*') to the crm2.css conditional load
* This single fix resolved ALL Accounts module theme issues (filter bar, table styling, badges, buttons, cards)
* Added filter bar CSS overrides to income, expenses, transactions, journal-entries blades (flex-wrap:nowrap, min-width:0)
* All 8 Accounts pages now fully themed with global CRM2 styles matching Leads/Contacts/Deals pages
* GitHub commit: be8ee5b

***

### v4.12.3 — Accounts Module Final Theme Fix

**Released:** 2026-06-12  |  **Category:** Accounts & Finance  |  **Commit:** [`f6cd1dd`](https://github.com/goesscay/xenoraa/commit/f6cd1dd)

* Removed crm2-subtitle paragraphs from all 8 Accounts blade headers (makes header compact, matching Leads/Contacts)
* Replaced custom acc-kpi-card/acc-kpi-grid CSS on dashboard with compact inline styles using global CSS variables
* Fixed CSS variable mismatches across all blades: var(--card-bg) -> var(--bg-card,#fff), var(--border-color) -> var(--border,#e2e8f0), var(--text-primary) -> var(--text-primary,#1a1a2e), var(--text-muted) -> var(--text-muted,#64748b)
* GitHub commit: f6cd1dd

***

### v4.12.2 — Accounts Module Theme Fix (Sidebar + Filter Bar)

**Released:** 2026-06-12  |  **Category:** Accounts & Finance  |  **Commit:** [`39dad2b`](https://github.com/goesscay/xenoraa/commit/39dad2b)

* Converted flat Accounts sidebar panel to accordion structure matching CRM panel (Banking / Money In-Out / Accounting groups)
* Removed filter-group div wrappers from all listing pages so filter bar renders as horizontal flex row
* Removed Tax column from Income and Expenses tables to reduce column count and prevent row wrapping
* Added white-space:nowrap to all table th/td cells with text-overflow:ellipsis
* GitHub commit: 39dad2b

***

### v4.12.1 — Accounts Module Theme Fix

**Released:** 2026-06-12  |  **Category:** Accounts & Finance  |  **Commit:** [`a864777`](https://github.com/goesscay/xenoraa/commit/a864777)

* Rewrote all 8 Accounts blade views to use global crm2-\* CSS classes (crm2-page, crm2-header, crm2-title, crm2-card, crm2-table, crm2-badge, crm2-btn, crm2-input, crm2-filter-form)
* Fixed sidebar panel structure to match global module panel pattern (Banking / Money In-Out / Accounting sections)
* Fixed controller method name mismatches: chartOfAccounts() renamed to coa(), journalEntries() renamed to journal()
* Fixed route references in web.php: chartOfAccounts -> coa, journalEntries -> journal
* Fixed variable name mismatches: $entries -> $journalEntries in journal-entries blade
* Added missing $accountsByType (grouped by type) and $categories variables to controller methods
* GitHub commit: a864777

***

### v4.12.0 — Accounts (Finance) Module

**Released:** 2026-06-12  |  **Category:** Accounts & Finance  |  **Commit:** [`827539c`](https://github.com/goesscay/xenoraa/commit/827539c)

* New top-level module accessible via ACCTS button in sidebar rail
* Dashboard: 6 KPI cards (Total Cash Balance, Income This Month, Expenses This Month, Net Profit, Receivables, Payables) + Cash Flow bar chart (last 6 months) + Expenses by Category pie chart + Bank Accounts widget + Recent Transactions/Income/Expenses tables
* Bank Accounts: listing with balance, type, account number; add/edit/delete
* Transactions: chronological ledger with type badges (income/expense/transfer), bank account filter, date range filter
* Income: listing with INC-XXXX reference numbers, category, customer, amount, tax, status, recurring badge; add/edit/delete
* Expenses: listing with EXP-XXXX reference numbers, category, vendor, amount, tax, status, billable badge; add/edit/delete
* Chart of Accounts: structured account tree (Assets, Liabilities, Equity, Income, Expenses) with type badges
* Journal Entries: double-entry journal with debit/credit lines per entry
* Reports: 6 report types (P\&L, Balance Sheet, Cash Flow, Aged Receivables, Aged Payables, Expense Summary) with date range filter, CSV export, Print
* New DB tables: acc\_chart\_of\_accounts, acc\_bank\_accounts, acc\_transactions, acc\_income, acc\_expenses, acc\_journal\_entries, acc\_journal\_lines, acc\_tax\_rates
* New models: AccChartOfAccount, AccBankAccount, AccTransaction, AccIncome, AccExpense, AccJournalEntry, AccJournalLine, AccTaxRate
* New controller: AccountsController (App\Http\Controllers\Admin\AccountsController)
* Routes: 28 new routes under admin.accounts.\* prefix
* Sidebar: ACCTS rail button + panel with Banking / Money In-Out / Accounting sections
* plan\_modules: accounts added to professional and business tiers
* Demo data seeded: 4 bank accounts, 10 income entries, 10 expense entries, 10 transactions
* GitHub commit: 827539c

***

### v4.11.0 — Enhanced Projects Module — View page, Kanban tasks, Milestones, Issues, Time Log, Notes

**Released:** 2026-06-12  |  **Category:** Platform  |  **Commit:** [`2afb214`](https://github.com/goesscay/xenoraa/commit/2afb214)

* Projects listing: checkboxes, row-click navigation, progress bar, priority badge, linked account/deal, overdue indicator, 3-dot bulk menu
* Project view page: 6-tab layout (Overview, Tasks, Milestones, Issues, Time Log, Notes)
* Tasks tab: inline Add Task form + Kanban board (To Do / In Progress / Testing / Completed)
* Milestones tab: inline Add Milestone form + milestone cards with task progress bars
* Issues tab: inline Report Issue form + table with severity/status inline update
* Time Log tab: total hours stat cards + inline Log Time form + log table
* Notes tab: inline Add Note form + note cards with author and timestamp
* 3-dot action menu on view page: Clone Project, Print Preview, Delete Project
* New DB tables: crm\_project\_milestones, crm\_project\_issues, crm\_project\_time\_logs, crm\_project\_notes
* New columns: crm\_projects.priority/owner\_id; crm\_project\_tasks.milestone\_id/estimated\_hours/sort\_order
* New models: CrmProjectMilestone, CrmProjectIssue, CrmProjectTimeLog, CrmProjectNote
* 22 new controller methods + 28 new routes
* GitHub commit: 2afb214

***

### v4.10.0 — Leads Listing & View Page Enhancements

**Released:** 2026-06-12  |  **Category:** Platform  |  **Commit:** [`232029d`](https://github.com/goesscay/xenoraa/commit/232029d)

* Leads listing: removed Actions column, added checkbox column (select-all in header)
* Row-click navigation: clicking any row redirects to the Lead View page
* 3-dot bulk menu next to New Lead button: Create Task (bulk), Delete Selected, Export Selected (CSV)
* New routes: admin.crm2.sales.leads.clone, admin.crm2.sales.leads.bulk-delete, admin.crm2.sales.leads.bulk-task
* New controller methods in CrmModuleController: salesLeadsClone, salesLeadsBulkDelete, salesLeadsBulkTask
* Lead View 3-dot action menu: Clone Lead, Print Preview, Delete Lead
* GitHub commit: 232029d

***

### v4.1.0 — MySQL to PostgreSQL Migration + Inventory View Pages

**Released:** 2026-06-12  |  **Category:** POS & E-Commerce  |  **Commit:** [`54373fc`](https://github.com/goesscay/xenoraa/commit/54373fc)

* Database: Migrated all 1,186 rows from MySQL to PostgreSQL 16.14
* Fixed all ->after() MySQL-only migration calls (183 removed)
* Fixed MONTH()/YEAR() raw SQL to EXTRACT() in SuperAdminController
* AppServiceProvider: wrapped tenant lookup in try/catch for migrate:fresh compatibility
* Migration ordering fix: 2025-dated migration now checks hasTable() before altering
* Added missing tenant isolation columns (user\_id, tenant\_owner\_id) to portfolio tables
* Inventory View Pages: view-price-book, view-quote, view-sales-order, view-purchase-order, view-invoice, view-vendor
* All listing pages: row-click navigation + eye icon View button in Actions column
* Address layout fix: 3-column grid (Billing | Copy Button | Shipping) on all 8 inventory forms
* Attachment tables: crm\_price\_book\_attachments, crm\_quote\_attachments, crm\_so\_attachments, crm\_po\_attachments, crm\_invoice\_attachments, crm\_vendor\_attachments
* Email model: CrmMailTemplate (NOT CrmEmailTemplate)
* Contacts route prefix: admin.newcrm.contacts.\* (NOT admin.crm2.contacts.\*)
* GitHub commit: 54373fc

***

### v4.0.0 — Subscription Module Access, AI Tenant Creation, Pricing Flow

**Released:** 2026-06-09  |  **Category:** Xena AI  |  **Commit:**

* config/xenoraa.php: plan\_modules mapping (starter/professional/business\_pro)
* User model: planHasModule(), plan\_billing, payment\_id, business\_info, business\_info\_ai
* admin.blade.php: canSee() gates by plan for tenant owners
* SuperAdminController: planModules() and savePlanModules() methods
* superadmin/plan-modules.blade.php: UI to configure plan modules
* Pricing page: removed free tier, CTAs go to /xenoraa/get-started?plan=X
* Home/features pages: removed free trial language
* RegisteredUserController: redirects to payment.checkout after registration
* PaymentController: checkout() method added; verifyPayment() bootstraps tenant
* xenoraa/payment/checkout.blade.php: dedicated Razorpay checkout page
* OnboardingController: businessInfo() and saveBusinessInfo() steps added
* onboarding/business-info.blade.php: text + file upload + AI animation
* AiTenantContentService: OpenAI GPT-4o-mini content generation from business info
* Migration: plan\_billing, payment\_id, business\_info, business\_info\_ai columns
* pdftotext: installed for PDF text extraction in onboarding

***


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.xenoraa.com/xenoraa-release-notes/v4.x-releases.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
