gohorsejobs/README.md

12 KiB

🐴 GoHorse Jobss

Go Next.js NestJS PostgreSQL Docker

🇧🇷 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 (status force_change_password).

Tipo Login Email 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.sql foi 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

  1. Fork o projeto
  2. Crie sua branch (git checkout -b feature/AmazingFeature)
  3. Commit suas mudanças (git commit -m 'feat: add amazing feature')
  4. Push para a branch (git push origin feature/AmazingFeature)
  5. 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