Skip to content

p-changki/Tech-Radar

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

8 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Tech Radar (Local-first Develope

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2026-02-02 06 44 34 r Update Inbox)

CI License: MIT

Replace <OWNER>/<REPO> with your GitHub repo path after publishing.

Badge update quick steps

  • git remote add origin <REPO_URL>
  • pnpm badges:update
  • git push -u origin main

๐Ÿ‡บ๐Ÿ‡ธ Quick Overview (English)

Tech Radar is a local-first Developer Update Inbox for RSS/Atom sources. It fetches updates on demand into an Inbox, lets you select & save only what matters into Posts, and keeps everything in your local database (no full-article republishing).

Why?

  • Staying on top of tech changes daily is hard.
  • Generic RSS readers focus on consumption, not decision-making (security/breaking/deprecation).
  • You want your saved history to stay local (privacy-first).

Core workflow

  1. /presets โ†’ load/import sources
  2. /fetch โ†’ run fetch โ†’ review Inbox
  3. select & save โ†’ /posts โ†’ build your personal knowledge base

Quickstart (Docker Postgres)

pnpm -w db:up
cp .env.example .env
pnpm install
pnpm -w db:generate
# (optional, with approval) pnpm -w db:migrate
pnpm -w dev

๐Ÿ‡ฐ๐Ÿ‡ท ์†Œ๊ฐœ (Korean)

Tech Radar๋Š” Local-first Developer Update Inbox์ž…๋‹ˆ๋‹ค. RSS/Atom ๊ธฐ๋ฐ˜ ๋‰ด์ŠคยทํšŒ์‚ฌ ํ…Œํฌ๋ธ”๋กœ๊ทธยท๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ๋ฅผ ์š”์ฒญ ์‹œ์ ์— ์ˆ˜์ง‘(Inbox) ํ•˜๊ณ , ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ์„ ๋ณ„ ์ €์žฅ(Posts) ํ•˜๋ฉฐ, ๋ฌด๋ฃŒ ์š”์•ฝ(Signals/ContentType) ์œผ๋กœ ์žฌํƒ์ƒ‰ ๊ฐ€๋Šฅํ•œ ๊ฐœ์ธ์šฉ ๋ณด๋“œ์ž…๋‹ˆ๋‹ค.

ํ•ต์‹ฌ๋งŒ 10์ดˆ ์š”์•ฝ

  • โœ… Run-on-demand: ์ž๋™ ํฌ๋ก ์ด ์•„๋‹ˆ๋ผ โ€œํ•„์š”ํ•  ๋•Œ๋งŒ ์ˆ˜์ง‘โ€
  • โœ… Select & Save: Inbox์—์„œ ๊ณ ๋ฅธ ๊ฒƒ๋งŒ Posts์— ์ €์žฅ
  • โœ… Local-first: ๋ฐ์ดํ„ฐ๋Š” ๋กœ์ปฌ DB์—๋งŒ(์›๋ฌธ ์ „๋ฌธ ์ €์žฅ X)
  • โœ… ์šด์˜ ์•ˆ์ •์„ฑ ๋‚ด์žฅ: ์บ์‹œ/๋™์‹œ์„ฑ/cleanup๋กœ ์†Œ์Šค๊ฐ€ ๋งŽ์•„๋„ ์•ˆ์ •์ ์œผ๋กœ

1. Why (์™œ ํ•„์š”ํ•œ๊ฐ€?)

  • ๋งค์ผ ์ตœ์‹  ๊ธฐ์ˆ  ๋ณ€ํ™”๋ฅผ ์ง์ ‘ ์ฐพ์•„๋ณด๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.
  • ์ผ๋ฐ˜ RSS ๋ฆฌ๋”๋Š” โ€œ์ฝ๊ธฐโ€ ์ค‘์‹ฌ์ด๋ผ ์„ ๋ณ„ ์ €์žฅ / ์—…๋ฐ์ดํŠธ ์˜์‚ฌ๊ฒฐ์ • / ์žฌ๊ฒ€์ƒ‰์— ์•ฝํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋‹จ์ˆœ ๋‰ด์Šค๊ฐ€ ์•„๋‹ˆ๋ผ security(CVE) / breaking change / deprecated ๊ฐ™์€ ์ฆ‰์‹œ ๋Œ€์‘ ์‹ ํ˜ธ์ž…๋‹ˆ๋‹ค.
  • ๋‚ด ๋ฐ์ดํ„ฐ(๋ฌด์—‡์„ ์ฝ๊ณ  ์ €์žฅํ–ˆ๋Š”์ง€)๋ฅผ ์™ธ๋ถ€ SaaS๊ฐ€ ์•„๋‹ˆ๋ผ ๋‚ด ๋กœ์ปฌ DB์—๋งŒ ๋‚จ๊ธฐ๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

