10 de dez. de 2025·8 min de leitura

Linha do tempo de auditoria unificada: esquema e UI para quem fez o quê, quando e por quê

Projete uma linha do tempo de auditoria unificada que mostre quem fez o quê, quando e por quê em logins, mudanças de dados e passos de workflow, com um esquema prático e layout de UI.

Linha do tempo de auditoria unificada: esquema e UI para quem fez o quê, quando e por quê

O que é uma linha do tempo de auditoria unificada (e por que ela ajuda)

Uma linha do tempo de auditoria unificada é um único feed legível de eventos ao longo do seu produto, ordenado por tempo. Ela permite entender o que aconteceu sem pular entre ferramentas. Em vez de logs separados de login, tabelas de histórico do banco de dados e rastreadores de workflow, você tem um lugar que conta a história.

As equipes normalmente sentem a dor quando algo dá errado: um cliente diz que não aprovou uma mudança, um registro “misteriosamente” foi atualizado ou uma conta parece comprometida. Os dados normalmente existem, mas estão espalhados, rotulados de forma diferente e faltam os pequenos detalhes que transformam logs brutos em uma explicação. Investigações ficam lentas e as pessoas começam a chutar.

Uma linha do tempo de auditoria unificada deve responder a cinco perguntas:

  • Quem fez (usuário, serviço ou sistema)
  • O que foi feito (ação e alvo)
  • Quando aconteceu (timestamp exato, em um timezone claro)
  • Onde aconteceu (web, mobile, API)
  • Por que aconteceu (motivo, requisição ou aprovação)

O escopo importa. Para a maioria dos produtos, você quer eventos que cubram logins e sessões, mudanças de dados CRUD, passos de workflow (como aprovações e mudanças de status) e eventos de sistema chave (como mudanças de permissão ou tentativas de acesso falhas). Se você explicar bem esses pontos, resolverá a maioria das perguntas diárias de auditoria.

Também ajuda deixar claro o que isso não é. Uma linha do tempo de auditoria unificada não é um SIEM completo, e não é análise profunda. O objetivo são respostas rápidas e confiáveis para suporte, revisões de segurança e responsabilidade interna.

Se você constrói apps em uma plataforma no-code como o AppMaster, uma linha do tempo unificada fica ainda mais útil porque lógica de backend, ações de UI e integrações podem emitir o mesmo formato de evento. Isso torna a “história” do produto consistente para quem precisar lê-la.

Eventos a incluir: logins, mudanças de dados, passos de workflow

Uma linha do tempo de auditoria unificada só funciona se puxar dos lugares onde ações reais acontecem. A maioria dos produtos tem quatro fontes principais: autenticação (logins e sessões), mudanças de dados (create, update, delete), passos de workflow (aprovações, atribuições, movimentos de status) e integrações (webhooks, imports, bots).

Comece definindo um pequeno conjunto de categorias de evento e mantenha-se nelas. As categorias devem descrever intenção, não implementação. Por exemplo, um reset de senha e uma rotação de chave de API são ambos eventos de acesso, mesmo se vierem de sistemas diferentes. Use nomes consistentes como access.login.succeeded ou data.customer.updated para que as pessoas possam escanear a linha do tempo rapidamente.

Nem tudo precisa ser auditável. Uma regra prática: registre ações que mudam estado, mudam acesso ou disparam resultados de negócio. Ignore ruído como visualizações de página, autosaves e tentativas de repetição em background, a menos que sejam necessárias para explicar um incidente.

Deixe os tipos de ator explícitos para que o “quem” nunca seja chutado. Um item da linha do tempo deve dizer claramente se a ação foi feita por um usuário, um admin, uma conta de serviço ou uma automação.

Um conjunto simples de grupos de evento para começar:

  • Acesso: login sucesso/falha, logout, mudanças de MFA, reset de senha
  • Dados: registro criado/atualizado/deletado, edições em massa, exports
  • Workflow: mudança de status, aprovação/rejeição, atribuição, violação de SLA
  • Integração: import concluído/falhou, webhook recebido, sincronização externa
  • Admin/segurança: mudanças de papéis, mudanças de permissão, eventos de chave de API

Se seu app for multi-tenant, inclua o identificador do tenant em cada evento. Também registre o ambiente (prod, staging, dev) para nunca misturar linhas do tempo durante investigações.

O modelo mínimo de dados que torna as timelines legíveis

