animation: add a basic framework and update the demo