This repository has no description
readme.org
#+TITLE: skypod
#+AUTHOR: Jonathan Raphaelson
#+EMAIL: jon@accidental.cc

An offline first RSS & Podcast PWA Application

* What is Skypod?

- rss/podcast subscription management
- offline first; cache audio locally, and p2p sync between devices
- podcast playback with nice features; skip silence, volume correction, etc.
- fun to hack on

* How does it work?

- PWA stores and displays cached feeds, subscription, and listening history data locally
- Feed proxy server provides a nice API for fetching feeds and extracting metadata
- WebSocket signaling server for WebRTC peering, devices sync cached data and play state

* Development

Run the pwa+server with:

#+BEGIN_SRC bash
$ deno run dev
#+END_SRC

- Backend
  - [[https://docs.deno.com/][Deno]] for a typescript runtime with nice tools
  - [[https://oakserver.org/][Oak]] and Deno's ~stdlib~ for HTTP and WebSocket servers
- Frontend
  - [[https://vite.dev/][Vite]] (with the ~@deno/vite-plugin~) plugin for FE builds
  - [[https://react.dev][React]] + [[https://zustand.docs.pmnd.rs][Zustand]] for UI
  - [[https://dexie.org/][Dexie]] for browser storage and enabling syncing

Still thinking about:

- [[https://github.com/denoland/denokv][Deno.KV]] for backend storage
- deno compile for static binary
- docker compose for deployment with self-hosted KV

See [[./devlog.org]] for design and architecture information.

* Contributing

- run ~git config core.hooksPath .githooks~ to install pre-commit hooks for lint/fmt
- not really open to contributions right now, come back later.

* License & Copyright

Copyright (C) 2025 Jonathan Raphaelson

This program is free software: you can redistribute it and/or modify it under the terms of
the **Affero General Public License verson 3 or later** (AGPLv3+).

Please see [[./license.txt]] for a copy of the full license.