46 Commits

Author SHA1 Message Date
2123bcbe3e chore(master): release 0.6.2 (#2) 2026-02-01 02:42:48 -06:00
6c15f4082f refactor(api): extract toURLSearchParams helper for query param handling 2026-02-01 02:05:29 -06:00
bbff2b7f36 refactor(web): split CourseTable into modular component structure
Decompose monolithic CourseTable.svelte into separate desktop/mobile views
with dedicated cell components and extracted state management for improved
maintainability and code organization.
2026-02-01 01:43:58 -06:00
b37604f807 fix(web): skip view transitions for same-page navigations
Prevents document-level view transitions from blocking pointer events
during query param updates (e.g. filter changes). Only use transitions
when the pathname actually changes.
2026-02-01 01:08:00 -06:00
d278498daa refactor(web): replace component tooltips with delegated singleton 2026-02-01 01:06:56 -06:00
bd2acee6f4 feat(web): build responsive layout with mobile card view 2026-02-01 00:40:58 -06:00
7e7fc1df94 style(web): improve ux by preventing unwanted text selection 2026-01-31 21:04:09 -06:00
005adb8792 style(web): update spacing and color classes across components 2026-01-31 20:51:28 -06:00
dfaaa88d54 chore: add vscode workspace extension recommendations 2026-01-31 20:14:12 -06:00
f387401a41 refactor(api): rename middleware and enable database query logging 2026-01-31 20:13:54 -06:00
4e0140693b refactor(web): extract FilterPopover component and upgrade range sliders
Replace basic HTML range inputs with svelte-range-slider-pips library
for better UX. Create shared FilterPopover component to eliminate
duplicate popover structure across Attributes, Schedule, Status, and
More filter components.
2026-01-31 17:16:00 -06:00
e9209684eb feat(web): batch rapid search query changes into history entries, allow for query history 2026-01-31 16:44:26 -06:00
b562fe227e fix(web): ignore .svelte-kit/generated in vite watcher
Prevents spurious full-page reloads when svelte-kit sync runs
externally (e.g. during `just check`). The SvelteKit vite plugin
already watches source files and writes generated output itself.
2026-01-31 16:25:58 -06:00
44260422d6 refactor(web): streamline filter ui with simplified removal 2026-01-31 15:12:53 -06:00
96a8c13125 fix(data): handle alphanumeric course numbers in range filtering 2026-01-31 15:12:53 -06:00
567c4aec3c feat(web): implement aligned course codes with jetbrains mono 2026-01-31 14:16:10 -06:00
f5a639e88b feat(web): add dynamic range sliders with consolidated search options API 2026-01-31 13:50:26 -06:00
d91f7ab342 refactor(web): consolidate tooltip implementations with shared components 2026-01-31 12:26:31 -06:00
7f0f08725a fix(web): prevent interaction blocking during search transitions
Remove document-level view transition fallback that applies
visibility:hidden to the entire page. Use scoped table transitions to
keep filters and controls interactive during search result updates.
2026-01-31 12:16:36 -06:00
02b18f0c66 chore: add aliases to Justfile 2026-01-31 11:30:43 -06:00
106bf232c4 feat(web): implement multi-dimensional course filtering system
Add schedule, attribute, instructor, and credit hour filters to course
search. Extend backend query with 9 new parameters and create reusable
popover components for filter UI with active state indicators.
2026-01-31 11:29:04 -06:00
239f7ee38c refactor: standardize error responses with ApiError and ts-rs bindings 2026-01-31 10:35:04 -06:00
0ee4e8a8bc refactor: migrate API responses from manual JSON to type-safe bindings
Replace hand-written TypeScript interfaces and serde_json::Value responses
with ts-rs generated bindings across admin, metrics, timeline, and WebSocket
APIs. Eliminates manual type maintenance and ensures frontend types stay
in sync with backend definitions.
2026-01-31 10:00:36 -06:00
5729a821d5 feat(web): implement smooth view transitions for search results 2026-01-31 09:33:09 -06:00
5134ae9388 chore: add dev-build flag for embedded vite builds 2026-01-31 01:59:56 -06:00
9e825cd113 fix: re-add overflow hidden for page transitions, but with negative margin padding to avoid clipping
Prevents scrollbars while also avoiding clipping on certain pages.
2026-01-31 01:40:22 -06:00
ac8dbb2eef fix: separate Biome format and lint checks to enable auto-format
Biome's 'check' command runs both formatting and linting, causing
overlapping failures that prevented auto-format from triggering.
Split into separate commands and removed web-lint check since Biome
linting crashes on Svelte 5 syntax. Renamed check steps for clarity.
2026-01-31 01:05:19 -06:00
5dd35ed215 fix(web): prevent duplicate searches and background fetching on navigation
- Search page no longer triggers cascading search when validating subjects
- Scraper page stops all refresh timers and API calls when navigating away
- Wrap initial data references in untrack() to silence Svelte warnings
2026-01-31 01:03:20 -06:00
2acf52a63b fix(cli): add proper flag validation for check script 2026-01-31 00:42:52 -06:00
47132e71d7 chore(master): release 0.6.1 (#1) 2026-01-31 00:37:13 -06:00
87db1a4ccb refactor: extract Justfile inline scripts into scripts/ directory
Move all [script("bun")] blocks into standalone TypeScript files under
scripts/ with shared utilities in scripts/lib/. The Justfile is now ~40
lines of thin `bun scripts/*.ts` wrappers.

Shared code consolidated into two lib files:
- lib/proc.ts: process spawning (run, spawnCollect, raceInOrder, ProcessGroup)
- lib/fmt.ts: color output, elapsed timers, reusable flag parser
2026-01-31 00:34:27 -06:00
e203e8e182 feat(build): auto-regenerate TypeScript bindings on source changes 2026-01-31 00:27:27 -06:00
cbb0a51bca refactor(terms): move term formatting from frontend to backend 2026-01-31 00:26:41 -06:00
c533768362 feat(scraper): improve results visibility and loading states 2026-01-30 23:36:23 -06:00
16039e02a9 fix(metrics): always emit baseline metrics on initial course insertion 2026-01-30 23:32:04 -06:00
7d2255a988 fix(data): decode HTML entities in course titles and instructor names 2026-01-30 23:31:05 -06:00
8bfc14e55c feat(course): distinguish async from synchronous online courses
Add logic to detect and label asynchronous online sections (INT building
with TBA times) separately from synchronous online courses. Update table
rendering to show "Async" instead of "TBA" for these sections.
2026-01-30 23:27:54 -06:00
2689587dd5 fix: avoid status flickering on subjects table 2026-01-30 22:04:48 -06:00
1ad614dad0 feat(scraper): improve dashboard clarity with stat tooltips 2026-01-30 22:00:59 -06:00
ebb7a97c11 fix(ci): add postgres container service for rust tests
Also updated deprecated codeql action to v4.
2026-01-30 21:36:32 -06:00
2df0ba0ec5 chore: add ts-rs generated bindings 2026-01-30 21:29:32 -06:00
dd148e08a0 fix(ci): fix rust/frontend/security job failures and expand local checks 2026-01-30 21:22:01 -06:00
3494341e3f ci: split quality checks into parallel jobs with security scanning
Reorganize CI pipeline into separate jobs for Rust quality, frontend
quality, tests, Docker build, and security audits. Add cargo-audit,
bun audit, and Trivy filesystem scanning. Allow formatting checks to
pass with warnings on push events while failing on PRs.
2026-01-30 21:08:16 -06:00
acccaa54d4 chore: update frontend packages 2026-01-30 21:07:08 -06:00
6863ee58d0 ci: add Release Please automation for changelog and version management 2026-01-30 21:05:15 -06:00
550401b85c refactor: use friendly term codes in URL query parameters 2026-01-30 20:49:08 -06:00

Diff Content Not Available