Skip to content

daveCode-dot/pulso

Repository files navigation

Pulso

Actualidad de juegos, tech e IA en español, resumida en 3 líneas. Una sola pestaña, sin clickbait.

Live: https://pulso.aegismain.com (también https://pulso-dsk.pages.dev)


Qué hace

Pulso es un agregador independiente de actualidad gaming + tech + IA en español. Toma noticias de 17 fuentes públicas vía RSS, las deduplica con embeddings (la misma noticia en N webs aparece como una entrada con todas las fuentes), las resume con IA en 3 líneas y filtra clickbait. Todo en una sola pestaña, móvil-first, sin login y sin tracking.

Características V1

  • Feed unificado scroll infinito, móvil-first.
  • Resumen IA en 3 líneas por noticia (Llama 3.3 70B Fast vía Cloudflare Workers AI).
  • Detección de duplicados con embeddings BGE (umbral coseno 0.78).
  • Filtro anti-clickbait (oculta clusters con score ≥ 8.5/10).
  • Categorías: Gaming, Tech, IA, Hardware, Dev.
  • Tags (PS5, Xbox, NVIDIA, OpenAI, etc.).
  • Auto-traducción de fuentes en inglés.
  • Tema oscuro / claro auto.
  • "Leer luego" en localStorage (sin cuenta).
  • Buscador full-text (FTS5).
  • Compartir nativo + 👍 útil / 👎 clickbait.
  • Trending hoy (basado en menciones cruzadas en últimas 24h).
  • RSS de salida (/rss.xml, /rss.xml?cat=ia).
  • Sitemap, OG, robots.
  • Panel admin con basic auth (/admin).

Stack

Capa Elección
Frontend Astro 5 + Tailwind 4, output server
Hosting Cloudflare Pages
BD Cloudflare D1 (SQLite, 11 tablas, FTS5 para búsqueda)
Cron + scraping Cloudflare Worker scheduled (cada 30 min)
IA Cloudflare Workers AI · @cf/meta/llama-3.3-70b-instruct-fp8-fast (resumen+traducción+clickbait+tags en una sola llamada) y @cf/baai/bge-base-en-v1.5 (embeddings)
RSS parser fast-xml-parser

Coste mensual real V1: 0 € (todo dentro del free tier de CF).

Arquitectura

┌─────────────────────────────┐
│  Cron Worker (every 30min)  │  pulso-ingest.aegis-pulso.workers.dev
│  - rotation: 4 sources/run  │
│  - 1 IA call per item       │
│  - dedup vs últimas 48h     │
└──────────┬──────────────────┘
           │ writes
           ▼
   ┌───────────────┐
   │  D1 (pulso)   │  clusters · items · sources · votes · scrape_log + FTS5
   └───────┬───────┘
           │ reads
           ▼
┌─────────────────────────────┐
│  Astro app (CF Pages)       │  pulso.aegismain.com
│  - SSR feed con filtros     │
│  - RSS, sitemap, admin      │
│  - APIs vote, cluster       │
└─────────────────────────────┘

Estructura

pulso/
├── PRD.md                     # producto: visión, alcance V1/V2, métricas
├── STATUS.md                  # estado actual + lo que queda
├── astro.config.mjs           # adapter cloudflare server-rendered
├── wrangler.toml              # bindings web (D1 + AI)
├── db/
│   ├── schema.sql             # tablas + índices + FTS5
│   └── seed_sources.sql       # 17 fuentes RSS iniciales
├── src/
│   ├── layouts/Base.astro     # layout con header, theme toggle
│   ├── components/            # Card, FilterBar
│   ├── pages/
│   │   ├── index.astro        # feed
│   │   ├── c/[id].astro       # detalle cluster + fuentes
│   │   ├── leer-luego.astro   # localStorage saved
│   │   ├── sobre.astro
│   │   ├── admin.astro        # basic auth via env ADMIN_PASS
│   │   ├── rss.xml.ts         # RSS general + por categoría
│   │   └── api/
│   │       ├── vote.ts
│   │       └── cluster.ts
│   ├── lib/db.ts              # queries D1
│   ├── styles/global.css      # tailwind 4 + tokens tema
│   └── env.d.ts
└── worker/                    # Worker dedicado al cron de ingesta
    ├── wrangler.toml
    ├── src/
    │   ├── index.ts           # scheduled handler
    │   ├── ingest.ts          # pipeline RSS → IA → D1
    │   ├── rss.ts             # fetch + parse RSS/Atom
    │   └── ai.ts              # analyzeItem (single-call), embed, cosine

Setup local

git clone https://github.com/daveCode-dot/pulso.git
cd pulso
npm install

export CLOUDFLARE_API_TOKEN=...   # token con D1, Pages, Workers
export CLOUDFLARE_ACCOUNT_ID=...

# 1) D1
wrangler d1 create pulso          # poner el id devuelto en wrangler.toml
wrangler d1 execute pulso --remote --file=db/schema.sql
wrangler d1 execute pulso --remote --file=db/seed_sources.sql

# 2) Worker (cron de ingesta)
cd worker && npm install && npx wrangler deploy
cd ..

# 3) Web (Pages)
npm run build
npx wrangler pages deploy dist --project-name pulso --commit-dirty=true

Métricas de éxito (V1)

Ver PRD.md § 8. Resumen:

  • Salud técnica: uptime scraper ≥ 99%, Lighthouse ≥ 95, coste IA < 5 €/mes, dedup ratio > 30%.
  • Uso: visitantes únicos/semana en curva creciente, tiempo medio > 1 min, ratio 👍:👎 > 4:1.
  • Cualitativa: ¿yo mismo la uso por las mañanas?

V2 (no en este release)

Email diario top-5, Web Push, PWA instalable, búsqueda por fecha/fuente, afiliados, cuentas opcionales con sync.

Licencia

MIT.

About

Actualidad de juegos, tech e IA en español, resumida en 3 líneas. Una sola pestaña, sin clickbait.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors