Cloudflare Workers 기반 읽기 목록 관리 시스템. URL을 저장하고 Safari Reader 스타일로 깔끔하게 읽을 수 있습니다.
- URL 저장: 웹 페이지 URL을 저장하고 자동으로 본문 추출
- 읽기 모드: Safari Reader 스타일의 깔끔한 읽기 화면
- 읽음/안읽음 관리: 읽은 글과 안 읽은 글 구분
- 다크 모드: 시스템 설정에 따라 자동 전환
- 반응형 디자인: 모바일, 태블릿, 데스크톱 모두 지원
- Runtime: Cloudflare Workers
- Database: D1 (SQLite)
- Content Extraction: @mozilla/readability + linkedom
- Auto Deploy: GitHub → Cloudflare Workers
# D1 데이터베이스 생성
wrangler d1 create reader
# 출력된 database_id를 wrangler.toml에 복사
# [[d1_databases]]
# binding = "DB"
# database_name = "reader"
# database_id = "your-database-id-here"npm run db:initnpm installnpm run dev브라우저에서 http://localhost:8787 열기
npm run deploy- 홈 화면 상단 입력창에 URL 입력
+ Add버튼 클릭- 자동으로 본문 추출 및 읽기 모드로 이동
- 안 읽은 글 목록에서 제목 클릭
- Safari Reader 스타일로 깔끔하게 읽기
- 읽기 화면 상단
✓ Mark as Read버튼 클릭 - 자동으로 홈 화면으로 이동
reader/
├── workers.js # Workers 진입점, 라우터
├── schema.sql # D1 스키마
├── wrangler.toml # Cloudflare 설정
├── package.json
└── src/
├── handlers/
│ ├── home.js # GET / - 목록
│ ├── post.js # POST /post - URL 저장
│ ├── reader.js # GET /r/{id} - 읽기 모드
│ └── markRead.js # POST /r/{id}/mark-read
├── services/
│ ├── extractor.js # 컨텐츠 추출
│ └── articleService.js # D1 CRUD
├── templates/
│ ├── list.js # 목록 HTML
│ ├── reader.js # 읽기 모드 HTML
│ └── styles.js # CSS
└── types.js # JSDoc 타입 정의
GET /- 안 읽은 글 목록POST /post- URL 저장 (form data: url)GET /r/{id}- 글 읽기POST /r/{id}/mark-read- 읽음 처리
- 태그 시스템
- 검색 기능
- 즐겨찾기
- 북마클릿
- RSS 피드
MIT