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
bouncer, CI gates that let anyone contribute
Five checks that sit at the door of your main branch, written as pure functions so the same modules run in CI, in a Cloudflare Worker, on Railway and in the browser. Pointed at a real 1,209 file repository it went from 45 blocking findings to 13, all 13 genuine.
Checks every repository you own against declarative rules and exits non-zero, so the problems nobody notices for months fail a build instead. One Go binary, no dependencies, no dashboard.