Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
118 changes: 72 additions & 46 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,39 @@
# Vagas Full Monorepo
# Painel de Vagas

Projeto reorganizado em monorepo com dois workspaces:
Uma plataforma interna para transformar arquivos XLSX de vagas em uma experiencia visual rapida, filtravel e pronta para decisao.

- `frontend`: dashboard React/Vite/Tailwind
- `backend`: scraper + API Express para leitura de vagas em XLSX
O projeto esta organizado em monorepo e conecta duas frentes:

## Estrutura
- frontend: dashboard em React + Vite + Tailwind
- backend: scraper + API em Express para leitura e exposicao dos dados

## O que ja entregamos

- Dashboard com visual profissional em tema claro e escuro
- Leitura automatica dos arquivos XLSX gerados no fluxo de scraping
- Busca global por titulo, empresa, local e link
- Filtros por palavra-chave
- Selecao de arquivo de origem para alternar datasets
- Tabela paginada com controle de itens por pagina
- Endpoint de saude e endpoints de listagem/consulta de vagas
- Suite de testes (unitarios + integracao) em frontend e backend
- Cobertura de testes com alvo minimo de 80%

## Demo

### Interface em tema escuro e claro



<img width="1870" height="847" alt="Image" src="https://github.com/user-attachments/assets/37de83d7-e841-4d9c-a48f-efc2c3bb27bc" />


<img width="1839" height="874" alt="Image" src="https://github.com/user-attachments/assets/6b2e1a50-4b0a-4904-aafa-95667ca8928c" />


<img width="1861" height="695" alt="Image" src="https://github.com/user-attachments/assets/fbf5b122-af42-4a52-b457-23243b0175a9" />

Comment on lines +26 to +35

Copilot AI Mar 23, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Os prints da demo usam tags HTML <img> com alt="Image", que não descreve o conteúdo para leitores de tela. Considere trocar por textos alternativos descritivos (ou usar sintaxe Markdown ![...]() com um alt significativo) e evitar dimensões fixas gigantes para não prejudicar a renderização responsiva.

