Forward: append $, list rotations, sort, take the last column (the BWT). Inverse: walk the LF-mapping from the $ row to rebuild the original.
Each row pairs the first column character F with the last column character L and shows the rank (which occurrence of that character it is). The LF-mapping says the k-th occurrence of a character in L jumps to the k-th occurrence of the same character in F. During the inverse walk the current and target rows are highlighted so you can see the jump.
$, sort them, read the last column (the BWT), then invert it with the LF-mapping.$ guarantees it).
See junior.md (forward), middle.md (LF-mapping inverse, FM-index), and professional.md (proofs).