Home
Softono
Jobs_Scraper_Global

Jobs_Scraper_Global

Open source TypeScript
75
Stars
22
Forks
10
Issues
3
Watchers
1 week
Last Commit

About Jobs_Scraper_Global

# Painel de Vagas [![CI](https://github.com/Benevanio/Jobs_Scraper_Global/actions/workflows/ci.yml/badge.svg)](https://github.com/Benevanio/Jobs_Scraper_Global/actions/workflows/ci.yml) ![Node >= 22](https://img.shields.io/badge/node-%3E%3D22-339933) ![Monorepo](https://img.shields.io/badge/architecture-monorepo-0A66C2) ![License ISC](https://img.shields.io/badge/license-ISC-lightgrey) Plataforma de captura, agregação e consulta de vagas com arquitetura monorepo, composta por frontend web, backend Node.js e aplicação desktop com Electron. O produto evoluiu para um modelo orientado a serviços (API + scraper Go + cache/índices), com autenticação, preferências de usuário e integração com banco de dados. ## Links oficiais - Gestão de produto (Linear): https://linear.app/tatame/team/PAV/all - Design system oficial (Figma): https://www.figma.com/design/gollJBtK8PGkffNN4zk9t9/Painel-Dev---releitura?node-id=0-1&p=f&t=zU8zrFzPsNPxZ3qU-0 - Documentação backend detalhada: [BACKEND.md](BACKEND.md) - Documentação scr ...

Platforms

Web Self-hosted

Languages

TypeScript

Painel de Vagas

CI Node >= 22 Monorepo License ISC

Plataforma de captura, agregação e consulta de vagas com arquitetura monorepo, composta por frontend web, backend Node.js e aplicação desktop com Electron.

O produto evoluiu para um modelo orientado a serviços (API + scraper Go + cache/índices), com autenticação, preferências de usuário e integração com banco de dados.

Links oficiais

Sumário

Visão geral

Este repositório centraliza três frentes:

  • Frontend React para visualização e operação da plataforma.
  • Backend Node.js/Express (TypeScript) com autenticação, preferências e rotas de domínio.
  • Scraper em Go para coleta de vagas em múltiplas fontes.

Objetivo de produto: fornecer uma base robusta para busca, filtragem e gestão de vagas com foco em qualidade de dados, escalabilidade e operação contínua.

Arquitetura do monorepo

.
├─ frontend/                # Dashboard web (React + Vite)
├─ backend/                 # API Node.js (Express + TS + Drizzle)
├─ scraper-go/              # Serviço Go de scraping multi-fonte
├─ electron/                # Shell desktop
├─ docker-compose.yml       # App stack (frontend + backend + scraper-go)
├─ docker-compose.infra.yml # Infra stack (Postgres + Valkey)
└─ .github/workflows/ci.yml # CI

Stack real do projeto

  • Frontend: React 19, TypeScript, Vite 8, Tailwind CSS, Vitest.
  • Backend: Node.js 22+, Express 5, TypeScript, Drizzle ORM, Zod, Iron Session, Redis/Valkey.
  • Scraping: Go (serviço dedicado em scraper-go).
  • Desktop: Electron + Electron Builder.
  • Qualidade: Vitest (frontend/backend), cobertura v8, ESLint (frontend), GitHub Actions CI.
  • Dados: Postgres (persistência) + Valkey/Redis (cache e índice).

Quickstart local

Pré-requisitos

  • Node.js >= 22
  • npm
  • Docker e Docker Compose (opcional, recomendado para ambiente completo)

Instalação

npm install

Execução web (frontend + backend)

npm run dev

Execução separada:

npm run dev:frontend
npm run dev:backend

Execução de testes

npm run test:coverage

Comandos verificados

Os comandos abaixo existem hoje no repositório e foram conferidos nos package.json de raiz, frontend e backend.

Raiz

  • npm run dev
  • npm run dev:frontend
  • npm run dev:backend
  • npm run scraper
  • npm run scraper:watch
  • npm run test
  • npm run test:coverage
  • npm run build
  • npm run build:frontend
  • npm run validate
  • npm run electron
  • npm run electron:dev
  • npm run dist
  • npm run db:generate
  • npm run db:migrate
  • npm run db:push

Backend

  • npm run start
  • npm run dev
  • npm run api
  • npm run test
  • npm run test:coverage
  • npm run test:watch
  • npm run validate
  • npm run db:generate
  • npm run db:migrate
  • npm run db:push

Frontend

  • npm run dev
  • npm run build
  • npm run lint
  • npm run preview
  • npm run test
  • npm run test:coverage
  • npm run test:watch

API backend (estado atual)

Base: /api

Sistema:

  • GET /api/health

Autenticação:

  • GET /api/auth/:provider/url
  • GET /api/auth/:provider/callback
  • POST /api/auth/register
  • POST /api/auth/login
  • POST /api/auth/logout
  • GET /api/auth/me

Usuários:

  • GET /api/users/profile
  • PATCH /api/users/profile
  • GET /api/users/preferences
  • POST /api/users/preferences
  • PATCH /api/users/preferences

Jobs:

  • GET /api/jobs/search

Keywords:

  • GET /api/keywords
  • POST /api/keywords

Saved jobs:

  • GET /api/saved-jobs
  • GET /api/saved-jobs/:id
  • POST /api/saved-jobs
  • PATCH /api/saved-jobs/:id
  • DELETE /api/saved-jobs/:id

