Submitted by: Noah Kim
This web app: RateMyMajor is your ultimate resource for exploring academic programs, reading student reviews, and finding the perfect fit for your future.
Time spent: 20 hours spent in total
The following required functionality is completed:
- A create form that allows the user to create posts
- Posts have a title and optionally additional textual content and/or an image added as an external image URL
- A home feed displaying previously created posts
- By default, the time created, title, and number of upvotes for each post is shown on the feed
- Clicking on a post shall direct the user to a new page for the selected post
- Users can sort posts by either their created time or upvotes count
- Users can search for posts by title
- A separate post page for each created post, where any additional information is shown is linked whenever a user clicks a post
- Users can leave comments underneath a post on the post's separate page
- Each post should have an upvote button on the post's page. Each click increases its upvotes count by one and users can upvote any number of times
- A previously created post can be edited or deleted from its post page
The following optional features are implemented:
- Users can only edit and deleted posts or delete comments by entering the secret key, which is set by the user during post creation
- Upon launching the web app, the user is assigned a random user ID. It will be associated with all posts and comments that they make and displayed on them.
- Users can customize the interface of the web app
- Display a loading animation whenever data is being fetched
The following additional features are implemented:
- User authentication via supabase Oauth and google sign in
- Users can log in and log out limiting or granting them access to the website
- Likes and dislikes for each commenter.
- Each user's post is associated with their gmail
- Fuzzy searching for all universities in the United States
- Light and dark theme
Search for content by keywords or categories.
Log in to the application with your credentials.
Log out of the application securely.
Create and publish new reviews for your major.
Update and modify existing reviews of yours.
Remove unwanted reviews of yours.
View and read published reviews.
GIF created with LICEcap...
Check out the website live: ratemymajor.com
Challenges encountered while building the app:
One major challenge I encountered while building this app was implementing an efficient search functionality
for the universities. With thousands of universities in the database, ensuring good performance
for the search bar was crucial. With thousands of universities in the database, ensuring good performance for the search bar was crucial.
To tackle this, I utilized the Fuse.js library, which is designed for fuzzy searching and fast performance.
This was necessary to prevent the application from becoming sluggish or unresponsive when dealing with a large volume of data.
Another area that took some time and effort was setting up user authentication. Reading through the documentation and understanding the intricacies of secure authentication workflows.
On the front-end side, I utilized the Shadcn to help with the styling and overall look and feel of the website.
While this library accelerated the component development process, there was still a learning curve in understanding its design system, customization options, and making it work seamlessly with my application's specific requirements. Finding the right balance between leveraging the library's capabilities while maintaining my desired visual aesthetic was a challenge I had to navigate.
Copyright 2024 Noah Kim
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.






