new-term-radar
Daily radar for new AI terms: names of new models, products and repos, caught on X, Hugging Face, GitHub and sitemaps before keyword tools list them.
Encontre, qualifique e organize empresas com oportunidade de site profissional.
Translation pending
MarketingTypeScript · PLpgSQLGitHub @CarloshenAssisOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
Aplicacao web para encontrar, qualificar e organizar pequenas empresas com oportunidade de melhoria na presenca digital — especialmente as que nao tem site identificado, mas tem boa reputacao no Google, telefone e movimento comercial. O fluxo completo e: login → prospeccao → qualificacao → base de empresas → lead → WhatsApp → briefing → prompt para o Lovable. A especificacao funcional esta em SPEC.md (v1.0) e SPEC-1.1.md (hardening e validacao real). Juntas, sao a fonte de verdade do projeto.Read the full README ↗
Aplicacao web para encontrar, qualificar e organizar pequenas empresas com oportunidade de melhoria na presenca digital — especialmente as que nao tem site identificado, mas tem boa reputacao no Google, telefone e movimento comercial.
O fluxo completo e: login → prospeccao → qualificacao → base de empresas → lead → WhatsApp → briefing → prompt para o Lovable.
A especificacao funcional esta em SPEC.md (v1.0) e SPEC-1.1.md
(hardening e validacao real). Juntas, sao a fonte de verdade do projeto.
Sem scraping do Google e sem bibliotecas desnecessarias: CSV e XLSX sao gerados por codigo proprio.
npm install
cp .env.example .env.local # preencha as credenciais
npm run dev
A aplicacao sobe em http://localhost:3000. Sem as variaveis do Supabase, qualquer rota redireciona
para /setup, que explica o que falta configurar.
Project URL e a chave anon.database/migrations/ em ordem numerica, do 0001 ao 0007:
0001_init.sql — enums, tabelas, indices de deduplicacao, triggers de updated_at,
criacao automatica de profiles e as policies de RLS;0002_hardening.sql — proveniencia dos dados enriquecidos, estado UNKNOWN de website,
qualidade do perfil Google, acao recomendada, metricas por pesquisa e integridade
reforcada pelo banco (um lead nunca pode apontar para a empresa de outro usuario);0003_google_business_quality.sql — qualidade do perfil comercial como dado proprio;0004_multi_source.sql — identidade neutra por fonte, deduplicacao cross-source e
cache persistente de descoberta (SPEC 1.2);0005_company_source_summary.sql — resumo das fontes por empresa;0006_company_email.sql — e-mail como contato adicional;0007_spec2_commercial_core.sql — SPEC 2.0: campanhas, contatos, evidencia, gaps,
ofertas, qualificacao versionada, e-mail, CRM, jobs e auditoria. Nao remove nem renomeia
nada: empresas e leads existentes continuam funcionando sem nenhuma acao.Todas as tabelas tem user_id e RLS habilitada: cada usuario le e escreve apenas os proprios
registros. A aplicacao nunca usa a service role key para acessar dados de usuario — todo acesso
passa pela sessao autenticada.
GOOGLE_MAPS_API_KEY.A chave e usada somente no servidor (lib/google/places.ts importa server-only). Ela nunca vai
para o bundle do browser.
Controle de custo: cada prospeccao consulta no maximo 3 paginas (60 resultados); empresas ja
conhecidas nao tem a presenca digital reconsultada antes de DIGITAL_PRESENCE_TTL_DAYS (padrao 7);
a deduplicacao evita registros repetidos; e o retry so acontece em erro transitorio, no maximo 2
tentativas com backoff — credencial invalida ou permissao negada nunca sao repetidas.
| Variavel | Obrigatoria | Uso |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL | sim | URL do projeto Supabase |
NEXT_PUBLIC_SUPABASE_ANON_KEY | sim | Chave publica do Supabase |
SUPABASE_SERVICE_ROLE_KEY | nao | Reservada para tarefas administrativas futuras |
GOOGLE_MAPS_API_KEY | sim (para prospectar) | Places API (New) + Geocoding |
GOOGLE_PLACES_REGION_CODE | nao | Padrao BR |
GOOGLE_PLACES_LANGUAGE_CODE | nao | Padrao pt-BR |
DEFAULT_PHONE_COUNTRY_CODE | nao | Padrao 55, usado ao normalizar telefones |
DIGITAL_PRESENCE_TTL_DAYS | nao | Padrao 7. Dias antes de reconsultar a presenca digital |
GOOGLE_CSE_ID | nao | Programmable Search Engine, para achar Instagram de empresa sem site |
GOOGLE_CSE_API_KEY | nao | Chave da Programmable Search JSON API |
Nao ha variaveis de IA: briefing, prompt do Lovable e score sao deterministicos, gerados por codigo. Isso mantem o resultado reproduzivel e evita que a ferramenta invente informacao.
npm run dev # desenvolvimento
npm run build # build de producao
npm start # sobe o build
npm run lint # ESLint
npm run typecheck # tsc --noEmit
npm test # Vitest
# Validacoes contra os servicos reais (SPEC 1.1)
npm run verify:google # busca real na Places API e qualificacao do resultado
npm run verify:supabase # auth + persistencia + deduplicacao + RLS pela API real
npm run verify:ui # fluxo completo pela interface (precisa do app rodando)
# Migracoes num PostgreSQL local, em banco vazio e em banco ja atualizado (SPEC 2.0 §32.4)
PGHOST=... PGPORT=... PGUSER=... ./scripts/verify-migrations.sh
Com o app rodando e autenticado, a pagina /health faz o mesmo diagnostico pela interface:
Supabase, banco, autenticacao, RLS, Places API, descoberta de Instagram e cache — sem exibir
nenhuma chave.
app/api/prospecting/route.ts executa a busca e transmite o progresso em NDJSON, um evento por
linha. A tela mostra as etapas (Localizando regiao..., Consultando Google Places...,
Processando empresas..., Verificando presenca digital..., Calculando oportunidades...,
Salvando resultados...) e a barra de progresso, sem nunca parecer travada.
Pipeline em lib/prospecting/run.ts:
Ao final, o resumo traz numeros reais: encontradas, novas, ja existentes, sem site, qualificadas, excelentes, reaproveitadas do cache e duplicatas criadas.
O site vem do campo websiteUri da propria API. Ha tres estados: HAS_WEBSITE (Site encontrado),
NO_WEBSITE_DETECTED (Site nao identificado) e UNKNOWN (Nao foi possivel verificar). A interface
nunca afirma "a empresa nao tem site": a unica coisa observada e a ausencia do dado na fonte.
Duas fontes, ambas publicas e sem scraping: o link publicado no site oficial e, quando as
variaveis GOOGLE_CSE_* estao configuradas, a Programmable Search JSON API do Google — que
permite achar o perfil de empresas sem site. A busca externa so roda quando o site nao resolve.
A confianca vem de varios sinais combinados (site oficial, nome, cidade, categoria, telefone,
dominio), nunca do nome sozinho, e cada sinal fica registrado como evidencia visivel na ficha.
Candidato sem nenhum sinal e descartado. O resultado fica PENDING ate voce confirmar ou rejeitar,
e sua decisao nunca e sobrescrita por uma prospeccao futura.
Motor deterministico em lib/scoring/, com todos os pesos centralizados em config.ts (nenhum
numero magico espalhado pelo codigo). Cada empresa guarda:
score_breakdown item a item;LOW/MEDIUM/HIGH) — considera completude do cadastro e
volume de avaliacoes, entao 5.0 com 1 avaliacao nao vale o mesmo que 4.8 com 183;CONTACT_NOW, RESEARCH_MORE, LOW_PRIORITY, ALREADY_CONTACTED,
DO_NOT_CONTACT) com o motivo em texto.O bonus extra de Instagram exige confirmacao humana ou confianca muito alta — perfil de baixa confianca nunca infla o score. O score e um indice de oportunidade a partir de sinais observaveis, nao previsao de compra.
Se a verificacao de presenca digital falhar para algumas empresas, a pesquisa e reportada como concluida parcialmente, com a contagem exata. As empresas ficam salvas e a lista mostra um aviso com o botao REPROCESSAR, que refaz apenas o que falhou — sem repetir a busca no Google.
A ficha permite complementar dados manualmente (logo, cores, servicos, cardapio, precos...), sempre
separados dos dados coletados. O briefing lista o que foi identificado, o que esta ausente e o que
precisa ser confirmado. O prompt do Lovable instrui explicitamente a nao inventar dados e usa
[PREENCHER: item] para cada lacuna. Ambos tem botao de copiar com feedback.
npm test
Cobrem as regras criticas: score, classificacao e teto de 100; qualidade do perfil Google; acao recomendada; normalizacao de telefone e link de WhatsApp; mapeamento da resposta do Google; mapeamento de erros da API e regras de retry; cache de presenca digital; chave de deduplicacao; confianca e evidencias do Instagram; briefing e prompt sem invencao de dados, com separacao entre confirmado e pendente; escape de CSV/XLSX; e traducao dos filtros para o banco.
Alem dos testes unitarios, ha tres validacoes contra os servicos reais:
database/tests/rls.sql — isolamento entre dois usuarios em todas as tabelas, executado no
proprio banco, do jeito que o PostgREST avalia (role authenticated + request.jwt.claims);npm run verify:supabase — login, persistencia, deduplicacao e RLS pela API real;npm run verify:ui — o fluxo completo pela interface, incluindo responsividade.Funciona em qualquer plataforma que rode Next.js em Node. Na Vercel:
Rode o script de migracao no Supabase de producao antes do primeiro uso.
app/
(app)/ telas autenticadas: dashboard, prospecting, companies, pipeline, settings
api/ prospeccao (streaming) e exportacao
auth/ server actions de login, cadastro e logout
components/ ui, navegacao, prospeccao, empresas, leads, briefing
lib/
google/ cliente da Places API e normalizacao
instagram/ descoberta com nivel de confianca
scoring/ pesos e motor de score
briefing/ briefing e prompt do Lovable
whatsapp/ normalizacao de telefone, wa.me e acao manual (SPEC 2.0 §22)
export/ CSV e XLSX
prospecting/ orquestracao da busca
supabase/ clientes de browser, servidor e sessao
campaigns/ maquina de estados e orcamento da campanha (SPEC 2.0 §7/§8.5)
gaps/ catalogo de gaps observaveis (SPEC 2.0 §12)
offers/ catalogo de ofertas e recomendacao por gap (SPEC 2.0 §13)
qualification/ score multidimensional versionado (SPEC 2.0 §14)
contacts/ prioridade e agendabilidade de contato (SPEC 2.0 §10)
email/ portao de envio, eventos e supressao (SPEC 2.0 §17/§19/§29.2)
inbox/ classificacao de respostas (SPEC 2.0 §20)
crm/ pipeline comercial (SPEC 2.0 §21)
jobs/ retry, dead-letter e lock (SPEC 2.0 §24)
database/ migracoes SQL com RLS + harness de verificacao local
tests/ testes unitarios
GOOGLE_CSE_*, o Instagram so e descoberto quando a empresa tem site com o link publicado.
Em qualquer caso o campo aceita preenchimento manual.lib/scoring/config.ts. A tela de configuracoes ja mostra os valores vigentes.SPEC-2.0.md §3.wa.me; quem envia e voce. Nao ha envio, agendamento, disparo em lote nem
webhook de WhatsApp, e nenhuma credencial de WhatsApp e necessaria.