Changelog
What changed in each Corteksa release.
V2.5 is a small, focused follow-up to V2.4, and it is all about lead distribution.
The one thing people kept asking for: Distribute now works on a selection. Tick fifty leads in the table, pick a scenario once, and they are routed through it — round-robin, weighted or percentage, exactly as the single-record Distribute always has. Which also means the Re-drive tab, added only in V2.4, has been retired: distributing a selection does the same job with the leads in front of you.
Here's everything that's new.
🎯 Lead Distribution
🎯 Distribute a whole selection at once
Distributing leads was a one-at-a-time job. Open the row menu, choose Distribute, pick a scenario, confirm — then do it again for the next lead, and the next. For a morning's worth of new leads that is a lot of clicking to make one decision.
Distribute is now in the selection bar. Tick the leads you want in the table, click Distribute, choose once how they should be split, and they are routed — the same round-robin, weighted-fair or percentage split the single-lead Distribute has always used.
And it now offers your distribution rules, not just scenarios. Distribute used to read only Scenarios, so if you had built four routing rules and never created a scenario, the picker was empty and Distribute did nothing for you — while those same rules were routing new leads perfectly well. A rule already holds everything a scenario does: the people and the split. So the picker now lists your active rules and active scenarios together, and picking a rule distributes to that rule’s team, by that rule’s method. A rule’s filters and lead-source conditions are ignored here on purpose — those decide which leads a rule picks up on its own, and you have just picked the leads yourself.
It routes them one at a time, in the order you selected them, and that is deliberate: each assignment moves the round-robin pointer and counts against that person's hourly and daily capacity. So a rep who reaches their limit halfway through your selection stops receiving leads for the rest of it, exactly as they would if the leads had arrived one by one over the morning. When it finishes, you get a per-lead report — how many landed, and for anything skipped, the reason next to the lead.
A selection can hold up to 100 leads per run, and the dialog tells you when you have picked more.
Why you'll like it:
- One decision instead of fifty — choose the split once
- Your existing rules work as-is; there is no second place to re-enter your team
- Capacity and working-hours limits are still respected for every single lead
- Anything that could not be routed is listed with its reason, not silently dropped
👉 Available now in the record table's selection bar, for anyone who can distribute leads.
🧹 The Re-drive tab has been retired
V2.4 added a Re-drive tab to the Lead Distribution page for re-queuing leads that routing had missed. It has been removed in V2.5.
Distributing a selection replaces it, and does the same work more directly: filter the table to the leads with no owner, select them, and Distribute. You choose which leads and which scenario, you watch it happen, and you get a report naming every lead — rather than handing a whole unit to a background sweep and waiting to see what came back.
Nothing you set up has changed. Rules, scenarios, working hours, capacity limits and the distribution logs are all untouched — the only thing that has gone is that one tab.
Why you'll like it:
- One place to distribute leads by hand, not two that do nearly the same thing
- You pick the exact leads instead of routing a whole unit blind
- Every run reports what happened to each lead
👉 The Lead Distribution page now shows Rules, Scenarios, Stats, Simulate and Logs.
🗑️ A deleted lead is never distributed
If a lead was deleted while you had it selected — by you in another tab, or by a colleague — distributing it still assigned it. The work went into a record nobody could see, and the assignee got a lead that was not there.
Distribution now skips a deleted lead and reports it as skipped, so the outcome matches what you can actually see in the table.
Why it matters:
- Nobody is assigned a lead that no longer exists
- A stale selection is reported, not silently acted on
- The rest of the selection is still distributed normally
👉 Available now on both the single-lead and the selection Distribute.
Release Version: V2.5 Release Date: August 29, 2026 Author: Corteksa Product Team
V2.4 is mostly about the assistant — and about the quiet things that were losing your work on the way to somewhere else.
The headline is a rebuilt assistant. It no longer stops to think before saying hello, it re-reads the database before it tells you something was saved, it remembers you between conversations, and it opens the chat by telling you what actually needs attention today. Ask it to compare this quarter to last, by month, per owner, and you get real numbers instead of a flat total.
Around it: forwarding a WhatsApp message, duplicate WhatsApp conversations folding back into one, documents that print the page you designed, imports that survive a stray " in a spreadsheet, leads from imports and ad forms finally getting an owner, and a written record of who changed a distribution rule or an automation.
Here's everything that's new.
🤖 The Assistant
⚡ "Hi" gets an answer, not a pause
Saying hello used to cost a full round of machine thinking — several seconds, sometimes with a reasoning panel sliding open, all to produce one friendly sentence.
The assistant now decides how hard to think before it starts. A greeting, a thank-you, or an "ok" is answered straight away in your language, with no thinking panel and no delay. A single lookup thinks a little. A pasted table of leads, or a question with words like compare, per month, by owner, gets the full effort — and only then does the reasoning panel open.
It also can no longer get stuck: if the quick reply comes back empty, the assistant greets you itself instead of quietly handing your "hi" to the heavy machinery behind it.
Why you'll like it:
- Small talk answers in well under a second
- The thinking panel appears only when there is real thinking to show
- Saying "hi" in the middle of a setup interview no longer disturbs it — your questions stay on screen
- Arabic and English are treated the same way
👉 Available now in every assistant chat.
✅ It checks its own work before it says "done"
The assistant used to report success the moment its tools claimed success. Nothing ever looked back at the table. So "Done ✅" and "nothing changed" could both be true at once.
After every change you approve, the assistant now re-reads what was actually stored and compares it against what you asked for — the values, the dropdown choices, the links between records. Its answer then tells you what really landed. If three rows out of twelve did not save, it says so instead of congratulating itself.
It is explicitly not allowed to claim success for a row the database does not show.
Why you'll like it:
- "Saved" means the record was read back and confirmed
- Partial failures are reported, not hidden
- You find out immediately, not next week when the number looks wrong
👉 Available now after every change you approve in chat.
🧠 It remembers you between conversations
Every new chat started from nothing. Your language, your default assignee, "keep answers short" — all re-explained, every time.
Tell it something about how you work and it keeps it: "remember I like short answers", "my default assignee is Sara". That preference is attached to you, in this workspace, and every future conversation starts with it already known. Ask it to forget something and it does.
Why you'll like it:
- Say it once instead of at the start of every chat
- Your preferences are yours — they don't leak to colleagues
- "Forget that" actually removes it
👉 Available now — just tell the assistant what to remember.
👋 It opens with what needs attention
The welcome screen knew what you said at signup and nothing about the work sitting in front of you.
Opening the assistant now shows up to three real counts from your workspace — overdue tasks, records with nobody assigned, records nobody has touched in two weeks — each one a link straight into the list. They respect your permissions, so you only ever see what you are allowed to see. A quiet workspace shows nothing, which is the correct answer.
Why you'll like it:
- The first screen is about today's work, not a blank prompt
- Every count is a link you can act on
- Nothing appears that you don't have access to
👉 Available now on the assistant's welcome screen.
📊 Compare by month, by owner, against last quarter
"Compare this quarter to last, per month" used to come back as a single flat count — technically an answer, practically useless.
The assistant can now group by time (day, week or month, in your timezone), split by a second dimension at the same time, and compare against the previous period. So "won deals per month by owner, this quarter versus last" is one question with a real answer — and charts built from it get a proper time axis instead of evenly spaced labels.
Why you'll like it:
- Months are your months, not the server's
- Two dimensions at once — by month and by owner
- Period-over-period comparison without exporting anything
👉 Available now — just ask in the assistant.
🎯 Every answer ends with somewhere to go
Answers used to stop dead. You read the number and then went looking for the menu.
Each reply now ends with up to three suggestions based on what just happened — created a record, so Open it or Add a task for it; finished building a workspace, so Add sample data or Create a view; read a list, so Chart this or Only mine. They are written from what the turn actually did, not guessed.
Why you'll like it:
- The obvious next step is one tap away
- Suggestions match what you just did
- They're written in your language
👉 Available now at the end of every assistant reply.
🛑 No more replies that talk to themselves
Occasionally an answer went wrong in a very particular way: it recited its own instructions back at you, described the action instead of doing it, or repeated the same line until it ran out of room.
Those replies are now caught and stopped as they are being written, before they reach your screen, and you get a clean message instead. When the assistant merely describes a change rather than making it, the system now recognises the intent and turns it into the real action — behind the same approval step as always, so nothing writes itself without you.
Why you'll like it:
- No walls of repeated text or leaked instructions
- A described action becomes a real one instead of nothing at all
- Your approval is still required before anything is written
👉 Available now in every assistant chat.
📄 Documents get designed before they get written
The document builder was the one place in the assistant that wrote without asking. You described a document and it went ahead and created it.
It now comes back with the design first, as a plan you approve — exactly like building a workspace. Nothing is written until you say yes, and the system will only write the document you actually approved.
Why you'll like it:
- See the design before it becomes a template
- Change your mind at no cost
- Every write in the assistant now goes through you
👉 Available now when you ask the assistant to design a document.
💬 Chat & WhatsApp
↪️ Forward a message to up to 10 chats
There was no way to forward. You copied the text, opened another chat, and pasted it — losing attachments, and losing the fact that it was forwarded at all.
Pick a message, pick up to 10 conversations, and it goes through WhatsApp's own forwarding, so the copy carries the "Forwarded" marker. If WhatsApp refuses — or the conversation is on a channel that has no forwarding — Corteksa sends it as a normal message instead of failing, and still records it as a forward on your side. Each destination is checked against your permissions individually, and the whole thing either goes to everyone you picked or to no one.
One deliberate exception: for numbers that WhatsApp has restricted or that have run out of allowance, we do not quietly fall back to a plain send. That would spend another attempt on a number that will refuse it again.
Why you'll like it:
- Attachments and captions travel with the message
- Recipients see the real "Forwarded" marker
- Never half-sent — it's all of them, or none
👉 Available now from any message in the chat inbox.
👥 Two copies of the same conversation become one
WhatsApp sometimes refers to a person by an internal identifier instead of their phone number, and won't say who it belongs to. Corteksa treated that identifier as if it were a phone number, so the same person could occupy two separate conversations in your inbox — and, on some accounts, hundreds of chats that looked real but could never be replied to.
Those identifiers are now recognised for what they are. When WhatsApp later reveals the number behind one, the two conversations are folded into one and the messages move across, so the history stays in a single place.
Why it matters:
- One person, one conversation
- No more phantom chats built from a fake number
- Message history survives the merge
👉 Available now across the WhatsApp inbox.
📵 A chat shows a number only when there really is one
Because those internal identifiers were being read as phone numbers, some chats displayed a perfectly plausible number that belonged to nobody — offering to call it, or open it in WhatsApp.
A conversation now shows a phone number only when one is genuinely known. The same applies to groups, newsletters and status broadcasts, whose leading digits were never numbers either. In their place you see the contact's name, which WhatsApp does give us.
Why it matters:
- No calling or messaging a number that does not exist
- Groups and broadcasts stop pretending to be people
- The name shown is the real one
👉 Available now across the WhatsApp inbox.
📄 Documents & PDFs
📐 A signature stays on the page you put it on
You place a signature block or a stamp at the foot of page two. It prints 169mm down page one, on top of the body table, with nothing to explain why.
That happened when the finished document came out shorter than the design — the element was pushed back onto the last available page, straight over the text. The document now grows by a page to hold it instead. An extra page is visible and fixable; a stamp across your body text ruins the document silently.
Why it matters:
- The printed page matches the page you designed
- Nothing lands on top of your content
- A page number typed far past the end is still treated as a mistake, not a design
👉 Available now on every document template.
 A blank line is a real line
