Stack
Antes dos detalhes técnicos de implementação do nosso projeto, é necessário saber as principais tecnologias e fundamentos que possibilitarão o desenvolvimento desse projeto de forma rápida, paralela e eficiente.
Tecnologias 👨💻
São responsáveis pelo desenvolvimento do projeto.
Ferramentas gerais
Versionamento do projeto: Utilizamos o Git e Github para versionamento do nosso projeto, é de extrema importância que você tenha conhecimento sobre estas ferramentas. Você pode encontrar mais sobre elas em Desenvolvedor
> Utils
> Git e GitHub
na barra lateral da documentação.
Gerenciamento de tarefas: Para acompanhar as atividades designadas para cada membro do grupo utilizamos o ClickUp.
Design: Todo o design das telas e componentes da aplicação serão idealizados no Figma.
Armazenamento In memory: O NATS é uma plataforma focada exclusivamente na conectividade e comunicação, e age como um sistema nervoso central para sistemas distribuídos (que se expandem para diversas aplicações e serviços separados). No Einer o NATS é utilizado em duas ocasiões:
In-memory storage: Comumente utilizado para cache, sistemas de fila e stack, esse sistema permite a leitura e escrita de dados muito mais rápido do que bancos de dados tradicionais, pois o armazenamento fica na memória RAM ao invés do disco.
Sistema de publish/subscribe de eventos: Permite aplicações e serviços publicar eventos de alterações, e de se inscreverem a esses eventos, permite atualizações em tempo real de funcionalidades dos apps.
Linguagens de programação: Será utilizado JavaScript e TypeScript em todo projeto, então conceitos fundamentais da linguagem serão necessários para construir de forma confiável, funcional e fácil de ler, boa parte desses conceitos já foram abordados em nosso slideshow de fundamentos de JavaScript que está no repositório da nossa organização.
Após isso, de uma maneira mais aprofundada, podemos partir para as tecnologias que serão utilizadas em cada parte do nosso projeto. Elas podem ser divididas da seguinte forma:
Em comum
Ferramentas utilizadas em todas as aplicações:
- Vitest como framework de testes
- Docusaurus como documentação de desenvolvimento de projeto e diário de bordo.
- pnpm como substituto do npm (veja aqui as principais vantagens)
- Turborepo sistema de build para todas as aplicações presentes no monorepositório
- Permite gerenciar o processo de build (transformar código em artifatos que podem ser rodados) de várias aplicações ao mesmo tempo, utilizando uma CLI (Command Line Interface) intuitiva.
- Ao passo que, faz o caching de artifatos anteriores, deixando o processo de rebuild mais rápido.
- Possibilita executar scripts que executem, compilem e testem todos os apps simultaneamentes (sendo possível também filtrá-los).
Frontend
Ferramentas utilizadas para desenvolver o Frontend:
- React (através do Vite, substituto do Create React App).
- Tailwindcss (sistema de estilos para aplicar nos componentes e elementos HTML).
- tRPC client para o consumo de APIs em tRPC no server.
- Tanstack Query para gerenciar estado assíncrono para o frontend (React).
Backend
Ferramentas utilizadas para desenvolver o Backend:
- Express.js com tRPC server.
- Prisma (interface com banco de dados type safe).
- Zod (validação de dados).