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:
- 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.
- 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.
- Reorder blocks by dragging, or with the up/down buttons (the builder is fully keyboard reachable).
- 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.