Розробка системи дедлайнів і розкладу занять для LMS

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Розробка системи дедлайнів і розкладу занять для LMS
Середня
~3-5 робочих днів
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Розробка системи дедлайнів та розкладу занять для LMS

Дедлайни та розклад—це часовий скелет курсу. Без правильної системи студенти пропускають завдання, не знають коли занять, а викладачі витрачають час на ручні нагадування.

Два режими курсів

Self-paced—студент проходить у своєму темпі. Дедлайни відносні: «Завдання треба здати через 7 днів після початку уроку». Розкладу немає.

Cohort-based—потік з фіксованими датами. Абсолютні дедлайни та розклад занять (вебінари, семінари). Студенти записуються на конкретний потік.

Модель даних

-- Потоки (cohorts)
CREATE TABLE course_cohorts (
  id              UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  course_id       UUID REFERENCES courses(id),
  name            VARCHAR(200),           -- 'Потік №5, березень 2026'
  starts_at       DATE NOT NULL,
  ends_at         DATE,
  max_students    INT,
  enrollment_open BOOLEAN DEFAULT TRUE
);

-- Дедлайни завдань
CREATE TABLE assignment_deadlines (
  id              UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  assignment_id   UUID REFERENCES assignments(id),
  cohort_id       UUID REFERENCES course_cohorts(id),
  -- Абсолютний дедлайн для cohort-based курсів
  deadline_at     TIMESTAMPTZ,
  -- Відносний для self-paced: N днів від початку уроку
  relative_days   INT,
  late_allowed    BOOLEAN DEFAULT FALSE,
  late_penalty_pct INT DEFAULT 0
);

-- Розклад занять
CREATE TABLE schedule_events (
  id              UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  cohort_id       UUID REFERENCES course_cohorts(id),
  lesson_id       UUID REFERENCES lessons(id),
  title           VARCHAR(500),
  event_type      VARCHAR(50), -- 'webinar', 'seminar', 'qa_session'
  starts_at       TIMESTAMPTZ NOT NULL,
  ends_at         TIMESTAMPTZ NOT NULL,
  location_url    VARCHAR(2000),  -- Zoom/Meet посилання
  recording_url   VARCHAR(2000),  -- Після події
  is_mandatory    BOOLEAN DEFAULT FALSE,
  timezone        VARCHAR(100) DEFAULT 'Europe/Moscow'
);

Розрахунок персональних дедлайнів для self-paced

При зарахуванні студента на курс усі відносні дедлайни конвертуються в абсолютні та зберігаються для конкретного студента:

async function assignDeadlines(studentId, courseId) {
  const enrollment = await db.enrollments.findOne({ studentId, courseId });
  const assignments = await db.assignments.findAll({ courseId });

  const deadlineRecords = assignments
    .filter(a => a.relativeDays !== null)
    .map(a => ({
      studentId,
      assignmentId: a.id,
      deadlineAt: addDays(enrollment.enrolledAt, a.relativeDays),
    }));

  await db.studentDeadlines.bulkCreate(deadlineRecords, {
    onConflict: 'ignore', // Не перезаписуємо при повторному виклику
  });
}

Відображення в інтерфейсі

Для студента:

  • Календар з дедлайнами та заняттями
  • Список «Що здати на цьому тижні» на дашборді
  • Countdown timer для найближчого дедлайну
  • Розділення: прострочені / сьогодні / цей тиждень / пізніше

Для викладача:

  • Зведка по потоку: скільки студентів здали до дедлайну, скільки ні
  • Масова пролонгація дедлайну для всього потоку

Нотифікації про дедлайни

Нотифікації рассилаються через очередь завдань за розкладом:

Коли Тип Умова
7 днів Email Завдання не відправлено
24 години Email + Push Завдання не відправлено
3 години Push Завдання не відправлено
День заняття Email Нагадування про вебінар
15 хвилин Push Нагадування про заняття
// Cron job: кожну годину
async function sendDeadlineReminders() {
  const upcoming = await db.studentDeadlines.findAll({
    deadlineAt: {
      gte: new Date(),
      lte: addHours(new Date(), 25), // Наступні 25 годин
    },
    submittedAt: null, // Ще не здано
    reminderSent24h: false,
  });

  for (const deadline of upcoming) {
    const hoursLeft = (deadline.deadlineAt - new Date()) / (1000 * 60 * 60);
    if (hoursLeft <= 24) {
      await sendReminderEmail(deadline.studentId, deadline.assignmentId);
      await db.studentDeadlines.update(deadline.id, { reminderSent24h: true });
    }
  }
}

iCal експорт

Студенти хочуть бачити розклад курсу в Google Calendar або Apple Calendar:

import ical from 'ical-generator';

app.get('/api/courses/:id/schedule.ics', authMiddleware, async (req, res) => {
  const events = await db.scheduleEvents.findAll({ courseId: req.params.id });
  const calendar = ical({ name: course.title });

  events.forEach(event => {
    calendar.createEvent({
      start: event.startsAt,
      end: event.endsAt,
      summary: event.title,
      description: `Тип: ${event.eventType}\nПосилання: ${event.locationUrl}`,
      url: event.locationUrl,
    });
  });

  res.setHeader('Content-Type', 'text/calendar');
  res.send(calendar.toString());
});

Терміни

Базова система дедлайнів з нотифікаціями—4–5 днів. Cohort-based розклад з календарним відображенням та iCal експортом—ще 4–5 днів.