feat: add built-in preview server