Excellent, glad I could help.
Everything is hand keyframed, yes. When we animate hard surface objects like this, what we like to do is for every axis and motion, create a nested null. Takes a little planning but the animation goes much faster and better to control the animation after you get the nests done. So, like I did, the top layer is just for moving the object around the scene on the x and z. Nested under that, the rotation null controls the objects rotation. I made that fast and did a no-no and animated the mesh itself going up and down when it rotates to the flat surface, but that should be yet another null just controlling it’s vertical movement. Or maybe the top null controls X and Z, nest 2 controls vertical movement, and nest 3 is rotation. Just need to test a little to figure out the nests. Never animate the mesh, always animate nested nulls, that way if you ever need to update the model you don’t have to re-animate and you don’t have to worry about gimbal issues. Also, avoid going the easy route with “autokeying”. That makes it a nightmare to deal with fcurves and polishing the motion as you have a bunch of keys and tracks you don’t need. Only animate the axes you need.
Animating something like this with autokeys and trying to animate the mesh sounds quick and easy but you’ll do way more work in the long run and probably have to go back and do the nested nulls route anyway.
Hope this helps!