Commit Graph

30 Commits

Author SHA1 Message Date
cottongin
47a78b09a7 docs: add live announce dashboard design document
Approved design for a web dashboard that lets the host announce tracks
to IRC in real-time during live shows via WebSocket push.

Made-with: Cursor
2026-03-12 07:04:53 -04:00
cottongin
9664b8225d feat: add human-readable datetime formatting and !lastshow command
IRC plugins now format datetimes as "Wed Mar 11, 10:00 PM EDT" instead
of raw ISO 8601. Configurable timezone defaults to America/New_York.

Adds !lastshow N command to both Limnoria and Sopel plugins, returning
track N from the previous week's show via existing API endpoints.

Made-with: Cursor
2026-03-12 05:31:50 -04:00
cottongin
ae66242935 chore: add MIT license
Made-with: Cursor
2026-03-12 03:51:01 -04:00
cottongin
359a11dd4a chore: exclude chat-summaries from version control
Add chat-summaries/ to .gitignore and remove tracked files from index.

Made-with: Cursor
2026-03-12 03:48:21 -04:00
cottongin
03ce201a47 docs: add chat summary for IRC bot plugins implementation
Made-with: Cursor
2026-03-12 03:42:27 -04:00
cottongin
05bcf184ac fix: playlist truncation overflow and align logging across plugins
- Fix format_playlist truncation: +4 → +5 to account for ", ..." suffix
- Add API error logging to all Sopel command handlers (matching Limnoria)
- Add long-track truncation test case

Made-with: Cursor
2026-03-12 03:24:29 -04:00
cottongin
b63c851d14 docs: add IRC bot plugins design and implementation plan
Made-with: Cursor
2026-03-12 03:20:45 -04:00
cottongin
5c227766f1 test: add tests for IRC plugin formatting and API helpers
Made-with: Cursor
2026-03-12 03:20:05 -04:00
cottongin
6dd7aee2f2 feat(limnoria): add NtrPlaylist IRC plugin
Made-with: Cursor
2026-03-12 03:18:04 -04:00
cottongin
2a00cc263f feat(sopel): add NtR playlist IRC plugin
Made-with: Cursor
2026-03-12 03:11:04 -04:00
cottongin
1d08580a45 feat: add GET /shows/by-episode/{episode_number} endpoint
Allows looking up shows by episode number instead of internal DB ID,
enabling IRC bot commands like !playlist 530 to resolve directly.

Made-with: Cursor
2026-03-12 02:33:42 -04:00
cottongin
b529edecc3 chore: update .gitignore for SQLite WAL, venv, and tool caches
Made-with: Cursor
2026-03-12 02:10:55 -04:00
cottongin
cb3ae403cf feat: add historical backfill with --init CLI and episode numbering
Adds a --init mode that seeds the database with past shows from a given
anchor episode/date forward, batch-fetching likes from SoundCloud and
partitioning them into weekly buckets. Episode numbers are tracked in
the shows table and auto-incremented by the poller for new shows.

Includes full API documentation (docs/api.md) and updated README.

Made-with: Cursor
2026-03-12 02:09:15 -04:00
cottongin
c88826ac4d fix: wire show_day/show_hour config into API, simplify AddTrackRequest
- create_app now accepts show_day/show_hour params instead of
  hardcoding Wednesday 22:00
- main.py passes config values through to create_app
- Removed soundcloud_url from AddTrackRequest (not implemented);
  track_id is now required

Made-with: Cursor
2026-03-12 01:46:23 -04:00
cottongin
485f0c1e35 fix: address linting issues
Made-with: Cursor
2026-03-12 01:44:00 -04:00
cottongin
c2b032ea0c docs: add README with quick start and API reference
Made-with: Cursor
2026-03-12 01:43:11 -04:00
cottongin
219e2d4545 feat: add main entry point wiring API server and poller
Made-with: Cursor
2026-03-12 01:41:16 -04:00
cottongin
2e22a2b3ff feat: add FastAPI routes for playlist, shows, admin, and health
Made-with: Cursor
2026-03-12 01:40:04 -04:00
cottongin
ab81ad4fd4 feat: add poller with supervised restart loop
Made-with: Cursor
2026-03-12 01:40:00 -04:00
cottongin
f7dde6781a feat: add user resolution and likes fetching with 401 retry
Made-with: Cursor
2026-03-12 01:36:28 -04:00
cottongin
49846f9d7e feat: add SoundCloud client with client_id extraction
Made-with: Cursor
2026-03-12 01:36:03 -04:00
cottongin
d2ab4e94c0 feat: add database query methods for tracks, shows, and show_tracks
Made-with: Cursor
2026-03-12 01:33:17 -04:00
cottongin
2b38fda25a feat: add database module with schema initialization
Made-with: Cursor
2026-03-12 01:21:33 -04:00
cottongin
537d9ecd8b feat: add data models for Track, Show, ShowTrack
Made-with: Cursor
2026-03-12 01:18:20 -04:00
cottongin
38dda5dda0 feat: add week boundary computation with DST handling
Made-with: Cursor
2026-03-12 01:18:12 -04:00
cottongin
7e41f55e26 feat: add configuration module with pydantic-settings
Made-with: Cursor
2026-03-12 01:16:51 -04:00
cottongin
c40559822e scaffold: project structure with pyproject.toml and test config
Made-with: Cursor
2026-03-12 01:16:16 -04:00
cottongin
22f6b5cbca design: sync unliked tracks — remove from show and re-compact positions
Nick is the host; if he unlikes a track, the service should respect
that and remove it from the show playlist. Positions re-compact after
removal. The tracks table retains the record for historical reference.

Made-with: Cursor
2026-03-12 01:13:19 -04:00
cottongin
7eaf036d4b plan: add implementation plan for NtR SoundCloud fetcher
13-task TDD implementation plan covering project scaffolding, config,
week boundaries, database, SoundCloud client, poller, API, and entry point.

Made-with: Cursor
2026-03-12 01:05:52 -04:00
cottongin
48801afa76 Add design doc and SoundCloud API reference
Design for a SoundCloud likes fetcher service that builds weekly
playlists for Nick the Rat Radio and serves them via JSON API.

Made-with: Cursor
2026-03-12 01:01:14 -04:00