Build a collaborative blog application that allows multiple users to contribute blogs under their own names.
This is the first project for the Bloc Alumni Hacker's Club. The first group of about 6 members would like to collaboratively build a blog application to which they can all contribute.
- Authentication and authorization. Users must be able to sign in and blog under their own name, assuming they have a (e.g.) "writer" role. Suggested roles are: (in order of privileges, less to more)
- Writer: has complete CRUD abilities for their own blogs
- Editor: has complete CRUD abilities for their own and other blogs
- Admin: has complete CRUD abilities for all blogs, plus CRUD ability for user accounts
- CRUD action tracking. Users should be able to see a history of who-did-what for each blog. This will make (e.g.) editing fully transparent.
- Blog editing should be markdown enabled.
- Blogs templates should include social sharing features for Twitter, Facebook, etc.
- Users should be able to see a history of their blogs
- Writers should be able to see their own
- Editors and Admins should be able to see a history of their own blogs, and also a history for other users
- The landing page should display a list of linked blog titles and their first paragraphs, newest to oldest. The links should be perma-links, with friendly URLs for better SEO.
- Devise for authentication
- Pundit for authorization
- Skeleton for a minimal CSS framework. Review our ebook for a complete implementation example of Skeleton.
- Use friendly URLs for better SEO and link recognition.
- Use TDD to build this app. View our general approach to TDD, or a more specific example with the Bloccit application.
- Use Rails API, instead of full-blown Rails. Create a REST API for all blog actions. Create an Angular application client that talks to the blog API. Using a frontend framework like Angular will make for a snappy UI and will provide access to handy directives for things like Markdown and infinite scroll. Here's a simple implementation example of wiring a Rails API and Angular client together.