Building The Upcase Community

Upcase Team App Project

App Setup

App Features

The app you’ll be building is inspired by GoodReads, a social network
centered around books. You’ll be building out a subset of the functionality
on the site using normal Rails techniques. The domain lends itself well to
Rails, with a number of relationships and various ways to display the data
stored in the system.

This app is mainly about the books. Books have titles, descriptions,
cover images (no need to allow file uploads, just store the URL as a string).

Books also have one author and one (or none) genre. They can be grouped into
lists, like “Best Sci-Fi” or “Books that were made into movies”. A book can be
on multiple lists.

The app should comprise of the following pages (also see the attached
wireframes for a bit more detail)

Books Page

  • View a list of all books
  • List is paginated (20 per page)
  • Filter books by Genre
  • Sortable by date

Book page

  • View a single book, seeing detail like the summary which is not on the
    books list.
  • Users who are signed in and have not already written a review can write a
    text review of the book.
  • The book page should list all reviews (with the review user’s name).

Lists Page

  • Shows all of the lists of books, like “Best Sci-Fi”, “Romance”, etc
  • Displays the list title, and 5-10 book cover images for each list

List Page

  • View an individual list
  • Displays each of the books, similar to how they are displayed on the Books
    page

Authors Page

  • List all the authors
  • For each author, show name and sample covers of up to 5 of their books

Author Page

  • List author name, bio, etc
  • List author books, similar to display on List Page

Advanced Features

If you’re team gets through all of these challenges, then these are a few
more advanced features to try:

URL Slugs

Rather than the normal ID based urls, for instance /books/10, use “slugs”
based on the book title, for instance /books/the-martian.

Note The above example is likely insufficient as book titles are not
necessarily unique. Check out GoodReads for a pointer.

Allow Users to edit their reviews

1-5 Star Ratings w/ Review

In addition to the text review, allow users to give a book 1-5 stars. (feel
free to make this a drop down rather than fancy star widget in the form)

Display avg rating

Whenever books are displayed, show the average rating for the book based on
all the reviews

All sorting by average rating

In addition to the sort by date on the books page, allow sorting by avg
rating.

Judging Criteria

@ben and I will judge the apps based on a number of criteria, largely viewing
it as we would any client app. The thoughtbot guides are a good resource
if you are unsure how to move forward.

Some specific criteria we will be focussing on are:

  • Git history
  • Tests
    • Good feature coverage
    • Minimal duplication
  • Data model / architecture.
    • Clean separation of responsibilities for each model. DRY.
  • Clean, RESTful routing
    • On the books page, the URL should fully capture the pagination, sort, and
      filter state
  • Clean code
    • Minimal duplication
    • Expressive well named methods
    • small methods

Additional Guidelines

  • No JS - You should need little to no JavaScript to build this app. Even the
    pagination, sorting, and filtering should be done using plain HTTP
    requests and page reloads.
  • Link Everything - Everywhere you display a resource (a book, a list, an
    author, etc), make it a link to that resources page.
  • No Admin - No need to build admin functionality, instead just use the
    console to populate sample data.
  • Minimal Design - For this challenge we want to focus on the
    functionality and code, not the design. In general try to align to the
    layouts in the wireframes, but no need to sweat over fancy styling.
  • Gems are Fine - No need to rewrite the world, feel free to use gems as
    makes sense

Questions

Feel free to post any questions here and I’ll do my best to answer them and
clarify.

3 Likes