Suggested change
<img width="1870" height="847" alt="Image" src="https://github.com/user-attachments/assets/37de83d7-e841-4d9c-a48f-efc2c3bb27bc" />
<img width="1839" height="874" alt="Image" src="https://github.com/user-attachments/assets/6b2e1a50-4b0a-4904-aafa-95667ca8928c" />
<img width="1861" height="695" alt="Image" src="https://github.com/user-attachments/assets/fbf5b122-af42-4a52-b457-23243b0175a9" />
![Dashboard de vagas em tema escuro, com tabela paginada e filtros laterais](https://github.com/user-attachments/assets/37de83d7-e841-4d9c-a48f-efc2c3bb27bc)
![Dashboard de vagas em tema claro, exibindo busca global, filtros e lista de vagas](https://github.com/user-attachments/assets/6b2e1a50-4b0a-4904-aafa-95667ca8928c)
![Tela de detalhes da arquitetura das vagas, com métricas e visão geral dos dados](https://github.com/user-attachments/assets/fbf5b122-af42-4a52-b457-23243b0175a9)

Copilot uses AI. Check for mistakes.
## Arquitetura do produto

```text
.
Expand All @@ -15,31 +43,36 @@ Projeto reorganizado em monorepo com dois workspaces:
└─ package.json
```

## Stack

- Frontend: React 19, TypeScript, Vite 8, Tailwind CSS
- Backend: Node.js 22+, Express 5, XLSX, Axios, Cheerio
- Qualidade: Vitest, Testing Library, coverage v8
- Orquestracao local: npm workspaces + Docker Compose

## Requisitos

- Node.js 22+
- npm
- Docker (opcional)

## Instalar dependencias
## Comecando rapido

Na raiz do projeto:
Instale tudo na raiz do monorepo:

```bash
npm install
```

Como o projeto usa `workspaces`, esse comando instala dependencias da raiz e dos pacotes `frontend` e `backend`.
Como usamos workspaces, esse comando instala as dependencias da raiz e tambem de `frontend` e `backend`.

## Rodar em desenvolvimento

Subir frontend e backend juntos:
Suba a plataforma completa em desenvolvimento:

```bash
npm run dev
```

Rodar separadamente:
Subida separada por servico:

```bash
npm run dev:frontend
Expand All @@ -48,37 +81,38 @@ npm run dev:backend

## Scripts principais

Na raiz:
### Raiz

- `npm run dev`: frontend + backend juntos
- `npm run dev:frontend`: sobe apenas frontend
- `npm run dev:backend`: sobe apenas backend (API)
- `npm run scraper`: executa scraping via backend workspace
- `npm run scraper:watch`: scraping com nodemon via backend workspace
- `npm run test`: testes do backend
- `npm run dev:backend`: sobe apenas backend
- `npm run scraper`: executa scraping no backend
- `npm run scraper:watch`: scraping com hot reload
- `npm run test`: executa testes do backend
- `npm run build`: build do frontend
- `npm run validate`: teste backend + lint/build frontend
- `npm run test:coverage`: coverage frontend + backend (threshold 80%)
- `npm run test:coverage`: coverage frontend + backend

No backend (`backend/package.json`):
### Backend

- `npm run start`: sobe API (`src/server.js`)
- `npm run dev`: sobe API (`src/server.js`)
- `npm run scraper`: executa scraping (`index.js`)
- `npm run scraper:watch`: scraping com hot reload (`nodemon index.js`)
- `npm run api`: alias para subir API (`src/server.js`)
- `npm run scraper:watch`: scraping com nodemon
- `npm run api`: alias para subir API
- `npm run test`: testes com Vitest
- `npm run test:coverage`: cobertura com Vitest
- `npm run test:watch`: testes em modo watch
- `npm run validate`: valida backend (`npm test`)
- `npm run validate`: valida backend

No frontend (`frontend/package.json`):
### Frontend

- `npm run dev`: Vite dev server
- `npm run build`: build de producao
- `npm run lint`: lint com ESLint
- `npm run preview`: preview do build
- `npm run test`: testes com Vitest
- `npm run test:coverage`: coverage com Vitest (threshold 80%)
- `npm run test:coverage`: coverage com Vitest

## Testes e cobertura

Expand All @@ -87,36 +121,33 @@ Estrutura de testes:
- backend: `backend/tests/unit` e `backend/tests/integration`
- frontend: `frontend/tests/unit` e `frontend/tests/integration`

Cobertura minima exigida:
Meta minima de cobertura:

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

Comandos:
Comandos de cobertura:

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

Guia de boas praticas de testes: [TESTING.md](https://github.com/Benevanio/Jobs_Scraper_Global/blob/master/TESTING.md).
Guia de boas praticas: [TESTING.md](TESTING.md)

## Variaveis de ambiente

Arquivo base:

- `backend/.env.example`
Arquivos:

Arquivo local:

- `backend/.env`
- `backend/.env.example` (base)
- `backend/.env` (local)

## Docker

Subir frontend e backend:
Subir frontend + backend:

```bash
docker compose up --build
Expand All @@ -128,7 +159,7 @@ Subir em background:
docker compose up --build -d
```

Parar e remover containers/rede do projeto:
Parar e remover containers/rede:

```bash
docker compose down
Expand All @@ -140,30 +171,25 @@ Rebuild apenas backend:
docker compose build backend
```

Executar scraping via Docker (execucao pontual):
Rodar scraping pontual via container:

```bash
docker compose run --rm backend node index.js
```

Ver logs dos servicos:
Logs:

```bash
docker compose logs -f
```

Ver logs apenas do backend:

```bash
docker compose logs -f backend
```

Servicos:
Servicos em desenvolvimento:

- `frontend`: http://localhost:5173
- `backend`: http://localhost:3001
- frontend: http://localhost:5173
- backend: http://localhost:3001

A API le planilhas de `backend/output/`.
A API le planilhas localizadas em `backend/output/`.

## Endpoints da API

Expand Down
Loading