Belief-propagation optimization engine

Scheduling problems,
solved as an API.

Timetables, rosters, tournaments — the combinatorial problems that break spreadsheets. Model them as constraints, and TimelyNodes returns a clash-free schedule in minutes.

0events per solve
0constraint types
decoder-guaranteed

Every extra rule multiplies the difficulty

A hundred lectures, forty rooms, teacher availability, room capacity, no student double-booked — the number of possible timetables is astronomically large. Brute force never finishes. Heuristics get stuck. TimelyNodes treats it as what it is: a constraint-optimization problem on a factor graph.

Model, don't code

Describe events, resources and rules. No custom solver, no hand-tuned heuristics — the constraints are the program.

Hard & soft together

Never double-book a room (hard) while preferring mornings and compact days (soft). The optimizer trades them off on their true magnitude.

Minutes, not weekends

A 2,100-event, 231k-edge problem converges in a few minutes — with a decoder that guarantees clash-free output every time.

How it works

A factor graph, solved by message passing

Your problem becomes a graph of three node types. Belief propagation passes messages along the edges until the assignment settles — then a decoder locks in a feasible schedule.

Variable

Events

Each thing that needs a slot — a lecture, a shift, a match — is a variable to be assigned one timeslot.

Constraint

Rules

Clash, capacity, precedence, same-room, min-gap, availability — each rule scores assignments and passes messages.

Resource

Rooms

Shared resources with capacity. The solver resolves each event to a concrete room after times are fixed.

POST /api/v1/optimize
{
  "graphDefinition": {
    "nodes": [
      { "id": "lec-math", "type": "VARIABLE", "metadata": { "duration": 2 } },
      { "id": "clash-y1", "type": "CONSTRAINT" },
      { "id": "room-101", "type": "RESOURCE", "metadata": { "capacity": 120 } }
    ],
    "constraintStrategies": {
      "clash-y1": { "strategyName": "clash", "parameters": { "penalty": 10000 } }
    }
  }
}
→ 200  { "assignment": { "lec-math": 3 }, "costBreakdown": { "CLASH": 0 } }

The platform

From raw constraints to a published timetable

The engine solves; the platform productises it — import, solve, review conflicts, publish, and hand every participant a live schedule.

Constraint library

Clash, capacity, availability, preferences, precedence, min-gap, same-day, max-span, room suitability — composable per problem.

Multi-vertical

University timetabling first; the same core models healthcare rosters, sports fixtures and conference tracks.

Domain DSL

Author a whole domain in plain text (TNL), version it in git, and recompile — durable, reviewable, diff-able schedules.

Conflict review

Before anything is published, see exactly what moved, what clashes, and room/lecturer utilisation.

Live participant view

Every student or staff member gets a personal schedule and a calendar subscription (.ics) that stays in sync.

API-first

Submit a factor graph, poll, fetch the result. Everything the UI does is a public, documented endpoint.

Built for the hard cases

The same problems the field competes on

TimelyNodes speaks the standard timetabling benchmarks — the International Timetabling Competition (ITC) instances — so quality is measured against known best-known solutions, not vibes.

0classes in a single real instance
0distribution constraints
0students to schedule

Developers

A clean optimization API

Three verbs: submit a job, poll its status, fetch the result. Self-contained docs, a Swagger UI, and a sandbox API key to start in seconds.

  • Factor-graph request model — nodes, edges, strategies
  • Duration-aware, multi-day, multi-week scheduling
  • Cost breakdown per constraint — full transparency
  • Scales to thousands of events per solve
Get an API key
$ curl -s api.timelynode.com/api/v1/jobs/$ID
  { "status": "SUCCEEDED", "convergenceScore": 0.98 }

$ curl -s api.timelynode.com/api/v1/jobs/$ID/result
  {
    "assignment": { "lec-math": 3, "lec-cs": 7 },
    "structuredAssignment": {
      "lec-math": { "timeslot": 3, "room": "room-101" }
    },
    "costBreakdown": { "CLASH": 0, "ROOM": 12 },
    "totalCost": 12
  }

Bring us your impossible schedule.

Timetabling, rostering, fixtures — if it has constraints, we can solve it. Tell us about your problem and we'll get you set up.