Skip to content

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 axios e roteia todo HTTP pelo PHP embarcado no device.
    • ⚠️ Inertia 3 removeu o axios em favor de fetch; projetos novos quebram o build do NativePHP até readicionar axios como dependência direta.
  • 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érioNativePHP Mobile v3Capacitor
Preçocore 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
Maturidadejovem (v3, 2026)muito madura
Esforço para o nosso appalto (~2–3 meses, reescrita da camada de dados)médio (~2–4 semanas, wrap)

Por que Capacitor é a melhor opção para o Decaelo

  1. 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.
  2. 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).
  3. Esforço/tempo. Capacitor: semanas. NativePHP: meses de reescrita da camada de dados.
  4. 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)

AbordagemEsforçoTempoObservação
PWAbaixo3–7 diasmanifest + service worker + web push (via Reverb). Instalável, sem loja. Teste de demanda mais barato.
Capacitor (wrap)médio2–4 semanaswrap do app, push nativo (FCM/APNs), deep links, assets de loja, 1ª submissão. Melhor ROI.
NativePHP Mobilealto2–4 mesesreescrita da UI/dados Inertia → API + ajuste do modelo de sync. Não recomendado.
Reescrita nativa (Flutter/RN)muito alto3–6 mesesconsome 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)

  1. Semana 1: PWA. Validar se os usuários querem instalar + push. Quase de graça dado o SPA Vue.
  2. Se as lojas forem necessárias: wrap com Capacitor sobre o mesmo build.
  3. Evitar NativePHP e reescrita nativa, salvo se offline-first / UX nativa pesada virar requisito.

Fontes