Pular para o conteúdo principal

🔥 Minha stack full stack em produção: Sistema de frequência para escola de Jiu-Jitsu 🥋



Decisões Técnicas, Análise de Código e Aprendizados Reais


🧱 Contexto do Projeto

Desenvolvi um sistema de controle de frequência para uma escola de Jiu-Jitsu, com foco em simplicidade, rapidez de entrega e escalabilidade futura. A ideia era que o sistema fosse utilizado por professores e administradores da escola para:

  • Cadastrar alunos e professores

  • Registrar frequência diária

  • Consultar e visualizar relatórios de presença


🧰 Stack Tecnológica Utilizada

Frontend

  • HTML, CSS e JavaScript puro (arquitetura simples, com estrutura clara de pastas)

  • Organização de componentes reutilizáveis para inputs e cards

  • Leve e sem dependência de frameworks — até o momento

Backend

  • Node.js + Express.js

  • Estrutura de rotas modulares (/routes/aluno.js, /routes/professor.js, etc.)

  • Uso de app.use() para middleware global

  • Organização clara das funções de controle

Banco de Dados

  • MongoDB com visualização via MongoDB Compass

  • Mongoose para modelagem e conexão

  • Modelos separados por entidade (Aluno.js, Professor.js, Presenca.js)

Ferramentas Complementares

  • Insomnia para testar rotas HTTP

  • Docker (previsto para versão futura)

  • Railway para possível deploy

  • GitHub como repositório com README explicativo


🔎 Análise Técnica dos Códigos Utilizados

📁 Estrutura do Backend (exemplo real):

📦frequencia-academia-jiu-jitsu
 ┣ 📂routes
 ┃ ┣ 📜aluno.js
 ┃ ┣ 📜professor.js
 ┃ ┗ 📜presenca.js
 ┣ 📂models
 ┃ ┣ 📜Aluno.js
 ┃ ┣ 📜Professor.js
 ┃ ┗ 📜Presenca.js
 ┣ 📜server.js
 ┣ 📜.env
 ┗ 📜package.json

✅ Exemplo de Rota - Cadastro de Aluno (routes/aluno.js)

const express = require('express');
const router = express.Router();
const Aluno = require('../models/Aluno');

router.post('/add-aluno', async (req, res) => {
  const { nome, idade, faixa } = req.body;

  try {
    const novoAluno = new Aluno({ nome, idade, faixa });
    await novoAluno.save();
    res.status(201).json({ mensagem: 'Aluno cadastrado com sucesso!' });
  } catch (err) {
    res.status(500).json({ erro: 'Erro ao cadastrar aluno.' });
  }
});

module.exports = router;

Análise Técnica:

  • ✅ Código limpo e direto ao ponto

  • ⚠️ Pode evoluir com validação via Joi ou express-validator

  • ⚠️ Melhorar mensagens de erro específicas no catch

  • ✅ Uso de async/await com try/catch é padrão recomendado


✅ Modelo com Mongoose (models/Aluno.js)

const mongoose = require('mongoose');

const alunoSchema = new mongoose.Schema({
  nome: { type: String, required: true },
  idade: Number,
  faixa: String,
  dataCadastro: { type: Date, default: Date.now }
});

module.exports = mongoose.model('Aluno', alunoSchema);

Análise Técnica:

  • ✅ Uso do default: Date.now é ótimo pra rastrear histórico

  • ⚠️ Pode evoluir com validações (minLength, enum, etc.)

  • ✅ Schema separado por entidade = ótimo pra manutenção


📈 Dicas para Melhoramento Futuro

  1. 🔒 Autenticação e Autorização

    • Adicionar JWT para proteger rotas administrativas

    • Middleware para separar funções de admin e professor

  2. 📊 Relatórios com Dashboards

    • Adicionar gráficos (via Chart.js ou Recharts no front)

    • Exibir frequência por aluno, mês ou dias da semana

  3. 💬 Integração com Notificações

    • Usar WhatsApp API para alertar pais sobre faltas

    • Envio de e-mail automático mensal com relatório de presença

  4. 🧪 Testes Automatizados

    • Começar com Jest ou Mocha para testar rotas críticas

    • CI com GitHub Actions pra testes no push

  5. 📦 Dockerização

    • Criar Dockerfile e docker-compose.yml para rodar app + MongoDB com um comando

  6. 🧹 Padronização com ESLint e Prettier

    • Manter estilo de código padronizado, fácil para contribuição futura


🧠 Aprendizados Reais

  • Simplicidade não é sinônimo de amadorismo: entregar algo funcional e usável é mais importante que seguir todas as modinhas do momento.

  • MongoDB atendeu bem, mas já considero PostgreSQL + Prisma pra escalar com mais segurança em projetos maiores.

  • A modularização do código no início facilitou demais a manutenção e adição de novas features depois.


🙌 Encerramento

Esse projeto mostrou mais uma vez que, como dev full stack, não basta saber programar — é preciso entender o negócio, escolher as batalhas certas e entregar com qualidade e visão de futuro.

Se quiser ver o código, trocar ideia ou tiver sugestões, só chamar!
E aí, qual stack você tem usado nos seus projetos reais?

#FullStack #NodeJS #MongoDB #DevReal #ProjetosReais #JiuJitsu #Backend #CleanCode #DesenvolvimentoWeb

Comentários

Postagens mais visitadas deste blog

Tipos de juntas em construção civil: Importância e aplicações.

Tipos de juntas em construção civil: Importância e aplicações Por: Marcelo Fontinele, MF Engenharia e Consultoria. Introdução As juntas desempenham um papel fundamental na construção civil, proporcionando flexibilidade estrutural e prevenindo danos causados pela movimentação natural dos materiais. Vamos explorar os principais tipos de juntas e sua relevância na engenharia civil. Junta de Dessolidarização A junta de dessolidarização é projetada para separar componentes estruturais, como pisos e paredes, minimizando a transmissão de tensões entre eles. Essa técnica ajuda a evitar fissuras e garantir a durabilidade das estruturas. Junta de Movimentação Essencial em grandes estruturas, como pontes e edifícios altos, a junta de movimentação permite a expansão e contração dos materiais devido às variações térmicas e movimentações estruturais, reduzindo o risco de rachaduras e deformações. Junta Estrutural Integrada no projeto para dividir grandes áreas de concreto ou alvenaria em se...

Fórmulas de Hazen-Williams e Fair – Whipple – Hsiao: Diferenças e aplicações no dimensionamento hidráulico

Fórmulas de Hazen-Williams e Fair – Whipple – Hsiao: Diferenças e aplicações no dimensionamento hidráulico. Introdução O dimensionamento de tubulações é um dos pilares de projetos hidráulicos eficientes. Entre as várias equações disponíveis, destacam-se duas de uso comum: a fórmula de Hazen-Williams e a equação empírica de Fair – Whipple – Hsiao . Ambas visam determinar a perda de carga ou a vazão em sistemas de condução de água, mas possuem abordagens diferentes e são aplicadas em situações específicas . Fórmula de Hazen-Williams A equação de Hazen-Williams é bastante popular no Brasil e em muitos países por sua simplicidade e boa aproximação para escoamento de água fria em tubulações sob pressão , com regime permanente e fluxo turbulento . Fórmula: V = K ⋅ C ⋅ R 0,63 ⋅ S 0,54 V = K \cdot C \cdot R^{0{,}63} \cdot S^{0{,}54} Ou, mais comumente, na forma para vazão (Q) : Q = 0,278 ⋅ C ⋅ D 2,63 ⋅ S 0,54 Q = 0{,}278 \cdot C \cdot D^{2{,}63} \cdot S^{0{,}54} Onde: Q Q : ...

O Vírus ILOVEYOU: Uma análise técnica e suas implicações na segurança cibernética (particularmente nostálgico)

O Vírus ILOVEYOU: Uma análise técnica e suas implicações na segurança cibernética Resumo O vírus ILOVEYOU, também conhecido como Love Bug, foi um dos mais devastadores ciberataques da história, surgido em maio de 2000. Propagando-se principalmente por e-mails, ele explorava técnicas de engenharia social para induzir usuários a executar um script malicioso em Visual Basic Script (VBS). Este artigo técnico analisa em detalhes os mecanismos de ataque do ILOVEYOU, seu impacto global e as lições aprendidas que moldaram a evolução da segurança cibernética. São discutidas as técnicas de propagação, modificação de arquivos e auto-replicação, bem como as contramedidas desenvolvidas após o ataque. 1. Introdução O vírus ILOVEYOU marcou um ponto crucial na história da segurança cibernética. Ele se destacou não apenas pelo número de máquinas infectadas, mas também pela sua abordagem baseada em engenharia social, usando e-mails aparentemente inofensivos para enganar os usuários. Neste artigo, explor...