Skip to main content
← The team

Mojo the Forecaster

sees enrolment coming · A university's team

Working today

The challenge

The demographics are moving, competition is now global, and the fields students want are being reshuffled faster than any planning cycle can absorb. Which makes an intake harder to predict every year, and the cost of predicting it wrong higher — staffing, timetables, budget, all committed months before you know. The information is sitting in your own pipeline the whole time. It is just not in a shape anyone can read while there is still time to act on it. So you find out in August that an intake is forty per cent short, having watched the numbers all year.

What it does about it

Now imagine seeing the shortfall in March instead of August. The Forecaster reads the pipeline you already have and projects where the intake actually lands, with the assumptions it used written on the output — so a number you act on is one you can interrogate first.

How it works

It reads the stages your own pipeline is actually sitting in and projects forward from the conversion rates it names on the output, so you can argue with the assumption rather than just the number. A projection stays labelled as one, and is never quietly stored as fact.

What you get

Sight of where your intake lands while you can still change it, with the rates it used named on the output — a forecast that shows its working. It reads the same pipeline your Recruiter works, and learns from the enrolments students actually record — so its next projection is better than its last.

The machinery

  • Producesodin_runs (engine 'university_chat') — forecasts are labelled read-views, never stored as fact
  • Can act whenlib/odin/tools/university/forecast-rates.ts (rates-source labelling) · lib/odin/engines/university-chat.ts

Read from the same manifest the product runs on, so this cannot describe machinery that does not exist.