Contributing to Paper
This page is intended for people that want to contribute to Paper itself. If you're looking to built your own application using Paper's APIs, see Developing with Paper.
About contributing to Paper
Paper was created and is maintained just by me, Dilan! I still actively make updates, but I've built the system in a way where the data is automatically updated and can continue do be done so after I graduate. However, if you are familiar with software development and are interested in fixing bugs or adding features, I'd always be happy to take a look at what you can do!
While some issues can be found on the issues page in Paper's repository, this is by no means a full list of what's being worked on. Officially, feedback should be left by users following the instructions on the feedback page, which is linked from Paper's About menu. Primarily, feedback is sent directly to me or to my support email address, so if you want to work on the project and don't have any bug fixes or feature additions in mind, you'd be best off asking me what there might be to do.
Submitting updates for review
Updates to Paper should be submitted as a pull request to the paper.nu GitHub repository. After making a PR, a suite of checks will automatically be run to make sure your updated code builds and is styled according to my project styling standards (which should be automatic provided you follow the setup instructions). It'll also request a review from me, which I probably won't miss.
Project tech stack
The Paper client-side web app runs on the following tech stack:
- All code is written in TypeScript.
- The UI is built using React.
- Styling is done with Tailwind CSS.
- Icons are from Heroicons.
- Animation is done with Framer Motion.
Working on the project assumes some prior knowledge of these libraries and frameworks. You can find a full list of project dependencies in the project's
Paper's API (handling user data and course data) is built into my generic API (api.dilanxd.com), the source code of which is not public. You'll have to talk to me if you need anything updated there.
All source code lives within
appcontains some of the primary app functionality code (functions that update the app state like adding or removing courses and sections from your plans and schedules, etc.).
assetscontains any static images bundled with the app.
componentscontains all React components. It's probably the most bulky part of the project.
typescontains TypeScript type definitions.
utilitycontains utility functions used throughout the app.
App.tsxis the root React component of the app.
PlanManager.tshandles most of the logic for managing plans.
ScheduleManager.tshandles most of the logic for managing schedules.
DataManager.tshandles loading and parsing course data.
SaveDataManager.tshandles loading and saving user data.
Account.tshandles retrieving and updating plan and schedule data saved to an account.
The latest code is on the
dev branch, so I recommend working on your own branch built from that one. The
main branch is auto-deployed to production, so it has the code that's currently live at paper.nu.
Fork the paper.nu GitHub repository, then clone your generated repository.
Install dependencies with
Ensure your code will be formatted properly, which is handled by Prettier. Follow installation instructions on their site to install into your editor. Make sure it's configured to format using the Prettier configuration file in the paper.nu repository, which should be done automatically. You can also enable formatting on save in your editor's settings. Tests will fail if the code isn't formatted properly.
npm run dev, then open the app using the localhost link provided in the console. Now, making any changes and saving should automatically refresh the local instance of the app in your browser!
When everything's working, you can submit a PR to the paper.nu GitHub repository!
There has yet to be anyone who has contributed to Paper other than me, so I haven't had to think about this yet. It'll definitely be something I think about if people end up choosing to contribute.
No one knows my own project better than me LOL (because I made it). Feel free to reach out any time! You can check out the feedback page to see good ways to do that.