2. Core Workflow (3 steps)

  1. /presets: ์˜ˆ์ œ ํ”„๋ฆฌ์…‹์„ ๋ถˆ๋Ÿฌ์˜ค๊ฑฐ๋‚˜ Import
  2. /fetch: ์ˆ˜์ง‘ ์‹คํ–‰ โ†’ Inbox ํ™•์ธ
  3. ์„ ํƒ & ์ €์žฅ โ†’ /posts: ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ๋ณด๊ด€/์žฌํƒ์ƒ‰

Inbox๋Š” โ€œ๊ฒ€ํ†  ํโ€, Posts๋Š” โ€œ์„ ๋ณ„ ์ €์žฅ๋œ ์ง€์‹ DBโ€์ž…๋‹ˆ๋‹ค.


3. Key Features

3-1) Categories & Auto Classification

  • ์นดํ…Œ๊ณ ๋ฆฌ: AI / FE / BE / DEVOPS / DATA / SECURITY / OTHER
  • RSS ์นดํ…Œ๊ณ ๋ฆฌ/ํƒœ๊ทธ + ํ‚ค์›Œ๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž๋™ ๋ถ„๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค.

3-2) Presets & Sources

  • ์†Œ์Šค๋ฅผ ์นดํ…Œ๊ณ ๋ฆฌ/์–ธ์–ด๋กœ ๊ทธ๋ฃนํ™”ํ•ด โ€œ์„ ํƒ ์ˆ˜์ง‘โ€ํ•ฉ๋‹ˆ๋‹ค.
  • ์†Œ์Šค๋Š” ๋งŽ์ด ๋“ฑ๋กํ•ด๋„ ๊ดœ์ฐฎ๊ณ , ์‹ค์ œ Fetch๋Š” ์„ ํƒ๋œ ํ”„๋ฆฌ์…‹/์†Œ์Šค๋งŒ ๋Œ€์ƒ์œผ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

3-3) Import/Export (์ด์‹์„ฑ)

  • Preset JSON import/export: ํ”„๋ฆฌ์…‹ ๊ณต์œ /๋ณต์ œ
  • OPML import/export: ๊ธฐ์กด RSS ๋ฆฌ๋” ๊ตฌ๋… ๋ชฉ๋ก ์ด์‹

3-4) Free Summaries (LLM ์—†์ด)

  • signals: security / breaking / deprecation / release / perf ๋“ฑ ์ž๋™ ํƒœ๊น…
  • contentType: NEWS / COMPANY_BLOG / RELEASE_NOTE / OTHER
  • ํƒ€์ž…๋ณ„๋กœ ์š”์•ฝ ํฌ๋งท์„ ๋‹ฌ๋ฆฌํ•ด โ€œ์ฝ์ž๋งˆ์ž ํŒ๋‹จโ€์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

3-5) Stability & Performance (๋กœ์ปฌ ์šด์˜ ๋‚ด์žฅ)

  • ETag/Last-Modified(304 ์บ์‹œ)๋กœ ๋ณ€๊ฒฝ ์—†๋Š” ์†Œ์Šค๋Š” ๋น ๋ฅด๊ฒŒ ์Šคํ‚ต
  • ๊ธ€๋กœ๋ฒŒ ๋™์‹œ์„ฑ + ๋„๋ฉ”์ธ ๋™์‹œ์„ฑ + Adaptive throttling
  • ์†Œ์Šค๋ณ„ ์ตœ๋Œ€ 50๊ฐœ ํŒŒ์‹ฑ ํ›„ โ†’ ๊ธฐ๊ฐ„ ํ•„ํ„ฐ ์ ์šฉ(๊ธฐ๋ณธ 14์ผ)
  • cleanup: Inbox 7์ผ ์‚ญ์ œ, FetchRun 100๊ฐœ ์œ ์ง€

3-6) HTML fallback (Optional)

RSS๊ฐ€ ์—†๊ฑฐ๋‚˜ ํ”ผ๋“œ ํŒŒ์‹ฑ์ด ์‹คํŒจํ•˜๋Š” ๊ฒฝ์šฐ, (์„ ํƒ์ ์œผ๋กœ) HTML ๋ชฉ๋ก ํŽ˜์ด์ง€๋ฅผ ํŒŒ์‹ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ธฐ๋ณธ: RSS/Atom ์šฐ์„ 
  • ์˜ต์…˜: HTML fallback ์‚ฌ์šฉ ์‹œ ๋ชฉ๋ก ํŽ˜์ด์ง€๋ฅผ ํŒŒ์‹ฑํ•˜๊ณ  ํŽ˜์ด์ง€๋„ค์ด์…˜์„ ์ œํ•œ์ ์œผ๋กœ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค(๊ธฐ๋ณธ 3ํŽ˜์ด์ง€)

