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.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 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.查看完整 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.