Courseplan uses a lightweight feature flag system called GateKeeper (Documentation Index
Fetch the complete documentation index at: https://mintlify.com/cornell-dti/course-plan/llms.txt
Use this file to discover all available pages before exploring further.
src/feature-flags.ts). Each flag is a named toggle stored in localStorage. Because flags are read at module load time, toggling one triggers a page reload so the updated value takes effect immediately throughout the app.
Current feature flags
| Flag name | Description |
|---|---|
APIBFulfillment | AP/IB exam credit fulfillment tracking |
Case | CASE distribution requirement support |
RequirementConflicts | Highlights courses involved in double-counting constraint violations |
RequirementDebugger | Developer overlay showing raw requirement fulfillment graph data |
ToggleRequirementsBarBtn | Button to collapse/expand the requirements sidebar |
Profile | User profile page |
MultiplePlans | Support for creating and switching between multiple four-year plans |
SavedCourses | Course collection / saved-courses panel |
Schedule Generator | Experimental automated schedule generation feature |
Enabling and disabling flags at runtime
Open the browser developer console on any Courseplan page. Thewindow.GK object exposes enable* and disable* methods for every registered flag:
window.GK use the exact PascalCase name from FeatureFlagName, prefixed with enable or disable. Note that Schedule Generator (with a space) becomes window.GK.enableSchedule Generator — use bracket notation for flags whose names contain spaces: window.GK['enableSchedule Generator']().
Each flag’s state is persisted in
localStorage under the key CP_GK-<FlagName>. For example, enabling RequirementDebugger sets CP_GK-RequirementDebugger to "true". You can inspect or clear flags directly in the Application → Local Storage panel of your browser’s DevTools.Checking a flag in application code
Import the default export fromfeature-flags.ts and call the appropriate checker:
is<FlagName>Enabled.
Adding a new feature flag
Adding a flag requires two edits insrc/feature-flags.ts:
- Add the flag name to the
FeatureFlagNameunion type. - Pass the same string to
registerFeatureFlagChecker.
featureFlagCheckers.isYourNewFlagEnabled() is available everywhere in the app, and window.GK.enableYourNewFlag() / window.GK.disableYourNewFlag() are accessible in the browser console.