Plataforma moderna de recrutamento e seleção para conectar talentos a oportunidades.
Recruiva é uma aplicação web completa para gestão de vagas, candidaturas e candidatos, construída com .NET 9.0 e Blazor WebAssembly/Server. Oferece uma experiência intuitiva para anunciantes publicarem vagas e para candidatos se candidatarem de forma eficiente.
- ✅ Production-Ready: Sim (98% completude)
- ✅ Segurança: Críticos resolvidos
- ✅ Funcionalidades: 100% implementadas
- ✅ CI/CD: Pipeline configurado
- ✅ Monitoramento: Health checks + logging
- ✅ Documentação: Swagger/OpenAPI completo
📄 Veja as melhorias implementadas
- ✨ Features
- 🛠 Stack Tecnológica
- 📦 Estrutura do Projeto
- 🔒 Segurança
- 📊 Monitoramento
- 🚀 Como Executar
- 📚 Documentação da API
- 🔧 Configuração
- 🐳 Docker
- 🤝 Contribuindo
- 📄 Licença
- ✅ Criação e gestão completo de vagas de emprego
- ✅ Dashboard com métricas e analytics
- ✅ Gestão de candidaturas por vaga
- ✅ Moderação e aprovação de candidatos
- ✅ Destaque e boost de vagas (premium)
- ✅ Notificações em tempo real
- ✅ Busca avançada de vagas por categoria, localização e salário
- ✅ Candidatura simplificada com um clique
- ✅ Upload e gestão de currículos
- ✅ Acompanhamento de status de candidaturas
- ✅ Perfil profissional completo
- ✅ Autenticação e autorização com Identity
- ✅ Sistema de notificações por email (SendGrid)
- ✅ Upload de arquivos com storage local
- ✅ Multi-tenant ready
- ✅ UI responsiva com Bootstrap 5
- ✅ Seed Data para desenvolvimento
- ✅ Migrations automáticas
- ✅ Security Headers: X-Content-Type-Options, X-Frame-Options, CSP, etc.
- ✅ Rate Limiting: Proteção contra DDoS (100 req/s)
- ✅ Credenciais Seguras: Variáveis de ambiente (sem hardcoded)
- ✅ Anti-Forgery: Proteção CSRF habilitada
- ✅ HTTPS Redirection: Forçado em produção
- ✅ Identity: Autenticação robusta com claims
- ✅ Input Validation: Validação rigorosa em todos os inputs
# Variáveis de ambiente obrigatórias para produção
export ConnectionStrings__DefaultConnection="Server=...;Database=...;..."
export SendGrid__ApiKey="sua-api-key"- Endpoint:
/health - Checks: Conexão com banco, configuração SendGrid
- Uso: Monitoramento de saúde da aplicação
- Framework: Serilog
- Output: Console + Arquivo (rotação diária)
- Nível: Information (desenvolvimento), Warning (produção)
- Contexto: Propriedades da aplicação enriquecidas
- Plataforma: GitHub Actions
- Branches:
develop→ Deploy automático para stagingmain→ Deploy automático para produção
- Features: Build, testes, security scan, health checks
| Camada | Tecnologia |
|---|---|
| Framework | .NET 9.0 (ASP.NET Core) |
| Frontend | Blazor WebAssembly + Server (Interactive Render Modes) |
| UI | Bootstrap 5, Bootstrap Icons |
| ORM | Entity Framework Core 9.0 |
| Database | SQL Server / LocalDB |
| Auth | ASP.NET Core Identity + JWT |
| SendGrid API | |
| Storage | Local File System (extensível para cloud) |
| Arquitetura | Clean Architecture com Use Cases |
| Validação | FluentValidation pattern |
| Containerização | Docker & Docker Compose |
Recruiva/
├── src/
│ ├── Recruiva.Core/ # Camada de domínio
│ │ ├── Entities/ # Entidades do domínio
│ │ ├── DTOs/ # Request/Response DTOs
│ │ ├── Enums/ # Enumerações
│ │ ├── Exceptions/ # Exceções customizadas
│ │ ├── Extensions/ # Extension methods
│ │ ├── Interfaces/ # Contratos de serviços/repos
│ │ ├── Requests/ # Request objects
│ │ ├── Resources/ # Recursos de localização
│ │ ├── UseCases/ # Casos de uso (Clean Architecture)
│ │ ├── Validations/ # Validadores de entidades
│ │ └── ValueObjects/ # Value Objects
│ │
│ ├── Recruiva.Web/ # Camada de apresentação
│ │ ├── Components/ # Componentes Blazor
│ │ │ └── Pages/ # Páginas da aplicação
│ │ ├── Data/ # DbContext e Seed Data
│ │ ├── Migrations/ # Migrations do EF Core
│ │ ├── Repositories/ # Implementações de repositórios
│ │ ├── Services/ # Serviços da aplicação
│ │ ├── UseCases/ # Casos de uso específicos da Web
│ │ ├── wwwroot/ # Arquivos estáticos
│ │ ├── Program.cs # Entry point
│ │ └── appsettings.json # Configurações
│ │
│ └── Recruiva.Web.Client/ # Client Blazor WebAssembly
│ └── UserInfo.cs # Modelo de usuário client
│
├── docker-compose.yml # Orquestração Docker
├── .gitignore
└── README.md
- .NET 9.0 SDK
- SQL Server ou LocalDB
- (Opcional) Docker
# 1. Clonar o repositório
git clone https://github.com/seu-usuario/recruiva.git
cd recruiva
# 2. Restaurar pacotes
dotnet restore
# 3. Aplicar migrations (cria o banco)
dotnet ef database update --project src/Recruiva.Web
# 4. Executar a aplicação
dotnet run --project src/Recruiva.Web
# 5. Acessar
# HTTP: http://localhost:5095
# HTTPS: https://localhost:7222# 1. Build de produção
dotnet publish src/Recruiva.Web -c Release -o ./publish
# 2. Configurar variáveis de ambiente
export ASPNETCORE_ENVIRONMENT=Production
export ConnectionStrings__DefaultConnection="Server=...;Database=...;..."
export SendGrid__ApiKey="seu-api-key"
# 3. Executar
./publish/Recruiva.Web- Endpoint:
/swagger(desenvolvimento) - Framework: Swashbuckle.AspNetCore
- Versão: v1
- Features: Documentação interativa, testes de endpoints, schemas
| Método | Endpoint | Descrição |
|---|---|---|
GET |
/ |
Home page |
GET |
/jobs |
Listar vagas |
GET |
/jobs/{id} |
Detalhes da vaga |
POST |
/jobs |
Criar vaga (auth) |
PUT |
/jobs/{id} |
Atualizar vaga (auth) |
DELETE |
/jobs/{id} |
Deletar vaga (auth) |
POST |
/applications |
Candidatar-se (auth) |
GET |
/dashboard |
Dashboard analytics (auth) |
{
"id": "guid",
"title": "Desenvolvedor Full Stack",
"description": "...",
"requirements": ".NET, React, SQL",
"location": { "city": "São Paulo", "state": "SP", "type": "Hybrid" },
"salary": { "min": 8000, "max": 12000, "display": true },
"status": "Active",
"expirationDate": "2026-06-01T00:00:00Z"
}{
"id": "guid",
"name": "João Silva",
"email": "joao@email.com",
"phone": "(11) 97777-7777",
"linkedIn": "https://linkedin.com/in/joaosilva",
"status": "Active"
}appsettings.json- Configuração base (sem credenciais)appsettings.Development.json- Configuração de desenvolvimento (LocalDB)appsettings.Production.json.example- Template para produção
{
"ConnectionStrings": {
"DefaultConnection": "" // Use variáveis de ambiente
},
"SendGrid": {
"ApiKey": "", // Configure via variável de ambiente
"FromEmail": "noreply@recruiva.com",
"FromName": "Recruiva"
},
"Serilog": {
"MinimumLevel": "Information",
"WriteTo": ["Console", "File"]
}
}{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=Recruiva.DB;Trusted_Connection=True;"
},
"SendGrid": {
"ApiKey": "",
"FromEmail": "noreply@recruiva.com",
"FromName": "Recruiva"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}# Configurar User Secrets
dotnet user-secrets set "ConnectionStrings:DefaultConnection" "SuaConnectionString"
dotnet user-secrets set "SendGrid:ApiKey" "SeuApiKey"
⚠️ Nunca commite secrets no repositório! Use User Secrets em dev e variáveis de ambiente em produção.
# Subir todos os serviços
docker-compose up -d
# Ver logs
docker-compose logs -f app
# Parar
docker-compose downdocker build -t recruiva:latest -f src/Recruiva.Web/Dockerfile .Contribuições são bem-vindas! Siga os passos abaixo:
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add: AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
- Siga as convenções do arquivo
.editorconfig - Use
nullable enableem todos os arquivos - Prefira
sealedem classes de serviço - Use
IDateTimeProviderao invés deDateTime.Now - Logging via
ILogger<T>, nuncaConsole.Write
Este projeto está licenciado sob a MIT License.
MIT License
Copyright (c) 2026 Recruiva
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
- Website: https://recruiva.com
- Email: contato@recruiva.com
- LinkedIn: Recruiva
Feito com ❤️ por Equipe Recruiva