Uma aplicação web moderna e otimizada para buscar, visualizar e filtrar vagas de concursos públicos abertos, previstos e notícias em todo o Brasil.
O Buscar Concursos é uma ferramenta completa projetada para centralizar e simplificar o acesso a oportunidades de emprego no setor público brasileiro. A plataforma é dividida em duas partes principais:
-
🖥️ Frontend (React + Vite): Uma interface de usuário moderna, responsiva e acessível, construída com React, TypeScript e Tailwind CSS. A aplicação consome dados diretamente da infraestrutura Supabase, garantindo buscas rápidas e eficientes.
-
⚙️ Infraestrutura & Automação (Supabase): Utilizamos o Supabase como nosso Backend-as-a-Service, gerenciando:
- Database (PostgreSQL): Armazena todos os dados de concursos, notícias, previstos e usuários.
- Auth: Gerencia a autenticação de usuários, permitindo a sincronização de dados na nuvem.
- Storage: Hospeda logos de órgãos otimizados e arquivos estáticos (como dados de cidades) em uma CDN para performance global.
- Edge Functions (Deno): Scripts automatizados que mantêm o banco de dados atualizado:
scraper-concursos: Extrai vagas de concursos e processos seletivos abertos (Fonte: PCI Concursos).scraper-previstos: Extrai concursos previstos (Fontes: PCI Concursos, QConcursos).scraper-noticias: Extrai as últimas notícias sobre concursos (Fontes: PCI Concursos, QConcursos, JC Concursos).delete-user: Uma função segura para lidar com a exclusão de contas de usuário.
- Busca Abrangente: Acesse concursos, processos seletivos, certames previstos e notícias em um só lugar.
- Filtragem Avançada: Filtre vagas por localização (região, estado, cidade), raio de distância, nível de escolaridade, salário mínimo, vagas mínimas e palavra-chave.
- Contas de Usuário & Sincronização: Crie uma conta para salvar suas preferências (filtros, favoritos, configurações) e acessá-las de qualquer dispositivo.
- Buscas Favoritas & Padrão: Salve suas combinações de filtros mais usadas como "Favoritos" para acesso rápido ou defina uma "Busca Padrão".
- Acessibilidade: Um conjunto robusto de configurações de acessibilidade, incluindo modo de alto contraste, fonte para dislexia, texto maior e muito mais.
- Otimização de Performance: A arquitetura foi otimizada para reduzir custos de tráfego (Egress) e garantir uma experiência de usuário rápida, com consultas e filtros executados no lado do servidor.
Para rodar o projeto localmente, você precisará do Node.js (versão 18 ou superior) e do npm instalados.
-
Clone o repositório:
git clone https://github.com/danielnery46/buscar-concursos.git cd buscar-concursos -
Instale as dependências:
npm install
-
Configure o Supabase: Crie um arquivo chamado
.envna raiz do projeto. Você pode copiar oenv.txtcomo modelo.cp env.txt .env
Edite o arquivo
.envcom as chaves do seu projeto Supabase, que podem ser encontradas em "Configurações" > "API" no seu painel.VITE_SUPABASE_URL="https://seu-projeto-id.supabase.co" VITE_SUPABASE_ANON_KEY="sua-chave-anon-publica" -
Rode o servidor de desenvolvimento:
npm run dev
A aplicação estará disponível no endereço indicado no seu terminal (geralmente
http://localhost:5173).
Os scripts de scraping estão localizados em supabase/functions/ e foram projetados para rodar como Supabase Edge Functions.
Para implantá-los, você precisará da Supabase CLI:
-
Faça login na CLI:
supabase login
-
Vincule seu projeto:
supabase link --project-ref seu-projeto-id
-
Implante uma função individualmente:
supabase functions deploy scraper-concursos --no-verify-jwt
Repita o comando para as outras funções (
scraper-previstos,scraper-noticias,delete-user). A flag--no-verify-jwté necessária para as funções de scraping, pois elas podem ser chamadas por um agendador externo (cron job) e não por um usuário autenticado. -
Agendamento: Após a implantação, você pode agendar a execução periódica das funções usando um serviço de cron job (como o Agendador do Supabase, GitHub Actions ou outro de sua preferência) que faz uma requisição
POSTpara o endpoint da função.
/
├── public/ # Ativos estáticos, incluindo dados de cidades.
├── src/
│ ├── components/ # Componentes React reutilizáveis.
│ ├── contexts/ # Provedores de contexto (Auth, Settings, etc.).
│ ├── hooks/ # Hooks customizados para lógica de estado.
│ ├── services/ # Lógica de comunicação com a API (Supabase).
│ ├── utils/ # Funções utilitárias (formatadores, helpers).
│ ├── App.tsx # Componente raiz da aplicação.
│ └── index.tsx # Ponto de entrada da aplicação React.
└── supabase/
└── functions/ # Código-fonte das Edge Functions (scrapers).
Este projeto está licenciado sob a Licença Apache 2.0.