All Projects β†’ mike-works β†’ Pwa Fundamentals

mike-works / Pwa Fundamentals

Licence: other
πŸ‘¨β€πŸ« Mike & Steve's Progressive Web Fundamentals Course

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to Pwa Fundamentals

Beer
The source code for the Progressive Beer app!
Stars: ✭ 73 (-71.48%)
Mutual labels:  pwa, progressive-web-app, service-worker
Pwa
Progressive Web Apps for Rails
Stars: ✭ 133 (-48.05%)
Mutual labels:  pwa, progressive-web-app, service-worker
Ionic Pwa
πŸš€ Build a Progressive Web App with Ionic and Angular. Push Notifications. Deployed to Firebase Hosting. The Complete guide to build your PWA. Service Workers. Lighthouse. Web Manifest
Stars: ✭ 87 (-66.02%)
Mutual labels:  pwa, progressive-web-app, service-worker
Vue Wordpress Pwa
An offline-first SPA using Vue.js, the WordPress REST API and Progressive Web Apps
Stars: ✭ 665 (+159.77%)
Mutual labels:  pwa, progressive-web-app, service-worker
Ember Service Worker
A pluggable approach to Service Workers for Ember.js
Stars: ✭ 227 (-11.33%)
Mutual labels:  pwa, progressive-web-app, service-worker
Pushkit
All the required components to set up independent web push notifications 🎈
Stars: ✭ 45 (-82.42%)
Mutual labels:  pwa, progressive-web-app, service-worker
jekyll-pwa-workbox
A Jekyll plugin using Workbox to make your PWA / Website available offline.
Stars: ✭ 22 (-91.41%)
Mutual labels:  pwa, service-worker, progressive-web-app
Super Progressive Web Apps
SuperPWA helps to convert your WordPress website into Progressive Web Apps instantly. PWA (Progressive Web Apps) demo at : https://superpwa.com and Plugin :
Stars: ✭ 304 (+18.75%)
Mutual labels:  pwa, progressive-web-app, service-worker
quiz-app
πŸ† QuizApp is a free and open-source quiz application that lets you play fully customized quizzes right in the browser.
Stars: ✭ 97 (-62.11%)
Mutual labels:  pwa, progressive-web-app, mobile-web
Pwatter
Angular Progressive Web App using Workbox
Stars: ✭ 167 (-34.77%)
Mutual labels:  pwa, progressive-web-app, service-worker
Upup
✈️ Easily create sites that work offline as well as online
Stars: ✭ 4,777 (+1766.02%)
Mutual labels:  pwa, progressive-web-app, service-worker
Jfa Pwa Toolkit
⚑️ PWA Features to Any Website (very Fast & Easy)
Stars: ✭ 245 (-4.3%)
Mutual labels:  pwa, progressive-web-app, service-worker
Offline Plugin
Offline plugin (ServiceWorker, AppCache) for webpack (https://webpack.js.org/)
Stars: ✭ 4,444 (+1635.94%)
Mutual labels:  pwa, progressive-web-app, service-worker
The forge
Our groundbreaking, lightning fast PWA CLI tool
Stars: ✭ 70 (-72.66%)
Mutual labels:  pwa, progressive-web-app, service-worker
Pwa Book Cn
η¬¬δΈ€ζœ¬ PWA δΈ­ζ–‡δΉ¦
Stars: ✭ 3,498 (+1266.41%)
Mutual labels:  pwa, progressive-web-app, service-worker
Service Worker Detector
This extension detects if a website registers a Service Worker.
Stars: ✭ 124 (-51.56%)
Mutual labels:  pwa, progressive-web-app, service-worker
Android Pwa Wrapper
Android Wrapper to create native Android Apps from offline-capable Progressive Web Apps
Stars: ✭ 265 (+3.52%)
Mutual labels:  pwa, progressive-web-app, service-worker
Progressive Web Apps Book
All of the code for "Progressive Apps" - a book by Dean Hume
Stars: ✭ 270 (+5.47%)
Mutual labels:  pwa, progressive-web-app, service-worker
Monitaure
πŸ”” A server uptime monitoring progressive web application - NO LONGER MAINTAINED
Stars: ✭ 135 (-47.27%)
Mutual labels:  pwa, progressive-web-app, service-worker
Productivity Frontend
Productivity Application - Kanban Style Productivity Management Application with Customizable Boards, Lists and Cards to Make You More Productive.
Stars: ✭ 234 (-8.59%)
Mutual labels:  pwa, progressive-web-app, service-worker

This is the example project used for the Mike and Steve's PWA Fundamentals course.

Course outline and slides

About This Workshop

Progressive Web Apps become superheroes when they can, while still providing a great baseline experience on less modern browsers. They're reliable, fast, engaging, and although they can do many of the things users expect from native apps, they don't take up a lot of space, or require a long install process.

In this workshop, we'll begin with a "classic" single page app, that's a bit bulky in size, has a slow initial load, doesn't work offline, and provides a very "basic" mobile web experience. We'll then enhance it in several ways, so that when key technologies are supported in your users' browsers, their experience ends up being substantially better!

What will we do?

First, we’ll add any mobile-specific metadata to the app, and look at how we can use android studio and the iOS simulator to test out our improvements. In order to reduce our page weight a little bit, we'll discuss how to choose between image types like png and jpeg, and some recent advances in compression.

Next, we'll add a service worker, and apply a few caching strategies to ultimately allow our app to work offline! Additionally, we'll take advantage of IndexedDb, so that new data created on a mobile device can be stored as a structured record, available both in our application and service worker scopes.

Then, we'll make use of Web Push and Notifications to engage our users bring them back into the app, and explore encryption and signing techniques that ensure our web clients only get messages that originate from our servers.

Finally, we’ll use Background Sync to further reduce our app’s dependency on a network connection, enabling it to be a free-standing piece of software that synchronizes with the rest of the world when possible.

By coding along in this workshop, you will…

  • Learn how to audit a web application for β€œProgressive Web Fitness" with Lighthouse, and to measure important performance metrics like "time to first load" and "time to interactive"
  • Take a "classic" client-side-rendered single-page app, and make it work offline, without changing a single line of the app's code.
  • Get hands-on experience with IndexedDb, a worker-friendly nosql database that's built in to most browsers.
  • Build an example of the App-Shell architecture, where large portions of the UI load almost instantly
  • Learn what you can do to keep your JavaScript code fast, by taking a look at some aspects of JavaScript engines, and taking advantage of some tools to keep us on the speedy path.
  • And much more...

Setup

Please make sure you have the following software installed before arriving at the workshop or beginning the course.

General Packages

Please make sure you have the following general software installed

Required Library Version Range Notes
βœ” Node.js >= 7.10 nvm is highly recommended for managing multiple node versions on a single machine
βœ” Visual Studio Code >= 1.14 We'll be using several specific features of the VS Code editor. We can't force you to use it, but you'll miss out if you don't!
βœ” Yarn >= 0.24 An alternative to npm
βœ” Firefox >= 50 We'll need Firefox briefly in order to create certificates.
βœ” SQLite 3 >= 3 Embedded database

VS Code Extensions

Additionally, to take advantage of syntax hilighting, static code analysis and other editor features, you'll want to install the latest version of the following VS Code extensions

Required Extension Notes
βœ” sass-indented Syntax highlighting and code completion support for Sass stylesheets
βœ” eslint Static code analysis for JavaScript and JSX files
βœ” jest Syntax highlighting for Jest snapshot testing and in-editor test pass/fail statuses
vscode-icons Better file and folder icons
rest-client An in-editor REST client, so we can experiment with our API effortlessly

Global Node.js Packages

Make sure you have these npm packages installed globally. This can be done by running

npm install -g <package-name>
Required Library Version Range
βœ” babel-eslint ^7.0.0
βœ” eslint ^4.0.0
βœ” eslint-plugin-babel ^4.0.0
βœ” eslint-plugin-react ^7.1.0
βœ” web-push ^3.0.0

Project setup

Finally, while in the top-level folder of this project, download the and install this project's dependencies by running

yarn

We'll also need some certificates so we can run a development webserver over HTTPS. You can generate them by running

yarn prepcerts

To start the server, run

yarn watch

(Pro tip: If everything looks like it works, but you can't access the page in your browser, make sure you're using HTTPS. Try https://localhost:3000/.)

Files and Folders

This is a free-standing client/server Progressive Web App system, including

  • A database
  • A REST API
  • A web client, which starts out as a conventional single-page app, and becomes a progressive web app you progress through the workshop
 Project
 β”‚
 β”œβ”€ client/            πŸ“± React.js web client
 β”‚  β”œβ”€ components/     πŸ“Š React components
 β”‚  β”‚  β”‚
 β”‚  β”‚  β”œβ”€ my-thing/index.jsx        Component implementation
 β”‚  β”‚  β”œβ”€ my-thing/index.test.js    Component tests
 β”‚  β”‚  └─ my-thing/styles.scss      Component styles
 β”‚  β”‚
 β”‚  β”œβ”€ routes/         πŸ” Top-level React components, each corresponding to a "page" in our app
 β”‚  β”œβ”€ sass/           πŸ’… Global Sass stylesheets
 β”‚  β”œβ”€ app.jsx         🎁 React "App" component
 β”‚  β”œβ”€ index.js        🎬 Web client entry point
 β”‚  └─ index.ejs       πŸ“„ Template for web client index.html
 β”‚
 β”œβ”€ db/                πŸ’Ύ SQLite databases
 β”œβ”€ dist/              πŸ“¦ Web client development/production builds
 β”œβ”€ server/            πŸ›’ Node.js API to support the web client
 β”œβ”€ webpack/           βš™οΈ Build configuration
 └─ .vapid.json        πŸ” VAPID private and public keys

How to use it

Generate x509 Certificates for serving over HTTPS

npm run prepcerts

Start the Development Server

To start the development server, run

npm run watch

If you want, you can start the API and UI independently, by running

npm run watch:api # API only
npm run watch:ui # UI only

Build Development Assets in the /dist folder

This will be an un-minified version of an exercise, and will include some webpack-specific tooling, intended only for development use

npm run build:dev

Build Production Assets in the /dist folder

This will be an an optimized version of the exercise

npm run build:prod

Run tests

npm test

Clean old builds

npm run clean

What are the pieces?

License

While the general license for this project is the BSD 3-clause, the exercises themselves are proprietary and are licensed on a per-individual basis, usually as a result of purchasing a ticket to a public workshop, or being a participant in a private training.

Here are some guidelines for things that are OK and NOT OK, based on our understanding of how these licenses work:

OK

  • Using everything in this project other than the exercises (or accompanying tests) to build a project used for your own free or commercial training material
  • Copying code from build scripts, configuration files, tests and development harnesses that are not part of the exercises specifically, for your own projects
  • As an owner of an individual license, using code from tests, exercises, or exercise solutions for your own non-training-related project.

NOT OK (without express written consent)

  • Using this project, or any subset of exercises contained within this project to run your own workshops
  • Writing a book that uses the code for these exercises
  • Recording a screencast that contains one or more of this project's exercises

Copyright

Β© 2017 Mike Works, Inc. and Steve Kinney, All Rights Reserved

This material may not be used for workshops, training, or any other form of instructing or teaching developers, without express written consent
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].