Uma timeline só parece unificada quando cada linha responde às mesmas perguntas básicas. Se cada sistema logar de forma diferente, você acaba com um rolo de registros crípticos em vez de uma história clara.

Padronize todo evento em uma forma simples. Você pode armazenar detalhes extras depois, mas a linha do tempo deve sempre ter um título consistente.

Os cinco campos que devem estar presentes

Estes são os campos mínimos que tornam uma única linha compreensível sem abrir um painel de detalhes:

  • event_id: um ID único e estável para referência exata do evento
  • timestamp: quando aconteceu (idealmente com milissegundos)
  • actor: quem fez (usuário, conta de serviço, automação)
  • action + target: o que aconteceu e em que (por exemplo, “updated” + “Invoice #1042”)
  • outcome: sucesso/falha (e um código de motivo curto se falhou)

Isso sozinho torna a timeline legível. Mas investigações geralmente envolvem cadeias de eventos, não linhas isoladas.

Os três IDs que transformam logs em uma história

Adicione alguns identificadores que permitam seguir a atividade entre telas, APIs e trabalhos em background:

  • correlation_id: uma intenção do usuário através de múltiplos passos (clique -> validação -> atualização -> notificação)
  • session_id: vincula eventos a uma sessão de login e ajuda a detectar compartilhamento ou sequestro de conta
  • request_id (ou trace_id): conecta chamadas de API e jobs em background à mesma cadeia de trabalho

Tempo é o último detalhe: armazene timestamps em UTC e mantenha um campo de timezone (ou a localidade do ator) para que a UI possa mostrar a hora local enquanto ainda ordena corretamente.

Exemplo: um usuário clica “Approve refund”. A timeline pode mostrar uma ação visível, enquanto o correlation_id agrupa a aprovação, a mudança de status, o email ao cliente e qualquer passo de pagamento automatizado em um único fio coerente.

Proposta de esquema: tabelas e campos (prático, não perfeito)

Uma linha do tempo de auditoria unificada funciona melhor quando você armazena um evento por momento no tempo, e depois pendura detalhes nele. Mantenha a linha principal pequena e consistente, e deixe os detalhes de mudança variarem.

Tabelas principais

Quatro tabelas cobrem a maioria dos produtos:

  • audit_event: id, tenant_id, occurred_at, event_type (login, data_change, workflow), actor_id, target_type, target_id, summary, ip, user_agent, request_id, correlation_id, why_id (nullable)
  • audit_actor: id, tenant_id, actor_type (user, api_key, system), user_id (nullable), display_name, role_snapshot (JSON opcional)
  • audit_target (opcional, se quiser vários alvos por evento): event_id, target_type, target_id, label (por exemplo, “Invoice INV-1042”)
  • audit_change: event_id, field_path (por exemplo, billing.address.city), old_value_json, new_value_json, value_type, redacted (bool)

Para targets, o modelo mais simples é target_type + target_id em audit_event. Se um evento tocar múltiplos registros, adicione audit_target e mantenha o alvo primário em audit_event para filtros rápidos.

Para valores, armazenar linhas por campo em audit_change mantém a UI legível e pesquisável. Se também precisar de snapshots completos, você pode adicionar old_record_json e new_record_json em audit_event, mas mantenha-os opcionais para controlar armazenamento.

Campos de workflow

Para passos de workflow, adicione colunas em audit_event (preenchidas apenas para event_type='workflow'): workflow_id, step_key, transition_key, from_status, to_status, result (success, blocked).

Índices que mantêm a performance

A maioria das telas consulta “atividade recente para um tenant”, “tudo sobre um registro” ou “tudo feito por uma pessoa”. Indexe esses caminhos:

  • (tenant_id, occurred_at desc)
  • (tenant_id, target_type, target_id, occurred_at desc)
  • (tenant_id, actor_id, occurred_at desc)
  • Em audit_change: (event_id), e (field_path) se você filtrar por campo

Capturando o “porquê”: motivos, aprovações e contexto

Unifique ações entre canais
Crie uma linha do tempo unificada para web, mobile, API e integrações no mesmo formato.
Inicie um projeto

Uma timeline que só mostra “quem fez o quê, quando” ainda deixa a questão mais difícil sem resposta: por que eles fizeram isso? Sem um porquê claro, investigações viram chute e as pessoas acabam perseguindo threads de chat e tickets antigos.

Códigos de motivo são melhores que texto livre (na maioria das vezes)

Texto livre ajuda, mas é bagunçado. Pessoas escrevem frases diferentes para a mesma coisa ou esquecem de preencher. Um reason_code curto e consistente dá filtros limpos, enquanto um reason_text opcional adiciona detalhe humano quando importa.

Coloque ambos no evento (ou na transição de workflow) para que cada entrada carregue contexto:

  • reason_code (obrigatório quando a ação muda dados ou status)
  • reason_text (opcional, curto e revisado)

Uma abordagem prática é definir de 10 a 30 códigos de motivo por área de domínio (billing, access, orders, support). Mantenha-os estáveis e adicione novos aos poucos.

Aprovações e contexto de automação

“Por quê” frequentemente significa “porque uma política determinou” ou “porque alguém aprovou”. Capture contexto de aprovação como campos estruturados para responder rapidamente sem abrir outro sistema.

Para qualquer evento que foi aprovado, automatizado ou executado em nome de outra pessoa, armazene estes campos quando relevante:

  • approved_by_actor_id e approved_at
  • approval_rule_id (ou policy_name) e decision (approved/denied)
  • reference_id (ticket, case ou número de requisição de mudança)
  • automation_rule_name e rule_version
  • automation_inputs (parâmetros mínimos e seguros como threshold=5000)

Uma cautela: campos de “porquê” são locais comuns para vazamento de segredos. Não armazene senhas, chaves de API, tokens de sessão completos ou dados de pagamento crus em reason_text ou automation_inputs. Se um valor for sensível, armazene uma versão redigida (últimos 4 dígitos) ou um apontador como token_present=true.

Exemplo: um limite de reembolso é aumentado. A timeline lê “Limit changed from 500 to 5000”, com reason_code=RISK_REVIEW, approved_by=Maria, policy=RefundLimitPolicy v3, reference_id=CASE-18422 e automation_rule_name vazio (manual). Essa única entrada explica a decisão sem trabalho extra de investigação.

Layout da UI: uma tela que responde rápido

Uma boa linha do tempo de auditoria unificada parece uma página de resultados de busca, uma história e um recibo ao mesmo tempo. O objetivo é velocidade: você deve conseguir identificar o que aconteceu em 10 segundos e então abrir uma linha para obter contexto suficiente para agir.

Um layout simples em 3 painéis

Coloque tudo em uma tela com três áreas: um painel de filtros à esquerda, a lista da timeline no centro e uma gaveta de detalhes à direita (ou um slide-over). A lista permanece visível enquanto você inspeciona detalhes, assim você nunca perde o lugar.

Mantenha poucos filtros, mas úteis. Comece com os que as pessoas usam durante um incidente ou chamada de suporte:

  • Intervalo de datas (com presets rápidos como última hora, últimas 24 horas)
  • Ator (usuário, chave de API, sistema)
  • Alvo (registro, tipo de objeto, instância de workflow)
  • Tipo de evento (login, update, approval, export)
  • Resultado (success, failed, denied)

No centro, cada linha deve responder “quem fez o quê, quando e por quê” sem abrir nada. Inclua timestamp (com timezone), nome do ator (e papel se relevante), verbo da ação, rótulo do alvo e um trecho curto do motivo quando presente. Se não houver motivo, mostre um placeholder claro como “Nenhum motivo fornecido” em vez de deixar em branco.

Gaveta de detalhes: prove isto

A visão de detalhes é onde você ganha confiança. Mostre contexto completo: IP e dispositivo do ator para logins, os campos exatos alterados com valores antes/depois para edições de dados, e o passo de workflow, assignee e decisão para aprovações.

Adicione uma faixa compacta de “Eventos relacionados” acima do payload para pular para passos próximos como “Request created” -> “Manager approved” -> “Payment failed”. Inclua um toggle de payload bruto para auditores e engenheiros, mas mantenha-o oculto por padrão.

Deixe estados de falha óbvios. Use estilo claro para outcomes negados ou com falha e mostre mensagens como “Permission denied” ou “Validation failed” para que os usuários não precisem adivinhar.

Passo a passo: como construir em um produto real

Envie a tela da linha do tempo
Transforme sua taxonomia de eventos em uma UI web funcional com filtros e painel de detalhes.
Crie o app

Trate sua linha do tempo de auditoria como um recurso de produto, não como um monte de logs. Se suporte e compliance não conseguem responder “quem fez o quê, quando e por quê” em menos de um minuto, é preciso revisitar o design.

Uma ordem de construção que funciona para a maioria dos apps:

  • Defina uma pequena taxonomia de eventos e campos obrigatórios primeiro. Decida o que conta como evento e trave os campos essenciais: actor, time, action, object, outcome e correlation ID.
  • Instrumente as fontes que já sabem a verdade. Auth emite eventos de login e token, camadas CRUD emitem create/update/delete com campos alterados, e engines de workflow emitem passos e decisões.
  • Grave eventos em um armazenamento de auditoria append-only. Não atualize linhas de auditoria. Valide estritamente na escrita (actor ausente, object ID ausente, timestamps inválidos) para não “consertar depois” e perder confiança.
  • Construa leituras que casem com como as pessoas investigam. Normalmente você precisa de três visões: a timeline principal, um painel de detalhes do evento e consultas de “eventos relacionados” (mesmo correlation ID, mesmo objeto, mesmo ator, mesma sessão).
  • Adicione controle de acesso baseado em papéis e teste como uma equipe de suporte. Dados de auditoria frequentemente incluem campos sensíveis, então filtre por papel e masque valores quando necessário.

Se você estiver construindo isso no AppMaster, modelei as tabelas de auditoria no Data Designer, emita eventos pelos Business Processes nos pontos onde as decisões acontecem e renderize a timeline e os detalhes lado a lado nos builders de UI.

Antes de considerar pronto, rode um cenário real: um gerente reporta que o total de um pedido mudou. O suporte deve conseguir ver o campo exato alterado, o usuário e o IP, o passo de workflow que o disparou e o motivo declarado (ou “nenhum fornecido”) sem pular entre várias telas.

Erros comuns que tornam timelines inúteis

Escolha seu caminho de deploy
Faça o deploy na sua nuvem ou exporte o código-fonte quando precisar de controle total sobre a auditoria.
Comece agora

Uma linha do tempo de auditoria só funciona se as pessoas confiarem e a lerem rápido. A maioria falha por motivos previsíveis.

O primeiro é excesso de logging. Se cada visualização de página, hover e autosave vira evento, os momentos importantes desaparecem. Mantenha a timeline focada em ações que mudam acesso, dados ou resultados. Se precisar de logs técnicos de alto volume, mantenha-os separados e conecte internamente por um ID de evento.

O sub-logging é igualmente ruim. Uma entrada que diz “Record updated” sem ator, alvo ou resultado claro não ajuda ninguém. Todo evento deve incluir quem fez, sobre o quê atuou, quando aconteceu e o que mudou. Se seu produto pede um motivo (ou exige aprovação), armazene esse contexto no evento, não em outro sistema que ninguém vê na investigação.

Logs mutáveis destroem confiança. Se admins puderem editar ou deletar eventos de auditoria, você não tem uma trilha de auditoria, tem notas. Trate eventos de auditoria como append-only. Se algo foi registrado incorretamente, escreva um evento corretivo explicando o ajuste.

Verbos inconsistentes dificultam filtragem e leitura. “Updated”, “changed” e “edited” não deveriam ser três tipos diferentes para a mesma ação. Escolha um conjunto pequeno de verbos e mantenha-o, por exemplo: created, updated, deleted, approved, rejected, logged_in, permission_changed.

Por fim, não vaze dados sensíveis. Diffs brutos frequentemente incluem senhas, tokens, dados pessoais ou detalhes de pagamento. Armazene apenas o necessário, masque campos sensíveis e restrinja quem pode ver certos detalhes do evento. Por exemplo, mostre “Phone number changed” mas esconda os valores antigo e novo a menos que o visualizador tenha permissão específica.

Checklist rápido antes de lançar

Teste a timeline como faria um suporte e um revisor de segurança. Escolha um registro sensível (como um ajuste de pagamento ao cliente) e tente explicar o que aconteceu usando apenas a tela da timeline.

Perguntas para verificar:

  • Você consegue sempre nomear o ator? Para registros sensíveis, mostre “performed by” (usuário, conta de serviço ou sistema), além do papel e do método de autenticação usado (senha, SSO, chave de API).
  • Você consegue provar o que mudou? Para campos chave, mostre valores antes e depois, não apenas “updated”. Se um valor for sensível, mostre uma versão mascarada mais um hash para provar que a mudança aconteceu.
  • Você consegue seguir uma ação de ponta a ponta? Garanta que um correlation_id una o login, a ação na UI, os passos de workflow e as gravações no banco em um único fio.
  • O suporte encontra o evento certo rápido? Confirme que filtros funcionam por ator, alvo (tipo de registro e ID), intervalo de tempo e outcomes (success, failed, denied).
  • O acesso de auditoria é controlado e as exportações são visíveis? Restrinja quem pode ver e exportar dados de auditoria e registre cada visualização/exportação como seu próprio evento (quem, quando, o que foi exportado).

Um teste final simples: entregue a timeline para alguém que não a construiu e pergunte “Por que este registro mudou às 15:12?” Se a pessoa não conseguir responder em 60 segundos, provavelmente faltam campos de contexto (motivo, request ID, aprovação ou detalhes de erro).

Exemplo: investigar uma mudança suspeita em minutos

Teste como o suporte faria
Recrie o fluxo de um incidente real e verifique se sua linha do tempo responde quem, o que, quando e por quê rapidamente.
Construa uma demo

Um gerente de suporte te chama: “O registro do cliente Acme Corp está errado. O email de cobrança mudou e o cliente diz que ninguém da equipe fez isso.” Você abre a linha do tempo unificada e busca pelo ID do cliente.

A timeline mostra uma cadeia clara porque todos os eventos relacionados compartilham o mesmo correlation_id.

Primeiro, você vê um login: Sam (representante de vendas) entrou às 09:12 de um dispositivo novo e de uma localização incomum. O bloco de sessão inclui IP, user agent e status de MFA. Dois minutos depois, aparece “View customer record”, seguido de “Edit customer record”.

O evento de atualização do registro é fácil de ler. Lista as mudanças de campo exatas (billing email de antigo para novo) e a origem (web app). Logo abaixo, o “porquê” aparece como um código de motivo: Customer requested update, mas a nota está em branco.

Em seguida, as entradas de workflow explicam o que aconteceu depois da edição. Uma regra de automação rodou: “Se o billing email mudar, notificar finanças e requerer aprovação”. A timeline mostra então um passo de aprovação pendente e finalmente uma aprovação por Dana (team lead) às 09:18 com uma nota curta: “Approved per ticket #4812”.

O suporte pode resolver o caso sem chute:

  • Verificar o ator: o login de Sam parece suspeito (dispositivo novo, sem nota), então confirme se Sam é dono da sessão.
  • Confirmar a intenção: a nota de aprovação da Dana aponta para um ticket; se ele não existir, isso é um sinal vermelho.
  • Reverter com segurança: crie um evento corretivo que restaure o email antigo, com um motivo obrigatório como “Reverted due to suspected account misuse”.
  • Documentar o resultado: adicione uma nota de caso ligada ao mesmo correlation_id para que revisores futuros vejam a história completa.

Próximos passos: lançar com segurança e manter sustentável

Uma linha do tempo de auditoria unificada só é útil se as pessoas confiarem nela. Trate o primeiro lançamento como um sistema de segurança, não como uma tela legal.

Defina metas claras para retenção, velocidade de busca e custo. Muitas equipes usam uma abordagem simples: 90 dias “hot” (rápido), 1–2 anos “warm” (mais lento) e arquivamento de longo prazo.

Defina o que “rápido” significa antes do lançamento. Se a timeline deve abrir em menos de 2 segundos para um registro típico, planeje para isso: indexe por (target_type, target_id, occurred_at), mantenha payloads pequenos e arquive linhas antigas em vez de deixar uma tabela crescer sem controle.

Faça o rollout em passos pequenos para manter a visão limpa e os dados consistentes:

  • Prototipe a UI da timeline com 5–8 tipos de evento que cubram investigações reais.
  • Adicione regras de retenção e arquivamento antes de adicionar mais volume de eventos.
  • Adicione busca básica e filtros (ator, intervalo, tipo de evento).
  • Valide com casos reais: “O suporte consegue responder quem mudou isto e por quê?”
  • Expanda tipos de evento só depois que a visão principal for confiável.

Exportações e relatórios são tentadores, mas ampliam erros. Espere até que a timeline na tela seja confiável e os nomes/contexts de evento estejam estáveis. Depois adicione exports que respeitem suas regras de acesso e incluam timezone claro, filtros usados e um identificador à prova de adulteração (como um export ID).

Planeje papéis cedo, pois dados de auditoria frequentemente contêm detalhes sensíveis:

  • Visualizar timeline (a maioria dos funcionários que trabalham com o registro)
  • Exportar (limitado a líderes ou compliance)
  • Visualizar payloads brutos (segurança, engenharia ou admins apenas)
  • Gerenciar políticas de retenção (admins apenas)

Se você estiver no AppMaster, uma abordagem limpa é mapear o esquema no Data Designer e emitir eventos da timeline a partir dos Business Processes nos mesmos pontos onde você já aplica regras (aprovações, mudanças de status, edições). Isso ajuda a manter “quem fez o quê, quando e por quê” consistente entre web e mobile e facilita manutenção conforme workflows evoluem.

FAQ

O que exatamente é uma linha do tempo de auditoria unificada?

Uma linha do tempo de auditoria unificada é um único feed cronológico de eventos importantes ao longo do seu produto. Ela acelera investigações porque você pode ver quem fez o quê, quando, onde e por quê sem pular entre logs de autenticação, histórico do banco de dados e ferramentas de workflow.

Quais eventos devo incluir primeiro para obter valor rápido?

Por padrão, registre ações que mudam estado, alteram acesso ou acionam um resultado de negócio. Isso normalmente significa logins/sessões, alterações create-update-delete, transições de workflow (aprovações e mudanças de status) e mudanças administrativas/segurança como papéis e chaves de API.

Qual é o modelo de dados mínimo que torna a linha do tempo legível?

Mantenha uma forma consistente de evento: event_id, timestamp, actor, action + target e outcome. Depois adicione identificadores como correlation_id, session_id e request_id para seguir uma ação de ponta a ponta pela UI, API e jobs em background.

Como devo nomear e agrupar tipos de eventos para que sejam fáceis de escanear?

Use nomes estáveis e consistentes que descrevam intenção, não implementação. Uma pequena taxonomia como access.login.succeeded ou data.customer.updated ajuda as pessoas a escanear rapidamente e filtrar sem aprender as particularidades de cada subsistema.

Os timestamps de auditoria devem ser armazenados em UTC ou hora local?

Armazene timestamps em UTC para ordenação correta e consistência, e converta para hora local na UI. Também mantenha um campo de timezone (ou a localidade do ator) para que os leitores entendam o horário exibido sem quebrar a ordenação.

Como capturar o “porquê” sem notas livres confusas?

Capture o “porquê” como dados estruturados: um reason_code obrigatório para mudanças significativas, mais um reason_text curto opcional quando necessário. Se houver aprovações ou políticas envolvidas, armazene quem aprovou, o horário da decisão e um reference_id para que a entrada da linha do tempo seja autoexplicativa.

Os logs de auditoria devem ser editáveis se alguém cometer um erro?

Por padrão, append-only: nunca edite ou exclua eventos de auditoria. Se algo precisar ser corrigido, escreva um novo evento corretivo que referencie o event_id original, assim os leitores veem o que mudou e por que a correção aconteceu.

Qual layout de UI funciona melhor para a tela da linha do tempo unificada?

Comece com uma tela em três partes: filtros à esquerda, lista da linha do tempo no centro e um painel de detalhes à direita. A lista deve responder “quem/o quê/quando/porquê” à primeira vista, e a visão de detalhes deve mostrar provas como IP, dispositivo e valores antes/depois.

Quais são os erros mais comuns que tornam as linhas do tempo inúteis?

Excesso de logs esconde momentos importantes no ruído, enquanto logs insuficientes geram entradas vagas como “Record updated” sem ator ou mudanças de campo claras. Outros problemas comuns são verbos inconsistentes, falta de correlation_id e vazamento de segredos em diffs ou campos de motivo.

Como eu construiria isso no AppMaster sem escrever muito código?

No AppMaster, modele as tabelas de auditoria no Data Designer, emita eventos pelos Business Processes nos pontos decisórios e construa a UI da linha do tempo com os builders web/mobile. Um formato unificado de evento é especialmente útil quando ações de UI, lógica backend e integrações podem escrever o mesmo esquema.

Fácil de começar
Criar algo espantoso

Experimente o AppMaster com plano gratuito.
Quando estiver pronto, você poderá escolher a assinatura adequada.

Comece