Swagger:

  • GET /docs

Docker (infra + aplicação)

Este projeto separa infraestrutura de aplicação em dois arquivos compose.

  1. Criar rede compartilhada (necessário uma vez):
docker network create vagas-net
  1. Subir infra (Postgres + Valkey):
docker compose -f docker-compose.infra.yml up -d
  1. Subir aplicação (scraper-go + backend + frontend):
docker compose up --build -d
  1. Logs:
docker compose logs -f backend
docker compose logs -f frontend
docker compose logs -f scraper-go
  1. Encerrar:
docker compose down
docker compose -f docker-compose.infra.yml down

Serviços padrão:

Desktop com Electron

O app desktop empacota frontend + backend e inicia a aplicação com Electron.

Comandos:

npm run build:frontend
npm run electron

Distribuição (Windows):

npm run dist

Saída esperada do instalador:

  • dist-electron/Vagas Full Setup X.X.X.exe

Variáveis de ambiente

Arquivo base:

  • backend/.env.example

Arquivo local:

  • backend/.env

Variáveis centrais de operação:

  • DATABASE_URL
  • VALKEY_URL
  • GO_SCRAPER_URL
  • SESSION_SECRET
  • CORS_ALLOWED_ORIGINS
  • SEARCH_LOCATION
  • SEARCH_GEO_ID
  • SEARCH_LANGUAGE
  • REMOTE_ONLY
  • JOB_TYPES
  • TIME_FILTER
  • WAIT_BETWEEN_SEARCHES_MS
  • PAGE_TIMEOUT_MS
  • MAX_PAGES_PER_KEYWORD
  • CACHE_TTL_MS

Segurança operacional:

  • Nunca versionar segredos reais no Git.
  • Preferir acesso interno para banco/cache em VPS.
  • Em ambiente externo, usar TLS para conexões de dados sempre que possível.

Testes e qualidade

Estrutura:

  • backend/tests/unit
  • backend/tests/integration
  • frontend/tests/unit
  • frontend/tests/integration

Threshold mínimo:

  • lines >= 80%
  • statements >= 80%
  • functions >= 80%
  • branches >= 80%

Comandos:

npm run test:coverage
npm --workspace frontend run test:coverage
npm --workspace backend run test:coverage

Observação importante: o backend já está configurado para coletar cobertura apenas em src/*/.ts, evitando contagem de artefatos gerados.

CI/CD

Workflow atual: .github/workflows/ci.yml

Executa em push para master/develop e em pull_request:

  • Instalação de dependências
  • Coverage frontend
  • Coverage backend
  • Lint frontend
  • Build frontend

Fluxo de desenvolvimento e branching

Padrão oficial:

  1. Abrir card no Linear: https://linear.app/tatame/team/PAV/all
  2. Criar branch de feature a partir de master
  3. Desenvolver e testar localmente
  4. Abrir PR da feature para develop
  5. Após aprovação e validação, merge em develop
  6. Abrir PR de develop para master
  7. Merge em master para release

Convenção recomendada de branch:

  • feature/-

Git Hooks e qualidade local

O repositório usa Husky na raiz do monorepo para padronizar validações locais em qualquer branch.

Hooks configurados:

  • pre-commit: executa lint-staged para validar arquivos staged do frontend.
  • commit-msg: valida mensagem de commit com commitlint (Conventional Commits).
  • pre-push: executa validação do monorepo (test backend + lint/build frontend).

Bootstrap recomendado para novos ambientes:

npm run setup:dev

Checklist quando hooks não disparam:

  1. Validar se o diretório Git foi detectado: git rev-parse --git-dir.
  2. Validar hooksPath local: git config --get core.hooksPath.
  3. Confirmar arquivos versionados em .husky (pre-commit, commit-msg, pre-push).
  4. Reinstalar hooks: npm run prepare.
  5. Em Windows, preferir Git Bash para depuração de scripts shell.

Observação importante:

  • CI continua obrigatório e independente de hooks locais. Mesmo com bypass local, o pipeline valida cobertura/lint/build antes de merge.

Roadmap técnico sugerido

DX e onboarding

  • Adicionar script único de bootstrap (exemplo: npm run setup:dev) para criar .env e validar pré-requisitos.
  • Adicionar verificação automática de scripts quebrados no CI.
  • Padronizar comandos cross-platform (evitar dependência de sintaxe de variável de ambiente Unix em scripts críticos).

Segurança

  • Aplicar política de rotação de SESSION_SECRET e credenciais OAuth.
  • Adicionar checklist de segurança para PRs (cookies, CORS, secrets, headers).

Performance

  • Definir estratégia de paginação e filtros em camada de API com métricas por endpoint.
  • Revisar TTL e cardinalidade dos índices no Valkey para reduzir consumo de memória.

Observabilidade

  • Padronizar correlação de logs por request id.
  • Publicar guia mínimo de troubleshooting com sinais de saúde dos serviços frontend/backend/scraper-go.

Contribuição

  1. Abra um card no Linear.
  2. Crie branch a partir de master.
  3. Implemente com testes.
  4. Execute validações locais:
npm run validate
npm run test:coverage
  1. Abra PR para develop com contexto técnico objetivo.

Se você vai trabalhar em backend, scraper ou testes, use também: