O frontend será o ambiente onde o usuário irá interagir com o sistema, tanto o candidato, quanto os avaliadores do sistema, para que consigam participar do processo seletivo em questão de uma forma bem tranquila e otimizada.
A aplicação frontend utilizará as seguintes tecnologias:
- HTML5
- CSS3
- JavaScript
- Webpack
- Babel
Para contextualizar, o Webpack será utilizado para otimizar e empacotar o código-fonte do projeto para facilitar o desenvolvimento e também o deploy da aplicação. Em conjunto com ele, o Babel irá atuar para garantir que o código gerado seja compatível com grande parte dos navegadores web.
Para instalar todas as dependências do projeto, basta rodar o comando npm install.
O projeto está estruturado da seguinte forma:
/dist: Contém arquivos de distribuição do projeto/src: Código-fonte do projeto/assets: Pasta de assets como fotos, svg, gifs, etc./components: Contém todos os componentes utilizados na aplicação: botões, navbars, etc./models: Contém os modelos de dados da aplicação: candidato, avaliador, entrevista, etc./pages: Contém arquivos de estrutura, estilo e lógica da página/nome-da-pagina: Contém arquivos referentes à página especificadaindex.html: Arquivo que se refere à estrutura da página especificadaindex.js: Arquivo principal de lógica da páginaindex.css: Arquivo principal de estilo da página
O desenvolvimento deve ser feito através de módulos, permitindo assim a reutilização de código, além de construções de componentes para permitir a estruturação das páginas de forma personalizadas, dependendo dos dados obtidos do backend da aplicação.
É importante lembrar que todo código escrito, seja função ou classe, possua um propósito único, a fim de facilitar o reuso e a manuntenção do código.
A contribuição deve ser feita seguindo o fluxo do Git Flow, como mostrado no exemplo abaixo:
O padrão de commits deve ser o de Commits Semânticos, o repositório está configurado para permitir apenas commits que seguem o padrão, além de possuir uma ferramenta automatizada para gerar as mensagens de commits, através do comando npm run commit.
No contexto do projeto, as branches principais são as branches main(para produção) e develop(para desenvolvimento) e cada funcionalidade nova será uma branch feature, criada a partir da branch develop.
Cada funcionalidade nova ou correção de código devem ser feitas em branches próprias, seguindo também uma nomenclatura parecida com a dos commits semânticos, adotando o tipo da branch seguindo do nome da branch, por exemplo: feature/login-de-usuario ou hotfix/botao-logout.
Não devem ser feitos commits nas branches principais! Os commits serão feitos nas branches secundárias e integradas às branches principais a partir de Pull Requests, que serão revisados por no mínimo 2 pessoas.
Guia foi feito para que qualquer desenvolvedor consiga entender rapidamente como o projeto funciona na prática e saiba exatamente o que alterar quando precisar.
O site muda completamente dependendo de qual etapa o Processo Seletivo se encontra (Inscrições abertas, Agendamento, Encerrado). Nós não usamos banco de dados para controlar qual tela o candidato vê na página inicial.
Tudo é controlado por variáveis de ambiente no arquivo .env do Frontend.
A variável principal é a PROCESS_STATE. Ela define o estado base:
countdown: Tela de contagem regressiva (antes do PS começar).form: Formulário para as pessoas se inscreverem.interview: Tela onde os candidatos agendam as entrevistas.end: Tela de fim de processo.
Transição Automática (Countdown -> Form):
Para evitar que desenvolvedores precisem mudar a variável manualmente no momento exato em que as inscrições abrem, adicionamos a variável PROCESS_START_DATE (ex: 2026-06-01T12:00:00).
- O frontend usa essa data para fazer a contagem regressiva.
- Se o
PROCESS_STATEestiver comocountdown, mas o momento atual (data do build) já tiver ultrapassado a data estipulada emPROCESS_START_DATE, o Webpack forçará automaticamente a aplicação a renderizar o estadoform. - No lado do cliente, assim que o relógio da contagem zera, a página redireciona o usuário direto para
/inscricao.
Como atualizar a fase do processo manualmente (para as demais etapas):
Se você quiser mudar o site de "Inscrições" (form) para "Entrevistas" (interview), você precisa fazer o seguinte:
- Ir na plataforma onde o frontend está hospedado (ex: Vercel).
- Mudar o valor da variável
PROCESS_STATE. - Clicar para fazer um novo Deploy (reconstruir o site).
Dica: Os nomes dos estados correspondem exatamente às pastas que estão dentro de src/pages/home/states/.
O sistema tem dois tipos de usuários e eles entram de jeitos bem diferentes: Candidatos (Sem Senha) Candidatos não criam senha. Eles acessam o painel de agendamento através de um link seguro enviado por e-mail.
- O que acontece: Quando ele clica no link (ex:
/agendar-entrevista?code=123), o código123fica salvo no navegador dele (localStorage). - Como atualizar/testar: Se precisar testar como candidato, simule colocando o código no seu
localStorageatravés do console do navegador, usando a chaveps_lawd_access_code. O botão "Sair" na tela dele simplesmente apaga esse código. Avaliadores da Liga (Com Senha) Os avaliadores entram pela página/logincom e-mail e senha. Eles têm acesso a páginas que os candidatos não têm:/minha-agenda,/agendamento-geral, e/entrevista.
Se você for fazer manutenção no calendário onde os avaliadores colocam os horários deles (minha-agenda), preste atenção nestes detalhes:
- Limite de visualização: Por regra de negócio, o avaliador só pode marcar horários de hoje até 2 meses para frente. O botão de voltar
<nos meses passados some automaticamente. - Como atualizar o limite: Se no futuro a Liga quiser que os horários possam ser marcados para 6 meses, vá no arquivo
frontend-ps/src/pages/minha-agenda/index.js, procure porperiodEnd = new Date(..., currentDate.getMonth() + 2, ...)e troque o2pelo número de meses desejado. - O calendário se redesenha toda vez que você clica na setinha de passar o mês, apagando os dias antigos e criando novos.
Quando o candidato vai marcar a entrevista dele, o código verifica regras importantes:
- Regra das 24 Horas: O candidato pode remarcar ou cancelar a entrevista, mas só se faltar mais de 24 horas para ela acontecer.
- Onde isso fica: O bloqueio principal acontece no Backend, mas o Frontend (
agendar-entrevista/index.js) avisa o candidato com um alerta ("A alteração só pode ser feita com 24 horas de antecedência"). Se precisarem mudar esse limite para 48h no futuro, lembre-se de mudar a mensagem no HTML (agendar-entrevista/index.html) e alterar a validação lá no Backend.
Temos uma rota dinâmica de sala de entrevista (ex: /entrevista/ID-DO-CANDIDATO).
Como não usamos React (Next.js/React Router), servidores comuns não sabem ler isso e dão erro "404 Not Found".
- Como resolvemos: Existe um arquivo chamado
vercel.jsonna raiz do projeto. Ele diz para o servidor: "Toda vez que alguém tentar acessar/entrevista/qualquer-coisa, abra o arquivo/entrevista/index.htmle deixe o JavaScript se virar". - Como atualizar: Se você criar uma página nova no futuro que também tenha link com
/ID, lembre-se de adicionar a nova regra dentro dessevercel.json.
- Não usamos ferramentas externas (como Bootstrap ou Tailwind). Tudo é CSS puro.
- Como atualizar cores: Sempre que for pintar um botão ou texto da LAWD, não use a cor direto no código (ex:
color: #7046e9). Use as Variáveis CSS do projeto, comocolor: var(--purple-400). Se um dia a LAWD mudar a identidade visual, basta alterar o arquivo base de variáveis e o site inteiro atualizará sozinho.
