Get in touch

All projects

Enterprise CRM and Sales Hub

The group's CRM portal. Staff in 60+ branches across seven countries work in it every day.

60+
branches whose staff work in it every day
15,000+
customer service cases handled so far
250+
deals moved onto the staged sales process
1,097
pull requests merged in five months
Role
Designer and lead engineer
Years
2024 to present
Stack
Dynamics 365, Dataverse, Next.js, TypeScript, Microsoft Entra ID
Scale
60+ branches, seven countries, five languages
Screen from Enterprise CRM and Sales Hub

Problem

A trading group with 60+ branches across Saudi Arabia, the UAE, Oman, Kuwait, Bahrain, China and Spain served its customers through phone calls and chat threads. Branch staff had no shared place to log a complaint and follow it to the end, and head office could not see how any branch was doing.

How I worked

I ran it end to end as the forward deployed engineer: designer, lead engineer and operator. Dynamics 365 stayed the system of record and a web app went in front of it, so no data had to move. I worked next to the customer service team and the branch managers, turned what they asked for into small changes, and shipped each one behind type checks, tests and review, then walked it on a staging site as a real user before it went live.

What I built

  • A CRM portal on top of Dynamics 365 and Dataverse, signed in with Microsoft Entra ID and installable on a phone.
  • A case workspace: a case starts from an invoice, a guided category choice, a conversation thread, attachments with a viewer, and a guided close with a manager's approval.
  • Personal queues, saved views, and one search that finds a case by ticket, invoice or phone number.
  • One Access Center for every branch role, department role and grant, in place of scattered admin pages.
  • A Sales Hub that puts deals on a staged sales process, each owned by one rep.
  • Operations reports and an executive scorecard of branch performance.
  • A call center console, and customer and internal email inside the case.
  • Five languages, with right-to-left Arabic built in from the first screen.
  • Feature flags, so a change reaches a few people before it reaches everyone.

The hard parts

  • A case list took 130 calls to draw.

    One request fanned out 31 times on a page, a 2 MB metadata file downloaded on every visit, and every link on a list fetched its page in advance. I cached the metadata, merged the repeated requests and stopped the advance fetching.

    32 calls to draw a case list, was 130

  • Everyone sees a different slice of the same cases.

    A branch, a department and an all-branch supervisor each need their own view. The app scopes every read on the server, and one screen holds every role and grant. A branch can still find a case raised at another branch, read it and add a note, without taking it over.

  • Arabic that reads right on screen.

    Dates, labels and numbers that mix Arabic and English flipped in places, while checks on the text passed. I judge the rendered screen in both languages before anything ships.

Result

  • Built pairing with AI coding agents behind test and review gates: 290K lines of TypeScript, 97 pages, 219 API endpoints and 7,000+ automated tests.

Next

Hiring for a senior role? Let's talk.

Tell me the role or what is slowing your team down. I reply within two working days.

Write today, hear back by Riyadh