pub(crate) async fn serve(settings: Settings, ctx: AppCtx) -> Result<()>