Blog Platform

Objective

  • Students will employ good software design and testing principles in order to create a full-stack, server-side-rendered, web application.
  • Students will build the front end portion using HTML, Handlebars, and CSS. (No frameworks, No front end JS... at all)
  • Students will build the back end portion using Node/Express

The Scenario

We've been hired by NobodyCares Inc. to build a Proof of Concept (PoC) application to make the next new hot blogging platform! This being a PoC app, we don't (yet) have to worry about all of the security and user management concerns that we would have in a fully functional application. All our client wants from us are the beginnings of the actual User eXperience (UX). Our client also wants an in depth and COMPLETE look at our applications User Interface (UI), so let's make it look good.

Model Components

Post

We can't very well have a blog without some posts. Each post should include:

  • title
  • body
  • Authors
  • publishDate
  • genre or category (each Post should have only one)
  • tags

Author

We'll also need to be able to make Authors. Each Author should have:

  • name
  • posts

Genre or Category

  • name
  • posts

Tag

Each Tag should have:

  • name
  • posts

Views

We need View templates to display all of our Posts. But we should also be able to view our content based on the other identifying components we have. So each of our entities should be viewable in their own templates. We should have templates that display the collections of all entities as well as an individual instance of an entity. We also need a landing (home) page that welcomes the user to our application. We should have navigation very clearly presented on all pages so that the user is able to navigate through our application.

Users should be able to add an instance of ANY entity from it's collections page. For example, a user should be able to create a new Tag from the all Tags page. Our users should also be able to add a new Post to the all Posts page. However, the users should not be able to CREATE Authors, Genres, or Tags from the Post creation. Our users should have to SELECT those options from existing options. (Think about the types of inputs that would allow this behavior)

Make sure all collections are organized with proper containing elements (i.e. ol or ul for list items, fieldset for inputs)

Controllers

Last, we need to direct traffic efficiently. All of our entities should be managed by their own Controller. For example, all interaction with Posts should be isolated to one Controller. You may have to ACCESS other entities in your Controllers. But the main entities that Controller is meant to direct should be well organized.

Tips for Getting Started

Plan

  1. KEEP IT SIMPLE! Our applications aren't complicated until WE make them that way.
  2. KEEP IT SIMPLE! So important that it gets two rules.
  3. Start by mapping out the relationships of your entities with your partner.
  4. Figure out how Objects will be organized and constructed.
  5. Think about how you will store and retrieve info from your database
  6. Plan what components you will build in what order.

Prepare

  1. Get a project started on GitHub and make some issues.
  2. Create a project with the Express Generator
  3. Get everything connected in VSCode.
  4. Make sure your partner is also connected and you can both contribute to the project.
  5. Make the branches you'll need for your project (master and dev to start).

Program

  1. Decide which of you will start as the driver and which will be the navigator.
  2. Get started with your first component.
  3. Once you finish your first issue, close it and switch places.
  4. Move on to the next component.
  5. Repeat this process until you're done. :)

Things You Will Be Graded On

  • TDD
  • Agile approach
  • Proper VCS usage (git)
  • Clean Code
  • Running application