https://github.com/mafhper/personalnews
A fast, modern personal news aggregator that serves as your browser homepage
https://github.com/mafhper/personalnews
cors-proxy feed rss typescript
Last synced: 23 days ago
JSON representation
A fast, modern personal news aggregator that serves as your browser homepage
- Host: GitHub
- URL: https://github.com/mafhper/personalnews
- Owner: mafhper
- License: mit
- Created: 2025-10-31T01:45:21.000Z (7 months ago)
- Default Branch: main
- Last Pushed: 2026-05-08T11:25:10.000Z (about 1 month ago)
- Last Synced: 2026-05-08T11:39:03.615Z (about 1 month ago)
- Topics: cors-proxy, feed, rss, typescript
- Language: TypeScript
- Homepage: https://mafhper.github.io/personalnews/
- Size: 66 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.es.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# Personal News

Personal News es un lector de feeds pensado para funcionar como página de inicio personal en la web y también como aplicación de escritorio. Combina categorías curadas, diseños por tipo de contenido, parsing resistente y navegación cache-first para mantener contenido visible mientras la actualización ocurre en segundo plano.
También disponible en [inglés](README.md) y [portugués](README.pt-BR.md).
## Qué hace la aplicación
- Agrega feeds RSS, Atom, RDF y YouTube en una sola interfaz.
- Incluye categorías preconfiguradas como Design, Games, Tecnología, Política y Vídeos.
- Permite que cada categoría use un modo visual diferente, como bento, lista, inmersivo y brutalista.
- Usa carga cache-first con revalidación en segundo plano para evitar pantallas vacías durante la navegación.
- Soporta descubrimiento de feeds, gestión de categorías, importación/exportación, favoritos y empaquetado desktop.
## Aspectos destacados
### Navegación cache-first
El feed prioriza contenido ya almacenado localmente y actualiza los datos de red en segundo plano. Esto hace que el cambio de categorías se sienta más rápido y reduce la percepción de espera en catálogos amplios.
### Modelo mixto de contenido
El catálogo predeterminado combina feeds tradicionales de noticias con canales de YouTube. Las categorías centradas en vídeo pueden usar un sistema visual específico sin contaminar el resto de la interfaz.
### Pipeline de lectura y sanitización
La aplicación normaliza datos de fuentes externas, extrae metadatos útiles de los artículos y sanitiza el contenido antes de renderizarlo. La idea es mantener la legibilidad sin confiar ciegamente en el marcado de terceros.
## Stack técnica
- React, TypeScript y Vite en la aplicación principal
- Bun como gestor de paquetes y ejecutor principal de scripts
- Vitest y Playwright para pruebas
- Tauri para empaquetado desktop
- Quality Core para validación y reportes del repositorio
Las versiones exactas de herramientas y bibliotecas viven en `package.json` y en los metadatos de la app desktop, para que este README se mantenga centrado en el comportamiento estable del proyecto.
## Inicio rápido
### Requisitos
- Bun 1.2+
- Node.js 20+ para compatibilidad del ecosistema
### Ejecutar localmente
```bash
git clone https://github.com/mafhper/personalnews.git
cd personalnews
bun install
bun run dev
```
### Comandos útiles de validación
```bash
bun run lint
bun run type-check
bun run test
bun run test:all
bun run build
```
### Stack local con servicios auxiliares
```bash
bun run dev:local
```
Use este flujo cuando quiera levantar la app junto con su stack local de apoyo.
## Estructura del proyecto
- `components/`: bloques de UI y sistemas de layout.
- `hooks/`: hooks de estado, incluida la carga progresiva del feed.
- `services/`: parsing, caché, importación/exportación y procesamiento de contenido.
- `constants/`: categorías curadas y feeds iniciales.
- `apps/desktop/`: shell de escritorio y empaquetado.
- `docs/`: referencia técnica para contribuidores y evaluadores.
## Documentación
- [Visión técnica de la aplicación](docs/technical-overview.md)
- [Guía de scripts de package.json](docs/package-scripts-guia.md)
- [Cómo contribuir](CONTRIBUTING.md)
## Modelo de release
- Los pushes a `main` actualizan el deploy de GitHub Pages.
- Las GitHub Releases y los instaladores desktop solo se crean cuando se envía una tag de versión como `vX.Y.Z`.
- Si haces bump de versión de la aplicación, mantén alineados la versión del paquete raíz y los metadatos desktop antes de enviar la tag `v*` correspondiente.
## Contribución
Los issues y pull requests son bienvenidos. Si vas a contribuir con código, empieza por [CONTRIBUTING.md](CONTRIBUTING.md) y ejecuta los comandos de validación antes de abrir un PR.
## Licencia
Este proyecto se distribuye bajo la [Licencia MIT](LICENSE).