{"id":49191474,"url":"https://github.com/moikapy/rss","last_synced_at":"2026-04-23T07:01:30.780Z","repository":{"id":352462610,"uuid":"1214046497","full_name":"Moikapy/rss","owner":"Moikapy","description":"My RSS Feed, How I Stay Up to date with AI","archived":false,"fork":false,"pushed_at":"2026-04-19T19:03:09.000Z","size":783,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-04-19T19:08:15.986Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://rss.moikapy.dev","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Moikapy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-04-18T03:55:04.000Z","updated_at":"2026-04-19T19:03:13.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Moikapy/rss","commit_stats":null,"previous_names":["moikapy/rss"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/Moikapy/rss","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Moikapy%2Frss","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Moikapy%2Frss/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Moikapy%2Frss/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Moikapy%2Frss/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Moikapy","download_url":"https://codeload.github.com/Moikapy/rss/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Moikapy%2Frss/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32169657,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-23T02:19:40.750Z","status":"ssl_error","status_checked_at":"2026-04-23T02:17:55.737Z","response_time":53,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":[],"created_at":"2026-04-23T07:01:29.515Z","updated_at":"2026-04-23T07:01:30.728Z","avatar_url":"https://github.com/Moikapy.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🐉 0xRSS\n\nA privacy-first, edge-deployed RSS feed aggregator — your corner of the internet, curated by you.\n\n**Live at [rss.moikapy.dev](https://rss.moikapy.dev)** · Installable PWA · Works offline\n\n## Why 0xRSS?\n\nThe internet is noisy. 0xRSS gives you one quiet place to read what matters — no algorithm, no ads, no tracking. Just feeds, folders, and full-text articles.\n\n## Features\n\n- **📰 Smart Feed Aggregation** — 54+ curated feeds across AI, Gaming, Tech, News, Pop Culture, and Anime\n- **📖 Full Content Extraction** — Mozilla Readability renders full articles inline, no tab-switching\n- **📂 Folders + Tags** — Organize feeds your way, filter across feeds\n- **✅ Full Triage** — Read/unread, bookmarks, read-later queue\n- **🔍 Full-Text Search** — FTS5 in SQLite, LIKE fallback for D1\n- **📥 OPML Import/Export** — Standard RSS subscription format\n- **🔄 Auto-Refresh** — Configurable per-feed intervals, Cloudflare Queue-powered fetching\n- **🌙 Dark Mode** — System/light/dark themes\n- **⌨️ Keyboard Shortcuts** — j/k navigate, s bookmark, l read later, r read/unread, ⌘\\ toggle sidebar\n- **🖥️ 3-Panel Layout** — Resizable sidebar, article list, reader\n- **📱 PWA** — Install on any device, works offline, app shell cached\n- **🔑 Nostr Login** — NIP-07 browser extension auth for passwordless login\n- **🤖 AI Chat** — Ollama-powered chat about your feeds and articles\n\n## Architecture\n\n```\n┌──────────────────┐     ┌───────────────────┐     ┌─────────────┐\n│  Next.js 16 PWA  │────▶│  Hono API Worker  │────▶│ Cloudflare  │\n│  (Cloudflare      │     │  api.rss.moikapy   │     │ D1 + KV     │\n│   Workers)        │     │  .dev              │     │ + Queues    │\n└──────────────────┘     └───────────────────┘     └─────────────┘\n```\n\n**Three-tier API:**\n| Tier | Path | Auth | Cache |\n|---|---|---|---|\n| Public | `/api/public/*` | None | KV stale-while-revalidate |\n| User | `/api/user/*` | Any JWT | No-store |\n| Admin | `/api/admin/*` | Admin JWT | No-store |\n\n## Tech Stack\n\n| Component | Technology |\n|---|---|\n| Frontend | Next.js 16 (App Router) + Tailwind CSS 4 |\n| API | Hono on Cloudflare Workers |\n| Database | Cloudflare D1 (prod) / SQLite (dev) |\n| ORM | Drizzle ORM |\n| Auth | JWT via jose + PBKDF2 (Web Crypto) |\n| Caching | Cloudflare KV |\n| Feed Processing | Cloudflare Queues |\n| AI | Ollama Cloud |\n| Nostr | NIP-07 browser extension |\n| Deploy | Cloudflare Workers + OpenNext |\n\n## Quick Start\n\n```bash\n# Clone and install\ngit clone https://github.com/Moikapy/rss.git\ncd rss\nbun install\n\n# Set up environment\ncp .env.example .env.local\n# Edit .env.local with your JWT_SECRET\n\n# Run development server\nbun run dev\n\n# Open http://localhost:3000\n# First visit prompts account creation\n```\n\n## Development\n\n```bash\nbun run dev              # Web dev server\nbun run build            # Build Next.js\nbun run db:push          # Push schema to DB\n```\n\n### API Worker (local)\n\n```bash\ncd packages/0xrss-api\n\n# Create .dev.vars with JWT_SECRET\ncp .dev.vars.example .dev.vars\n\n# Run with local D1\nnpx wrangler dev\n```\n\n## Deployment\n\n### Frontend (Cloudflare Workers via OpenNext)\n\n```bash\n# Build and deploy\nnpx opennextjs-cloudflare build\nnpx opennextjs-cloudflare deploy\n```\n\n### API Worker\n\n```bash\ncd packages/0xrss-api\n\n# Create D1 database\nnpx wrangler d1 create 0xrss-db\n# Update wrangler.toml with the database_id\n\n# Apply migrations\nnpx wrangler d1 migrations apply 0xrss-db --remote\n\n# Set secrets\nnpx wrangler secret put JWT_SECRET\n\n# Deploy\nnpx wrangler deploy\n```\n\n### Custom Domain Setup\n\n1. Frontend: `rss.moikapy.dev` → Cloudflare Worker `0xrss`\n2. API: `api.rss.moikapy.dev` → Cloudflare Worker `0xrss-api`\n3. Set `NEXT_PUBLIC_API_URL=https://api.rss.moikapy.dev` in `.env.production`\n\n## PWA Support\n\n0xRSS is a Progressive Web App:\n\n- **Installable** — Add to home screen on iOS/Android/desktop\n- **Offline-capable** — Service worker caches app shell and API responses\n- **App-like** — Standalone display mode, no browser chrome\n- **Theme-aware** — Matches system dark/light mode\n\nThe service worker uses a **network-first strategy** for API calls (fresh data with offline fallback) and **cache-first** for static assets.\n\n## Keyboard Shortcuts\n\n| Key | Action |\n|---|---|\n| `j` / `↓` | Next article |\n| `k` / `↑` | Previous article |\n| `s` | Toggle bookmark |\n| `l` | Toggle read later |\n| `r` | Toggle read/unread |\n| `⇧R` | Refresh all feeds |\n| `⌘\\` | Toggle sidebar |\n\n## Seeded Content\n\nThe app comes pre-loaded with 54 curated feeds across 6 folders:\n\n| Folder | Feeds | Highlights |\n|---|---|---|\n| 🧠 AI | 17 | OpenAI, Google AI, HuggingFace, arXiv cs.AI, Anthropic, Claude, LangChain, Simon Willison, VentureBeat AI |\n| 🎮 Gaming | 8 | IGN, Kotaku, Polygon, PC Gamer, Eurogamer, Rock Paper Shotgun, Game Developer |\n| 💻 Technology | 9 | Ars Technica, The Verge, TechCrunch, Wired, Hacker News, MIT Tech Review, Engadget |\n| 📰 News | 7 | BBC, The Guardian, NPR, AP News, Reuters, NYT |\n| 🎭 Pop Culture | 7 | Vulture, A.V. Club, Pitchfork, Billboard, Variety, Hollywood Reporter |\n| 📺 Anime | 6 | Anime News Network, Crunchyroll, MyAnimeList, MangaUpdates |\n\n## Project Structure\n\n```\n├── src/                    # Next.js frontend\n│   ├── app/               # App Router pages\n│   ├── components/        # React components\n│   │   ├── article/       # Article list + reader\n│   │   ├── chat/          # AI chat panel\n│   │   ├── feed/          # Feed management\n│   │   ├── layout/        # Sidebar + header\n│   │   └── providers/     # Auth, theme, SW providers\n│   ├── lib/               # API client, auth, parsers\n│   └── hooks/             # Custom React hooks\n├── packages/0xrss-api/    # Hono API Worker\n│   ├── src/\n│   │   ├── routes/        # Public, admin, user, auth routes\n│   │   ├── middleware/     # Cache, auth, rate-limit\n│   │   ├── db/            # Drizzle schema + client\n│   │   └── lib/           # Feed processor, password hashing, Nostr\n│   └── wrangler.toml      # Worker config\n├── public/                # Static assets + PWA files\n│   ├── manifest.webmanifest\n│   ├── sw.js\n│   ├── icon-192.png\n│   ├── icon-512.png\n│   └── apple-touch-icon.png\n└── wrangler.toml          # Frontend Worker config\n```\n\n## License\n\nMIT","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoikapy%2Frss","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmoikapy%2Frss","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoikapy%2Frss/lists"}