Empty paragraphs were a full line in the editor and nothing at all in print. A two-page quotation printed as one, and everything spaced with blank lines drifted upwards.
Blank lines now take up the space they take up in the editor, so what you laid out is what comes out of the printer.
Why it matters:
- Spacing you added in the editor survives printing
- Documents keep their page count
- Anything positioned after a gap lands where you put it
👉 Available now on every document template.
🖼️ Letterheads reach the edge of the paper
A background image meant to bleed to the paper's edge was being held inside the page margins, leaving a white frame around a design that was never supposed to have one.
Background artwork now runs to the paper edge while your text keeps its margins, and the space available for content is measured with that in mind. Larger artwork is allowed than before, so a high-resolution letterhead no longer has to be cut down to fit.
Why it matters:
- Full-bleed letterheads print edge to edge
- Text keeps its margins regardless
- Bigger, sharper background images are accepted
👉 Available now on every document template with a background.
📊 A table that runs over the page repeats its header
A long table crossing onto a second page left its column headings behind, so the continuation was a grid of unlabelled numbers.
The header row now repeats at the top of every page the table reaches.
Why it matters:
- Every page of a long table is readable on its own
- Printed and shared copies keep their column names
- Nothing to configure — it just repeats
👉 Available now on every document template.
📥 Import
📝 One stray quote no longer wrecks the file
A single " used as an inch mark — Pipe 5" long — opened a quotation that never closed. Everything after it collapsed into one cell, and a 30,000-row file imported as a single unusable row. No error, just a ruined import.
A quote is now only treated as an opening quote when it is the first character of its cell, so an inch mark stays an inch mark. Records are also read as whole records rather than line by line, so a value containing a line break — an address, a long note — no longer splits into pieces, and files whose text encoding spans internal boundaries are read correctly.
Why it matters:
- Measurements, inches and quoted phrases import as written
- Addresses and multi-line notes stay in one cell
- A 30,000-row file imports as 30,000 rows
👉 Available now on every CSV and Excel import.
🔗 Shared fields match themselves in the mapping step
On a unit that receives fields from a parent unit, every one of those shared columns showed No Match / Skip column in the mapping step. The parent unit was fine, which made it look like a problem with your file.
Shared fields are now recognised, so a matching column heading arrives already selected. Matching also understands Arabic spelling variations — diacritics, elongation, and the different forms of أ / إ / آ / ا and ى / ي — so an Arabic header finds its field.
When two fields on a unit genuinely share the same name, the column is deliberately left unmatched for you to choose. Guessing would silently import a column into the wrong field.
Why you'll like it:
- Inherited fields map themselves, like every other field
- Arabic headers match without exact-character spelling
- An ambiguous name asks you instead of guessing
👉 Available now in the import mapping step.
🏷️ The import tag adds to your tags instead of replacing them
Tagging an import batch overwrote whatever tags a record already carried. Re-importing to update rows quietly stripped the tags people had put on them.
The batch tag is now added alongside the existing ones.
Why it matters:
- Existing tags survive a re-import
- The batch tag still marks everything from that file
- No cleanup afterwards
👉 Available now when you tag an import batch.
🎯 Lead Distribution
📬 Leads from imports and ad forms get an owner
Distribution rules only ever ran on records created in the app. A lead arriving by spreadsheet import, or from a Meta or TikTok lead form that didn't name a fixed assignee, was never routed — it just sat there unassigned, with nothing in the logs to explain it.
Every one of those paths now runs through your rules: imported rows without an owner, ad leads the form doesn't assign, and records created automatically from a WhatsApp conversation.
One thing to expect: the owner arrives just after the record does, so a row can appear unassigned for a moment and then fill in. A large import fills in over a few minutes rather than all at once.
Why you'll like it:
- Rules cover every way a lead can reach you
- Imported lists get distributed like anything else
- Ad leads stop piling up unowned
👉 Available now for every active distribution rule.
🔁 Recover the leads that were never assigned
Fixing the rule going forward doesn't help the leads that already slipped through — and in many workspaces that backlog was substantial.
A re-drive now exists: it takes the records that should have been distributed and puts them back through your current rules, so the backlog is assigned instead of abandoned.
Why it matters:
- Past leads get an owner instead of staying lost
- Your existing rules decide, not a bulk guess
- One pass over the backlog, not one record at a time
👉 Available now — ask your administrator to run a re-drive.
🧾 Logs & Audit
📋 Rule and automation changes are on the record
Changing who receives leads, or what an automation does, is one of the most consequential things anyone can do in a workspace — and most of it left no trace at all. Editing a rule's assignees, filters or method wrote nothing. Editing an automation's trigger, conditions or action wrote nothing. Deleting an automation wrote nothing. Saving its steps wrote one meaningless entry per step.
Creating, editing, deleting and switching a rule or an automation on or off now each write a proper, categorised entry — so Distribution Engine → Logs and Workflow Builder → Logs can show you who changed what, and when. You can also filter across several kinds of activity at once.
Why it matters:
- "Why did leads stop coming to me?" has an answer
- Deletions are recorded, not silent
- One entry per save, instead of one per step
👉 Available now under Logs in the Distribution Engine and the Workflow Builder.
⚙️ Automations
💬 React to what a first message actually says
An automation triggered by an incoming message could not test anything about the message. Conditions only looked at fields on the linked CRM record — and a brand-new conversation has no linked record yet, so on a first message there was nothing to test at all.
Conditions on message triggers can now use the message text, the sender's name, the sender's phone number, and which channel it arrived on. So "if a first message mentions pricing, assign it to Sales" is now a rule you can actually write.
Why you'll like it:
- Route a conversation on its very first message
- Branch on what was said, not just who said it
- Handle several WhatsApp numbers differently in one automation
👉 Available now in the Workflow Builder, on message triggers.
🚀 Behind the scenes
⚡ Steadier background work
Imports, exports, PDF generation, automations and lead routing all run in the background. That machinery has been rebuilt on a newer engine with a single shared connection, and the whole system is now monitored end to end — every request and every background job is traceable, so a slow or failed one can be found and explained rather than guessed at.
You should not notice this directly. That is the point: fewer jobs that stall without explanation, and problems that get found before you have to report them.
Why it matters:
- Background jobs are more reliable under load
- Failures are visible to us immediately
- No change to anything you do day to day
👉 Available now across the platform.
Release Version: V2.4 Release Date: August 29, 2026 Author: Corteksa Product Team
V2.0 was a quarter of work landing at once. V2.1 is the follow-up that makes three of its corners actually deliver.
My Tasks grew into a real workspace — a board you can drag across, the same columns as the Task table, and a drawer to edit without leaving the page. Public forms started returning what they always promised: the records, their linked records, and — new — the files you choose to publish. And a set of automations that were silently doing nothing now fire: webhooks that never delivered, and lead-distribution rules that refused every person you picked.
Here's everything that's new.
✅ My Tasks
🗂️ A board for your tasks, not just a list
My Tasks now has two views. Switch to the board and your tasks lay out in lanes by status — drag a card from In Progress to Done and it moves, immediately, without a round trip you have to wait on. The toolbar counts what is in each state, so you can see the shape of your day before you read a single row.
Cards show what you need to triage: assignees, priority, due date, and an alert chip when something is overdue or due soon.
Why you'll like it:
- Move a task by dragging it, instead of opening it to change one field
- See how much is open, in progress and done at a glance
- Table when you want detail, board when you want flow — the choice sticks in the URL, so it survives a refresh and a shared link
👉 Available now on My Tasks, in Arabic, English and Turkish.
✏️ Edit a task without leaving the list
Clicking a task opens it in a drawer beside the list. Change the status, reassign it, adjust the due date — the row behind it updates as you go, and closing the drawer leaves you exactly where you were in the list.
Why you'll like it:
- No navigating away and finding your place again
- The list reflects your edit the moment you make it
- Works the same from the table and from the board
👉 Available now on My Tasks.
📋 The same columns as the Task table, in the same order
My Tasks used to draw its own column list. It sorted by the order fields were created, not the order you dragged them into, and two whole classes of column never reached it at all — relation columns, and system columns like Assignees. That is why the Task table had an Assignees column and My Tasks did not.
It now reads the saved layout the views engine uses. Your column order is your column order, everywhere.
Why you'll like it:
- Reorder columns once and My Tasks matches the Task table
- The Assignees column is there — and shows everyone on a task, not just the first person
- Relation columns appear alongside the rest
- Rows know what you're allowed to do with them, so edit and delete match your permissions
👉 Available now on My Tasks and every task list.
📌 Name and assignee stay in view while you scroll
The task name and its assignees are pinned beside the completion toggle. Scroll a wide table sideways and you still know which task each row is.
Why you'll like it:
- Never lose track of which row you're reading
- The three things you act on — done, what, who — are always together
👉 Available now on My Tasks.
🙋 A new task is yours by default
Creating a task from My Tasks now assigns it to you, rather than leaving it ownerless for you to fix afterwards.
Why you'll like it:
- One less field to fill on the task you were always going to own
- Still fully editable — it's a default, not a rule
👉 Available now on My Tasks.
🌐 Public Forms
📢 Public forms return their records again
A published object's public URL returned an empty list for every record, of every object, no matter what was in your workspace. The publication check was reading the status cell under the wrong key, so the answer was always "no" and the whole table was filtered out.
It now resolves the object's status field properly and publishes what you marked as published.
Why it matters:
- A public form you built and shared now actually shows your data
- The rule is unchanged and predictable: a record is public when its status is one you flagged as closed — Completed or Cancelled in the seeded catalog
- Anything still open stays private, and an object with no status field publishes nothing at all
👉 Available now on every public form.
🔗 Linked records show up on a public form
The relations block on a public read was empty on every record for the same class of mistake — the cells were being looked up by the wrong key, and the failure was being swallowed rather than reported. Public forms showed a record with none of the things it was linked to.
Linked records are now returned, and asking for them to be expanded gives you the whole related record instead of a name.
Why it matters:
- A public release page, catalog entry or listing can show what it references
- Expansion resolves the records a cell actually links to — not whichever ones happened to sort first, which is why some pages expanded fully and others came back empty
- Anything linked to a non-public object is still left out
👉 Available now on every public form.
🖼️ Publish a file field — cover images, brochures, spec sheets
File fields were always stripped from public reads, with no way to say otherwise. That default is right for most of them: file fields routinely hold contracts and ID scans. But it meant a public page could never show its own cover image.
A file field now has a publish publicly toggle, off by default. Turn it on and that field's attachments come back on the public read as ready-to-use links.
Why you'll like it:
- Give a public listing a cover image, a brochure or a spec sheet
- Per field, so publishing one attachment never exposes the rest
- Off by default — every existing field is untouched
- Photo fields are deliberately excluded; image files still carry location data
👉 Available now in the file-field settings panel.
👁️ Every public field says whether it comes back
A public form accepts a wider set of fields than it returns — a contact form needs an email input even though email values are never published. Each field descriptor now states which it is, so the difference is visible up front instead of being discovered as a missing value.
Why you'll like it:
- Build a public listing knowing which columns can be shown
- Warn someone that what they type won't be displayed
- Fields you deactivated no longer leak their values
👉 Available now on every public form.
⚙️ Automation & Routing
🪝 Webhooks that were silently doing nothing now fire
A webhook whose watched fields were saved by their display name matched nothing when a record changed. It didn't fail, didn't warn, and didn't write a log line — it simply never delivered. Every webhook built through a name-driven picker was affected.
Field references are now stored the way record changes are actually reported, and existing configurations were repaired automatically across every workspace.
Why it matters:
- Integrations you set up months ago and assumed were working now deliver
- Nothing to reconfigure — the repair ran for you
- A reference pointing at a field that no longer exists is left alone rather than guessed at, so a genuinely broken rule stays visibly broken
👉 Available now on every webhook.
🎯 Lead-distribution rules accept the people you pick
Saving a distribution rule or scenario rejected every assignee with a validation error, because the form and the endpoint disagreed about how to name a person. Choosing anyone made the rule unsaveable.
Rules and scenarios now identify people the same way the rest of Corteksa does, and the response comes back with names and avatars attached so the form can render straight from it.
Why it matters:
- Distribution rules can be created and edited again
- Percentage splits and the fallback owner work the same way
- A deactivated or unknown person is refused with a message naming who — not a generic type error
- Existing rules keep routing exactly as they did; nothing was migrated
👉 Available now under Lead Distribution.
💬 Chat & Notifications
👤 The chat profile panel shows the record's real values
Opening the profile beside a WhatsApp conversation showed a blank name and Not set on every row — for exactly the conversations that are attached to a CRM record, which is the case where it matters most. The record was being loaded and then read under the wrong key, so every value was dropped on the way out.
Why it matters:
- The customer's details are there while you're replying to them
- No switching to the record to find a phone number or a stage
- Nothing changed about how the panel works — it now carries the values it always promised
👉 Available now in Cortex Chat.
📵 Devices that no longer exist stop being notified
When a browser or phone revokes its push token, that device is now retired instead of being kept on the list and re-sent to on every future assignment.
Why it matters:
- A device that vanishes from your list had its token revoked — re-registering brings it straight back
- Fewer wasted sends, and a device list that reflects reality
👉 Available now on iOS, Android and web.
📝 A long title no longer stretches the notification card
Notification cards clamp long titles and hold a fixed width, so the panel stays a readable column instead of a card sprawling to fit one long record name.
Why it matters:
- The notification panel keeps its shape whatever is in it
- Long record names are truncated, not allowed to push the layout around
👉 Available now in the notification centre.
🧾 Activity & Logs
🏷️ Activity entries are named by the field, not by a number
The Logs and Activity tabs titled their rows with the field's internal key — rows reading 017374744625 instead of Company Name. The label is now resolved when the entry is written, and re-resolved when it is read, so entries recorded before this fix read correctly too.
Why it matters:
- An audit trail you can actually read
- Old entries are fixed too, not just new ones
- A field deleted since still shows the name it had at the time
👉 Available now on every record's Logs and Activity tab.
🛠️ What's Fixed
🔢 Cells with several values now fit their column
Assignee, tag, multi-select and array cells measure the space they actually have and show a +N for the rest, instead of assuming a fixed number and either clipping or leaving the column half empty. Narrow the column and the overflow count follows.
Why it matters:
- Values stop being cut off mid-chip
- The count tells you exactly how many more there are
- Resizing a column re-fits its cells
👉 Available now on every list and board.
🃏 Boards, headers and layout
Kanban group titles no longer clip the tails of letters that hang below the line. The page header stays above the sticky view bar rather than sliding under it. Empty states render inside the table card instead of replacing it, so the surrounding controls stay put.
Why it matters:
- Arabic and Latin headings both render whole
- Nothing disappears behind a bar as you scroll
- An empty table still looks like a table
👉 Available now across views, boards and lists.
🗒️ Panels that stay open, and dialogs that scroll
The record drawer used to close itself when focus moved inside it — picking from a dropdown could dismiss the whole panel. It now distinguishes a click outside from focus moving within. Dropdowns inside the lead-distribution dialogs scroll properly instead of being trapped behind the dialog.
Why it matters:
- The drawer closes when you mean to close it
- Long option lists inside a dialog can be scrolled to the bottom
- Edits made from a drawer land on the row behind it without a failed save
👉 Available now on record drawers and configuration dialogs.
📅 A far-future date no longer breaks the page
A date far enough in the future to fall outside the normal calendar range crashed the whole view render rather than displaying oddly. Those dates are now handled and the list draws.
Why it matters:
- One unusual value can't take down the page it appears on
- The rest of your records stay readable
👉 Available now on every list, board and record.
🖱️ Drag-and-drop pages load cleanly
Object trees, kanban boards, field sections and the lead-distribution screens generated a fresh identity for their drag surface on every render, which made the first paint disagree with the page underneath it. Those identities are now stable.
Why it matters:
- No flicker or console noise on first load
- Drag targets are ready as soon as the page is
👉 Available now on every screen you can drag on.
🧭 Small interface repairs
Guided-tour popovers that should sit centred on the screen no longer try to position themselves against nothing. The animated home icon retires its placeholder once the animation is ready, instead of leaving both on screen. Sign-in resolves the right endpoint for the app you're signing in to.
Why it matters:
- Tours land where they're pointing
- No doubled icon in the header
- Sign-in works the same from every entry point
👉 Available now across the app.
Release Version: V2.1 Release Date: August 24, 2026 Author: Corteksa Product Team
This is the biggest release we have ever shipped — the work of a full quarter, landing all at once.
V2.0 is less "a few new features" and more "the product grew up". Corteksa is now on your phone. Cortex AI can now build your entire CRM from a conversation. Your data model gained rollups, lookups, formulas, sections and conditional fields. Views finally remember what you told them. Automation, billing, teams, support and a developer API arrived as first-class parts of the product.
Here's everything that's new.
Rolling out gradually. A few of the largest features below are switched on workspace by workspace over the days following release, so you may see them appear rather than arrive all at once.
📱 Corteksa on Mobile
📲 The app is live on the App Store and Google Play
Corteksa is now a real mobile app. Download it and your whole workspace travels with you — your objects and records, Cortex Chat, Cortex AI, and notifications that actually reach you.
Why you'll like it:
- Run your pipeline from your phone — open a record, edit a field, move a card, reply to a customer
- Every WhatsApp conversation in your pocket, with the linked record right beside it
- Ask Cortex for a record, create one, or check a number without opening a laptop
- Arabic, English and Turkish, right-to-left included
👉 Available now on the App Store and Google Play.
🔔 Push notifications that land
Notifications now arrive correctly on both iOS and Android — and only for the records you're allowed to see.
Why you'll like it:
- The alert reaches your lock screen instead of silently failing
- You're never notified about a record your permissions hide
- Mentions, assignments, due dates and new messages all come through
👉 Available now on iOS and Android.
🤖 Cortex AI
🏗️ Build your whole CRM by describing it
Tell Cortex what your business does — in your own words, in Arabic or English — and it interviews you, drafts a complete workspace plan, and builds it. Objects, fields, relationships, views, and automations, all wired together.
You review an editable plan before anything is created, and you watch the build happen live, object by object.
Why you'll like it:
- Go from empty workspace to a working CRM in minutes instead of days
- The plan is yours to edit — rename, remove, or add before you approve it
- It notices what you already have and builds around it instead of duplicating
👉 Available now from the main Cortex chat.
💬 One chat that actually does the work
Cortex is now a single assistant that understands what you're asking and routes it for you. Ask it to find something, change something, or restructure something — it handles all three.
"Show me every deal closing this month." "Add a budget field to Deals." "Mark this one Won and assign it to Sara." Same chat, no mode switching.
Why you'll like it:
- Read your data, edit your records, and change your structure without leaving the conversation
- Answers stream in as they're written — no waiting on a blank screen
- Ask about the record you're looking at and it already knows the context
👉 Available now across the app.
✅ Cortex AI never writes anything without your approval
This is about Cortex AI only — your own edits, and your team's, work exactly as they always have. But when Cortex wants to change something, it stops and asks first. You see exactly what the assistant intends to do — which records, which fields, which values — and it only proceeds when you confirm.
Why you'll like it:
- Full speed of an assistant, zero risk of a surprise edit by the AI
- The confirmation card shows the real change Cortex will make, not a vague summary
- Approve once and it does the whole batch; decline and nothing happened
- The same gate applies whether you're talking to Cortex on the web, on mobile, or over WhatsApp
👉 Applied to every write Cortex AI makes, everywhere. Nothing else in Corteksa is affected.
📊 Answers you can actually see
Ask a question with a number in the answer and Cortex draws it. Pipeline by stage, deals per owner, revenue over time — rendered as a chart in the chat, not a wall of text.
Why you'll like it:
- Read a trend at a glance instead of parsing a list
- Created records come back as links you can click straight through to
- Works on any object, including your custom ones
👉 Available now in Cortex chat.
🌍 Speaks your language
Cortex works natively in Arabic. Ask in Arabic and it answers in Arabic — and when it builds a workspace, it names your objects, fields, and views in Arabic too.
Why you'll like it:
- Your team works in the language they think in
- Built workspaces come out properly labeled, not machine-translated afterwards
- Suggested prompts and summaries follow the same language as your workspace
👉 Available now.
📄 AI document designer
Describe the document you need — a quotation, an invoice, a contract — and Cortex designs the template for you, laid out and ready to render with your real record data.
Why you'll like it:
- Skip the blank canvas; start from a designed document and adjust
- It knows your fields, so tokens are bound to real data from the start
- Edit and re-render as many times as you need
👉 Available now in Document Templates.
💳 Plans, Billing & Usage
🧾 Self-serve plans and subscriptions
Pick your plan, add your card, and manage everything yourself. Monthly or annual, with a 14-day trial, per-member pricing, and downloadable PDF invoices.
Why you'll like it:
- Upgrade, downgrade, or change billing period without contacting anyone
- Clear state at all times — what you're on, what you owe, when it renews
- Every invoice available as a PDF whenever you need it
👉 Available now under Billing.
⚡ Add-ons and AI credits
Need more than your plan includes? Buy add-on packs — extra members, extra workflow executions, extra AI credits — as one-off purchases that top up immediately.
Why you'll like it:
- Scale a single dimension without jumping a whole plan tier
- One-time packs never renew behind your back
- Balance updates live, in the app, the moment the payment clears
👉 Available now under Billing → Add-ons.
📈 Usage you can watch in real time
Your consumption — members, AI credits, workflow runs, messaging sessions — updates live as your team works, so you know where you stand before you hit a limit.
Why you'll like it:
- No surprises at the end of the month
- Warnings before a limit, not after it
- Per-workspace breakdown when you run more than one
👉 Available now under Billing → Usage.
👥 Your Team
✉️ Invite teammates by email
Send an invitation, choose the roles they'll have before they arrive, and they join by clicking a link and signing in. Withdraw or re-send at any time.
Why you'll like it:
- New members land with the right access already applied
- One person can belong to more than one workspace with a single account
- Pending invitations are visible and revocable — nothing is left hanging
👉 Available now under Members.
🔐 Permissions rebuilt, level by level
Access is no longer just "can" or "can't". For every object and every messaging channel you choose a level: all records, my group's records, only my own, or denied — separately for viewing, editing, adding, deleting and exporting.
Why you'll like it:
- Give a sales rep their own pipeline without exposing the whole company's
- Chat access is graded the same way, per provider
- Enforced everywhere — tables, boards, exports, search, chat and the API alike
👉 Applied across every object and channel.
🧑🤝🧑 Teams
Group people into teams — Riyadh, Enterprise, Night Shift, whatever your structure actually is — and use the team as the unit your permissions work on.
Why you'll like it:
- Give a role access to its team's records instead of choosing between "only mine" and "everything"
- Assign someone to a team straight from their profile — no separate screen to remember
- One person can belong to more than one team, and gets the widest access their teams allow
- Teams work everywhere permissions do: tables, boards, chat, exports and search
- Change a team's members and everyone's visibility follows immediately
👉 Available now under Members → Teams.
👑 Workspace ownership and transfer
Every workspace now has a clearly marked Owner, visible on the Members page, with a proper transfer flow when it needs to change hands.
Why you'll like it:
- No ambiguity about who ultimately controls the workspace
- Transfer is deliberate and confirmed on both sides — never accidental
- The outgoing owner keeps a sensible role instead of being locked out
👉 Available now on the Members page.
🔑 Google sign-in and verified email changes
Sign in with Google, and change your account email through a proper verification step so the address on file is always one you actually control.
Why you'll like it:
- One less password to remember
- Changing your email can never orphan your account
- Works alongside password sign-in — use whichever you prefer
👉 Available now on the sign-in screen and in your profile.
🗂️ Your Data
➕ Rollup fields — totals that keep themselves current
Show the sum, count, average, minimum or maximum of a field across all the linked child records. A Company's total pipeline. A Deal's number of line items. An Account's average order value.
Why you'll like it:
- Real totals on the parent record, recalculated automatically as children change
- Sum, count, avg, min and max — including over calculated fields
- Filter and sort by the rollup like any other column
👉 Available now on any to-many relationship.
🔍 Lookup fields — borrow a value from a linked record
Mirror a field from a related record straight onto this one. Show the Company's country on every Contact, or the Contact's phone on every Deal, without copying data.
Why you'll like it:
- Always current — it reads the source, so it can never go stale
- Filter and group by borrowed values as if they lived here
- No duplicate data to maintain or reconcile
👉 Available now on any relation field.
🔗 Relations, rebuilt
Link two records once and the link exists on both sides — properly, with a real twin on the other record rather than a one-way pointer.
Why you'll like it:
- A Relations tab that shows incoming links, not only the ones you created
- Choose which columns show in the relation cell and in the picker, so a linked Deal shows its amount and stage instead of just a name
- The picker pages through results, so choosing from a hundred thousand records stays instant
- Rename a record and it updates everywhere it appears — every relation cell, every picker, every board
- Every linked row comes back on a record read, not just the first handful
👉 Available now on every object.
👯 Duplicate detection
Corteksa flags the records that collide on a unique field and shows you the clashes grouped by the value they share.
Why you'll like it:
- Find the two "Ahmed Ali" contacts before your team calls him twice
- Grouped by the shared value, so you see the whole cluster at once
- Works on any field you've marked unique
👉 Available now on every object.
🛒 Smart Catalog — pick from a price list, right inside a record
Point a field at another object — Products, Services, Parts — and it becomes a picker with real columns: name, price, SKU, stock, whatever you choose to show. Pick one item or many.
Turn on Line Items mode and it becomes a quotation builder: choose products, set quantities, and Corteksa works out subtotal, VAT and total for you.
Why you'll like it:
- Build a quote or an invoice inside the deal, instead of in a spreadsheet beside it
- Set which columns the picker shows, and in which order — the person choosing sees the price and the stock, not just a name
- Decide whether the price is fixed from the catalog or editable per line, and set a default quantity and decimal precision
- VAT and totals are calculated for you, and flow straight into the generated PDF as Subtotal / VAT / Total rows
- Delete a product later and old quotes keep its name, so history stays readable
- Filter and search the catalog from inside the picker, however long the list is
👉 Available now as a field type, on every object.
🧮 Formula fields
Compute a value from other fields on the record — margins, totals, durations, scores — and let the engine keep it up to date whenever an input changes.
Why you'll like it:
- Stop maintaining a spreadsheet beside your CRM
- Recalculates in the right order, even when formulas feed each other
- Rollups can aggregate formula results too
👉 Available now as a field type.
👁️ Conditional field visibility
Show a field only when it's relevant. "Reason for loss" appears when the status is Lost. "Company details" appear when the type is Business.
Why you'll like it:
- Shorter forms — people see only what applies to them
- Fewer mistakes from fields that shouldn't have been filled
- Set it up per field with a simple rule, no scripting
👉 Available now in the record form and detail view.
✨ Dynamic default values
A default can now be computed instead of fixed: today's date, a week from today, the person creating the record, or a copy of another field. It fills in once at creation and stays fully editable.
Why you'll like it:
- New records arrive already sensible instead of blank
- "Follow up in 7 days" without anyone doing date arithmetic
- Still a normal value afterwards — override it whenever you want
👉 Available now in field settings.
📑 Field sections
Group an object's fields into named, ordered, collapsible sections — "Personal Info", "Documents", "Financials" — so long forms become readable.
Why you'll like it:
- Find the field you need instead of scrolling past forty of them
- Reorder sections and move fields between them by drag
- Deleting a section never deletes its fields
👉 Available now in the record form and detail view.
🚫 Unique fields
Mark a field unique and the system guarantees no two live records can share the value — employee IDs, SKUs, invoice numbers, emails and phone numbers included.
Why you'll like it:
- Duplicates are blocked at the source, not found later in a cleanup
- Works on text, number, email, phone and WhatsApp fields
- Scoped to your workspace — other workspaces are unaffected
👉 Available now in field settings.
🌙 Hijri calendar
Display any date or datetime field in the Hijri (Umm al-Qura) calendar, per field, with your choice of year format.
Why you'll like it:
- Dates read the way your team reads them
- Set per field — mix Hijri and Gregorian in the same object
- The underlying data is untouched, so reports and exports stay consistent
👉 Available now on date and datetime fields.
🧷 Shared fields across objects
Define a field once on its home object and place it on the others. An object's field list is its own fields plus everything placed on it.
Why you'll like it:
- Define "Region" or "Account Manager" once and use it wherever you need it
- A Custom Field Manager shows where a field lives and everywhere it's placed
- Reorder placed fields and hide them exactly like native ones
- Clone a field onto another object when you want an independent copy instead
👉 Available now under field settings.
📐 Formats, limits and safer input
Every field type gained real configuration — and real validation behind it.
Why you'll like it:
- Numbers: choose the separator convention you read in —
1,234.56or1.234,56— without changing the stored value - Currency: validated, parsed and sorted as money, with proper rounding
- Long text: set a minimum and a maximum length, so a Description can be forced past 50 characters and Notes capped at 1,000
- Multi-select: set a minimum and a maximum number of selections. Records you already have are grandfathered in, so a new rule never breaks old data
- Files: choose whether a field takes one attachment or many, and set minimum and maximum image dimensions
- Address became part of Location — one field type that handles both a structured address and free text, instead of two that overlapped
- Ratings reject nonsense instead of silently storing a zero, and links refuse unsafe web addresses
👉 Available now across the field library.
🚦 Status transition rules
Define which status can move to which, and Corteksa checks the whole path when you save the field — so an impossible pipeline is refused at setup rather than discovered by a user.
Why you'll like it:
- A stage can't be skipped just because someone clicked the wrong chip
- The mistake surfaces while you're designing the pipeline, not in production
- Works on every status field, on every object
👉 Available now on status fields.
📁 Folders, and duplicating what you built
Organize your objects into folders, and duplicate an object — or a whole folder — to reuse a structure you've already perfected. Fields, sections, links, views and layouts are copied; records are not.
Why you'll like it:
- A tidy sidebar instead of a long flat list
- Spin up "Deals — Enterprise" from "Deals" in one click
- Copies the shape, never the data, so nothing is duplicated by accident
👉 Available now in the sidebar and object menu.
🙋 Multiple assignees per record
A record can now be owned by several people, with one marked as the primary owner. Assign in bulk from any view.
Why you'll like it:
- Model real teamwork — a deal with an owner and two collaborators
- Bulk-assign a whole selection in one action
- "My records" still means something precise, thanks to the primary owner
👉 Available now on every object.
🕓 Record activity and mentions
Every record now carries a readable history of what happened, who did it and when — with related changes collapsed into a single entry instead of one line per field. Mention a teammate with @@ and they'll know.
Why you'll like it:
- Answer "who changed this, and when?" without leaving the record
- Mentions reach the right person and land in their inbox
- Changes made by Cortex AI are labeled as such
👉 Available now in the record drawer.
🔔 Live signals on your lists
Every row and every card now carries four live badges, so you can scan a list and know where your attention is owed: unread messages, open tasks, overdue, and mentions of you.
Why you'll like it:
- Triage a list in one pass — the rows that need you are marked, the rest aren't
- The numbers are yours — badges are counted per person, so your unread count is yours, not your manager's
- If you can't read chats, the unread badge shows nothing at all — not a zero. "Not allowed to see this" and "nothing here" are different answers, and the badge never confuses them
- Updates live as messages arrive, tasks close and dates pass — no refresh
- Works on both the data table and the kanban board
👉 Rolling out now on lists and boards.
📣 A mention inbox
Every place a teammate tagged you in a comment, in one list — with an excerpt so you know what it's about before you open it.
Why you'll like it:
- Stop hunting through records for the comment someone tagged you in
- The excerpt travels into the notification too, so the alert already tells you what was said
- Once you've seen a mention it clears everywhere, not just on the screen you were on
👉 Available now.
⏰ Due-date reminders
Turn on one option on a date field and the record's assignee is reminded — on the day it arrives, or an hour before a specific time.
Why you'll like it:
- Reminders live on the field, so every record gets them automatically
- Respects each person's own timezone
- No workflow to build for the simple case
👉 Available now in date field settings.
📥 Smarter import and export
Import now updates existing records instead of only creating new ones, can apply tags as it goes, maps system columns like owner and created date, and reads Excel dates correctly. Export to XLSX was rebuilt.
Why you'll like it:
- Re-import a corrected sheet without creating a second copy of everything
- Dates arrive as dates, not as the year 1900
- Tag a whole import batch in one pass
👉 Available now in Import/Export.
🔎 One search for everything — press Ctrl+K
Ctrl+K (⌘K on Mac) opens one box that searches everything at once: your records across every object, your WhatsApp messages and conversations, your objects and views, and every screen in the menu.
Why you'll like it:
- Records — find a lead, a deal, an invoice, from any screen, by any field
- Messages — search what a customer actually said, not just their name
- Chats and contacts — jump straight into the conversation
- Objects, views and settings — reach any screen without hunting through the sidebar
- Serial numbers and IDs are searchable like any other value
- Finds partial words and mixed Arabic-English text, and stays fast on large workspaces
- Filters the menu as you type, then reaches the server for the records and messages that match
- What you opened recently is offered first, so the thing you were just working on is one keystroke away
- Navigate the whole product without taking your hands off the keyboard
👉 Press Ctrl+K anywhere in Corteksa — ⌘K on Mac. Also available from the search bar.
⌨️ Edit in place, right in the table
You no longer have to open a record to change one value. Click a cell and edit it where it sits — text, numbers, dates, statuses, people, files and photos each get the right editor inline.
A new row can be added at the bottom of any list, or inside any group, without leaving the page — and you can paste a block of cells straight out of a spreadsheet to fill it. If what you typed needs more room than a cell has, the full form opens with everything you already entered still in it.
Why you'll like it:
- Fix a typo, move a deal, or reassign an owner in one click
- Add rows the way you would in a spreadsheet, paste included
- Nothing you typed is thrown away when a rule stops you
👉 Available now in every table, group and board.
🗂️ The record panel, rebuilt
The panel that opens when you click a record is now somewhere you can work rather than somewhere you glance. It stacks: follow a linked record and a back button brings you home, with the trail showing where you are.
It expands to a full-screen split — the record on one side, its activity on the other. Tasks, linked records, comments and the audit trail each have their own tab, and linked records appear as a searchable, paginated strip instead of a wall of chips.
Why you'll like it:
- Follow a relationship three records deep and still find your way back
- Read a long record without squinting at a narrow panel
- Everything about a record in one place, in tabs you can return to
👉 Available now on every unit.
✍️ A real editor for notes and comments
Long-text fields and comments now use a proper editor — headings, bold, lists, quotes, code and tables, with a toolbar that stays out of the way. Tables behave like tables: add a row, resize a column, type in a cell.
Comments gained mentions with hover cards, reactions, relative timestamps and send-on-Enter. Either can be popped out to a full-screen composer when you're writing something long.
Why you'll like it:
- Write a structured note instead of one long paragraph
- Mention a teammate and see who they are without leaving the thread
- Compose long updates in a window big enough to think in
👉 Available now on long-text fields and every comment thread.
☑️ Bulk actions — now on every field, not just the assignee
Selecting rows used to give you one bulk action: reassign them. Now you can edit any field on the object — your own custom fields included — set relations, delete, or duplicate the whole selection.
Long runs report what actually happened instead of failing quietly. If some rows could not be changed you're told which ones and why, and you can retry just those.
Why you'll like it:
- Change a status, a stage, an owner, a custom dropdown or a date across a whole selection at once
- Bulk duplicate a selection, with the copies named in your language
- Reassign a whole territory in a single action
- Up to a hundred rows finish while you're looking at the screen; a bigger selection keeps running in the background and reports back
- Partial failures are visible and retryable, not lost
- Your selection survives paging through the list
👉 Available now on every list and board.
🧭 The sidebar, organized
Units can be grouped into folders and dragged between them, each showing its record count so you can see where the data actually is. My Tasks carries a badge when something is overdue or due soon.
The menu now loads with placeholders instead of a blank gap, tells you when it failed and offers a retry, and says so plainly when there is nothing there yet.
Why you'll like it:
- Find the unit you want in a workspace that has fifty of them
- See at a glance where work is piling up
- A menu that never leaves you staring at nothing
👉 Available now in the main sidebar.
📋 Views
💾 Saved views that remember their filters
A saved view now actually applies what you saved. Build a filter, save it, share the link — everyone who opens it sees the same filtered set.
Why you'll like it:
- The view you built is the view you get back
- Shared links carry the filter with them
- Duplicate a view to branch off a variation
👉 Rolling out now on every object.
🌳 Advanced filters, grouping and totals
Filters now support OR groups as well as AND, multi-level sorting, grouping, and per-group and per-column totals.
Why you'll like it:
- Express "high value OR closing this week" in one view
- Group by owner or stage and see subtotals per group
- Sort by two or three columns at once
👉 Rolling out now in the data table.
Σ Column totals — twelve of them
Put a live total under any column and read your table without exporting it. The picker only offers the ones that make sense for that column's type.
Why you'll like it:
- Count — all rows, empty, filled, or distinct values
- Percentage — what share of the column is empty or filled
- Yes / No columns — how many are ticked, how many aren't
- Numbers, currency and dates — sum, average, earliest and latest
- Three levels at once: per column, per group or kanban lane, and a grand total for the whole table
- Amounts in different currencies are never added together — each currency gets its own figure, because folding SAR and USD into one number is a wrong answer that looks right
- An empty group, or a total that can't be computed, says so instead of showing a silent zero
👉 Available now on the data table and the kanban board.
🗃️ A better kanban board
Boards got manual card ordering, per-lane totals, an unassigned lane, and grouping by more field types — plus a large speed increase from a rebuilt query.
Why you'll like it:
- Drag cards into the order you want and it sticks
- See the value of each lane at the top of it
- Loads noticeably faster on big boards
👉 Rolling out now on every board.
⭐ Your own default view
Each person can now set their own default view per object, so you land where you work rather than where someone else does.
Why you'll like it:
- Open an object straight into your view
- Your default never changes anyone else's
- Teams can still ship a shared default for newcomers
👉 Available now from the view menu.
⚙️ Automation
🔁 Workflow automation
Build rules that run themselves: when something happens, if the record matches, then do this. Update a field, send a WhatsApp message, create a record, call a webhook, wait, branch, or pause for approval.
Why you'll like it:
- "When a deal is marked Won, message the customer" — without writing code
- Date-anchored reminders: act a day before a renewal, not after it
- Multi-step flows with delays, conditions and approval gates
- Update a field on a related record, not only the one that triggered the rule — close a Deal and stamp its Company
- Status is now just a field. "Update Status" and "Status Changed" were folded into "Update Field" and "Field Changed", so there's one place to configure a rule and one place to look when you're reading it back
👉 Available now under Automation.
🔄 Changes that travel across objects
When a record changes, the objects that depend on it are told. A closed task, a renamed company, an updated amount — whatever was showing that value is marked and refreshed instead of quietly holding an old number.
Why you'll like it:
- No more stale figures on a parent record after a child changed
- Rollups, lookups and badges all react to the same signal
- You see the correction happen instead of discovering it later
👉 Applied across every object that references another.
📨 Send a WhatsApp template from a workflow
Pick an approved template from a session, and the variables fill themselves from the record that triggered the run — with the option to override any of them.
Why you'll like it:
- Personalized, approved messages sent automatically
- Variables come from the record, so no manual mail-merge
- Unfilled variables are caught before the send, not rejected afterwards
👉 Available now as a workflow action.
💬 Messaging
🎵 TikTok Lead Ads
Connect a TikTok advertiser, sync your lead forms, map their fields onto your CRM objects, and receive leads the moment they're submitted.
Why you'll like it:
- TikTok leads land in your CRM instantly, already mapped
- Field mapping is yours to control, per form
- Sits beside your existing lead sources in the same pipeline
👉 Available now under Integrations.
🚦 WhatsApp outreach limits, made visible
WhatsApp limits how many new conversations a number can start, and can shadow-restrict a number that messages too many cold contacts. Corteksa now surfaces both, clearly, on the session.
Why you'll like it:
- Know why a first message failed instead of guessing
- See when the limit resets rather than reconnecting in vain
- Admins are notified when a number is blocked
👉 Available now on WhatsApp (QR) sessions.
🏷️ Tags that sync both ways
Edit a record's tag and the connected chat's WhatsApp label updates to match — and label changes made on WhatsApp come back into the CRM.
Why you'll like it:
- One vocabulary across your CRM and your WhatsApp inbox
- Change it in either place; the other follows
- Labels are created automatically when a new tag appears
👉 Available now on WhatsApp sessions.
🔧 Session and inbox control
Sessions gained bulk delete, a status filter, live status updates, and notifications when one disconnects or when the scanned number doesn't match. The inbox gained filters for session, linked-record status, unanswered and unassigned chats.
Why you'll like it:
- Know the moment a number drops instead of discovering it from a customer
- Narrow a busy inbox down to exactly the conversations you own
- Download any file that was sent in a chat, from the chat
👉 Available now in Cortex Chat and Sessions.
📤 WhatsApp Cloud templates, end to end
Submit templates — including ones with Arabic names — track their approval status reliably, and see Meta's own reason in plain sight when one is rejected.
Why you'll like it:
- Know whether a template is approved without leaving Corteksa
- A rejection tells you why, in Meta's words
- Failed template sends now show up in the chat instead of vanishing
👉 Available now on WhatsApp Cloud sessions.
🗃️ Your inbox, filtered and searchable
The chat list can be narrowed by unit, by record status, by label — several at once — and by when the conversation last moved, then sorted by most recent activity.
Duplicate conversations with the same contact are marked so you don't answer in the wrong one. Messages have a hover row with actions, voice notes preview before you send them, and a message that failed to send says so instead of quietly disappearing.
Why you'll like it:
- Work through one segment of the inbox at a time
- Never answer in the wrong thread again
- A failed send is visible while you can still do something about it
👉 Available now in Cortex Chat.
📄 Documents
🖨️ Document generation, rebuilt
The PDF engine was rewritten. Text now flows properly across pages, tables continue onto the next page instead of being cut, blocks reposition when others are hidden, and headers and footers stay where they belong.
Why you'll like it:
- Long quotations and invoices paginate correctly, every time
- Full Arabic and RTL support, with bold and italic
- Line-item tables carry Subtotal, VAT and Total rows automatically
👉 Available now in Document Templates.
🖊️ Inside the document editor
The template editor gained the tools it was missing. Drag a field onto a block to assign it. Group elements into sections that flow down the page and push whatever follows them.
Set fonts, weights and text direction per element, so Arabic and English can sit in the same document without fighting. Tables gained an inspector, sample rows to design against, and the option to reverse row order. Right-click the canvas for layer and style actions, and a first-run tour walks you through all of it.
Why you'll like it:
- Build a template that reflows instead of one that overlaps
- Arabic documents that read correctly, in the editor and in the PDF
- Design against realistic data before you generate anything
👉 Available now in Document Templates.
🔔 Notifications
🛎️ A real notification center
The bell now opens a proper center with tabs — Messages, Mentions, Activity, System and All — live unread counts, and a clear-all you can undo.
Why you'll like it:
- Triage by kind instead of scrolling one long list
- Counts update live as things happen
- Cleared everything by mistake? Put it back
👉 Rolling out now.
🌐 Notifications in your language
Notifications are now composed per reader, so the same event reads in Arabic for one teammate and English for another — and they name the object properly.
Why you'll like it:
- Everyone reads notifications in their own language
- "New Lead assigned to you", not a raw table name
- Deep links open the right record on the right screen
👉 Available now.
🆘 Support
🎧 Support and live chat, built in
Get help without leaving Corteksa. Open the widget and you're talking to someone right away — no email, no waiting for a reply to a form you can't see any more.
And it isn't only for problems. Ask for a feature you'd like and it becomes a ticket you can follow, so a request doesn't disappear into a conversation nobody kept.
Why you'll like it:
- Reach a real person immediately — live chat, from inside the product
- Raise a ticket for anything: something broken, something confusing, or a feature you want us to build
- Every ticket you've ever opened, in one place — with its number, its status, and the full thread, so you can check where it stands whenever you want
- Your account context comes attached, so nobody asks you to explain your setup first
- If diagnosing your issue needs a look at your workspace, we ask — and you approve it in the chat, or you don't
👉 Rolling out now via the in-app widget.
🧑💻 Developers
🔌 API keys and the REST API
Create scoped API keys and let your own tools read and write your CRM data over a documented REST API — with the same permissions your team members have.
Why you'll like it:
- Connect your website, scripts, or tools like Zapier and Make
- Keys are scoped and revocable, and every call is permission-checked
- Full reference documentation, with examples
👉 Available now under Developers.
📡 Signed outbound webhooks
Subscribe an external app to record changes and Corteksa will push them to you — HMAC-signed, retried on failure, and loop-safe so your own writes don't echo back at you.
Why you'll like it:
- Real two-way sync: pull with the API, get pushed the changes
- Signature verification means you can trust the payload
- Retries with backoff, so a brief outage doesn't lose events
👉 Available now under Developers → Webhooks.
🔐 Connected apps and consent
You can register your own OAuth applications, list them and revoke them. Anyone connecting to your workspace now sees a proper consent screen — what is being asked for, by whom, and what it will be able to do.
Scope pickers suggest the permissions an app actually needs instead of leaving you to guess, and every connected app is listed in one place where you can disconnect it.
Why you'll like it:
- Grant access deliberately, with the scope spelled out
- See every app connected to your workspace, and cut one off
- Build against Corteksa without asking anyone for a key
👉 Available now under Developers.
🚀 Getting Started & Everyday Speed
🧭 Guided onboarding and in-app tours
New workspaces now walk through a short setup — what you do, who's joining, which channel you use — and land in a working workspace. In-app tours point out what's where the first time you visit a screen.
Why you'll like it:
- Get productive without reading documentation first
- Invite your team and verify your WhatsApp number in the same flow
- Skip anything you don't want to answer
👉 Available now for new workspaces.
⚡ A faster app
The app now loads its home screen from a single request instead of a dozen, caches aggressively, and runs across multiple workers. Record lists, boards and sidebars all got dedicated indexes.
Why you'll like it:
- The app opens noticeably faster, especially on large workspaces
- Boards and lists stay responsive as your data grows
- Updates arrive over live connections instead of refreshes
👉 Applied across the whole app.
📱 Longer mobile sessions
Mobile sign-ins now last up to 90 days, so the app stops logging you out between visits.
Why you'll like it:
- Open the app and you're already in
- Web sessions keep their existing, shorter lifetime
- Sign-out still signs you out everywhere you expect
👉 Available now on iOS and Android.
🎙️ A setup wizard that talks you through it
First-run setup is a conversation now, not a form. It reads each step aloud in your language, highlights the words as they're spoken, and waits for you.
You can skip ahead at any point and land in the template gallery instead. Feature tours then pick up where setup left off, pointing at the real thing on the real page.
Why you'll like it:
- Get set up without reading a manual
- Skip it the moment you'd rather explore on your own
- Tours that point at your workspace, not at a screenshot
👉 Available now for new workspaces.
🚦 The app tells you what's happening
Loading states are real now. Lists, menus, boards and cards show their shape while they fetch instead of flashing empty, and anything that can fail says so and offers a retry.
Empty states explain what would be there and what to do about it. When your workspace is read-only, when a view you have open was changed by someone else, or when a field a view depended on was removed, you get a banner that names the problem instead of a screen that quietly does nothing.
Why you'll like it:
- Tell "loading" from "empty" from "broken" at a glance
- Every failure has a way forward
- No more silent no-ops
👉 Applied across the whole app.
🌍 Language & Layout
🕌 Arabic and right-to-left, properly
The whole interface mirrors when you switch to Arabic — not just the text. Menus, dropdowns and popovers open on the correct side, icons that carry a direction flip while icons that don't stay put, breadcrumbs and folder trees run right to left, and spacing works from both edges.
Phone numbers, WhatsApp identifiers and links stay left-to-right where they have to, inside an otherwise Arabic page. The chat composer keeps its familiar layout, so attach stays where your thumb expects it. Numbers, dates and currencies are formatted for the language you're reading in, and Arabic-Indic digits are understood when you type them.
Why you'll like it:
- An Arabic workspace that reads like it was designed in Arabic
- Mixed Arabic and Latin content that doesn't scramble
- Every menu opens where you reach for it
👉 Available now in Arabic and Turkish, across the app.
📱 A real mobile layout
Home, navigation, chat, tables and settings were rebuilt for small screens rather than shrunk onto them.
Tables scroll and stay readable, the sidebar becomes a proper drawer, chat uses the full screen, and settings stack instead of squeezing.
Why you'll like it:
- Genuinely usable on a phone, not just technically loadable
- Read a record or reply to a chat from anywhere
- The same workspace, laid out for the screen you're on
👉 Available now on phones and tablets.
🛠️ What's Fixed
🔒 Access control, consistently enforced
Permission changes now take effect immediately everywhere — no waiting for a cache to expire — and the gaps where a filter, a board, a chat room or an export could show more than a person's level allowed are closed.
Why it matters:
- What you can see is the same on every surface, always
- Changing someone's role applies the moment you save it
- Buttons no longer appear for actions that would be refused
👉 Applied across every view, board, chat, export and API endpoint.
🎯 Filters, boards and views
Saved filters are applied on load. Kanban no longer drops records that have an option selected. Board card fields survive rendering. A view that was edited elsewhere can now be saved without losing your work, and default-view changes are no longer swallowed.
Why it matters:
- The view you saved is the view you open
- No records quietly missing from a board
- Your layout changes stick
👉 Available now on every saved view and board.
🔁 Rollups, formulas and relations
Rollups and formulas now recompute when their configuration is edited, when records are bulk-edited, and when a linked record is deleted. Deleting a relation and recreating it with the same settings no longer resurrects the old links. Each relation is shipped once, in one place, on every record read.
Why it matters:
- Totals you can trust without opening a record to "refresh" it
- No phantom links after you rebuild a relationship
- Consistent record payloads across every screen
👉 Applied to every object that uses rollups, formulas or relations.
✍️ Field validation, hardened
Text, number, currency, rating, boolean, phone, email, link and multi-select validation were all tightened — rejecting impossible values, normalizing separators and casing, enforcing min/max properly, and blocking dangerous URLs on link fields.
Why it matters:
- Bad data is refused at entry instead of surfacing in a report
- Numbers, currencies and dates behave predictably
- Clearer messages when something is rejected
👉 Applied to every field type, on every write path.
📅 Dates, currencies and numbers
Date-only fields are now emitted as calendar days rather than instants, so a date never shifts by a timezone. Currency rollups parse the amount correctly, number formatting is configurable, and Excel date serials import as real dates.
Why it matters:
- The date you entered is the date everyone sees
- Imported spreadsheets keep their dates
- Totals in currency fields add up to the right number
👉 Available now across the app, imports included.
💬 WhatsApp reliability
Sessions no longer die after a tag change, dead sessions are quarantined instead of flooding retries, disconnects are notified from any active state, media messages send with their content, and template status stays in sync. Rejections now surface WhatsApp's own reason, live.
Why it matters:
- Fewer surprise disconnections and re-pairings
- You learn about a problem from Corteksa, not from a customer
- A failed send is visible, with the reason attached
👉 Available now on every WhatsApp session.
🖇️ Files and photos
Photo and file handling was hardened: .jpe and SVG uploads behave correctly, size and dimension limits are enforced, uploads no longer fail on objects with rollup fields, and any file in a chat can be downloaded from one place.
Why it matters:
- Uploads that used to fail now work
- Storage isn't consumed by half-finished uploads
- Every attachment is retrievable
👉 Available now wherever files are uploaded or attached.
🔑 Sign-in and sessions
Refresh no longer guesses the wrong workspace for people who belong to several, token types are preserved so the app can't fall into a logout loop, and password reset signs you straight in.
Why it matters:
- No more being bounced to the login screen mid-task
- Multi-workspace accounts land in the right place
- One less step after resetting a password
👉 Available now on web and mobile.
🧾 Documents
Arabic and mixed-direction text renders correctly, per-element direction is honoured, non-PNG/JPEG images are converted instead of rendering blank, tables no longer push footers off the page, and hidden blocks reclaim their space cleanly.
Why it matters:
- Arabic documents look right the first time
- Nothing silently disappears from a generated PDF
- Multi-page documents keep their headers and footers
👉 Available now in Document Templates.
🔔 Notifications and mentions
Notifications are labeled with the object's name instead of its internal table name, @@ mentions now reach the bell, chat pushes reach web devices, and recipients are derived from who can actually see the record.
Why it matters:
- Notifications that read like sentences
- Mentioning someone actually notifies them
- The right people are told, and only them
👉 Available now across the app.
🧭 Menus, panels and breadcrumbs
Popovers and selects inside dialogs scroll again. Sticky table headers no longer let rows bleed through them. The record panel stops closing when you click inside a picker it opened itself, and nested panels keep their back button and title. Breadcrumbs drop parents that led nowhere and now match the sidebar's own labels and icons.
Why it matters:
- Menus behave the same wherever they open
- You stop losing a half-filled panel to a stray click
- You always know where you are, and how to get back
👉 Available now across the app.
🔒 Buttons that match your permissions
Actions you cannot perform no longer appear. Row delete, inline edit, the assignee picker and the create button on an empty state each read your level on that specific record rather than assuming. When your permissions change, open lists re-read them instead of waiting for a refresh.
Why it matters:
- You stop clicking things that were going to be refused
- A role change takes effect on the screen you're looking at
- The same rules on lists, boards, panels and inline editors
👉 Applied to every list, board and record.
✍️ Forms that keep your work
A rejected save now scrolls to the first problem and shows the reason on the field itself, with everything you typed still in place. Dates and numbers accept the shapes people actually type — Arabic-Indic digits included — and clamp to their limits instead of silently refusing. Stale option values render as history rather than as a blank, and duplicate-key warnings are gone.
Why it matters:
- A rejection tells you exactly what to fix
- You never retype a form because one field was wrong
- Typed and imported numbers behave the same way
👉 Applied to every record form and inline editor.
📋 Lists, boards and what they show
Kanban keeps cards that have an option selected, and re-reads a card whose permissions changed underneath it. Grouped tables page without dropping rows. Linked-record grids show every row they loaded. Lists patch themselves from live events instead of refetching everything, and a filtered list no longer swallows an update meant for it.
Why it matters:
- The board matches the data behind it
- No rows quietly missing from a group or a strip
- Changes appear without reaching for refresh
👉 Available now on every list and board.
💬 Chat and notifications
Marking a chat as read no longer leaves it sitting in Unanswered. Filter caches reset when they should. Notifications group properly, arrive with sound, and the bell reflects what is genuinely unread. Session status changes surface with the reason attached.
Why it matters:
- Read means read, on every tab
- A badge you can trust
- You hear about a problem when it happens, not later
👉 Available now in Cortex Chat and the notification centre.
Release Version: V2.0 Release Date: August 24, 2026 Author: Corteksa Product Team
This release is a mix of things you asked for and things we wanted to make right. Some new tools, some long-standing rough edges polished off. Here's everything that's new.
✨ What's New
🔎 Filter by "Starts With", "Ends With" and exact "Equals"
You can finally filter the way you actually think. Three new operators let you match a value at the beginning, at the end, or exactly — no more catching unrelated rows that just happen to contain your text somewhere in the middle.
Why you'll like it:
- Filter phone numbers by country code (e.g. every
+963lead) without false matches - Find records by ID prefix, name prefix, or email domain in a single click
- Stays fast on large tables — every operator runs against indexed columns
👉 Available now on text, phone, email, link, and serial-number fields.
💬 Cortex Chat — Filter by Session
Running more than one WhatsApp line? You can now narrow Cortex Chat down to just one session — or any combination of them — with a multi-select session filter.
Why you'll like it:
- Focus on the channel that matters right now (e.g. just your Cairo number)
- Stacks with assignee, status, and date filters for a fully tailored inbox
- Your selection sticks across refresh, so you don't lose your view
👉 Available now across all sessions.
🎯 Cortex Chat — Filter by Status (Object-Aware)
Triage your chats by where the linked record sits in your pipeline. Pick the object first — Lead, Deal, Contact, or any custom one — then pick the statuses you care about, and the list narrows down to fit.
Why you'll like it:
- See only "open deals" or "qualified leads" without leaving the chat view
- Works with every custom object's statuses — not just leads
- Combines with the other Cortex Chat filters for fine-grained workflows
👉 Available now in Cortex Chat.
🔴 Cortex Chat — Unanswered Filter
A simple but powerful one: tap the Unanswered filter and you'll see only chats where the customer sent the last message. The conversations that are actually waiting on you, with nothing else in the way.
Why you'll like it:
- Triage your inbox in seconds — no scrolling past replies you've already sent
- Hit your response-time targets by focusing on what's pending right now
- Chats leave the filter automatically the moment your team replies
👉 Available now across all messaging providers.
📱 WhatsApp Co-Existence
Use the WhatsApp Business app and the WhatsApp Cloud API on the same phone number, at the same time. Your team keeps replying from the app they know, while Corteksa handles automation, templates, and CRM sync in the background.
Why you'll like it:
- No more choosing between mobile convenience and CRM automation — get both
- Scale up with templates and bots without disrupting how your team works today
- One unified inbox in Corteksa shows messages from both surfaces together
👉 Available now for WhatsApp Cloud sessions.
🛠️ What's Fixed
⌨️ Arabic & RTL Text Input — Now Smooth Everywhere
If you've been typing in Arabic and watching characters disappear, freeze, or shuffle out of order — that's done. We rebuilt the input handling around proper IME composition events, so what you type is exactly what stays on screen.
Why it matters:
- Type in Arabic, Hebrew, or any RTL language without losing characters mid-word
- Mixed Arabic + English + numbers stays in the order you typed it
- Works in every text field — short text, long text, inline edit, and the record drawer
👉 Available now across the whole app.
🔒 Permission Enforcement on Filters
Permissions are now respected everywhere — including when users apply filters. A user restricted to "own records only" can no longer view other users' data by selecting them in the assignee filter, on any view.
Why it matters:
- Sensitive customer data stays inside the right team boundaries
- Restricted users see only what they're authorized to access — Kanban, Data Table, Cortex Chat, exports, all of it
- Defense-in-depth: enforced in both the UI and the backend, with audit logging
👉 Applied across every view and API endpoint that accepts a user filter.
🧵 Cortex Chat Now Scopes to the Originating Session
When you open a record's Cortex Chat sidebar, you'll see only the conversation from the session the contact came in on — no more mixing in chats from other sessions that happen to share the same phone number.
Why it matters:
- Cleaner record view: your agents see only the thread they should be handling
- No confusion when one phone number exists across multiple sessions
- Each team — region, language, brand — stays focused on its own thread
👉 Available now in the record-view Cortex Chat sidebar.
🔔 WhatsApp Push Notifications Now Show the Lead's Name
WhatsApp push notifications now carry the lead's name right in the notification body. No more guessing who's messaging based on a phone number alone.
Why it matters:
- Identify the lead from your lock screen and open the right chat instantly
- Faster response time to your most important contacts
- Smart fallback: lead name → WhatsApp display name → phone number, so the notification is always useful
👉 Available now on Android and iOS, foreground and background.
🪟 One Record View Across Kanban & Data Table
Opening a record from Kanban now uses the same drawer as the Data Table — same layout, same sections, same editing experience. One record view, everywhere.
Why it matters:
- Learn the layout once, use it everywhere — no more context-switching between views
- Every section (related records, files, comments, activity) is now available from Kanban too
- Future improvements to the record drawer roll out to every view at once
👉 Available now from any view that opens a record.
Release Version: V1.05.5 Release Date: May 22, 2026 Author: Corteksa Product Team
Powered by heyo-docs