refactored base logic into a canvas renderer