{"id":32669014,"url":"https://github.com/mafhper/personalnews","last_synced_at":"2026-05-16T23:17:33.987Z","repository":{"id":321701689,"uuid":"1086843302","full_name":"mafhper/personalnews","owner":"mafhper","description":"A fast, modern personal news aggregator that serves as your browser homepage","archived":false,"fork":false,"pushed_at":"2026-05-08T11:25:10.000Z","size":69217,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-08T11:39:03.615Z","etag":null,"topics":["cors-proxy","feed","rss","typescript"],"latest_commit_sha":null,"homepage":"https://mafhper.github.io/personalnews/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mafhper.png","metadata":{"files":{"readme":"README.es.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-31T01:45:21.000Z","updated_at":"2026-05-08T11:25:13.000Z","dependencies_parsed_at":"2025-10-31T04:10:39.393Z","dependency_job_id":"c282cf40-a0b9-4367-b828-b43282151eef","html_url":"https://github.com/mafhper/personalnews","commit_stats":null,"previous_names":["mafhper/personal-news","mafhper/personalnews"],"tags_count":49,"template":false,"template_full_name":null,"purl":"pkg:github/mafhper/personalnews","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mafhper%2Fpersonalnews","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mafhper%2Fpersonalnews/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mafhper%2Fpersonalnews/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mafhper%2Fpersonalnews/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mafhper","download_url":"https://codeload.github.com/mafhper/personalnews/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mafhper%2Fpersonalnews/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33121925,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-16T18:38:32.183Z","status":"ssl_error","status_checked_at":"2026-05-16T18:38:29.903Z","response_time":115,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cors-proxy","feed","rss","typescript"],"created_at":"2025-11-01T02:01:55.777Z","updated_at":"2026-05-16T23:17:33.975Z","avatar_url":"https://github.com/mafhper.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Personal News\r\n\r\n![Vista previa de la interfaz de Personal News](public/assets/screen.png)\r\n\r\nPersonal 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.\r\n\r\nTambién disponible en [inglés](README.md) y [portugués](README.pt-BR.md).\r\n\r\n## Qué hace la aplicación\r\n\r\n- Agrega feeds RSS, Atom, RDF y YouTube en una sola interfaz.\r\n- Incluye categorías preconfiguradas como Design, Games, Tecnología, Política y Vídeos.\r\n- Permite que cada categoría use un modo visual diferente, como bento, lista, inmersivo y brutalista.\r\n- Usa carga cache-first con revalidación en segundo plano para evitar pantallas vacías durante la navegación.\r\n- Soporta descubrimiento de feeds, gestión de categorías, importación/exportación, favoritos y empaquetado desktop.\r\n\r\n## Aspectos destacados\r\n\r\n### Navegación cache-first\r\n\r\nEl 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.\r\n\r\n### Modelo mixto de contenido\r\n\r\nEl 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.\r\n\r\n### Pipeline de lectura y sanitización\r\n\r\nLa 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.\r\n\r\n## Stack técnica\r\n\r\n- React, TypeScript y Vite en la aplicación principal\r\n- Bun como gestor de paquetes y ejecutor principal de scripts\r\n- Vitest y Playwright para pruebas\r\n- Tauri para empaquetado desktop\r\n- Quality Core para validación y reportes del repositorio\r\n\r\nLas 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.\r\n\r\n## Inicio rápido\r\n\r\n### Requisitos\r\n\r\n- Bun 1.2+\r\n- Node.js 20+ para compatibilidad del ecosistema\r\n\r\n### Ejecutar localmente\r\n\r\n```bash\r\ngit clone https://github.com/mafhper/personalnews.git\r\ncd personalnews\r\nbun install\r\nbun run dev\r\n```\r\n\r\n### Comandos útiles de validación\r\n\r\n```bash\r\nbun run lint\r\nbun run type-check\r\nbun run test\r\nbun run test:all\r\nbun run build\r\n```\r\n\r\n### Stack local con servicios auxiliares\r\n\r\n```bash\r\nbun run dev:local\r\n```\r\n\r\nUse este flujo cuando quiera levantar la app junto con su stack local de apoyo.\r\n\r\n## Estructura del proyecto\r\n\r\n- `components/`: bloques de UI y sistemas de layout.\r\n- `hooks/`: hooks de estado, incluida la carga progresiva del feed.\r\n- `services/`: parsing, caché, importación/exportación y procesamiento de contenido.\r\n- `constants/`: categorías curadas y feeds iniciales.\r\n- `apps/desktop/`: shell de escritorio y empaquetado.\r\n- `docs/`: referencia técnica para contribuidores y evaluadores.\r\n\r\n## Documentación\r\n\r\n- [Visión técnica de la aplicación](docs/technical-overview.md)\r\n- [Guía de scripts de package.json](docs/package-scripts-guia.md)\r\n- [Cómo contribuir](CONTRIBUTING.md)\r\n\r\n## Modelo de release\r\n\r\n- Los pushes a `main` actualizan el deploy de GitHub Pages.\r\n- Las GitHub Releases y los instaladores desktop solo se crean cuando se envía una tag de versión como `vX.Y.Z`.\r\n- 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.\r\n\r\n## Contribución\r\n\r\nLos 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.\r\n\r\n## Licencia\r\n\r\nEste proyecto se distribuye bajo la [Licencia MIT](LICENSE).\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmafhper%2Fpersonalnews","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmafhper%2Fpersonalnews","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmafhper%2Fpersonalnews/lists"}