← All cases

Case · Education · Ukraine · 2026

A scheduling module on top of a boxed CRM

unit tests
73
lines of custom code
6,500
core changes
0
The project in facts
FormatA custom module on top of a boxed CRM
PaceA working version on the client's server in two weeks
Scope≈6,500 lines of code, 73 unit tests
ArchitectureThree dedicated tables, zero core changes
The task

The monthly schedule was built by hand before the 15th.

Courses, groups and subgroups already lived in the CRM as smart processes, but next month's schedule was still assembled by hand, from memory and on paper: too many rules to hold at once. Clashes only surfaced in the classroom — and people, not the system, had to fix them.

We wrote a custom “Group schedule” module on top of the boxed CRM: it drafts the schedule in one click, and the coordinator only adjusts it by dragging and approves it.

Context

What was in the way

  • Next month's schedule was assembled by hand before the 15th
  • The rules — eight-hour days, long and short groups alternating — lived in the coordinator's head
  • Two groups of the same course could not share the same hours
  • Group numbering restarts every year
  • Clashes only surfaced once students had arrived
Capabilities

What the system does

01

Group calendar

A grid of working days with group tiles: course, type, number, student count. Groups continuing from last month carry their own marker; clashes are highlighted in red.

02

A draft in one click

The “Generate” button lays out next month's groups from each course's settings — not real groups yet, but a draft that can be edited.

03

Drag-and-drop edits

Drag a group tile to another day — the schedule recalculates immediately.

04

Print and navigation

Print the schedule for any period with filters applied; clicking a group opens its CRM record in a side panel.

05

Settings and roles

Each course defines its number of long and short groups and whether it joins auto-generation; access is split across three roles — inspector, coordinator, administrator.

Diagram

How it fits together

Boxed CRM
Platform core — untouchedCourse and group smart processesRoles and access rights
“Group schedule” module — an isolated directory
Three dedicated tablesWave schedulerScreens: calendar, draft, settingsTwo-phase finalization → group records in the CRM
What's inside

The engineering behind it.

Approach

Zero core changes

The module lives in an isolated directory and uses the platform's standard mechanisms: its own tables, controllers and the smart-process API.

Algorithm

The “wave” scheduler

Groups of a course run in waves: parallel ones share a time slot, sequential ones follow each other; a wave fills the eight-hour day and carries the remainder over.

Reliability

Two-phase finalization

CRM records are created first, then a transaction updates the module's own tables — a failure midway cannot leave the schedule half-created.

Results

Before → after

Before
After
The schedule was built by hand before the 15th
A month's draft in one click
The rules lived in one head and on paper
The rules are set per course in the module
Clashes surfaced in the classroom
Conflicts are visible on the draft before approval
Boxed-CRM customizations break on updates
The module is isolated — CRM updates leave it intact

AI agents for business — 2–3 emails a month

Breakdowns, cases and tools already working inside companies.

No spam. Unsubscribe in one click.