···11# Feedline
2233-easily self-hosted, local-first RSS reader and podcast client with p2p sync, and optional ATProto based social discovery.
33+Easily self-hosted, local-first RSS reader and podcast client with p2p sync, and optional ATProto based social discovery.
4455-- subscriptions, read/play state and other actions sync between devices p2p
66-- media can be downloaded with analysis for skipping silence, and shared via public or private torrent swarm
77-- optional atproto integration allows easy on-boarding, and sharing subscriptions/favorites/etc through an open social network
55+- Subscriptions, read/play state and other actions sync between devices p2p
66+- Media can be downloaded with analysis for skipping silence, and shared via public or private torrent swarm
77+- Optional atproto integration allows easy on-boarding, and sharing subscriptions/favorites/etc through an open social network
8899### development
10101111- node.js 24+
1212-- npm or pnpm
1212+- pnpm
1313+- there's a justfile if you want
13141415```bash
1515-npm install
1616-npm run dev
1616+pnpm install
1717+pnpm run dev
1718# - frontend at `http://localhost:4000` (or configured port)
1818-# - backend server at `http://localhost:4001`, `ws://localhost:4001/stream`
1919+# - backend server at `http://localhost:4001`, `ws://localhost:4001/_stream` (proxied through vite)
19202020-npm test
2121-npm run types
2222-npm run lint -- --fix
2121+pnpm test
2222+pnpm run types
2323+pnpm run lint -- --fix
23242425# production (heh)
2525-npm run build
2626-npm run start:prod
2626+pnpm run build
2727+pnpm run start:prod
2728```
28292930## status: **early**
30313131-the core realm protocol is working, but feed/podcast features are still being built.
3232-don't use this yet.
3232+* lots of neat ideas
3333+* lots of getting nerd-sniped
3434+3535+The core realm protocol is working, but feed/podcast features are still being built.
3636+Don't use this yet.
3737+3838+## re: LLM usage
3939+4040+Do you know what the most recent coding LLMs are really, really good at? Having a two hour back and forth
4141+conversation about an idea you have, and then writing that up into a design document that's coherent enough to
4242+read and think about later.
4343+4444+Also, Opus 4.5 is really good at complicated typescript types, heh.
4545+4646+The way that I like to use LLMs is as rubber ducks; a mirror made of compressed internet that I can I talk to,
4747+in order to figure things out. Like, I want a contributors Slack, but without any latency, social pressure or
4848+conforming to another person's interest (or lack thereof). I'm not asking some rando on `#feedline-at` to
4949+write my code, anymore than I'm asking Claude to, but it's really nice to have an impassioned conversation.
5050+5151+### what I can confidently say:
5252+5353+* I have touched every line of (live) code in this repository
5454+* I can explain every line of (live) code in this repository
5555+5656+### what I _cannot_ confidently say:
5757+5858+* I have _written_ every line of code in this repository
5959+* That every idea here is entirely of my own spontaneous creative genius
6060+6161+Take of all that what you will.
33623463## self-hosting
35643636-feedline is designed to be self-hosted:
6565+`feedline` is designed to be self-hosted:
376638671. **hosted** - run the web app from https://app.feedline.at, and we use the following:
3939- - CORS proxy
4040- - reader-mode proxy
6868+ - upstream CORS proxy
6969+ - upstream reader-mode proxy
4170 - audio file downloads for analysis (when not marked private)
42712. **home server** - run a local server for your devices (via Docker/Podman)
4372 - should support `mdns`, client connects, gets PWA, server does syncing
···45744675## ATProto integration
47764848-feedline integrates with ATProto for:
7777+`feedline` integrates with ATProto for:
49785079- easy cross-device **bootstrapping**
5180 - if both devices are signed in through ATProto OAuth, we don't have to worry about invitation