HTML fallback์€ ์‚ฌ์ดํŠธ ๊ตฌ์กฐ ๋ณ€๊ฒฝ/์ฐจ๋‹จ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์–ด ๋ณด์กฐ ์˜ต์…˜์œผ๋กœ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

3-7) Local-first Data Policy

  • ๋ฐ์ดํ„ฐ๋Š” ๋กœ์ปฌ DB์—๋งŒ ์ €์žฅ
  • ์›๋ฌธ HTML์€ ๊ธฐ๋ณธ ์ €์žฅํ•˜์ง€ ์•Š์Œ
  • ์ €์žฅ ์‹œ ๋งํฌ + ์Šค๋‹ˆํŽซ + ์š”์•ฝ + ๋ฉ”๋ชจ ์ค‘์‹ฌ์œผ๋กœ ๊ฐ€๋ณ๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ๋ณด๊ด€

3-8) Usage & Source Policy (Important)

Tech Radar๋Š” ๊ณต๊ฐœ RSS/Atom ํ”ผ๋“œ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•ด ๊ฐœ์ธ ๋กœ์ปฌ ๋ณด๋“œ์—์„œ ํ™•์ธํ•˜๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์›๋ฌธ์„ ๋Œ€์ฒดํ•˜๊ฑฐ๋‚˜ ์žฌ๋ฐฐํฌํ•˜๋Š” ๋ชฉ์ ์ด ์•„๋‹ˆ๋ผ, ์„ ๋ณ„ยท์ •๋ฆฌยท์žฌํƒ์ƒ‰(Research Inbox) ์šฉ๋„๋กœ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ์ˆ˜์ง‘ ๋ฒ”์œ„: ์ œ๋ชฉ/๋งํฌ/๋ฐœํ–‰์ผ/์งง์€ ์Šค๋‹ˆํŽซ ์ค‘์‹ฌ
  • ์›๋ฌธ ์ „๋ฌธ ์ €์žฅ/์žฌ๋ฐฐํฌ๋ฅผ ๋ชฉํ‘œ๋กœ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ToS/robots ์ •์ฑ…์„ ์กด์ค‘ํ•˜๋ฉฐ, paywall/์ ‘๊ทผ ์ œํ•œ ์šฐํšŒ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”.

This project is intended for personal/local use. It does not republish full articles and links back to original sources.


4. Quickstart (Docker Postgres) โ€” Recommended

ํ•„์ˆ˜: Docker Desktop, Node.js >= 20.19, pnpm

  1. DB ์‹คํ–‰
pnpm -w db:up
  1. ํ™˜๊ฒฝ๋ณ€์ˆ˜
cp .env.example .env

์˜ˆ์‹œ(Docker ํฌํŠธ 54321):

DATABASE_URL="postgresql://techradar:techradar@localhost:54321/tech_radar"
  1. ์„ค์น˜/์ค€๋น„
pnpm install
pnpm -w db:generate
# ํ•„์š” ์‹œ(์‚ฌ์šฉ์ž ์Šน์ธ ํ›„) pnpm -w db:migrate
  1. ์‹คํ–‰
pnpm -w dev

์ ‘์†


5. Quickstart (Existing Postgres) โ€” Alternative

Docker ์—†์ด ๋กœ์ปฌ Postgres๊ฐ€ ์žˆ๋‹ค๋ฉด .env์˜ DATABASE_URL๋งŒ ๋กœ์ปฌ DB๋กœ ์ง€์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

pnpm install
pnpm -w db:generate
# ํ•„์š” ์‹œ(์‚ฌ์šฉ์ž ์Šน์ธ ํ›„) pnpm -w db:migrate
pnpm -w dev

6. Quick sanity check (3 steps)

  1. DB ์ค€๋น„
  • Docker: pnpm -w db:up
  • ๊ธฐ์กด Postgres: .env์˜ DATABASE_URL ํ™•์ธ
  1. ์•ฑ ์‹คํ–‰
  • pnpm -w dev
  1. ๋™์ž‘ ํ™•์ธ
  • /presets โ†’ ์˜ˆ์ œ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ (Woowahan Tech)
  • /fetch โ†’ ์ˆ˜์ง‘ ์‹คํ–‰ โ†’ Inbox ์•„์ดํ…œ ํ™•์ธ
  • 1~2๊ฐœ ์„ ํƒ ์ €์žฅ โ†’ /posts์—์„œ ํ™•์ธ

