dumbtv
dumbtv가 ADB로 Fire TV에서 광고·추적·업데이트 알림을 제거, 루트·앱 변경 없이, 무료 오픈소스
결제·정보 제공 전 메시지·링크·스크린샷을 확인, 산타페(보고타) 상인용 무료 봇
Verifica mensajes, links y capturas sospechosas antes de pagar o dar datos. Bot gratuito para comerciantes de la localidad de Santa Fe, Bogotá.
보안TypeScript · CSSGitHub @Santiago25-lab온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Bot anti-phishing para comerciantes de la localidad de Santa Fe (Bogotá). Es el componente digital del proyecto Escuela Móvil Anti-Phishing + Bot Verifica Santa Fe.
Un mismo motor de análisis atiende:
| Parte | Ruta | Qué hace |
|---|---|---|
| Bot de WhatsApp | /api/whatsapp | Recibe mensajes, links y capturas reenviados y responde con semáforo, simulacros y triage |
| Bot de Telegram | /api/telegram | El mismo bot en Telegram (botones, capturas y comandos /verificar, /simulacro, /ayuda) |
| Inicio | / | Tres acciones grandes (revisar, practicar, ya caí), ejemplos con un toque y el semáforo explicado |
| Bot web | /verificar | El mismo bot dentro de la página (/verificar?m=texto lo envía solo) |
| Ayuda urgente | /ayuda | Botones para llamar al 165 y al 123, pasos por caso y alerta vecinal para copiar |
| Simulador de casos | /simulador | Mensajes ficticios para revisar con el kit de 5 puntos (remitente, URL, urgencia, adjunto, ortografía); links trampa sin funcionar y cierre explicativo |
| Modo taller | /taller | Código por participante (T1-P01), consentimiento, lista de observación imprimible (/taller/observacion) y consentimiento (/taller/consentimiento) |
| Kit para la caja | /kit | Sticker imprimible con los 5 puntos y QR |
| Aula virtual | /aula | Pruebas de entrada y salida, prácticas y encuesta, sin registro |
| Afiche con QR | /afiche | Afiche imprimible para la Escuela Móvil |
| Panel del equipo | /admin | Listas, palabras clave, contactos, simulacros, aula e indicadores |
| Aviso de privacidad | /privacidad | Ley 1581 de 2012 |
dian-col.com vs dian.gov.co, bancolonbia.com), entidades públicas sin .gov.co,
links acortados (se siguen las redirecciones sin abrir la página), remitentes no
oficiales, pedidos de claves o pagos, urgencia artificial y comprobantes de pago.
Puntaje: ≥ 4 = 🔴 Peligroso, 2–3 = 🟡 Sospechoso, 0–1 = 🟢 Sin señales evidentes.Además: la regla pide_codigo marca 🔴 cualquier pedido de un código, clave o PIN; se detectan
ganchos típicos (premios, "cambié de número", empleos y préstamos falsos, QR nuevos); cada
veredicto trae un consejo 💡 para aprender la señal; y el bot entiende "gracias", "¿qué hago?",
"¿qué es phishing?" y "cómo denuncio".
Direcciones desconocidas: además de comparar con los links oficiales y las páginas falsas, se revisan rasgos que un sitio oficial casi nunca tiene: letras disfrazadas (xn--), terminaciones baratas (.xyz, .online…), muchos guiones, números mezclados con el nombre, palabras para dar confianza ("seguro", "pago", "verifica") y direcciones demasiado largas.
Faltas de ortografía: antes de aplicar las reglas, src/lib/typos.ts corrige "a oído" cada
palabra hacia un vocabulario de palabras importantes (v/b, s/z/c, ll/y, h muda, c/k/qu, g/j) y
tolera letras de más o de menos y teclas vecinas. Así "conpartenos el codijo", "grasias" o
"phisibg" se entienden, sin tocar links ni números y sin cambiar palabras comunes
("encargo" no se vuelve "embargo").
Límites de la IA: solo analiza mensajes recibidos (a una pregunta general responde que no es un mensaje), trata el texto como dato y nunca como orden, no recibe textos que intentan manipularla, su explicación se limpia (sin links ni teléfonos, máx. 2 frases) y nunca puede bajar un veredicto.
Antes y después: el panel compara la prueba de entrada (prueba-de-entrada) con la de salida
(prueba-de-salida) de cada ID anónimo para medir la capacidad de reconocer señales.
Después de un 🔴 o 🟡 el bot pregunta si la persona ya actuó y la deriva (banco, línea 165, CAI Virtual, 123) con una alerta lista para reenviar al frente de seguridad de la cuadra.
WA-…, HMAC-SHA256 con
ANON_ID_SECRET); el usuario de Telegram, en TG-…. En la web el navegador recibe un ID aleatorio (WEB-…) en una cookie.Next.js 16 (React, TypeScript, Tailwind) · Supabase (PostgreSQL) · WhatsApp Cloud API · Gemini API · Google Safe Browsing · Tesseract.js · Vitest. Todo cabe en capas gratuitas.
Requisitos: Node.js 20 o superior.
npm install
cp .env.example .env.local # opcional; pon al menos ADMIN_PASSWORD
npm run dev
Abre http://localhost:3000. Sin Supabase configurado, los datos se guardan en memoria y se borran al reiniciar: sirve para probar, no para el piloto.
npm test # pruebas del motor de análisis
npm run lint
npm run build
supabase/schema.sql
y dale Run.SUPABASE_URL) y la llave
service_role (SUPABASE_SERVICE_ROLE_KEY). Esta llave es secreta: solo va en Vercel.La primera vez que la app arranque cargará sola la lista blanca, las palabras clave, los contactos, los simulacros y las pruebas del aula.
.env.example (mínimo:
ADMIN_PASSWORD, ANON_ID_SECRET, SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY,
NEXT_PUBLIC_SITE_URL).https://<tu-proyecto>.vercel.app/admin con tu contraseña: los avisos
de colores muestran qué falta configurar.
ANON_ID_SECRET: genera un texto largo (por ejemplo conopenssl rand -hex 32) y no lo cambies después de lanzar, o los IDs anónimos de WhatsApp cambiarán.
GEMINI_API_KEY.SAFE_BROWSING_API_KEY.Sin estas llaves el bot funciona igual, solo con reglas.
/newbot → nombre Verifica Santa Fe → usuario terminado
en bot (ej. VerificaSantaFeBot). Te da un token.TELEGRAM_BOT_TOKEN (el token) y NEXT_PUBLIC_TELEGRAM_BOT (el usuario sin
"@") y vuelve a desplegar./admin y toca Conectar Telegram. Listo: escríbele /start al bot.La página de inicio y el afiche muestran el botón y el QR de Telegram automáticamente.
Si la base de datos se creó antes de agregar Telegram, vuelve a correr supabase/schema.sql
(es seguro: no borra datos) para que se guarden las métricas de este canal.
Fase 1 – número de prueba (ya puedes hacerla):
WHATSAPP_PHONE_NUMBER_ID) y el token temporal (WHATSAPP_TOKEN). Agrega tu celular en
la lista de destinatarios permitidos (hasta 5).WHATSAPP_APP_SECRET).WHATSAPP_VERIFY_TOKEN. Pon todas estas variables en Vercel y
vuelve a desplegar.https://<tu-proyecto>.vercel.app/api/whatsappWHATSAPP_VERIFY_TOKENFase 2 – conectar la SIM propia:
WHATSAPP_PHONE_NUMBER_ID por el ID del número nuevo.whatsapp_business_messaging y
whatsapp_business_management) y ponlo en WHATSAPP_TOKEN.NEXT_PUBLIC_WHATSAPP_NUMBER (ej. 573001234567) para que aparezca el
botón de WhatsApp en la página, y vuelve a desplegar.El código no cambia entre las dos fases.
/admin (contraseña ADMIN_PASSWORD):
Los cambios aplican al bot de WhatsApp, al bot web y al aula en menos de 30 segundos.
src/
app/ páginas y rutas de la API
api/whatsapp/ webhook de Meta
api/chat/ bot web
api/aula/ aula virtual
api/admin/ panel (sesión, CRUD, indicadores, CSV)
components/ chat, aula y panel
lib/
engine/ motor: extracción, dominios, reglas, OCR, IA, anonimizador
bot/ conversación (igual para WhatsApp y web)
data/ datos iniciales y almacenamiento (Supabase o memoria)
supabase/schema.sql tablas de la base de datos