Skip to content

AkôFlow - Migração para Vite + React #30

@zaclummys

Description

@zaclummys

Contexto

Atualmente, o AkôFlow Admin utiliza arquivos HTML com interpolação de strings para servir as páginas do painel administrativo. Apesar de atender às necessidades do usuário em termos de configuração e execução dos workflows, essa abordagem carece de boas práticas modernas de desenvolvimento front-end:

  • Não é possível testar unitariamente os componentes;
  • Não há framework para renderização e reutilização de elementos de UI;
  • O AkôFlow Engine absorve responsabilidades relacionadas à interface, aumentando seu escopo indevidamente.

Proposta

Gostaria de propor a utilização do Vite + React para a geração estática do AkôFlow Admin, em um módulo separado do AkôFlow Engine. Com isso, se tornará possível:

  • Reutilizar componentes de forma estruturada;
  • Padronizar a interface e a experiência de usuário do AkôFlow;
  • Melhorar e controlar a qualidade através de:
    • Testes unitários;
    • Testes de fim a fim com navegadores reais;
    • Checks automáticos de qualidade em PRs (ex.: test, lint, build);
  • Comprimir e otimizar o bundle final automaticamente.
  • Reduzir e isolar as responsabilidades do engine, mantendo a UI exclusivamente no AkôFlow Admin.

Para melhorar a organização do repositório, proponho também a adoção do padrão monorepo, no qual diferentes módulos coexistem no mesmo repositório. Ferramentas como Turborepo, NPM Workspaces e Lerna podem auxiliar, embora a mudança mais importante seja estrutural:

.
└── modules/
    ├── akoflow-engine
    └── akoflow-admin

Nesse formato:

  • akoflow-engine mantém o projeto Go e as funcionalidades centrais;
  • akoflow-admin mantém o projeto Vite + React e toda a lógica da interface administrativa.

O akoflow-engine continuaria servindo o AkôFlow Admin, mas agora servindo arquivos estáticos, sem qualquer interpolação dinâmica.

Fluxo

  1. O akoflow-admin executa npm run build, produzindo uma pasta estática (ex.: dist/).
  2. O akoflow-engine, ao ser compilado, incorpora ou referencia essa pasta.
  3. Qualquer requisição para /akoflow-admin/* retorna arquivos dessa pasta, sem manipulação ou templates Go.

Esse modelo é simples, eficiente e reduz responsabilidades do engine.

Migração

Como já existe um AkôFlow Admin em produção, a migração pode (e deve) ser feita de forma gradual. Existem duas abordagens possíveis:

  1. Branch dedicada (ex.: feature-vite-akoflow-admin):

    • Evita exposição prematura de uma interface incompleta.
    • Facilita reverts caso a proposta não avance.
  2. Duas versões lado a lado, controladas por feature flag (minha preferência):

    • Evita conflitos de código entre versões;
    • Permite testar ambas as implementações durante o desenvolvimento;
    • Possibilita alternar entre uma versão e outra rapidamente;
    • Reduz riscos durante a transição.

Versionamento

Com a adoção de um monorepo, o versionamento seria unificado: uma única versão para todo o repositório, em vez de versões independentes por módulo.

Acesso à API

Atualmente, o AkôFlow Admin consome a API via http://localhost:8080. Esse comportamento pode ser mantido ou parametrizado através de uma variável de ambiente (process.env.BASE_API_URL).

O Vite substitui essas variáveis em tempo de build, garantindo URLs corretas no bundle final.

CI

A migração introduz novas necessidades de pipeline, incluindo:

  • Instalação das dependências do akoflow-admin (npm install);
  • Execução dos checks de qualidade (lint, test, etc.);
  • Execução do build estático (npm run build);
  • Inclusão da pasta resultante no processo de build e distribuição do akoflow-engine.

Será necessário criar novos checks de qualidade específicos para o front-end e ajustar o script de compilação atual para incorporar o build estático gerado pelo Vite.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions