Appearance
Estratégia de App Mobile (Android/iOS)
Documento de decisão para discussão em equipe. Gerado em 16/06/2026.
Objetivo: avaliar o caminho para entregar o Decaelo como app nativo (Android/iOS), comparando NativePHP for Mobile e Capacitor, com recomendação fundamentada.
TL;DR — Recomendação
Capacitor é a melhor opção para o Decaelo. O motivo decisivo não é preço (NativePHP ficou gratuito em fev/2026), e sim arquitetura: o Decaelo é um SaaS multi-tenant server-driven (Inertia + props renderizadas no servidor), e o NativePHP Mobile é local-first — foi feito para rodar o Laravel dentro do aparelho. Encaixar nosso app nesse modelo exigiria reescrever a camada de dados (Inertia server-props para API). O Capacitor empacota o app que já temos.
Caminho proposto: PWA primeiro (dias, valida demanda) → wrap com Capacitor (semanas) se as lojas forem necessárias. Revisitar NativePHP só se offline-first virar requisito duro.
Contexto — nossa stack
- Laravel 13 + Inertia 2 + Vue 3 + Tailwind 4 (
laravel/vue-starter-kit). - SaaS multi-tenant com backend pesado: Horizon (filas), Reverb (websockets), Scout/Typesense (busca), Asaas (billing/pagamentos), Socialite (login social).
- Frontend é SPA Inertia+Vue, não Blade/Livewire. Navegação é server-driven: cada rota bate no Laravel que devolve as props da página.
Esse último ponto é o que determina a escolha. As duas abordagens são, no fim, UI em WebView — a diferença está em onde o Laravel roda e em quanto do nosso app dá para reaproveitar.
O que foi pesquisado (jun/2026)
NativePHP for Mobile — atualização v3 (fev/2026)
- Preço: o core virou MIT, gratuito (antes era pago por licença). ✅
- Vue/Inertia: agora suportados via JS bridge — o build intercepta o
axiose roteia todo HTTP pelo PHP embarcado no device.- ⚠️ Inertia 3 removeu o
axiosem favor defetch; projetos novos quebram o build do NativePHP até readicionaraxioscomo dependência direta.
- ⚠️ Inertia 3 removeu o
- Plugins gratuitos (9): Camera, Browser, Device, Dialog, File, Microphone, Network, Share, System.
- Plugins pagos (compra única, marketplace): Push Notifications, Biometrics, Secure Storage, Geolocation, Scanner.
- → para o Decaelo (avisos por push, login biométrico/seguro) precisaríamos comprar ~3 plugins. Custo único, não assinatura — barato, mas não 100% grátis no nosso caso.
- Arquitetura — o ponto crítico: é local-first. Empacota uma versão estática do PHP
- o app Laravel dentro do binário Swift/Kotlin e roda no aparelho, offline. A própria documentação afirma que "não dá para portar facilmente uma UI Inertia, que depende de roteamento e props no servidor".
Capacitor
- Gratuito, maduro, ecossistema enorme.
- Empacota o app web (Vue/Inertia) em uma casca nativa com WebView. Como nosso frontend já é JS, o reaproveitamento é quase total — sem reescrita da camada de dados.
- APIs nativas via plugins gratuitos (push FCM/APNs, câmera, biometria, deep links).
- Publica nas duas lojas a partir de um codebase.
Comparação
| Critério | NativePHP Mobile v3 | Capacitor |
|---|---|---|
| Preço | core grátis + ~3 plugins pagos (compra única) | grátis |
| Reaproveita Inertia+Vue | ❌ props de servidor não portam; reescrita de dados | ✅ carrega o app atual no WebView, ~0 reescrita |
| Encaixe com SaaS server-driven | ❌ local-first, briga com nosso backend | ✅ casca fina sobre o remoto |
| Offline-first | ✅ força nativa | ⚠️ exige trabalho extra |
| APIs nativas | ✅ (push/biometria pagos) | ✅ plugins grátis |
| Publica nas 2 lojas | ✅ | ✅ |
| Apple 4.2 ("não é só um site") | ✅ binário com app embarcado passa mais fácil | ⚠️ wrapper de URL remota arrisca rejeição → empacotar assets locais + plugins nativos |
| Maturidade | jovem (v3, 2026) | muito madura |
| Esforço para o nosso app | alto (~2–3 meses, reescrita da camada de dados) | médio (~2–4 semanas, wrap) |
Por que Capacitor é a melhor opção para o Decaelo
- Arquitetura compatível. Capacitor é uma casca sobre o app remoto. O Decaelo continua sendo um SaaS server-backed (multi-tenant, Horizon, Reverb, Scout, Asaas) sem mudança de modelo. NativePHP quer o Laravel rodando no celular — o oposto do nosso desenho.
- Reaproveitamento quase total. Inertia+Vue já é JS; o Capacitor carrega o que existe. Com NativePHP, as páginas Inertia (props no servidor) não portam — viraria reescrita para API (Vue buscando JSON em vez de props Inertia).
- Esforço/tempo. Capacitor: semanas. NativePHP: meses de reescrita da camada de dados.
- Maturidade e risco. Capacitor é consolidado. NativePHP Mobile v3 é recente (2026).
Quando NativePHP venceria
- App offline-first, com dados locais no aparelho.
- App novo desenhado para embarcar a lógica Laravel no device.
- UI em Blade/Livewire (não é o nosso caso — usamos Inertia+Vue).
Nenhum desses é o Decaelo hoje. Se offline-first virar requisito duro no futuro, reabrir a discussão.
Estimativa de esforço (alto nível)
| Abordagem | Esforço | Tempo | Observação |
|---|---|---|---|
| PWA | baixo | 3–7 dias | manifest + service worker + web push (via Reverb). Instalável, sem loja. Teste de demanda mais barato. |
| Capacitor (wrap) | médio | 2–4 semanas | wrap do app, push nativo (FCM/APNs), deep links, assets de loja, 1ª submissão. Melhor ROI. |
| NativePHP Mobile | alto | 2–4 meses | reescrita da UI/dados Inertia → API + ajuste do modelo de sync. Não recomendado. |
| Reescrita nativa (Flutter/RN) | muito alto | 3–6 meses | consome a API. Só se houver necessidade pesada de UX nativa. |
Custos e armadilhas (válidos para qualquer caminho de loja)
- Apple Developer US$ 99/ano; Google Play US$ 25 (taxa única).
- Pagamentos / regra de IAP da Apple: cobranças via Asaas dentro do app podem disparar a regra de in-app purchase (comissão de 30%). Manter os fluxos de pagamento como web/billing externo, não como compra dentro do app, para evitar rejeição. Maior armadilha para um SaaS de igreja.
- Apple 4.2 (minimum functionality): app que é só um wrapper de site pode ser rejeitado. Mitigar empacotando assets localmente + adicionando funções nativas (push, biometria, deep links).
- Infra de push: FCM (Android) + APNs (iOS).
- Sessão/auth no WebView: tratar cookies vs token.
Caminho recomendado (resumo)
- Semana 1: PWA. Validar se os usuários querem instalar + push. Quase de graça dado o SPA Vue.
- Se as lojas forem necessárias: wrap com Capacitor sobre o mesmo build.
- Evitar NativePHP e reescrita nativa, salvo se offline-first / UX nativa pesada virar requisito.