API health check:

curl http://localhost:4002/health

7. Presets: Example / Import / Export

์ด ๋ ˆํฌ๋Š” ๋‹จ์ผ ์˜ˆ์ œ preset๋งŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • repo: examples/presets/woowahan.json
  • web ์ •์ : apps/web/public/examples/presets/woowahan.json

์˜ˆ์ œ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ:

  • /presets โ†’ ์˜ˆ์ œ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ (Woowahan Tech)

๋‚˜๋งŒ์˜ ์†Œ์Šค ์ถ”๊ฐ€:

  • /sources์—์„œ ์ง์ ‘ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜,
  • Preset JSON/OPML๋กœ import ํ•˜์„ธ์š”.

Preset JSON Export:

  • UI: /presets โ†’ Export JSON
  • API:
    • GET /v1/presets/:id/export?format=json

Preset JSON Import:

  • UI: /presets โ†’ Import
  • API:
    • POST /v1/presets/import

8. Configuration

.env.example ์ฃผ์š” ์„ค์ •:

  • LOOKBACK_DAYS (default 14, UI์—์„œ 1/7/30/180์ผ ์„ ํƒ ์‹œ ๋ฎ์–ด์”€)
  • MAX_ITEMS_PER_SOURCE (default 50)
  • FETCH_CONCURRENCY (default 6)
  • FETCH_DOMAIN_CONCURRENCY (default 2)

HTML fallback:

  • HTML_FALLBACK_ENABLED (default true)
  • HTML_FALLBACK_MAX_PAGES (default 3)

์ •๋ฆฌ ์ •์ฑ…:

  • CLEANUP_INBOX_DAYS (default 7)
  • CLEANUP_RUN_KEEP (default 100)

9. Verification (Pre-PR)

pnpm -w verify

๋˜๋Š”(๊ฐœ๋ณ„ ์‹คํ–‰):

pnpm -w type-check
pnpm -w lint
pnpm -w db:generate
pnpm --filter @tech-radar/summarizer test

db:migrate๋Š” ์ž๋™ ์‹คํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (ํ•„์š” ์‹œ ์‚ฌ์šฉ์ž ์Šน์ธ ํ›„ ์‹คํ–‰)


10. Troubleshooting

/fetch ๊ฒฐ๊ณผ๊ฐ€ 0๊ฐœ์ผ ๋•Œ

  • ๊ธฐ๊ฐ„ ๋‚ด ๊ธ€์ด ๋ถ€์กฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค โ†’ ๊ธฐ๊ฐ„์„ 30/180์ผ๋กœ ๋Š˜๋ ค๋ณด์„ธ์š”.
  • ์ค‘๋ณต ์ œ๊ฑฐ/์ด์ „์— ๋ณธ ๊ธ€ ์ œ์™ธ ์˜ต์…˜ ๋•Œ๋ฌธ์— ์ค„์–ด๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์†Œ์Šค ์‹คํŒจ(403/429/timeout)์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค โ†’ /sources์—์„œ ์‹คํŒจ ์†Œ์Šค ํ™•์ธ/๋น„ํ™œ์„ฑํ™”
  • ์ผ๋ฐ˜ URL์€ RSS๊ฐ€ ์—†์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค โ†’ HTML fallback ์˜ต์…˜์ด ์ผœ์ ธ ์žˆ์–ด์•ผ ๋ชฉ๋ก ํŒŒ์‹ฑ์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.

DB ์—ฐ๊ฒฐ ์˜ค๋ฅ˜

  • docker compose ps์—์„œ DB๊ฐ€ healthy์ธ์ง€ ํ™•์ธ
  • .env์˜ DATABASE_URL ํฌํŠธ(54321) ํ™•์ธ

run์ด ๋๋‚˜์ง€ ์•Š์Œ

  • worker๊ฐ€ ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธ (pnpm -w dev์— ํฌํ•จ)

11. License / Contributing

  • MIT License: LICENSE
  • preset ๊ณต์œ  PR(์˜ˆ: examples/presets/์— ์ƒˆ๋กœ์šด preset ์ถ”๊ฐ€)์€ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ์—ฌ ๊ฐ€์ด๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด CONTRIBUTING.md๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

About

Local-first developer update inbox (RSS/Atom) with presets, signals, and on-demand fetch.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors