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 : ...

Antigravidade: Explorando os conceitos Matemáticos e Físicos (tese hipotética).

  Antigravidade: Explorando os conceitos Matemáticos e Físicos Resumo Este artigo aborda a noção teórica de antigravidade, um fenômeno hipotético que descreveria uma força repulsiva oposta à gravidade tradicional. Embora a ciência atual não tenha evidências experimentais da existência de antigravidade, os fundamentos teóricos para essa ideia emergem de várias áreas da física moderna, incluindo a Relatividade Geral de Einstein, a constante cosmológica, teorias quânticas de campo e modelos de dimensões extras. Aqui, são apresentados conceitos matemáticos e físicos iniciais que sustentam a especulação sobre antigravidade, abrindo caminho para futuras investigações teóricas. Introdução A gravidade é uma das forças fundamentais do universo, sendo responsável por fenômenos desde a queda de um objeto ao solo até a órbita dos planetas em torno do Sol. Contudo, a ideia de antigravidade — uma força que se oporia diretamente à gravidade — tem fascinado cientistas e escritores de ficção cientí...