diff --git a/Cargo.lock b/Cargo.lock index c3a4471..9d5a9a5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -272,7 +272,7 @@ dependencies = [ [[package]] name = "banner" -version = "0.5.0" +version = "0.6.0" dependencies = [ "anyhow", "async-trait", diff --git a/Cargo.toml b/Cargo.toml index 211f57b..155d8c4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "banner" -version = "0.5.0" +version = "0.6.0" edition = "2024" default-run = "banner" diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 310920c..4bea57e 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -6,6 +6,49 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). ## [Unreleased] +## [0.6.0] - 2026-01-30 + +### Added + +- User authentication system with Discord OAuth, sessions, admin roles, and login page with FAQ. +- Interactive timeline visualization with D3 canvas, pan/zoom, touch gestures, and enrollment aggregation API. +- Scraper analytics dashboard with timeseries charts, subject monitoring, and per-subject detail views. +- Adaptive scraper scheduling with admin endpoints for monitoring and configuration. +- Scrape job result persistence for effectiveness tracking. +- WebSocket support for real-time scrape job monitoring with connection status indicators. +- Course change auditing with field-level tracking and time-series metrics endpoint. +- Audit log UI with smart JSON diffing, conditional request caching, and auto-refresh. +- Calendar export web endpoints for ICS download and Google Calendar redirect. +- Confidence-based RMP matching with manual review workflow and admin instructor UI. +- RMP profile links and confidence-aware rating display. +- Name parsing and normalization for improved instructor-RMP matching. +- Mobile touch controls with gesture detection for timeline. +- Worker timeout protection and crash recovery for job queue. +- Build-time asset compression with encoding negotiation (gzip, brotli, zstd). +- Smart page transitions with theme-aware element transitions. +- Search duration and result count feedback. +- Root error page handling. +- Login page with FAQ section and improved styling. + +### Changed + +- Consolidated navigation with top nav bar and route groups. +- Centralized number formatting with locale-aware utility. +- Modernized Justfile commands and simplified service management. +- Persisted audit log state in module scope for cross-navigation caching. +- Relative time feedback and improved tooltip customization. + +### Fixed + +- Instructor/course mismatching via build-order-independent map for association. +- Page content clipping. +- Backend startup delays with retry logic in auth. +- Banner API timeouts increased to handle slow responses. +- i64 serialization for JavaScript compatibility, fixing avatar URL display. +- Frontend build ordering with `-e` embed flag in Justfile. +- Login page centering and unnecessary scrollbar. +- ts-rs serde warnings. + ## [0.5.0] - 2026-01-29 ### Added diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index e5937a5..f63f676 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -2,34 +2,43 @@ ## Now -- **Notification and subscription system** - Subscribe to courses and get alerts on seat availability, waitlist movement, and detail changes (time, location, professor, seats). DB schema exists. +- **Discord bot revival** - Audit and fix all existing commands (search, terms, ics, gcal) against the current data model. Add test coverage. Bot has been untouched since ~0.3.4 and commands may be broken. +- **Notification and subscription system** - Subscribe to courses and get alerts on seat availability, waitlist movement, and detail changes (time, location, professor, seats). Deliver via Discord bot and web dashboard. +- **Mobile/responsive redesign** - Hamburger nav for sidebar, responsive table column hiding, mobile-friendly admin pages. Timeline is the only area with solid mobile support; most pages need work. - **Professor name search filter** - Filter search results by instructor. Backend code exists but is commented out. -- **Autocomplete for search fields** - Typeahead for course titles, course numbers, professors, and terms. -- **Test coverage expansion** - Broaden coverage with session/rate-limiter tests and more DB integration tests. +- **Search field autocomplete** - Typeahead for course titles, course numbers, professors, and terms. +- **Large component extraction** - Break down CourseTable, Instructors page, and TimelineCanvas into smaller, testable subcomponents. ## Soon -- **Smart time-of-day search parsing** - Support natural queries like "2 PM", "2-3 PM", "ends by 2 PM", "after 2 PM", "before 2 PM" mapped to time ranges. -- **Section-based lookup** - Search by full section identifier, e.g. "CS 4393 001". -- **Search result pagination** - Paginated embeds for large result sets in Discord. +- **Bot slash command parity** - Keep Discord bot commands in sync with web features: timeline summaries, RMP lookups, audit log highlights, notification management via bot. +- **E2E test suite** - Playwright tests for critical user flows: search, login, admin pages, timeline interaction. +- **Settings page** - Replace placeholder with theme preferences, notification settings, default term/subject selection. +- **Profile enhancements** - Expand from read-only stub to subscription management, saved searches, and course watchlists. +- **Smart time-of-day search parsing** - Support natural queries like "2 PM", "ends by 2 PM", "after 2 PM" mapped to time ranges. - **Multi-term querying** - Query across multiple terms in a single search instead of one at a time. -- **Historical analytics** - Track seat availability over time and visualize fill-rate trends per course or professor. -- **Schedule builder** - Visual weekly schedule tool for assembling a conflict-free course lineup. -- **Professor stats** - Aggregate data views: average class size, typical waitlist length, schedule patterns across semesters. +- **Historical analytics visualization** - Build trend UI on top of existing course metrics and timeline API. Fill-rate charts per course or professor. +- **Schedule builder** - Visual weekly schedule tool for assembling a conflict-free course lineup. Timeline visualization serves as a foundation. ## Eventually +- **API rate limiting** - Rate limiter on public API endpoints. Needed before any public or external exposure. +- **Bulk admin operations** - Batch RMP match/reject, bulk user management, data export from admin pages. - **Degree audit helper** - Map available courses to degree requirements and suggest what to take next. -- **Dynamic scraper scheduling** - Adjust scrape intervals based on change frequency and course count (e.g. 2 hours per 500 courses, shorter intervals when changes are detected). - **DM support** - Allow the Discord bot to respond in direct messages, not just guild channels. - **"Classes Now" command** - Find classes currently in session based on the current day and time. -- **CRN direct lookup** - Look up a course by its CRN without going through search. -- **Metrics dashboard** - Surface scraper and service metrics visually on the web dashboard. - **Privileged error feedback** - Detailed error information surfaced to bot admins when commands fail. ## Done +- **Interactive timeline visualization** - D3 canvas with pan/zoom, touch gestures, and enrollment aggregation API. *(0.6.0)* +- **Scraper analytics dashboard** - Timeseries charts, subject monitoring, adaptive scheduling, and admin endpoints. *(0.6.0)* +- **WebSocket job monitoring** - Real-time scrape job queue with live connection status indicators. *(0.6.0)* +- **Course change audit log** - Field-level change tracking with smart diffing, conditional caching, and auto-refresh. *(0.6.0)* +- **User authentication system** - Discord OAuth, sessions, admin roles, and login page. *(0.6.0)* +- **Dynamic scraper scheduling** - Adaptive scrape intervals based on change frequency and course volume. *(0.6.0)* +- **Metrics dashboard** - Scraper and service metrics surfaced on the web dashboard. *(0.6.0)* +- **Subject/major search filter** - Multi-select subject filtering with searchable comboboxes. *(0.5.0)* - **Web course search UI** - Browser-based course search with interactive data table, sorting, pagination, and column controls. *(0.4.0)* - **RateMyProfessor integration** - Bulk professor sync via GraphQL with inline ratings in search results. *(0.4.0)* -- **Subject/major search filter** - Multi-select subject filtering with searchable comboboxes. *(0.5.0)* -- **Test coverage expansion** - Unit tests for course formatting, API client, query builder, CLI args, and config parsing. *(0.3.4–0.4.0)* +- **Test coverage expansion** - Unit tests for course formatting, API client, query builder, CLI args, and config parsing. *(0.3.4--0.4.0)*