Requisitos Não Funcionais
Performance
| ID | Descrição |
|---|---|
| RNF-F01 | A aplicação deve carregar a tela inicial em menos de 3 segundos em conexões padrão. |
| RNF-F02 | Transições entre seções da SPA devem ser executadas em menos de 300ms. |
| RNF-F03 | Imagens e SVGs devem ser otimizados antes do build. |
| RNF-F04 | O bundle gerado pelo Vite deve ser minificado e dividido por rota. |
Usabilidade
| ID | Descrição |
|---|---|
| RNF-F05 | A interface deve ser responsiva para telas a partir de 320px de largura. |
| RNF-F06 | Todos os campos de formulário devem ter label visível e placeholder descritivo. |
| RNF-F07 | Ações destrutivas devem exigir confirmação explícita do usuário antes de serem executadas. |
| RNF-F08 | O usuário deve receber feedback visual para todas as ações — loading, sucesso e erro. |
Acessibilidade
| ID | Descrição |
|---|---|
| RNF-F09 | Imagens devem ter atributo alt descritivo. |
| RNF-F10 | O contraste entre texto e fundo deve seguir o mínimo recomendado pelo WCAG 2.1 nível AA. |
Segurança
| ID | Descrição |
|---|---|
| RNF-F11 | O token JWT deve ser armazenado no localStorage com validação de expiração. |
| RNF-F12 | Nenhuma informação sensível deve ser exibida em mensagens de erro visíveis ao usuário. |
| RNF-F13 | Rotas protegidas devem redirecionar para o login caso o token esteja ausente ou expirado. |
Manutenibilidade
| ID | Descrição |
|---|---|
| RNF-F14 | Componentes reutilizáveis devem ser isolados na pasta components/ com responsabilidade única. |
| RNF-F15 | Chamadas à API devem estar centralizadas na pasta services/ — nunca dentro de componentes ou páginas. |
| RNF-F16 | Variáveis de cor e tipografia devem ser definidas exclusivamente no variables.css via custom properties. |
Backend
Segurança
| ID | Descrição |
|---|---|
| RNF-B01 | Senhas devem ser armazenadas exclusivamente como hash bcrypt, com no mínimo 12 salt rounds. |
| RNF-B02 | O hash de senha não deve ser serializável — nenhuma resposta da API pode expô-lo, ainda que por descuido. |
| RNF-B03 | O identificador do usuário deve ser obtido do token de autenticação, nunca do corpo ou dos parâmetros da requisição. |
| RNF-B04 | Mensagens de erro de autenticação não devem revelar se um e-mail está cadastrado. |
| RNF-B05 | Credenciais de serviços externos devem residir em variáveis de ambiente, jamais no código-fonte. |
| RNF-B06 | A ausência de uma variável de ambiente obrigatória deve impedir a inicialização da aplicação. |
| RNF-B07 | Stack traces não devem ser expostos em ambiente de produção. |
| RNF-B17 | Dados pessoais — e-mail e data de nascimento — não devem ser expostos em perfis públicos, e a regra deve ser aplicada em um único ponto do sistema. |
| RNF-B18 | Erros de responsabilidade do cliente (4xx) não devem ser registrados como falha do servidor nos logs. |
| RNF-B19 | Prazos e janelas de tempo devem ser avaliados pelo relógio do servidor, nunca pelo do cliente. |
| RNF-B20 | O cliente não deve determinar quais colunas são gravadas: campos atualizáveis devem constar de lista definida no servidor. |
| RNF-B24 | Rotas sensíveis devem ter limite de requisições por janela de tempo, com contagem independente por rota. |
| RNF-B25 | A aplicação deve identificar o cliente pelo endereço real quando atrás de proxy reverso, e não pelo endereço do proxy. |
| RNF-B26 | Mensagens de erro do servidor (5xx) devem ser mascaradas em produção; mensagens de erro do cliente (4xx) devem chegar ao usuário como foram escritas. |
| RNF-B27 | Códigos de verificação devem ser persistidos como hash, ter prazo de validade, limite de tentativas e consumo único. |
| RNF-B28 | A exclusão de conta não deve alterar conteúdo de terceiros. |
Evolução do esquema
| ID | Descrição |
|---|---|
| RNF-B21 | O arquivo de esquema deve refletir o estado atual do banco, e o histórico de alterações deve ser rastreável pelo versionamento do código. |
| RNF-B22 | Consultas de listagem e de busca devem ser cobertas por índices correspondentes à sua ordenação e aos seus filtros. |
| RNF-B23 | O banco deve usar codificação de quatro bytes por caractere, comportando acentuação e emojis. |
Manutenibilidade
| ID | Descrição |
|---|---|
| RNF-B08 | Nenhuma instrução SQL deve existir fora da camada de repositórios. |
| RNF-B09 | Repositórios devem receber a conexão com o banco por injeção de dependência. |
| RNF-B10 | O tratamento de erros deve ser centralizado em um único middleware. |
| RNF-B11 | A especificação OpenAPI deve ser gerada a partir de anotações no próprio código das rotas. |
Performance e integridade
| ID | Descrição |
|---|---|
| RNF-B12 | Toda listagem deve ser paginada, com teto de registros por página definido no servidor. |
| RNF-B13 | Consultas paginadas devem declarar ordenação explícita, garantindo estabilidade entre páginas. |
| RNF-B14 | Contadores de curtidas e comentários devem ser derivados por agregação, não materializados em coluna. |
| RNF-B15 | Consultas de listagem não devem executar uma requisição adicional por item retornado. |
| RNF-B16 | Uploads devem ter limite de tamanho e lista de tipos aceitos verificados antes do envio ao serviço externo. |