pub async fn run(host: String, port: u16, edit: bool) -> anyhow::Result<()> {
    let root = crate::commands::root_dir()?;
    let config = crate::commands::load_config()?;
    let output_dir = root.join(&config.workspace.output);
    if !output_dir.exists() {
        crate::render::shelf::write_shelf(&output_dir, &config)?;
    }
    crate::server::serve(root, output_dir, host, port, edit).await
}
