{"id":21399187,"url":"https://github.com/chrischrislolo/courseplusplus","last_synced_at":"2026-01-04T04:03:43.392Z","repository":{"id":41945099,"uuid":"170039159","full_name":"ChrisChrisLoLo/CoursePlusPlus","owner":"ChrisChrisLoLo","description":"An application to streamline schedule building at the UofA","archived":false,"fork":false,"pushed_at":"2022-12-08T09:35:32.000Z","size":13877,"stargazers_count":2,"open_issues_count":4,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-23T02:42:08.028Z","etag":null,"topics":["beartracks","ualberta","university-of-alberta","uofa"],"latest_commit_sha":null,"homepage":"http://www.ucourseplus.com/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ChrisChrisLoLo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-02-10T23:22:25.000Z","updated_at":"2022-07-20T17:21:33.000Z","dependencies_parsed_at":"2023-01-24T21:45:42.141Z","dependency_job_id":null,"html_url":"https://github.com/ChrisChrisLoLo/CoursePlusPlus","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ChrisChrisLoLo%2FCoursePlusPlus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ChrisChrisLoLo%2FCoursePlusPlus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ChrisChrisLoLo%2FCoursePlusPlus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ChrisChrisLoLo%2FCoursePlusPlus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ChrisChrisLoLo","download_url":"https://codeload.github.com/ChrisChrisLoLo/CoursePlusPlus/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243892045,"owners_count":20364626,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["beartracks","ualberta","university-of-alberta","uofa"],"created_at":"2024-11-22T15:13:29.568Z","updated_at":"2026-01-04T04:03:43.319Z","avatar_url":"https://github.com/ChrisChrisLoLo.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# UCoursePlus\n\nThe University of Alberta has a dated course registry web application, which is slow,\ncomplicated, and at times counter-intuitive.\nThis application attempts to make the workflow of building a course semester quick, simple, and straight forward.\nBy using modern front-end technologies, this app is also now reactive and responsive.\n\n![](demo.gif)\n## End-User Information\n### Features\n- UCoursePlus now has class times, which now gives it the functionality to build schedules quickly and easily.\n- Search up any course within seconds, new or old.\n- Annoyances that come with Beartracks is no longer! It's now possible to have multiple windows open,\nhave the backspace button work reliably, and have the server up on a Saturday night.\n- Don't want to log in? No problem. A new guest mode allows users to try out the application, and lets them save\ntheir work locally. \n\n\n### Roadmap and Project Status\nV1.0 is now out. This application is now in a complete state. Additional features such as mobile first support\nand automatic data scraping could make this application highly desirable to the target audience. \n\nWhile I plan spending my time on other projects in the near future, this app can be expanded on in order to learn\nnew concepts or if a limited audience (friends/family) find the app useful. \n### Contributing\nThis app is open to contributions for anyone who wants to improve the app or hone their development skills.\nFeel free to make PRs for any bugfixes, cleanings, or tickets in the projects tab. Contact me if you\nhave a cool feature/idea you want to implement.\n### Credits\nThank you to IST for pointing me to the course calendar database resource.\n\n\n## Developer Information (Nerd Stuff)\n### Architecture\nThis is a monolithic REST API using Django coupled to a Single Page Application (SPA) in React.\nMost choices in technology favoured rapid development speed over cost over performance, due to the limited audience of this app,\nand therefore limited traffic.\n\nA React SPA was used to dip my toes into modern front-end software development. While using a SPA arguably made developing\nboth the front-end and back-end more complex, it does give the app a nice responsive feel, and does open doors\nin terms of architecture if I ever wish to swap out the front-end with a mobile client instead.\n\nThe database used was SQLite, which was used since the performance of an external database isn't likely to be needed,\nand can double the uptime cost for the app.\n\nThe backend directly clones any information on the University's database to it's own database,\nand then serves any requests using it's own copy.\nWhile this means the backend will never have the most recent data at any given time,\nit also means the app is never dependent on the University's database, and can continue to function even if the\ndatabase is ever taken down or made private.\n\n### Technologies used\n#### Front-end\n- React\n- Sass\n- ES6\n- Bootstrap\n- HTML5/CSS3\n#### Back-end\n- Django\n- Django REST framework\n- SQLite\n- AWS\n- Nginx\n- Gunicorn\n- Linux\n### Achievements\n- A solid understanding and use of the React framework, ES6, and API consumption\n- Utilizing the CSS Grid system to display data in a visual manner (used in the schedule component).\n- Design and development of a RESTful API\n- Extracting and transforming NoSQL data into a normalized SQL schema\n- Setting up a server \"from scratch\" with AWS Lightsail and Nginx\n- One step deployment using ssh and shell scripts\n### Limitations\nThe biggest sticking point for me is that any new data in the University's database must be patched in. Even if automation was in place, and even if the scrapes were frequent and efficient, this app would\nstill have issues determining if a class is full or not, since class availability can wildly fluctuate within a day. \nThis to some degree limits the advantages of this app over the current one, since it cannot be reliably used in situations \nwhere there are only a few seats open. The alternative would be to directly query the \noriginal database, but again if the database were to ever go down, then so too would this app.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchrischrislolo%2Fcourseplusplus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchrischrislolo%2Fcourseplusplus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchrischrislolo%2Fcourseplusplus/lists"}