janktable

Janktable

How can I browse all Yale course reviews? A project that enables the search of Yale Coursetable through keywords

JankTable (coursetable-keyword-search)

This repository lives on in the yaleapps repository under /apps/reviewtable. The successor lives on in reviews.yaleapps.com.

About

This app is designed to help with one question: how can I browse all Yale course reviews? It aggregates all reviews and allows you to filter them down by keyword, department, etc.. It is especially useful for trying to find the best courses in a certain department.

Choosing the right course can be lifechanging. Hopefully this helps with that.

Why not CourseTable?

I love CourseTable! This is designed to compliment rather than compete with CourseTable —in fact, it is built on top of CourseTable's backend API. JankTable specifically targets course reviews as opposed to other metrics. You are encouraged to use them side-by-side!

How does it work?

The app makes a request under the "/api/search" route, which runs a graphql query to the Yale CourseTable API:

    $keyword: String!
    $course_keyword: String!
) {
    computed_listing_info_aggregate(
        where: {
            _and: [
                { course_code: { _ilike: $course_keyword } }
                { course: { evaluation_narratives: { comment: { _ilike: $keyword } } } }
            ]
        }
        order_by: { course: { evaluation_narratives_aggregate: { count: desc } } }
    ) {
        aggregate {
            count
        }
        nodes {
            all_course_codes
            areas
            course_code
            credits
            description
            listing_id
            same_course_id
            season_code
            skills
            title
            course {
                evaluation_narratives_aggregate_filtered: evaluation_narratives_aggregate(
                    where: { comment: { _ilike: $keyword } }
                ) {
                    aggregate {
                        count
                    }
                    nodes {
                        comment
                    }
                }
                evaluation_narratives_aggregate {
                    aggregate {
                        count
                    }
                }
            }
        }
    }
}

Which is called under the "/api/search" route. The results are then parsed into a format that's easy to work with and displayed in a table. The results are then cached in Redis for 24 hours.

Why is it called JankTable?

Numerous reasons/design decisions, one being how I was able to make the GraphQL requests to work when CourseTable's GraphQL playground is down, and second how the Spring courses are filtered client side because I couldn't figure out how to filter them in the GraphQL query server side.

Also, JankTable is just more memorable!

What's the tech stack, and aren't you a CS Major?

This is built with SvelteKit+TailwindCSS (with DaisyUI) deployed on Vercel, with the external CourseTable GraphQL backend.

I'm not a CS major, but I'm actually an Ethics, Politics, and Economics major who happens to enjoy writing code.

How can I contact you?

I’m echoing Devon Zuegel’s, Dan Wang’s, Patrick McKenzie’s, and Zhengdong Wang's standing invitations. I really like getting email. If you ever want to chat, have any questions, bug reports, etc., please feel free to email me.

I hope you find this useful!! :D

-Braden ❤

Development

Once you've created a project and installed dependencies with bun install (or npm install or pnpm install or yarn), start a development server:

bun run dev

# or start the server and open the app in a new browser tab
bun run dev -- --open

Top categories

Loading Svelte Themes