offline-first, p2p synced, atproto enabled, feed reader
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

comment on llm usage

+48 -19
+48 -19
README.md
··· 1 1 # Feedline 2 2 3 - easily self-hosted, local-first RSS reader and podcast client with p2p sync, and optional ATProto based social discovery. 3 + Easily self-hosted, local-first RSS reader and podcast client with p2p sync, and optional ATProto based social discovery. 4 4 5 - - subscriptions, read/play state and other actions sync between devices p2p 6 - - media can be downloaded with analysis for skipping silence, and shared via public or private torrent swarm 7 - - optional atproto integration allows easy on-boarding, and sharing subscriptions/favorites/etc through an open social network 5 + - Subscriptions, read/play state and other actions sync between devices p2p 6 + - Media can be downloaded with analysis for skipping silence, and shared via public or private torrent swarm 7 + - Optional atproto integration allows easy on-boarding, and sharing subscriptions/favorites/etc through an open social network 8 8 9 9 ### development 10 10 11 11 - node.js 24+ 12 - - npm or pnpm 12 + - pnpm 13 + - there's a justfile if you want 13 14 14 15 ```bash 15 - npm install 16 - npm run dev 16 + pnpm install 17 + pnpm run dev 17 18 # - frontend at `http://localhost:4000` (or configured port) 18 - # - backend server at `http://localhost:4001`, `ws://localhost:4001/stream` 19 + # - backend server at `http://localhost:4001`, `ws://localhost:4001/_stream` (proxied through vite) 19 20 20 - npm test 21 - npm run types 22 - npm run lint -- --fix 21 + pnpm test 22 + pnpm run types 23 + pnpm run lint -- --fix 23 24 24 25 # production (heh) 25 - npm run build 26 - npm run start:prod 26 + pnpm run build 27 + pnpm run start:prod 27 28 ``` 28 29 29 30 ## status: **early** 30 31 31 - the core realm protocol is working, but feed/podcast features are still being built. 32 - don't use this yet. 32 + * lots of neat ideas 33 + * lots of getting nerd-sniped 34 + 35 + The core realm protocol is working, but feed/podcast features are still being built. 36 + Don't use this yet. 37 + 38 + ## re: LLM usage 39 + 40 + Do you know what the most recent coding LLMs are really, really good at? Having a two hour back and forth 41 + conversation about an idea you have, and then writing that up into a design document that's coherent enough to 42 + read and think about later. 43 + 44 + Also, Opus 4.5 is really good at complicated typescript types, heh. 45 + 46 + The way that I like to use LLMs is as rubber ducks; a mirror made of compressed internet that I can I talk to, 47 + in order to figure things out. Like, I want a contributors Slack, but without any latency, social pressure or 48 + conforming to another person's interest (or lack thereof). I'm not asking some rando on `#feedline-at` to 49 + write my code, anymore than I'm asking Claude to, but it's really nice to have an impassioned conversation. 50 + 51 + ### what I can confidently say: 52 + 53 + * I have touched every line of (live) code in this repository 54 + * I can explain every line of (live) code in this repository 55 + 56 + ### what I _cannot_ confidently say: 57 + 58 + * I have _written_ every line of code in this repository 59 + * That every idea here is entirely of my own spontaneous creative genius 60 + 61 + Take of all that what you will. 33 62 34 63 ## self-hosting 35 64 36 - feedline is designed to be self-hosted: 65 + `feedline` is designed to be self-hosted: 37 66 38 67 1. **hosted** - run the web app from https://app.feedline.at, and we use the following: 39 - - CORS proxy 40 - - reader-mode proxy 68 + - upstream CORS proxy 69 + - upstream reader-mode proxy 41 70 - audio file downloads for analysis (when not marked private) 42 71 2. **home server** - run a local server for your devices (via Docker/Podman) 43 72 - should support `mdns`, client connects, gets PWA, server does syncing ··· 45 74 46 75 ## ATProto integration 47 76 48 - feedline integrates with ATProto for: 77 + `feedline` integrates with ATProto for: 49 78 50 79 - easy cross-device **bootstrapping** 51 80 - if both devices are signed in through ATProto OAuth, we don't have to worry about invitation