Giter VIP home page Giter VIP logo

nextjs-pwa-firebase-boilerplate's Introduction

App icon

Next.js PWA Firebase

Next.js serverless PWA with Firebase and React Hooks

nextjs-pwa-firebase-boilerplate demo on phone

Note: this is my v4 boilerplate for React web apps. See also my GraphQL + Postgres SQL boilerplate, Redux + REST + Postgres SQL boilerplate and Redux + REST + MongoDB boilerplate. For a simple Next.js landing page, see nextjs-generic-landing-page.

Support this project

Did you or your company find nextjs-pwa-firebase-boilerplate useful? Please consider giving a small donation, it helps me spend more time on open-source projects:

Support Tom on Ko-Fi.com

Why is this awesome?

This is a great template for a any project where you want React (with Hooks) (with static site generation (SSG) or server-side rendering (SSR), powered by Next.js) as frontend and Firebase as backend. Lightning fast, all JavaScript.

  • Great starting point for a PWA (Progressive Web App), which you can add to your Home Screen and use as a full-screen app.
  • PWA features such as manifest.json and offline support (next-offline).
  • Can be deployed as serverless functions on Vercel/Zeit Now.
  • Uses the new Firebase Firestore database, but easy to replace/remove database.
  • Login/Signup with Firebase Authentication.
  • Can use SSG getStaticProps or SSR getServerSideProps.
  • React Hooks and Context for state management and business logic.
  • Free-form database model. No GraphQL or REST API, just add React Hooks and modify getStaticProps/getServerSideProps when changing/adding database tables.
  • Easy to style the visual theme using CSS (e.g. using Design Profile Generator).
  • SEO support with sitemap.xml and robots.txt.
  • Google Analytics and google-site-verification support (see config/config.js).
  • Flexible configuration with config/config.js and .env.local file.
  • Code linting and formatting with StandardJS (yarn lint/yarn fix).
  • Unit testing with Jasmine (yarn unit, not yet included).
  • Great page speed, see Lighthouse score:

Lighthouse score

Demo

See nextjs-pwa-firebase-boilerplate running on Vercel here.

nextjs-pwa-firebase-boilerplate demo on phone

How to use

Clone this repository:

git clone https://github.com/tomsoderlund/nextjs-pwa-firebase-boilerplate.git [MY_APP]
cd [MY_APP]

Remove the .git folder since you want to create a new repository

rm -rf .git

Install dependencies:

yarn  # or npm install

Start it by doing the following:

yarn dev

In production:

yarn build
yarn start

If you navigate to http://localhost:3004/ you will see a web page with a list of articles (or an empty list if you haven’t added one).

Modifying the app to your needs

Change app name and description

  • Do search/replace for the name’s “Next.js PWA Firebase”, “nextjs-pwa-firebase-boilerplate” and description “Next.js serverless PWA with Firebase and React Hooks” to something else.
  • Change the version in package.json to 0.1.0 or similar.
  • Change the license in package.json to whatever suits your project.

Renaming “Article” to something else

The main database item is called Article, but you probably want something else in your app.

Rename the files:

git mv hooks/useArticles.js hooks/use{NewName}s.js

mkdir -p components/{newName}s
git mv components/articles/AddArticleForm.js components/{newName}s/Add{NewName}Form.js
git mv components/articles/ArticleDetails.js components/{newName}s/{NewName}Details.js
git mv components/articles/ArticleList.js components/{newName}s/{NewName}List.js
git mv components/articles/ArticleListItem.js components/{newName}s/{NewName}ListItem.js
rm -r components/articles

mkdir pages/{newName}s
git mv "pages/articles/[slug].js" "pages/{newName}s/[slug].js"
rm -r pages/articles

Then, do search/replace inside the files for different casing: article, Article, ARTICLE.

Change port number

Do search/replace for 3004 to something else.

Set up Firebase database (Firestore)

Set up the database (if you don’t need a database, see “How to remove/replace Firebase as database” below):

  1. Go to https://console.firebase.google.com/ and create a new project, a new web app, and a new Cloud Firestore database.
  2. Copy the firebaseConfig (from when setting up the Firebase web app) to lib/data/firebase.js
  3. Edit the .env.local file, setting the NEXT_PUBLIC_FIREBASE_API_KEY value.

How to remove the Firebase dependency

  • Run yarn remove firebase
  • Delete lib/data/firebase.js and modify hooks/useArticles.js.

Replace Firebase with Postgres SQL

Replace Firebase with Supabase (Postgres SQL, real-time updates)

  • Remove Firebase: yarn remove firebase
  • Add Supabase: yarn add @supabase/supabase-js
  • Add NEXT_PUBLIC_SUPABASE_API_KEY to .env.local
  • Create a lib/data/supabase.js:
import { createClient } from '@supabase/supabase-js'
const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL
const supabaseKey = process.env.NEXT_PUBLIC_SUPABASE_API_KEY
export const supabase = createClient(supabaseUrl, supabaseKey)
  • Update the JS files that reference lib/data/firebase

Change visual theme (CSS)

  1. Change included CSS files in pages/_app.js
  2. Change CSS in public/app.css
  3. Change font(s) in PageHead.js
  4. Change colors in public/manifest.json

Login/Signup with Firebase Authentication

You need to enable Email/Password authentication in https://console.firebase.google.com/project/YOURAPP/authentication/providers

Deploying on Vercel

Note: If you set up your project using the Deploy button, you need to clone your own repo instead of this repository.

Setup and deploy your own project using this template with Vercel. All you’ll need is your Firebase Public API Key.

Deploy with Vercel

Todo

  • Optional unique title/description/image for each page (via _app.js)

nextjs-pwa-firebase-boilerplate's People

Contributors

dependabot[bot] avatar timothyis avatar tomsoderlund avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nextjs-pwa-firebase-boilerplate's Issues

Error enabling offline persistence when building boilerplate.

Bug report

Error occured when running yarn build.

Error enabling offline persistence. Falling back to persistence disabled: Error: ENOENT: no such file or directory, open 'C:\src\protos\google\firestore\v1\firestore.proto'
Error enabling offline persistence. Falling back to persistence disabled: Error: ENOENT: no such file or directory, open 'C:\src\protos\google\firestore\v1\firestore.proto'
Error enabling offline persistence. Falling back to persistence disabled: Error: ENOENT: no such file or directory, open 'C:\src\protos\google\firestore\v1\firestore.proto'
Error enabling offline persistence. Falling back to persistence disabled: Error: ENOENT: no such file or directory, open 'C:\src\protos\google\firestore\v1\firestore.proto

To Reproduce

Just following the readme of the repo (including configuring .env.local as .env.example instructed). Nothing else is done.

Expected behavior

succeful build.

System information

win10;
"firebase": "^7.15.5",
"next": "latest",
"next-offline": "^5.0.2",
"react": "16.13.1",
"react-dom": "16.13.1",
"react-toastify": "^6.0.8"

how to set up firebase key..

i seem to be missing something.. creating keys adding them, not obtaining a functonal result.

can you reccomend a best path for creating the correct api key?

thank you
Greg

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.