JavaScript frontend