VK Education
VK’s education platforms: the VK Education LMS and the partner projects running on it — SHIFT with HSE University and the VK Ads Academy — VKube, the corporate learning platform for VK employees, and Review 360, a 360° assessment service.

Outcome
- ×7
- faster regular data exports after moving them to Airflow, by the stakeholders’ estimate
- 108 203
- site notifications and 31,020 emails sent by the VKube notification system in the first half of 2026
- 116
- assignments graded by subject experts in the first half of 2026 — administrators used to do the grading
Product screens

VK Ads Academy: sign-in through the VK Ads account over OAuth. Learner accounts are created in advance by the account through the API, so there is no self sign-up.

The course catalogue on education.vk.company: the selected filter and the result count no longer carry over from the previous page during in-site navigation.

The VK Education home page on a phone. I updated the home page copy and images to the marketing layout ahead of the autumn course campaign.
The business problem
VK Education LMS. Students of VK’s education centres learn on this platform, and the team launches new programmes on it. The schedule had to be rebuilt to a new design for students, teachers and administrators at once. Managers lacked a VK Messenger channel for telling students about rescheduled classes. Regular data exports for analysts were put together by hand. The partners — SHIFT with HSE University and the VK Ads Academy — each needed their own domain, their own sign-in and an integration that didn’t involve copying data by hand. VKube. VK’s corporate learning platform was moving from Study to a new version. Before launch the interface had to pass focus-group acceptance. Curators needed tests with images and files, and employees needed clear training reminders by email, on the site and in their calendar. Grading had to move from administrators to subject experts. Learning articles built in Tilda had to work properly inside the platform, Safari included. Review 360. The company needed its own 360° assessment service: a competency bank, assessment projects with stages, bulk participant setup and reports. The main constraint was methodological: results of different assessments had to stay comparable even as the competency bank changed.
My role
Fullstack engineer on VK’s education team since February 2025. I write the Django backend and the React interfaces, and take each task from design to production rollout together with SRE. So far I’ve closed 116 tasks: 41 on the VK Education LMS, 51 on VKube, 21 on Review 360 and 3 more on infrastructure and neighbouring projects. I design data models and APIs myself before development starts. On Review 360 I designed the competency, assessment project and stage models together with the methodologists. On VKube I designed the expert interfaces and the notification system. For the VK Ads integration I designed the API and wrote its documentation for the external team and QA.
The solution
VK Education LMS. I first built the schedule as a standalone desktop and mobile prototype, then brought month, week (with a current-time line) and seven-day list views into the LMS. We agreed the data format with the backend up front. The schedule exports to ICS by role, discipline and class type, and re-importing updates calendar events instead of duplicating them. Notices about rescheduled classes and enrolment also go to VK Messenger from a chosen community, and the mailing section shows delivery status per channel. Daily Airflow DAGs load MyTracker events and mailing statistics into PostgreSQL for the analysts’ dashboards. Assignments with the CX HUB AI trainer got their own cards, a tooltip breaking down multiple grades and clear states for the submit button. Partner projects. For SHIFT with HSE University — a landing page on its own domain with VK ID sign-in and a REST API through which the partner’s system creates schedule items and teachers itself, with permissions checked per project and integration. For the VK Ads Academy — sign-in through VK Ads OAuth and a server-to-server API. Users are created idempotently by external ID and enrolled in a group by programme version, and progress and certificates are returned on request from the VK Ads account. I documented the API with error formats and Postman collections. Video and SEO. The platform’s video player kept failing, especially on phones and slow connections. I compared alternatives for reliability, adaptive streaming and device support, tested Shaka Player with a trial integration on a real scenario and made the case for it to the team — the platform has since moved to it. I found why MinIO video links expired on slow connections. I set up a Last-Modified header that Django passes to Next.js so search crawlers can see how fresh a page is. VKube runs React on top of Django. I built the notification system from scratch. Email templates are edited in CKEditor in the admin and sent through Celery with user and project context. Signing up for a cohort attaches an ICS file, and when a training changes the calendar event updates without a duplicate. Site notifications arrive in real time through Centrifugo: webinar changes, enrolment from the waiting list, a reminder 30 minutes before. Rescheduling a session doesn’t trigger duplicate reminders. The test interface supports three question types and attachments, and saves progress so a learner can pick up where they left off. That wasn’t in the requirements; I added it on my own initiative. I designed the expert grading interface before development: a submissions table with filters in the URL, question-by-question grading, and a history of attempts and grades. If two experts pick the same submission at once, Centrifugo resolves the conflict. Embedded Tilda content adjusts the iframe height, scales at in-between widths and works in Safari. I also built the programmes tab in the catalogue, pinned courses, and a survey report that generates large files in the background and emails a link. Autotests with several roles, email capture through maildev and no live Celery run in CI. Review 360 is React and Vite on the front end and Django 5 on the back end. I started with the data schemas: the competency bank with indicators and scales, assessment projects, participants and respondents, stages, and what an administrator, manager, HRBP and employee can access at each stage. With the methodologists we agreed which changes to the bank make results incomparable. So a competency already used in an assessment can’t be edited, only copied safely. Administrators set up a project in ssadmin: a classic or ipsative scale, indicator weights checked to sum to 100%, open questions, and stages switched by a button that checks readiness. Competencies, assessees and respondents are imported from XLSX with a preview before anything is written to the database. Temporary import files live in S3, so the service doesn’t depend on a particular instance. Reports are calculated in batches. The personal report shows strength and development-area indices and a recommendations block. The group report compares respondent roles. The anonymised export shows “Not enough data” instead of a value when too few people answered.