Assistente de busca que notifica novas oportunidades de emprego da Gupy no seu Telegram, ajudando você a encontrar a vaga ideal com filtros personalizados e alertas automáticos.
Buscar vagas de emprego diariamente é um processo exaustivo. O Gupy Alert resolve isso automatizando a consulta de oportunidades de forma leve e rápida, entregando os resultados diretamente no seu celular.
Diferenciais:
- 🖥️ Interface gráfica moderna, limpa e responsiva.
- 🎨 Design System macOS Premium: Layout elegante com transições suaves, inspirado no macOS (com suporte a modos claro e escuro).
- 🔍 Filtros personalizados por palavras-chave, estado, modelo e tipo de vaga.
- 📋 Múltiplas buscas configuráveis ao mesmo tempo para diferentes tipos de cargos.
- 🔔 Notificações no Telegram com detalhes da vaga e link direto para se candidatar.
- ⏰ Busca programada com intervalo de tempo definido por você.
- 🔒 Sem repetições: Sistema inteligente que garante que você só receba cada vaga uma única vez.
- 📦 Pronto para usar: Pode ser empacotado em executáveis nativos (
.appno macOS e.exeno Windows) sem necessidade de instalar interpretadores externamente.
GupyAlert/
├── main.py # Ponto de entrada da aplicação
├── GupyAlert.spec # Configuração do PyInstaller
├── Iniciar App.bat # Atalho para rodar no Windows
├── Iniciar App.command # Atalho para rodar no macOS
├── build.py # Script de compilação automatizada
├── compilar.bat # Script para compilação em 1 clique no Windows
├── compilar.sh # Script para compilação em 1 clique no macOS/Linux
├── requirements.txt # Dependências Python
├── src/ # Código fonte da aplicação
│ ├── constants.py # Opções e filtros estáticos
│ ├── core.py # Lógica do buscador Gupy
│ ├── server.py # Servidor Flask e stream de logs
│ ├── tray.py # Bandeja do sistema (pystray)
│ ├── utils.py # Auxiliares
│ ├── static/ # CSS e JavaScript da interface (incluindo logo)
│ └── templates/ # HTML da interface (index.html com favicon)
├── .gitignore
├── LICENSE
└── README.md
Arquivos gerados em runtime (não versionados):
config.json— suas configurações e buscas salvas (salvo no appdata local)vagas_gupy.db— banco de dados anti-spam (salvo no appdata local)
Realizamos uma auditoria e refatoração profunda no código-fonte para maior manutenibilidade:
- Remoção de Dead Code: Limpeza de constantes antigas de estilização Tkinter (
WHITE,BLACK,GRAY_X,FONT) que haviam sobrado da versão legada. - Otimização de Imports: Remoção de módulos importados desnecessariamente (
sys,urllib.error), reduzindo o tempo de boot do servidor. - Resolução de Path de Assets: O ícone do navegador (favicon) e a imagem da barra lateral foram configurados com caminhos estáticos diretos (
/static/logo.png), corrigindo bugs de renderização e resolvendo problemas com a sobreposição de alt-text quebrado no frontend.
- Acesse os downloads disponíveis na aba de Releases do repositório no GitHub ou compile-o localmente (ver seção Empacotamento).
- Dê dois cliques no executável:
- No Windows:
GupyAlert.exe - No macOS:
GupyAlert.app
- No Windows:
- No Windows: Dê dois cliques no arquivo
Iniciar App.bat. - No macOS: Dê dois cliques no arquivo
Iniciar App.command.
- Abra o Telegram e busque por
@BotFather - Envie
/newbote siga as instruções - Copie o Token recebido (ex:
7123456789:AAF...)
- Crie um grupo no Telegram e adicione seu bot como administrador
- Adicione o bot
@userinfobottemporariamente ao grupo — ele mostrará o Chat ID (ex:-1001234567890)
- Abra o Gupy Alert
- Clique em ⚙️ Configurações na barra lateral
- Cole o Token e o Chat ID (por segurança, ambos campos ocultam seus caracteres por padrão; clique no ícone do olho 👁️ ao lado dos campos para exibir ou ocultar os valores)
- Ajuste o intervalo (de 5 a 240 minutos)
- Clique em 💾 Salvar Configurações
- Clique na aba 🔍 Buscas
- Clique em + Nova Busca
- Preencha o card:
| Campo | Descrição | Exemplo |
|---|---|---|
| Nome | Apelido para identificar a busca | Dev Junior SP |
| Palavras-chave | Cargos que quer buscar (um por linha) | desenvolvedor junior |
| Estado | Estado ou "Qualquer Estado" | São Paulo |
| Modelo | Remoto / Presencial / Híbrido / Todos | Remoto |
| Tipo | Efetivo / Estágio / Freelancer... | Estágio |
💡 Sem palavras-chave = busca todas as vagas do filtro. Você pode adicionar quantas buscas quiser.
- Suas alterações são salvas automaticamente em tempo real!
Busca 1: "Dev Junior SP" → "desenvolvedor junior" → São Paulo → Remoto → Efetivo
Busca 2: "Estágio TI" → "estagio ti" → Qualquer → Todos → Estágio
Busca 3: "Home Office Geral"→ (sem palavras) → Qualquer → Remoto → Todos
| Ação | Como fazer |
|---|---|
| Busca manual | Clique em ⚡ Buscar Agora (muda para Parar para interromper) |
| Automático | Clique em ▶ Automático (muda para Parar quando ativo) |
| Ver logs | Aba 📋 Log |
Ao fechar a janela (X), o app vai para a bandeja perto do relógio do Windows — não fecha.
Clique com o botão direito no ícone azul para:
- Abrir a janela
- Iniciar/Parar automático
- Buscar agora
- Sair completamente
💡 Para iniciar com o Windows: pressione
Win + R, digiteshell:startupe coloque um atalho paraGupyAlert.exenessa pasta.
Se você deseja gerar a versão final distribuível (GupyAlert.app no macOS ou GupyAlert.exe no Windows) a partir do código fonte, incluímos scripts automatizados de um clique:
- Certifique-se de ter o Python instalado no computador.
- Dê dois cliques no arquivo
compilar.batlocalizado na pasta raiz do projeto. - O script irá configurar tudo sozinho: instalará as dependências, executará a compilação e criará a pasta
distcontendo o executável.exepronto para uso.
- Certifique-se de ter o Python instalado.
- Execute o arquivo
compilar.shna pasta raiz do projeto. - O app
.appfinal será criado e colocado na pastadist.
💡 Compilação Automática via GitHub: Se você enviar este código para o seu repositório no GitHub, o fluxo de Actions configurado compilará os executáveis automaticamente e os disponibilizará nos artefatos da aba Actions.
Para adicionar novos estados ou tipos de vaga, edite os dicionários no topo de src/constants.py:
ESTADOS_BR = ["Qualquer Estado", "São Paulo", "Rio de Janeiro", ...]
TIPOS_OPCOES = {"Todos": "", "Efetivo": "vacancy_type_effective", ...}
MODELOS_OPCOES = {"Todos": "", "Remoto": "remote", ...}MIT — veja LICENSE para detalhes.
