There are (at least) two problems with math education materials:

- Textbooks can be very expensive.
- The best way to learn math is to solve problems. The structure of textbooks does not prioritize this.

This site is designed to solve these two problems by

- being free
- building exposition around problems, not vice versa.

To use the site, you must create an account so that you can save your progress. Each course consists of a sequence of rows of problems, indicated by a sequence of rows of white squares:

A check mark indicates a completed problem, a question mark indicates a problem you have access to but have not yet completed, and blank square indicates a problem you do not have access to yet. Clicking on a white square will take you to the corresponding problem screen:

The green arrow at the top takes you to the first problem of the previous row. Submitting the correct answer will give you access to the solution and a new arrow taking you to the first problem of the next row:

Submitting the correct answer also gives you access to the next problem in the row (if it exists) for more practice.

Of course, you might not be able to solve a problem. If that problem is not the last in its row, then there will be an "I Give Up" button:

Clicking on this button gives you access to the solution. By reading the solution, hopefully you learn the concepts used in this problem. The "I Give Up" button gives you access to the next problem in the row. You have to complete a single problem from the row yourself to move on to the next row. You cannot "give up" on the last problem in a row.

Clicking on the Map button in the upper left takes you back to map of problems for the course.

The "goal" is to complete a problem from every row. Completing a problem from one row gives you access to the first problem in the next row. Ideally, you solve that problem. But if you can't, you click "I Give Up", read the solution, and repeat this process for the next problem in the row. After finishing a problem from every row, you should have a good handle on the material from the course. You can go back and work horizonally along rows for more practice.

Most problems require you to input an answer before moving on. The computer will check your answer to a precision of about $10^{-5}$. To input the 3-component vector (for example) \[ \begin{pmatrix} 1 \\ 2\\ 3\end{pmatrix} \] input (1, 2, 3) or ((1), (2), (3)) or ((1, 2, 3)). In general, use parentheses to denote matrices, e.g., \[ \begin{pmatrix} 2 & 3\\ 1 & 1\end{pmatrix} \] can be inputted as ((2, 3), (1, 1)).

Functions arguments must be enclosed in parentheses. For example, $\sin(x)$ must be inputted as sin(x) not as sin x. The common notation $\sin^2(x)$ is not supported. Input sin(x)^2 or (sin(x))^2 instead. The following functions are supported:

- sin
- cos
- tan
- sec
- csc
- cot
- exp
- log
- sqrt
- abs

You can also use |x| to denote abs(x). The input parser does not read spaces. Factorials (!) and inverse trig functions are not supported at this time.

You can rotate 3d graphs by dragging them with your cursor. You can zoom in and out of 3d graphs by scrolling on them.