Previously known as Awesome-Schedule
A website which helps UVa students to schedule their classes more efficiently. Get your class selection done with the searching field and customize them with filters and sort options. Once you've finalized your class selection, hit "Generate" button and get all the possible schedules satisfying to your requirements.
Our website consists of only front-end components, i.e. all the scripts run in your browser and data are stored locally. It fetches data from Lou's list on page load and store it in browser cache.
However, optional backend storage features are available. Users can choose to login to a third-party website and store their plannable profiles. This enables cross-device profile syncing. We currently support Hoosmyprofessor. If you wish to provide such service, please refer to our backend specification for more details.
To facilitate access in China, we provide a mirror: https://cn.plannable.org/. It is synchronized with https://plannable.org/ once per hour.
Note: due to technical issues, the synchronization must be performed manually, so the mirror might not be up-to-date. I suggest to use the main website https://plannable.org/.
Since Plannable uses some of the cutting-edge features of CSS and Javascript, it requires relatively recent versions of the mainstream browsers. Specifically, Edge >= 16, Firefox >= 52, Chrome >= 57, Safari >= 11, Opera >= 44 are supported. IE is not supported. Plannable might also work on browsers not mentioned above, as long as the newer features such as ES6, WebAssembly and CSS Grid are supported.
powered by electron
The desktop app of plannable can be downloaded from releases.
Your operating system may block the execution of the app because it is unrecognized/unsigned. We do not have the signed certificates which cost at least 200$ per year. You can proceed safely because there is no security risk.
If you use AppImage, you need to add execution permission before launching the file
chmod +x plannable-x.x.x.AppImage
If you use snap, you can install plannable from the snap store
sudo snap install plannable
Note: We recommend VS Code and a Unix-like environment for development
Most of our scripts assumed a bash-like shell. If you're using windows, you can use git bash, cygwin, or WSL bash shell. Make sure to change npm's default shell by using
npm config set script-shell YOURSHELL
On Linux, you may need to increase you system file watcher limit
- Node.js >= 12.x
Clone this repository. The updatedata
script will automatically clone https://github.com/awesome-schedule/data
into scripts
so the data (e.g. course catalog) can be access locally. The getwasm
script will clone the pre-build wasm binary. Note that if you want to build wasm yourself, please refer to the Build WASM section below.
git clone https://github.com/awesome-schedule/plannable && cd plannable
npm run updatedata
npm run getwasm
Install dependencies and launch the development server
npm install
npm run serve
You need to serve the static files in scripts/data, because we only load local data in local development mode. To do so, open a new terminal and run npm run data
. This will open a static http server listening to port 8000
with cross origin headers. This static server must run on localhost:8000
.
Then you can visit the development server shown in the terminal.
You can use npx electron .
to launch the native application powered by electron.
You can use npx electron-builder --win
(or --mac
, --linux
) to build the native executable for your platform.
Plannable utilizes WASM to speed up some of its compute-intensive part
Make sure that you have Emscripten installed. Also make sure that emsdk_env.sh is sourced before running the following scripts.
Before you can build the binary, you need to download dependencies (parallel-hashmap and GLPK) and compile GLPK. This only needs to be done once, with the following script:
npm run getdep
Then, each time you modify any cpp file, you can simply do
npm run wasm -- dev
to build the wasm binary and js glue code, which will be moved to public/js.
Please refer to our Contribution Log or GitHub contribution statistics
Please refer to our documentation and contributing guide.
Some efforts have been made to make it easier to integrate plannable with other universities. If you want to use plannable to create course-scheduling websites for other universities, you probably need to:
- Fork this repository
- Overwrite src/config.ts with your custom configuration. See src/config.example.ts for reference
- Write your custom data loader that returns the correct objects in config.ts
- Make some tweaks to the source code in other places if needed.
- Build and deploy to some other places
If you have questions when integrating plannable with other schools or want to deploy your favor of plannable to a subdomain of plannable (e.g. yourschool.plannable.org), feel free to contact us by GitHub issue or email.
This project is licensed under GPL-3.0 - see the LICENSE file for details