Um aplicativo autenticado pode entregar o HTML inicial sem incluir dados privados. O navegador restaura a sessão e pede à API os lançamentos do usuário. Se essa é a única parte dinâmica, a hospedagem da interface pode servir arquivos estáticos.
A saída do Expo determina o roteamento
Com web.output igual a single, o navegador resolve as rotas. A hospedagem precisa devolver index.html quando uma rota válida da aplicação chega diretamente pelo endereço. No Caddy, isso pode ser configurado com try_files dentro do bloco que serve o frontend. Encaminhe caminhos de API em um bloco separado para que uma rota de API inexistente continue retornando o erro apropriado.
Com web.output igual a static, o Expo Router exporta HTML para rotas geradas. Se uma rota dinâmica precisa de HTML próprio, seus parâmetros precisam estar disponíveis na geração. Verifique os caminhos realmente produzidos em dist e ajuste o Caddy para servi-los. Um fallback global para index.html pode mascarar uma rota ausente com status 200.
O teste de deploy começa pela barra de endereço
Abra diretamente uma rota interna em uma sessão anônima. O login deve preservar o destino de retorno. Abra a mesma rota com uma sessão válida e confirme que as chamadas protegidas aguardam a restauração da sessão. Por fim, abra uma rota inexistente da API e confira se ela devolve um erro de API, sem o HTML do frontend.
Para o conteúdo público, revise o HTML entregue para cada URL. Um artigo que precisa aparecer em buscas tem requisitos de entrega diferentes de um painel que só exibe dados após o login.