Training plans#

A drill session answers "what should I do right now". A training plan answers "what should I do for the next three weeks".

Use a plan when you want structure — you are learning a whole algorithm set, you are coaching someone, or you know that left to your own devices you will drill the cases you already enjoy.

Using a plan#

Plans in the navigation lists everything available: the built-in plans that ship with the app, plus anything you or a coach has built on this instance.

Each plan shows its level (beginner, intermediate, advanced), an estimated time per session, and a description of what it will teach you. Starting a plan creates a plan progress record for your profile, so two people on the same machine can be at different points in the same plan.

Once started, the plan shows the block you are on. Pressing Run block turns that block into a normal drill session — same timer, same scale, same recording — and completing it advances your progress. Your position is per profile, and you can restart or abandon a plan at any time without losing the attempt history it produced.

What a plan is made of#

A plan is an ordered list of blocks. A block says which cases to practise and how, and the plan's config stores them as JSON:

{
  "blocks": [
    {
      "kind": "group",
      "phase": "oll",
      "group": "dot",
      "reps": 5,
      "label": "Learn the OLL dot cases"
    },
    {
      "kind": "weakest",
      "phases": ["f2l"],
      "count": 3,
      "reps": 5,
      "label": "Shore up F2L"
    },
    {
      "kind": "solves",
      "count": 12,
      "label": "Twelve timed solves with splits"
    }
  ]
}
Block kind What it does
group Every case in one group of one phase
cases An explicit list of case keys
weakest The N weakest cases, optionally restricted to some phases
starred Everything on your todo list
solves N full timed solves on the timer, not case drills

Every block carries a reps count and an optional label shown while you run it.

Adapting a plan to your level#

Built-in plans are written against skill, not against a fixed case list. A block that says "the N weakest F2L cases" means something different for a sub-30 solver and a sub-15 solver, which is the point.

When you start a plan you can also adjust:

  • Reps multiplier — halve or double every block's repetitions.
  • Phases — drop a phase you are not working on.
  • Goal — a plan uses your profile's goal for its split targets, so it scales with you automatically.

Plans do not overrule the weakest-first logic

A weakest block still queries live scores when you run it, so a plan you started three weeks ago gives you today's weakest cases, not the ones that were weakest when you started.

The plan builder#

Plans → New plan opens the builder. It is a form, not a code editor:

  1. Name the plan, set a level and write a description. The description is what another student sees in the list, so say what the plan is for.
  2. Add blocks. Each block asks for its kind and then only the fields that kind needs — pick a group, pick cases from a searchable list, or set a count.
  3. Reorder blocks by dragging, or with the up/down buttons (the builder is fully keyboard reachable).
  4. Save. The plan appears in the list with your profile as its author.

A plan you built can be edited or deleted; the built-in plans cannot, but you can duplicate one and edit the copy. That is the intended way to make "the official OLL plan, but with twice the reps".

Sharing plans#

Plans are rows in the database, not files, so sharing one means exporting it: the plan page has a Copy as JSON button, and the builder accepts pasted JSON. Send a coach's plan to a student as a blob of text; they paste it into their builder and get an identical plan.

Administrators can also seed plans directly — see Administration.

Built-in plans#

The plans shipped with the app cover the standard progression:

Plan Level What it does
First 20 minutes beginner An assessment pass plus one drill session, to get the app calibrated
Learn full OLL intermediate Works through the OLL groups a group at a time, with a weakest-cases block between each
Learn full PLL intermediate The 21 PLL cases in recognition order, corners-then-edges
F2L lookahead intermediate Heavy F2L drilling interleaved with blocks of full timed solves
Sub-15 push advanced Weakest-first across all phases plus regular split-tracked solves

Run docker compose run --rm web flask seed to (re-)install them; see Administration.

Source: docs/user/plans.md