Deadlines and Class Schedule System for LMS

Our company is engaged in the development, support and maintenance of sites of any complexity. From simple one-page sites to large-scale cluster systems built on micro services. Experience of developers is confirmed by certificates from vendors.
Development and maintenance of all types of websites:
Informational websites or web applications
Business card websites, landing pages, corporate websites, online catalogs, quizzes, promo websites, blogs, news resources, informational portals, forums, aggregators
E-commerce websites or web applications
Online stores, B2B portals, marketplaces, online exchanges, cashback websites, exchanges, dropshipping platforms, product parsers
Business process management web applications
CRM systems, ERP systems, corporate portals, production management systems, information parsers
Electronic service websites or web applications
Classified ads platforms, online schools, online cinemas, website builders, portals for electronic services, video hosting platforms, thematic portals

These are just some of the technical types of websites we work with, and each of them can have its own specific features and functionality, as well as be customized to meet the specific needs and goals of the client.

Showing 1 of 1 servicesAll 2065 services
Deadlines and Class Schedule System for LMS
Medium
~3-5 business days
FAQ
Our competencies:
Development stages
Latest works
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1161
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1041
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    823
  • image_crm_chasseurs_493_0.webp
    CRM development for Chasseurs
    848
  • image_website-sbh_0.png
    Website development for SBH Partners
    999
  • image_website-_0.png
    Website development for Red Pear
    451

Development of a Deadline and Schedule System for LMS

Deadlines and schedules form the temporal skeleton of a course. Without a proper system, students miss assignments, don't know when classes are, and instructors waste time on manual reminders.

Two Course Modes

Self-paced—students progress at their own pace. Deadlines are relative: "Assignment due 7 days after lesson start." No schedule.

Cohort-based—a cohort with fixed dates. Absolute deadlines and class schedules (webinars, seminars). Students enroll in specific cohorts.

Data Model

-- Cohorts
CREATE TABLE course_cohorts (
  id              UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  course_id       UUID REFERENCES courses(id),
  name            VARCHAR(200),           -- 'Cohort #5, March 2026'
  starts_at       DATE NOT NULL,
  ends_at         DATE,
  max_students    INT,
  enrollment_open BOOLEAN DEFAULT TRUE
);

-- Assignment deadlines
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),
  -- Absolute deadline for cohort-based courses
  deadline_at     TIMESTAMPTZ,
  -- Relative for self-paced: N days from lesson start
  relative_days   INT,
  late_allowed    BOOLEAN DEFAULT FALSE,
  late_penalty_pct INT DEFAULT 0
);

-- Class schedule
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 link
  recording_url   VARCHAR(2000),  -- After event
  is_mandatory    BOOLEAN DEFAULT FALSE,
  timezone        VARCHAR(100) DEFAULT 'Europe/Moscow'
);

Calculating Personal Deadlines for Self-Paced

When a student enrolls in a course, all relative deadlines are converted to absolute deadlines and saved for that student:

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', // Don't overwrite on repeat call
  });
}

Display in Interface

For Students:

  • Calendar with deadlines and classes
  • "What to submit this week" list on dashboard
  • Countdown timer for next deadline
  • Categorization: overdue / today / this week / later

For Instructors:

  • Cohort summary: how many submitted on time, how many didn't
  • Bulk deadline extension for entire cohort

Deadline Notifications

Notifications sent via job queue on schedule:

When Type Condition
7 days Email Assignment not submitted
24 hours Email + Push Assignment not submitted
3 hours Push Assignment not submitted
Class day Email Webinar reminder
15 minutes Push Class reminder
// Cron job: runs every hour
async function sendDeadlineReminders() {
  const upcoming = await db.studentDeadlines.findAll({
    deadlineAt: {
      gte: new Date(),
      lte: addHours(new Date(), 25), // Next 25 hours
    },
    submittedAt: null, // Not yet submitted
    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 Export

Students want to see course schedules in Google Calendar or 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: `Type: ${event.eventType}\nLink: ${event.locationUrl}`,
      url: event.locationUrl,
    });
  });

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

Timeline

Basic deadline system with notifications—4–5 days. Cohort-based schedule with calendar display and iCal export—another 4–5 days.