/reactjs-firebase

Primary LanguageJavaScriptMIT LicenseMIT

React Starter Kit for Firebase   a.k.a. Serveless Edition
Build Status Twitter

React Starter Kit for Firebase is a popular project template (aka, boilerplate) for building modern, scalable web applications with React, Relay, and GraphQL using serverless infrastructure provided by Firebase (Cloud SQL, Cloud Functions, CDN hosting, and file storage). It allows you to save time and build upon a solid foundation and design patterns.

View online demo  |  Follow us on Twitter  |  Get FREE support on Telegram  |  Visit our sponsors:

Hiring  


This project was bootstraped with React Starter Kit for Firebase by Kriasoft.

Tech Stack

Also, you need to be familiar with HTML, CSS, JavaScript (ES2015) and React.

Directory Layout

├── build/                         # Compiled output
├── node_modules/                  # 3rd-party libraries and utilities
├── public/                        # Static files such as favicon.ico etc.
├── src/                           # Application source code
│   ├── admin/                     # Admin dashboard
│   ├── components/                # Shared React components
│   ├── news/                      # News section (example)
│   ├── pages/                     # Static pages (landing, about, privacy, etc.)
│   ├── server/                    # Server-side code (API, authentication, etc.)
│   │   ├── db/                    # Database client
│   │   ├── story/                 # Story related schema, queries, and mutations
│   │   ├── user/                  # User related schema, queries, and mutations
│   │   ├── api.js                 # GraphQL API middleware
│   │   ├── Context.js             # GraphQL context wrapper
│   │   ├── createRelay.js         # Relay factory method for Node.js envrironment
│   │   ├── login.js               # Authentication middleware, login pages
│   │   └── ssr.js                 # Server-side rendering middleware
│   ├── templates/                 # HTML templates for server-side rendering
│   ├── user/                      # User pages (login, my account, profile, etc)
│   ├── app.browser.js             # Client-side rendering, e.g. ReactDOM.render(<App />, container)
│   ├── app.node.js                # Server-side rendering, e.g. ReactDOMServer.renderToString(<App />)
│   ├── auth.js                    # Client-side authentication manager
│   ├── createRelay.js             # Relay factory method for browser envrironment
│   ├── router.js                  # Universal application router
│   ├── graphql.schema             # GraphQL schema (auto-generated, used by Relay)
│   ├── serviceWorker.js           # Service worker helper methods
│   └── theme.js                   # Overrides for Material UI default styles
├── .env                           # Environment variables
├── config-overrides.js            # Configuration overrides for Babel and Webpack
└── package.json                   # The list of project dependencies + NPM scripts

Prerequisites

Getting Started

Just clone the repo, update environment variables in .env and/or .env.local file, and start hacking:

$ git clone https://github.com/kriasoft/react-firebase-starter.git MyApp
$ cd MyApp
$ yarn setup                       # Installs dependencies; creates PostgreSQL database
$ yarn start                       # Compile the app and opens it in a browser with "live reload"

Then open http://localhost:3000/ to see your app.

npm start

How to Migrate Database Schema

$ yarn db-change                   # Create a new database migration file
$ yarn db-migrate                  # Migrate database to the latest version
$ yarn db-rollback                 # Rollback the latest migration
$ yarn db-save                     # Save data from database to JSON files
$ yarn db-seed                     # Seed database with previously saved data

How to Test

$ yarn lint                        # Check JavaScript and CSS code for potential issues
$ yarn lint-fix                    # Attempt to automatically fix ESLint warnings
$ yarn test                        # Run unit tests. Or, `yarn test -- --watch`

How to Deploy

  1. Create a new Google Cloud project and Cloud SQL database.
  2. Open your Google Cloud project in Firebase dashboard and configure Facebook authentication.
  3. Update Firebase project IDs for production and development environments in .firebaserc file.
  4. Save Firebase API key, authentication domain and GPC service key in Firebase Functions environment. For example firebase functions:config:set api.browserkey="..." auth.domain="..."
  5. Update database host/user/password in either .env or .env.local file and migrate your Cloud SQL database schema to the latest version by running yarn db-migrate.
  6. Finally, deploy your application by running:
$ yarn deploy                      # Build the app and deploy to development environment
$ yarn deploy-prod                 # Build the app and deploy to production

How to Update

If you keep the original Git history after cloning this repo, you can always fetch and merge the recent updates back into your project by running:

git remote add react-firebase-starter https://github.com/kriasoft/react-firebase-starter.git
git checkout master
git fetch react-firebase-starter
git merge react-firebase-starter/master
yarn install
yarn relay

NOTE: Try to merge as soon as the new changes land on the master branch in the upstream repository, otherwise your project may differ too much from the base/upstream repo.

How to Contribute

Anyone and everyone is welcome to contribute to this project. The best way to start is by checking our open issues, submit a new issues or feature request, participate in discussions, upvote or downvote the issues you like or dislike, send pull requests.

Learn React.js and ES6

🎓   React for Beginners and ES6 Training Course by Wes Bos
📗   React: Up & Running: Building Web Applications by Stoyan Stefanov (Aug, 2016)
📗   Getting Started with React by Doel Sengupta and Manu Singhal (Apr, 2016)
📗   You Don't Know JS: ES6 & Beyond by Kyle Simpson (Dec, 2015)

Related Projects

  • React App SDK — Create React App modification that unlocks server-side rendering
  • React Starter Kit — Boilerplate and tooling for building isomorphic web apps with React and Relay
  • Node.js API Starter Kit — Boilerplate and tooling for building data APIs with Docker, Node.js and GraphQL

License

Copyright © 2015-present Kriasoft. This source code is licensed under the MIT license found in the LICENSE.txt file.


Made with ♥ by Konstantin Tarkus (@koistya, blog) and contributors