MatthieuSegret / graphql-rails-blog

Blog App built with Rails 5, React and GraphQL

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

GraphQL Rails Blog

This application can be used as starter kit if you want to get started building an app with Rails, React, and GraphQL. This is a simple blog engine using ordinary features which can be found in most web applications.

If you are interested by Elixir, I created a similar application with Phoenix and Absinthe that you might like: Yummy Phoenix GraphQL.

Technologies

Frontend

  • TypeScript - A superset of JavaScript that compiles to clean JavaScript output.
  • React - A JavaScript library for building user interfaces. It introduces many great concepts, such as, Virtual DOM, Data flow, etc.
  • Create React App - is a new officially supported way to create single-page React applications. It offers a modern build setup with no configuration.
  • Bulma - Bulma is a modern CSS framework based on Flexbox
  • Apollo 2 - A flexible, fully-featured GraphQL client for every platform.
  • React Final Form - High performance subscription-based form state management for React.

Backend

  • Ruby 2.4
  • Rails 5.1
  • GraphQL-Ruby - GraphQL-Ruby is a Ruby implementation of GraphQL.
  • GraphQL-batch - GraphQL-batch is a query batching executor for the graphql gem.
  • Graphiql - Graphiql is an in-browser IDE for exploring GraphQL.
  • Rack CORS - Rack Middleware for handling Cross-Origin Resource Sharing (CORS), which makes cross-origin AJAX possible.
  • Optics Agent - Optics Agent for GraphQL Monitoring
  • SQLite3 for development and PostgreSQL for production.

Features

  • CRUD (create / read / update / delete) on posts
  • Creating comments on post page
  • Pagination on posts listing
  • Searching on posts
  • Authentication with Devise and authorizations (visitors, users, admins)
  • Creating user account
  • Update user profile and changing password
  • Setup dev tools
  • Application ready for production

GraphQL Using

  • Queries et mutations
  • FetchMore for pagination
  • Using apollo-cache-inmemory
  • Apollo Link (dedup, onError, auth)
  • Managing local state with Apollo Link
  • Optimistic UI
  • Static GraphQL queries
  • Validation management and integration with Final Form
  • Authentication and authorizations
  • Protect queries and mutations on GraphQL API
  • Batching of GraphQL queries into one HTTP request
  • Batching of SQL queries backend side

Prerequisites

Getting Started

  • Install Bundler

        $ gem install bundler
    
  • Checkout the graphql-rails-blog git tree from Github

        $ git clone https://github.com/MatthieuSegret/graphql-rails-blog.git
        $ cd graphql-rails-blog
        graphql-rails-blog$
    
  • Run Bundler to install/bundle gems needed by the project:

        graphql-rails-blog$ bundle
    
  • Create the database:

        graphql-rails-blog$ rails db:migrate
    
  • Load sample records:

        graphql-rails-blog$ rails db:seed
    
  • Run the Rails server in development mode

        graphql-rails-blog$ rails server
    
  • Run Yarn to install javascript package in other terminal:

        graphql-rails-blog$ cd client
        graphql-rails-blog/client$ yarn
    
  • Start client in development mode. You should be able to go to http://localhost:8080 :

          graphql-rails-blog/client$ yarn start
    

Next step

  • Use subscription GraphQL feature
  • Create mobile app with React Native

Screens

Listing posts

Listing posts

Creating comments

Creating comments

Post page

Post page

Editing post

Editing post

License

MIT © Matthieu Segret

About

Blog App built with Rails 5, React and GraphQL

License:MIT License


Languages

Language:TypeScript 57.5%Language:Ruby 39.9%Language:CSS 1.4%Language:JavaScript 0.9%Language:HTML 0.4%