Abbott's medical representatives have to hold useful conversations with healthcare professionals about specific products. This platform trains them for that, and it was used by over 1,000 reps worldwide.It is two connected applications. A CRM where admins build training content, and a game where reps play through it.
The CRM side
Admins work at three levels: global, country, and technical. That structure exists because the product line and the regulatory position differ by country, so a global team cannot write one script that is correct everywhere, and a country team should not be rebuilding the framework each time.Trainers build scenarios across the channels a rep actually uses: SMS, email, and face-to-face visits. A scenario is a branching conversation, so the same opening can go several ways depending on what the rep chooses. Those scenarios are then assembled into games and tournaments.
The game side
Reps log in through a separate gateway and join a session with a code sent to them by email. They play through scenarios and are scored on their choices.A live leaderboard shows scores as the session runs. This is the part that changes behaviour: a training module people complete once becomes a tournament people want to win, and the scenarios get replayed. The platform also supports public live events, where a session runs in front of a room.
Build
Angular on the front end, PHP and Node.js behind it over SQL, split into services. Per-region admin panels, a CMS for the training content, and reporting on top.The platform ran at thcpgame.com. That domain has since lapsed, so there is no live deployment to link.
Screens
Related projects
Enrixa Store, a multi-tenant e-commerce platform
A platform where every merchant runs an isolated store on its own subdomain, and where a query that could leak one merchant's data into another fails CI instead of reaching customers.
A tool-calling agent that answers shopper questions against a live product catalog, streamed over SSE, with a chat widget that cannot collide with the store's own CSS.