Populate README with problem description, features, tech stack, development/deployment instructions, project structure, and solver explanation. Add CHANGELOG.md marking current state as v1.0.0.
2.7 KiB
2.7 KiB
Changelog
v1.0.0 — 2026-02-28
Initial release of the EMBA Specialization Solver.
Features
- Optimization engine — LP-based credit allocation solver with two modes:
- Maximize Count — finds the largest feasible set of specializations, using ranking as tiebreaker
- Priority Order — greedily adds specializations in user-ranked order
- Course selection UI — select one course per elective set across 12 sets (Spring, Summer, Fall terms)
- Drag-and-drop specialization ranking — reorder the 14 specializations by priority with touch and keyboard support
- Decision tree analysis — Web Worker enumerates remaining course combinations to compute ceiling outcomes per choice
- Status tracking — each specialization classified as achieved, achievable, missing required course, or unreachable
- Mode comparison — displays what the alternative optimization mode would produce
- Credit bars and allocation breakdowns — visual progress toward the 9-credit threshold with expandable per-course detail
- Credit legend — collapsible explainer for bars, badges, and limits
- Required course labels — courses that are prerequisites for a specialization show "Required for ..." labels
- Algorithm explanations — clear descriptions of how each optimization mode works
- Skeleton loading — placeholder UI while decision tree analysis runs
- Auto-expand achieved specializations — achieved specs show their credit breakdown by default
- Responsive layout — two-panel grid on desktop/tablet, single-column on mobile
- Mobile floating banners — top banner summarizes specialization statuses, bottom banner shows selection progress (N/12); both appear via IntersectionObserver and scroll to their sections on tap
- CSS transitions and animations — cross-fade course pin/unpin, credit bar width changes, status badge color transitions, expand/collapse panels, mode toggle switching, flash on status changes; all respect
prefers-reduced-motion - State persistence — rankings and selections saved to localStorage
- Docker deployment — multi-stage Dockerfile (Node 22 build → Nginx Alpine serve) with Docker Compose, gzip compression, SPA fallback routing, immutable cache headers for hashed assets, configurable port (default 8080)
- Full test suite — data integrity, feasibility solver, optimizer, and decision tree tests via Vitest
Constraints Modeled
- Credit non-duplication (2.5 credits per course shared across specializations)
- Maximum 3 specializations (30 total credits, 9 required each)
- Required course prerequisites for 4 specializations
- Strategy S1/S2 tier system (at most 1 S2 course contributes to Strategy)
- Mutual exclusion from same-set conflicts