# UpSkills: an e-learning platform and sales CRM for professional skills

> UpSkills is an e-learning platform for professional and soft skills, with courses in English and French. Learners start with a free first capsule, pay by card or through their adviser on WhatsApp, and download a certificate anyone can verify with a QR code. Behind it, the team runs sales, payments and revenue from a CRM and back office in the same system.

I built and maintain UpSkills, including its sales CRM and back office, as full-stack developer at CCL.
Online at https://www.upskills-uk.com/
Canonical: https://salaheddine-elfatimi.com/projects/upskills
Built with: JavaScript, Next.js, React, Tailwind CSS, DaisyUI, next-intl, Bun, Elysia, Auth.js, Prisma, MySQL, Redis, Stripe, Resend, Vimeo, Docker, Dokploy

## The client

UpSkills is a product of Master Learn, with an address in London. Its catalogue covers areas such as leadership and management, health and medico-social care, human resources, digital marketing and professional communication. Courses are video-based and self-paced, and learners pay the way they're used to in their country: by card, Wave, Western Union or Orange Money.

## What they needed

UpSkills sells to learners in several countries, and not all of them pay by card. A card-only checkout would lose the people who pay through Wave, Western Union or Orange Money, so the offline route had to be part of the platform, with someone on the team confirming each payment.

The platform also had to serve the sales team. Leads come in, sales reps follow them up, often on WhatsApp, and managers need to see who answered, how fast, and which leads became sales. All of that had to sit in the same system as the catalogue and the payments.

## What I built

- **Courses, learning paths and an Expertise shelf**: Learners browse courses, learning paths that group several courses, and a video-first "Expertise" shelf, in English or French. The first capsule of a course opens for free as soon as they create an account.
- **A final exam and QR certificates**: A learner who finishes a course and passes its final exam downloads a certificate with a QR code. Anyone can scan it to check the certificate, and the learner can add it to LinkedIn with the details already filled in.
- **Card and offline payments**: Cards go through Stripe. To pay offline, the learner sends a WhatsApp message to their adviser with the order already written in, and the adviser records the payment and activates the enrolment.
- **A sales pipeline the team edits itself**: Pipeline stages the team changes itself, notes on every lead, and new leads shared out automatically between sales reps, who each see only their own portfolio. Managers can reassign leads, and each rep's first-response time is measured.
- **From lead to sale on its own**: A lead moves to "sale" by itself when its payment is validated, and the sale is sent back to Meta to optimise the ads. WhatsApp clicks and abandoned carts are tracked, and a second person can check the stages reps report, with an Excel export.
- **Revenue, roles and a partner API**: Revenue by course, by trainer and by client, tiered pay for trainers, and ready-made roles such as accountant, sales rep, sales manager, controller and support. A partner API lets CCL's back office create UpSkills accounts and enrolments directly.

## What it lets them do

**Learners who finish a course and pass its final exam download a certificate with a QR code anyone can verify, while the admin runs sales stages, abandoned carts and revenue next to the catalogue.**

Learners in several countries can try a course for free, pay by card or through a local option, and leave with a certificate anyone can check with its QR code. The team works its leads, confirms payments, follows abandoned carts and reads revenue by course, trainer and client in the same back office, and CCL can enrol learners on UpSkills through the partner API.
