Overview · MemphisLab Docs
MemphisLab Docs
Checklist Mobile

Overview

O que o checklist-mobile faz e como se encaixa nos outros serviços

Gestão de frota e checklist de veículos. Motoristas e técnicos executam inspeções em campo pelo app mobile (fotos, GPS, odômetro, itens de checklist por categoria) e o backend administra veículos, implementos, manutenções, pneus, motoristas e filiais.

É a única aplicação com clientes reais provisionados no cluster hoje: um namespace k3s por cliente, cada um com seu próprio banco, storage e domínio (<slug>.frota.memphislab.com.br).

Stack

Backend:

  • PHP 8.4, Laravel 13, Laravel Octane sobre FrankenPHP — por que worker persistente e o que isso muda no código: runtime
  • Filament 5 — painel admin
  • Arquitetura modular via internachi/modular: branches, checklist, dashboards, drivers, fleet, licensing, maintenance, parameters, reports, tires
  • PostgreSQL + Redis
  • Autenticação de API própria via JWT HS256 (firebase/php-jwt), não Sanctum — o painel admin usa sessão separada. Por que HS256 aqui: mobile-architecture

Mobile (mobile-app/):

  • React Native + Expo (Expo Router, roteamento por arquivo)
  • TypeScript, Zustand (estado), TanStack Query (data-fetching), Axios
  • expo-sqlite para operação offline-first (execução de checklist sem conectividade em campo, sincroniza depois) — mecanismo de sync em mobile-architecture
  • Zod + React Hook Form para formulários

Backend e mobile vivem no mesmo repositório e são buildados juntos: a imagem de produção do backend também serve um build web estático do Expo (npx expo export --platform web), além dos builds nativos que os devs rodam via Expo.

Relação com outros serviços

Consome a API do license-manager diretamente — não existe intermediário. Cada instância de cliente autentica com um LICENSE_SERIAL_KEY próprio contra POST /api/v1/oauth/token e consulta GET /api/v1/license para saber quais módulos (fleet, checklist, maintenance) estão liberados. Essa checagem hoje está desligada em produção: a instância compartilhada demo roda com LICENSE_ENFORCE=false e LICENSE_MANAGER_URL vazio, então nenhum módulo é bloqueado por licença.

Quando o key-service existir, ele vai passar a mediar essa comunicação — o checklist-mobile vai falar com ele em vez de falar direto com o license-manager. Essa mudança ainda não foi implementada.