프로젝트 소개
GeeksPulse는 약 50개의 선별된 RSS 및 Atom 피드에서 기사를 수집하여 단일의 빠른 인터페이스로 제공하는 오픈소스 개발자 뉴스 애그리게이터입니다. 이 프로젝트는 광고, 페이월, 광고 추적기가 없다고 설명하며, 개인 개발자가 구축하고 유지 관리합니다.
작동 방식
Node.js 빌드 파이프라인(scripts/build-feed.mjs 및 scripts/lib/ 아래 모듈)은 구성된 피드를 가져와 정규화한 다음, 정적 JSON 캐시를 public/에 작성합니다. 프런트엔드는 순수 HTML, CSS, 바닐라 JavaScript ES 모듈로 구성되어 있어, 애플리케이션 서버 없이 정적 파일로 제공될 수 있습니다. GitHub Actions 워크플로는 예약된 일정(30분마다로 문서화됨)에 따라 피드 빌드를 실행하여 캐시를 최신 상태로 유지합니다. 사전 빌드된 피드 파일이 없거나 비어 있으면, 앱은 CORS 프록시를 통해 브라우저에서 직접 피드를 가져오는 방식으로 대체합니다. README는 이를 정상 로드 경로가 아닌 비상 경로로 설명합니다.
콘텐츠 및 카테고리
피드는 data/feeds.json에 나열되며 11개 카테고리로 그룹화됩니다: 일반, 보안, AI/ML, Python, JavaScript, Java, DevOps, 오픈소스, Rust, Go, 아키텍처. 명명된 소스로는 Hacker News, Lobsters, Ars Technica, The Register, IEEE Spectrum, Krebs on Security, Bleeping Computer, Google AI Blog, Planet Python, JavaScript Weekly, Docker 및 Kubernetes 블로그, LWN.net, Rust Blog, Go Blog, Martin Fowler, Netflix Tech Blog, Cloudflare Blog 등이 있습니다. 피드를 추가하려면 data/feeds.json을 편집하고 캐시를 재생성해야 합니다.
기능
- 그리드 및 목록 레이아웃, 기본 설정은 localStorage에 저장
- 1분에서 1시간까지 구성 가능한 자동 새로고침 간격
- 사전 캐시된 스니펫 또는 로컬 Ollama 대체를 사용한 주문형 AI 요약
- 로컬에 저장된 북마크 및 카드의 예상 읽기 시간
- 키보드 단축키: / 검색, j/k 탐색, o 열기, r 새로고침, Esc 지우기
- 마지막 업데이트 시간 및 온라인/실패 피드 수를 보여주는 피드 상태 패널
- 스켈레톤 로더, 클립보드 대체 기능이 있는 Web Share API를 통한 공유
- 접근성 작업: ARIA 역할 및 레이블, 키보드 탐색, prefers-reduced-motion 지원
- 네온 액센트, 글리치 및 스캔라인 애니메이션이 있는 사이버펑크 다크 테마
빌드 출력에는 public/feed.json(최대 300개의 중복 제거된 기사, 최신순 정렬), public/feed-health.json, public/version.json, 홈페이지만의 sitemap.xml, index.html에 주입된 SEO 대체 기사가 포함됩니다.
테스트 및 도구
저장소는 계층적 테스트 스위트를 문서화합니다: Vitest 단위, 통합 및 DOM 테스트(171개 테스트로 보고) 및 Chromium에 대한 Playwright 엔드투엔드 스모크 테스트(10개 테스트), 브라우저 측 테스트용 happy-dom 및 V8 커버리지 임계값 포함. CI 파이프라인은 먼저 테스트를 실행한 다음 빌드 및 배포 작업, 엔드투엔드 테스트를 실행합니다. 실패한 단위 또는 통합 테스트는 파이프라인을 차단합니다. 개발은 Vite 6을 개발 서버 및 프로덕션 번들러로 사용하며, fast-xml-parser 및 ollama를 빌드 타임 종속성으로 사용합니다.
개인정보 보호 및 지원
README는 사이트가 기본 트래픽 통찰력을 위해 Google Analytics를 사용하지만 광고 추적기는 없으며, 사용자 데이터를 판매하거나 광고를 개인화하지 않는다고 명시합니다. 프로젝트는 이슈 및 풀 리퀘스트를 통한 기여를 수락하며, 선택적 PayPal 지원 링크를 제공합니다.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.