Template validation with UI feedback (#39).