μ€νμμ€ & μ ν AI λ΄μ€λ₯Ό ν루 2λ²(12μκ° κ°κ²©) μλμΌλ‘ λΈλ¦¬νν΄μ£Όλ PWA μΉ μ± μ€λ§νΈν° ν νλ©΄μ μ€μΉνλ©΄ μ±μ²λΌ μ¬μ©ν μ μμ΄μ.
- 12μκ° μλ λΈλ¦¬ν β νκ΅μκ° λ§€μΌ 09:00 / 21:00μ λ΄μ€ μλ κ°±μ
- AI λ΄μ€ μ λ³ β 7κ° μμ€μμ μμ§ ν, μ€νμμ€/μ νλͺ¨λΈ/μ κ³ ν€μλ μ€μ½μ΄λ§μΌλ‘ μμ 60건 μ 곡
- μΉ΄ν κ³ λ¦¬ ν β μ 체 / μ€νμμ€ π’ / μ νλͺ¨λΈ π / μ κ³ π’
- νκ΅μ΄ λ²μ λ²νΌ β μλ¬Έ λ΄μ€λ₯Ό μν°μΉλ‘ νκ΅μ΄ λ²μ (MyMemory λ¬΄λ£ API)
- μ€νλΌμΈ μ§μ β Service Workerκ° μ΅μ λ΄μ€ μ€λ μ·μ μΊμ
- λ€ν¬λͺ¨λ / λΌμ΄νΈλͺ¨λ β μμ€ν ν λ§ μλ λμ
- μ½μ νμ / κ΄λ ¨λ μ μ / λΉκ²¨μ μλ‘κ³ μΉ¨
GitHub Actions (cron 12h)
β node scripts/fetch-news.mjs
βΌ
public/data/news.json β ββ 컀λ°
β push νΈλ¦¬κ±°
βΌ
GitHub Pages (μλ λ°°ν¬)
β same-origin fetch (CORS μμ)
βΌ
π± PWA (React 19 + Vite 8 + TS)
- λ΄μ€ μμ§:
actions/checkout+setup-node+npm ciνnode scripts/fetch-news.mjs - λ°°ν¬:
actions/deploy-pages(GitHub Pages,/ai-news/κ²½λ‘)
| μμ€ | μ ν | μμ΄μ½ |
|---|---|---|
| Hugging Face Blog | RSS | π€ |
| arXiv cs.AI | RSS | π |
| Hacker News (AI κ²μ) | RSS | π |
| The Decoder | RSS | π |
| Simon Willison's blog | RSS | π§ͺ |
| Google AI Blog | RSS | π¬ |
| GitHub Trending | HTML | β |
npm install
npm run dev # κ°λ° μλ² (http://localhost:5173)
npm run fetch-news # λ΄μ€ μλ μμ§ β public/data/news.json
npm run build # tsc + vite build + μλΉμ€μ컀 μμ±
npm run preview # νλ‘λμ
λΉλ 미리보기- λ°°ν¬λ μ¬μ΄νΈ μ μ (GitHub Pages μ£Όμ)
- λΈλΌμ°μ λ©λ΄ β "ν νλ©΄μ μΆκ°" (iOS: 곡μ β ν νλ©΄μ μΆκ°)
- μ€μΉ μλ£! μ±μ²λΌ μ¬μ©
fetch-news.ymlβ λ§€μΌ UTC 00:00 / 12:00 (= KST 09:00 / 21:00) λ΄μ€ μμ§ ν 컀λ°deploy.ymlβ pushλ§λ€ μλμΌλ‘ Pages λ°°ν¬- μλ μ€ν: Actions ν β fetch-news β Run workflow
ai-news/
βββ .github/workflows/
β βββ fetch-news.yml # 12μκ° λ΄μ€ μμ§ (cron)
β βββ deploy.yml # GitHub Pages λ°°ν¬
βββ scripts/
β βββ sources.json # λ΄μ€ μμ€ μ€μ
β βββ fetch-news.mjs # μμ§κΈ° (RSS + HTML μ€ν¬λ© + μ€μ½μ΄λ§)
β βββ gen-icons.mjs # PWA μμ΄μ½ μμ± (sharp)
β βββ gen-sw.mjs # Service Worker μλ μμ±
βββ public/
β βββ data/news.json # μμ§ κ²°κ³Ό (μ»€λ° λμ)
β βββ icons/ # PWA μμ΄μ½
β βββ manifest.webmanifest
βββ src/
βββ components/ # NewsCard, CategoryTabs, BriefingBadge
βββ hooks/ # useNews, useNow, useArticles
βββ lib/ # newsApi, translate, storage
βββ App.tsx
MIT