Uma aplicação Fullstack desenvolvida para demonstrar sólidos conhecimentos em Desenvolvimento Back-end, construção de APIs RESTful, Containerização e Deploy em Nuvem.
Este projeto é um Gerenciador de Tarefas (Task Manager) criado por Daniel Rodrigues, estudante de Desenvolvimento de Software na FATEC Itaquera. O principal objetivo desta aplicação é compor meu portfólio profissional, destacando minhas habilidades práticas em arquitetura de software, domínio do ecossistema Java (Spring Boot) e conhecimento em práticas fundamentais de DevOps e Cloud (Docker e Google Cloud Run).
A aplicação fornece uma API REST completa para o gerenciamento das entidades (Tasks), consumida por uma interface amigável desenvolvida em Vanilla JS e CSS. O projeto prioriza a separação de responsabilidades (Clean Architecture) e a escrita de um código limpo e de fácil manutenção.
🌐 Status do Projeto: Concluído e em produção.
🔗 Live Demo (Google Cloud Run): [https://task-manager-java-vanilla-342085720840.europe-west1.run.app/]
- Java 8
- Spring Boot (2.7): Framework principal para criação ágil e robusta da API REST.
- Spring Data JPA & Hibernate: ORM utilizado para abstração e persistência de dados.
- H2 Database: Banco de dados relacional em memória para otimização do fluxo de desenvolvimento, testes e demonstrações rápidas.
- Maven: Gerenciamento das dependências e ciclo de vida do build da aplicação.
- Docker: Containerização da aplicação. Foi utilizado o conceito de Multi-stage build no Dockerfile para garantir a separação entre o ambiente de build e o de runtime, gerando imagens mais leves e seguras.
- Google Cloud Run: Plataforma Serverless escolhida para o deploy do container. Demonstra a capacidade de implantar aplicações escaláveis na nuvem gerenciando a infraestrutura de forma moderna.
- GitHub: Controle de versão e gestão do código fonte.
- HTML5, CSS3 & JavaScript (Vanilla)
- Consumo da API de forma totalmente assíncrona utilizando a moderna
Fetch API. - Design responsivo e atrativo aplicando Flexbox e conceitos de Glassmorphism puro.
Para demonstrar conhecimento aplicável ao mercado de trabalho, tomei algumas decisões de design importantes neste projeto:
- Design de API RESTful Padrão: Criação de endpoints semânticos e utilização adequada dos verbos HTTP (GET, POST, PUT, DELETE) e Status Codes para as operações CRUD.
- Containerização Eficiente (Multi-stage Build): O processo de build (
maven package) acontece dentro do primeiro container. Apenas o artefato final (.jar) resultante é copiado para a imagem de produção (JRE). Isso resolve problemas comuns de "funciona na minha máquina" e reduz drasticamente o peso final da imagem da aplicação. - Implantação Serverless: O deploy no Google Cloud via container foca em eficiência de custos e escalabilidade automática caso o tráfego da aplicação aumente.
Certifique-se de ter o Docker instalado em sua máquina.
-
Clone este repositório em seu ambiente local:
git clone https://github.com/danielvor/task-manager-java-vanilla.git cd task-manager -
Construa a imagem Docker através do comando:
docker build -t task-manager-app . -
Inicie a aplicação executando o container:
docker run -p 8080:8080 task-manager-app
-
Acesse a aplicação no seu navegador:
http://localhost:8080
(Alternativamente, se você testar diretamente no ambiente Java com Maven instalado, pode rodar o backend com o comando ./mvnw clean spring-boot:run)
A API responde no Base Path /api/tasks. Abaixo os endpoints disponíveis:
| Método | Endpoint | Descrição |
|---|---|---|
GET |
/api/tasks |
Retorna um array em JSON contendo a lista de todas as tarefas cadastradas. |
POST |
/api/tasks |
Persiste e cria uma nova tarefa enviada via payload JSON. |
PUT |
/api/tasks/{id} |
Atualiza o status (concluído/não concluído) da tarefa referenciada pelo id. |
DELETE |
/api/tasks/{id} |
Remove a tarefa específica em definitivo do banco de dados. |
Daniel Rodrigues
🎓 Estudante de Desenvolvimento de Software na FATEC Itaquera
💻 Desenvolvedor de Software focado no ecossistema Back-end e Fullstack.
Sou apaixonado por tecnologia, construção de sistemas web robustos e boas práticas de engenharia de software. Busco constantemente criar aplicações que resolvam problemas reais unindo performance e qualidade de código.