Sistema completo de gestão de agendamentos desenvolvido para portfólio, com frontend React, backend Java Spring Boot e PostgreSQL.
O projeto demonstra uma aplicação de negócio real: painel administrativo, clientes, serviços, profissionais, disponibilidade, prevenção de conflitos de horário e uma jornada pública de reserva.
Frontend React/Vite
↓ REST/JSON
Backend Java/Spring Boot
↓ JPA/Flyway
PostgreSQL ou H2
- dashboard com indicadores de agenda, clientes, receita e confirmação;
- agenda organizada por dia;
- filtros por data, profissional e status;
- alteração de status do atendimento;
- cadastro e busca de clientes;
- catálogo de serviços e profissionais;
- modal para criação de agendamento;
- consulta de horários disponíveis;
- página pública de reserva;
- modo demonstração com dados no navegador;
- layout responsivo.
- CRUD de clientes;
- cadastro e listagem de serviços;
- cadastro e listagem de profissionais;
- criação, busca e filtros de agendamentos;
- cálculo de disponibilidade;
- prevenção de sobreposição de horários;
- validações de negócio;
- respostas de erro padronizadas;
- documentação Swagger/OpenAPI;
- migrations Flyway;
- perfis H2 e PostgreSQL;
- testes unitários e de integração.
- React 18;
- Vite;
- CSS responsivo;
- Fetch API;
- LocalStorage para o modo demonstração.
- Java 21;
- Spring Boot 3.5;
- Spring Web;
- Spring Data JPA;
- Bean Validation;
- Flyway;
- H2;
- PostgreSQL;
- springdoc-openapi;
- JUnit e Mockito.
- Docker;
- Docker Compose;
- Nginx;
- GitHub Actions.
api-agendamentos/
├── frontend/ # aplicação React/Vite
├── src/main/java/ # backend Spring Boot
├── src/main/resources/ # configurações e migrations
├── src/test/ # testes
├── docs/ # vitrine estática do projeto
├── compose.yml
├── Dockerfile
└── pom.xml
Requisitos: Java 21 e Maven.
mvn spring-boot:runA API ficará em:
http://localhost:8080
Swagger:
http://localhost:8080/swagger
cd frontend
npm install
cp .env.example .env
npm run devA aplicação ficará em:
http://localhost:5173
Conteúdo do .env:
VITE_API_URL=http://localhost:8080docker compose up --buildServiços:
Frontend: http://localhost:3000
Backend: http://localhost:8080
Swagger: http://localhost:8080/swagger
PostgreSQL: localhost:5432
O frontend pode funcionar sem o backend. Quando VITE_API_URL não está configurada ou a API está indisponível, ele utiliza dados demonstrativos armazenados no localStorage.
Isso permite publicar a interface separadamente e demonstrar o fluxo completo no portfólio.
GET /api/v1/clientes
POST /api/v1/clientes
PUT /api/v1/clientes/{id}
DELETE /api/v1/clientes/{id}
GET /api/v1/servicos
POST /api/v1/servicos
GET /api/v1/profissionais
POST /api/v1/profissionais
GET /api/v1/agendamentos
POST /api/v1/agendamentos
GET /api/v1/agendamentos/{id}
PATCH /api/v1/agendamentos/{id}/status
GET /api/v1/disponibilidade- O frontend não depende da API para a apresentação demonstrativa.
- A regra de conflito de horário permanece no backend.
- A disponibilidade é calculada com base na duração do serviço e na agenda do profissional.
- Os valores monetários usam
BigDecimalno backend. - O banco é versionado com Flyway.
- O CORS é configurável por variável de ambiente.
Este projeto foi desenvolvido como estudo de caso para portfólio e demonstra práticas de desenvolvimento full stack. Os dados, clientes, serviços e profissionais são fictícios.
Desenvolvido por Fernanda Fregulha.