| .agent/workflows | ||
| .forgejo/workflows | ||
| ass-email | ||
| backend | ||
| backoffice | ||
| docs | ||
| frontend | ||
| job-scraper-multisite | ||
| k8s | ||
| seeder-api | ||
| .cursorrules | ||
| .gitignore | ||
| ARCHITECTURE.md | ||
| docker-compose.yml | ||
| Dockerfile | ||
| private_key.pem | ||
| README.md | ||
| rsa_base64.txt | ||
| start.sh | ||
🐴 GoHorse Jobss
🇧🇷 Plataforma SaaS de recrutamento conectando empresas e profissionais de tecnologia.
💼 O Negócio
Proposta de Valor
GoHorse Jobs é uma plataforma completa de recrutamento que conecta empresas a candidatos qualificados, oferecendo:
| Para Empresas | Para Candidatos |
|---|---|
| ✅ Publicar vagas ilimitadas | ✅ Buscar vagas com filtros avançados |
| ✅ Gerenciar candidaturas | ✅ Candidatar-se em 1 clique |
| ✅ Chat em tempo real | ✅ Perfil profissional completo |
| ✅ Painel de analytics | ✅ Notificações push |
| ✅ Múltiplos recrutadores | ✅ Favoritar vagas |
Modelos de Monetização
| Plano | Features | Preço |
|---|---|---|
| Basic | 3 vagas/mês, 1 usuário | Grátis |
| Pro | 20 vagas/mês, 5 usuários | R$ 199/mês |
| Enterprise | Ilimitado, SSO, API | Sob consulta |
🔄 Fluxos de Negócio
1. Empresa Publica Vaga
flowchart LR
A[Empresa] --> B[Registro/Login]
B --> C[Criar Vaga]
C --> D[Pagamento]
D --> E[Vaga Publicada]
E --> F[Candidatos Aplicam]
F --> G[Triagem]
G --> H[Contratação]
2. Candidato Busca Emprego
flowchart LR
A[Candidato] --> B[Buscar Vagas]
B --> C[Filtrar]
C --> D[Ver Detalhes]
D --> E[Candidatar]
E --> F[Aguardar Resposta]
F --> G[Chat com Recrutador]
G --> H[Contratação]
3. Registro Rápido + Vaga (Novo!)
flowchart LR
A[/post-job/] --> B[Dados da Empresa]
B --> C[Dados da Vaga]
C --> D[Confirmação]
D --> E[Empresa + Vaga Criados]
🚀 Roadmap B2C (Marketplace Transformation)
Estamos transformando o GoHorse Jobs de um Job Board tradicional para um Marketplace Completo de Serviços e Produtos.
| Fase | Foco | Features Principais | Status |
|---|---|---|---|
| 1 | Monetização | Stripe Checkout, Boost de Vagas, Assinaturas | 🟡 Em Progresso |
| 2 | Serviços (Gigs) | Marketplace de Freelancers, Stripe Connect, Escrow | 🔴 Q1 2025 |
| 3 | Loja (Store) | Venda de Equipamentos, Merch, Logística | 🔴 Q2 2025 |
| 4 | AI & Matching | Video Interviews, Triagem Automática, Cover Letter AI | 🔴 Q3 2025 |
Ver o Roadmap Detalhado para o Gap Analysis completo.
📚 Documentação
Documentação Principal
| Documento | Descrição |
|---|---|
| 📖 docs/API.md | Referência completa da API |
| 🔐 docs/API_SECURITY.md | Autenticação e RBAC |
| 🗄️ docs/DATABASE.md | Schema do banco de dados |
| 🚀 docs/DEVOPS.md | CI/CD, Docker, Kubernetes |
| 🗺️ docs/ROADMAP.md | Status e progresso |
| 📋 docs/TASKS.md | Tarefas detalhadas |
Documentação por Componente
| Componente | Documentação | Tech Stack |
|---|---|---|
| Backend | backend/BACKEND.md | Go, Clean Architecture, DDD |
| Frontend | frontend/FRONTEND.md | Next.js 15, Tailwind, shadcn |
| Backoffice | backoffice/BACKOFFICE.md | NestJS, Fastify, Stripe |
| Seeder | seeder-api/README.md | Node.js, PostgreSQL |
🏗️ Arquitetura
graph TB
subgraph "Frontend (Appwrite)"
FE[Next.js 15]
end
subgraph "Backend (Kubernetes)"
API[Go API]
BO[NestJS Backoffice]
end
subgraph "Database"
DB[(PostgreSQL 16)]
end
subgraph "External Services"
MQ[LavinMQ]
S3[Cloudflare R2]
FCM[Firebase FCM]
AW[Appwrite Realtime]
ST[Stripe]
end
FE --> API
FE --> AW
API --> DB
API --> MQ
API --> S3
BO --> DB
BO --> MQ
BO --> FCM
BO --> ST
Componentes
| Componente | Responsabilidade | Porta |
|---|---|---|
| Frontend | UI, SSR, Auth | 3000 |
| Backend | API REST, Business Logic | 8521 |
| Backoffice | Stripe, Email, FCM | 3001 |
| PostgreSQL | Persistência | 5432 |
| LavinMQ | Email Queue | 5672 |
🛠️ Tech Stack
Backend (Go)
| Tecnologia | Uso |
|---|---|
| Go 1.24 | API REST |
| GORM | ORM |
| JWT v5 | Autenticação |
| Swagger | Documentação |
| BCrypt | Password hashing |
Frontend (Next.js)
| Tecnologia | Uso |
|---|---|
| Next.js 15 | Framework |
| Tailwind 4 | CSS |
| shadcn/ui | Componentes |
| Framer Motion | Animações |
| Appwrite | Realtime |
Backoffice (NestJS)
| Tecnologia | Uso |
|---|---|
| NestJS 11 | Framework |
| Stripe | Pagamentos |
| Nodemailer | Emails |
| Firebase Admin | Push |
🚀 Quick Start
Pré-requisitos
- Docker v24+ ou Go 1.24+
- Node.js v20+
- PostgreSQL v16+
Instalação
# Clone
git clone https://github.com/rede5/gohorsejobs.git
cd gohorsejobs
# Configure
cp backend/.env.example backend/.env
cp frontend/.env.example frontend/.env
# Backend
cd backend && go run ./cmd/api
# Frontend (outro terminal)
cd frontend && npm install && npm run dev
# Seeder (opcional)
cd seeder-api && npm install && npm run seed
Usando start.sh
./start.sh
# Escolha uma opção:
# 1. Run Backend
# 2. Run Frontend
# 3. Run Seeder
# 4. Run Migrations
# 5. Reset + Seed
🔑 Credenciais de Teste
Note
O SuperAdmin foi atualizado via migration
032_update_superadmin_lol.sql. No primeiro login será necessário trocar a senha (statusforce_change_password).
| Tipo | Login | Senha | |
|---|---|---|---|
| SuperAdmin | lol |
lol@gohorsejobs.com |
Admin@2025! |
| Company Admin | takeshi_yamamoto |
- | Takeshi@2025 |
| Recruiter | maria_santos |
- | User@2025 |
| Candidate | paulo_santos |
- | User@2025 |
Warning
Se o login retornar 401, verifique se a migration
032_update_superadmin_lol.sqlfoi executada no banco.
🔧 Environment Variables
Backend
DATABASE_URL=postgres://user:pass@host:5432/db
JWT_SECRET=your-secret-key-min-32-chars
PASSWORD_PEPPER=your-pepper
CORS_ORIGINS=https://frontend.com
Frontend
NEXT_PUBLIC_API_URL=https://api.gohorsejobs.com
NEXT_PUBLIC_APPWRITE_ENDPOINT=https://cloud.appwrite.io/v1
NEXT_PUBLIC_APPWRITE_PROJECT_ID=your-project
Backoffice
DATABASE_URL=postgres://user:pass@host:5432/db
STRIPE_SECRET_KEY=sk_test_xxx
AMQP_URL=amqp://user:pass@host:5672
📂 Estrutura
gohorsejobs/
├── backend/ # Go API (Clean Architecture)
│ ├── cmd/api/ # Entrypoint
│ ├── internal/ # Business logic
│ ├── migrations/ # 30 SQL migrations
│ └── BACKEND.md # Documentação
│
├── frontend/ # Next.js 15 App
│ ├── src/app/ # 35 pages
│ ├── src/components/ # 44 components
│ └── FRONTEND.md # Documentação
│
├── backoffice/ # NestJS API
│ ├── src/ # 7 modules
│ └── BACKOFFICE.md # Documentação
│
├── seeder-api/ # Node.js Seeder
│ └── README.md # Documentação
│
├── docs/ # Documentação central
│ ├── API.md
│ ├── API_SECURITY.md
│ ├── DATABASE.md
│ ├── DEVOPS.md
│ ├── ROADMAP.md
│ └── TASKS.md
│
├── k8s/ # Kubernetes manifests
│ ├── dev/
│ ├── hml/
│ └── prd/
│
└── start.sh # Script de inicialização
📊 Status do Projeto
| Área | Progresso | Status |
|---|---|---|
| Backend API | 95% | 🟢 Production Ready |
| Frontend | 85% | 🟢 Funcional |
| Backoffice | 80% | 🟢 Funcional |
| Seeder | 100% | 🟢 Completo |
| Documentação | 95% | 🟢 Atualizada |
Ver docs/ROADMAP.md para detalhes.
🤝 Contribuindo
- Fork o projeto
- Crie sua branch (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'feat: add amazing feature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
📊 Status Atual do Sistema (GoHorse Report)
Diagrama gerado automaticamente com base nos testes de validação do MVP. Legenda:
- 🟢 Verde: Funcionando/Operacional.
- 🟡 Amarelo: Parcial/Bugado.
- 🔴 Vermelho: Quebrado/Faltando Config.
- 💀 Vermelho Escuro: Falha Crítica de Segurança.
graph TD
%% Estilos
classDef working fill:#dcfce7,stroke:#16a34a,stroke-width:2px;
classDef partial fill:#fef9c3,stroke:#ca8a04,stroke-width:2px,stroke-dasharray:5 5;
classDef broken fill:#fee2e2,stroke:#dc2626,stroke-width:2px,stroke-dasharray:5 5;
classDef critical fill:#991b1b,stroke:#fca5a5,stroke-width:4px,color:#fff;
classDef success fill:#dcfce7,stroke:#16a34a,stroke-width:2px;
classDef warning fill:#fef9c3,stroke:#ca8a04,stroke-width:2px;
classDef error fill:#fee2e2,stroke:#dc2626,stroke-width:2px;
subgraph Frontend["Frontend & App"]
FE[Next.js 15]:::working
end
subgraph Backend["Core Backend"]
API[Go API]:::working
DB[(PostgreSQL)]:::working
BO[NestJS Backoffice]:::broken
end
subgraph Integracoes["Integrações (O Gargalo)"]
MQ[LavinMQ]:::broken
S3["Cloudflare R2/S3<br/>(Uploads)"]:::broken
FCM[Firebase FCM]:::broken
AW["Appwrite Realtime<br/>(Chat)"]:::broken
ST["Stripe<br/>(Pagamentos)"]:::broken
end
%% Fluxos
FE -->|✅ OK| API
API -->|✅ OK| DB
%% Falhas
API -.->|❌ Falha no Upload| S3
FE -.->|❌ Falha na Conexão| AW
API -.->|❌ Não Configurado| MQ
API -.->|❌ Mockado/Ignorado| ST
%% Alerta de Segurança
SEC["⚠️ FALHA CRÍTICA DE SEGURANÇA<br/>Usuário altera o próprio Role para SuperAdmin"]:::critical
FE -.-> SEC
%% Atores
Empresa((Empresa))
Candidato((Candidato))
%% Fluxo Empresa
subgraph JornadaEmpresa["Jornada da Empresa"]
LoginE[Login/Registro]:::success
Dash[Dashboard]:::warning
NewJob[Criar Vaga]:::warning
Payment[Pagamento]:::error
ListJobs[Listar Minhas Vagas]:::error
AdminUser[Gerenciar Usuários]:::success
end
%% Fluxo Candidato
subgraph JornadaCandidato["Jornada do Candidato"]
Search[Buscar Vagas]:::success
Details[Ver Detalhes]:::success
Apply[Candidatar-se]:::error
end
%% Conexões Empresa
Empresa --> LoginE
LoginE --> Dash
Dash -->|Botão 'Publish' não funciona| NewJob
NewJob -->|❌ Salva mas não aparece na lista da empresa| ListJobs
NewJob -.->|❌ Pula Etapa| Payment
LoginE -->|⚠️ PERIGO: Permite virar Admin| AdminUser
%% Conexões Candidato
Candidato --> Search
Search -->|Vê vaga criada pela empresa| Details
Details -->|❌ Erro: Upload Obrigatório Falha| Apply
%% Funcionalidades Isoladas
subgraph OutrosModulos["Outros Módulos"]
Tickets[Tickets/Suporte]:::success
Chat[Chat Realtime]:::error
end
📄 Licença
Este projeto está sob a licença MIT. Veja LICENSE para detalhes.
Desenvolvido com ❤️ pela equipe GoHorse