Feed aggregator in the style of a TV guide
- TypeScript 88.4%
- CSS 10.5%
- Dockerfile 0.6%
- Nix 0.2%
- HTML 0.2%
| .githooks | ||
| common | ||
| server | ||
| web | ||
| .dockerignore | ||
| .gitignore | ||
| AGENTS.md | ||
| biome.json | ||
| bun.lock | ||
| devenv.lock | ||
| devenv.nix | ||
| devenv.yaml | ||
| docker-compose.yml | ||
| Dockerfile | ||
| entrypoint.sh | ||
| package.json | ||
| README.md | ||
| secretspec.toml | ||
| tsconfig.base.json | ||
Hermes
A feed reader with a TV channel guide as its primary UI metaphor. Rows represent channels (ex: RSS feeds, media library streams), columns represent time slots or content items. Users browse content the same way they'd flip through an EPG (Electronic Program Guide).
Core Concept
The UI mimics a classic cable TV guide grid:
- Y-axis (rows): Channels - each feed or media source is a "channel"
- X-axis (columns): Content items ordered by time and width is the duration
- Highlighted cell: Currently focused item, shown in a preview pane above the grid
Development
TypeScript monorepo (Bun workspaces) with three packages: common, server, web.
# starts server (:3000) + web (:5173)
run
# lint, format, and typecheck
check
Deploy
A Dockerfile and docker compose file is provided for a single-container deployment. The server serves the Vite-built frontend as static files from web/dist/.
# clone / pull changes, then
docker compose up --build
At startup the container runs Prisma migrations and then starts the Hono server. Mount a persistent volume for the SQLite database if using a file-based URL.