FormMaster é uma aplicação fullstack desenvolvida como prática dos conceitos do curso JStack, com foco em formulários dinâmicos e multi-etapas no frontend, integrando autenticação e persistência de dados no backend com Node.js, Express e MongoDB.
O sistema permite que usuários criem perfis com informações completas e elaborem questionários personalizados, com controle total sobre o conteúdo das perguntas e tipos de resposta. O backend garante segurança e integridade, exigindo autenticação para ações sensíveis como a criação de formulários.
- JWT (JSON Web Token): Apenas usuários autenticados podem criar formulários.
- Hash de Senha: As senhas são armazenadas com segurança utilizando bcrypt.
- Relacionamento 1:N: Cada usuário pode criar múltiplos formulários (questionários).
- Cadastro com nome, e-mail, senha, telefone e profissão.
- Validação robusta utilizando Zod no frontend.
- Hash automático de senha e verificação com bcrypt no backend.
-
Criação de perguntas dinâmicas com diferentes tipos:
- Múltipla escolha
- Aberta
- Escala (com valor mínimo e máximo)
- Booleana (Sim/Não)
-
Definição de alternativas dinâmicas e interativas.
-
Suporte a perguntas obrigatórias e opcionais.
- Validação em Tempo Real: Cada etapa é validada com Zod antes de avançar.
- Persistência de Dados: Uso de
sessionStorageno frontend para evitar perda de progresso. - Transições com Framer Motion: Animações suaves entre as etapas do formulário.
- Integração com Backend Real: A API está implementada com Express, Mongoose e autenticação JWT, com endpoints organizados e testados via Postman.
- React
- React Hook Form
- Zod
- Framer Motion
- Tailwind CSS + shadcn/ui
- Node.js + Express
- Mongoose (ODM para MongoDB)
- JWT para autenticação
- Bcrypt para hash de senhas
- Zod para validação dos dados de entrada
- TypeScript para maior segurança no desenvolvimento
-
User
- name, email, password (hash), phone, profession
- timestamps automáticos
- método
comparePasswordpara autenticação
-
Questionnaire (Form)
- title, description, questions[], userId (referência a
User) - cada
questionpode conter alternativas, valores mínimos/máximos e tipo - relacionamento com usuário via
userId
- title, description, questions[], userId (referência a
- React Hook Form + Zod para formulários complexos
- Multi-step Forms com persistência
- Express API com autenticação JWT
- Mongoose e relacionamento entre coleções