All Projects → nearform → choo-pwa

nearform / choo-pwa

Licence: other
PWA with Choo

Programming Languages

javascript
184084 projects - #8 most used programming language
CSS
56736 projects

Projects that are alternatives of or similar to choo-pwa

framework
Envuso is a backend framework focusing building apis using Fastify and MongoDB support.
Stars: ✭ 12 (-33.33%)
Mutual labels:  fastify
fastify-session
session plugin for fastify
Stars: ✭ 93 (+416.67%)
Mutual labels:  fastify
schsrch
Simple and intuitive CIE search engine
Stars: ✭ 35 (+94.44%)
Mutual labels:  progressive-web-app
TimeTableManager
Simple react application to create a TimeTable based only on your choice of subjects.
Stars: ✭ 30 (+66.67%)
Mutual labels:  progressive-web-app
gatsby-pwa-demo
PWA Example: Progressive Web App E-Commerce with Gatsby.js
Stars: ✭ 68 (+277.78%)
Mutual labels:  progressive-web-app
react-redux-nextjs-bootstrap-pwa-starter
a progressive web app starter with next js redux + redux-persist + bootstrap
Stars: ✭ 69 (+283.33%)
Mutual labels:  progressive-web-app
flowloop
A Pomodoro-like timer for hyper-productivity
Stars: ✭ 69 (+283.33%)
Mutual labels:  progressive-web-app
entropass
Maximum-security password manager
Stars: ✭ 21 (+16.67%)
Mutual labels:  progressive-web-app
create-next-pwa
⚡️ Set up Next.js Progressive Web App with `npx create-next-pwa`
Stars: ✭ 59 (+227.78%)
Mutual labels:  progressive-web-app
cache-component
DEPRECATED: Use nanocomponent. Will continue to operate as normal
Stars: ✭ 16 (-11.11%)
Mutual labels:  choo
create-fastify-app
An utility that help you to generate or add plugin to your Fastify project
Stars: ✭ 53 (+194.44%)
Mutual labels:  fastify
nest-rest-mongo-boilerplate
🍱 backend with nest (typescript), mongoose, and authentication
Stars: ✭ 180 (+900%)
Mutual labels:  fastify
fastify-etag
Automatically generate etags for HTTP responses, for Fastify
Stars: ✭ 61 (+238.89%)
Mutual labels:  fastify
choo-offline
🔧 offline first support for choo apps
Stars: ✭ 12 (-33.33%)
Mutual labels:  choo
pwa-angular4
A progressive webapp with Angular 4 (PLEASE NOTE: angular 5 support PWA )
Stars: ✭ 13 (-27.78%)
Mutual labels:  progressive-web-app
titus
Deploy useful features in sprint one
Stars: ✭ 59 (+227.78%)
Mutual labels:  fastify
eureka
HTML-first crack at a Flexible Media Browser progressively enhanced with React
Stars: ✭ 18 (+0%)
Mutual labels:  progressive-web-app
battery-status-progressive-web-app
Progressive Web App (PWA) https://irekrog.github.io/battery-status-progressive-web-app/
Stars: ✭ 17 (-5.56%)
Mutual labels:  progressive-web-app
fastify-prisma
Basic Fastify app using Prisma as an ORM
Stars: ✭ 26 (+44.44%)
Mutual labels:  fastify
fastify-passport
Use passport strategies for authentication within a fastify application
Stars: ✭ 150 (+733.33%)
Mutual labels:  fastify

Choo PWA

PWA built with Choo and Fastify

Demo: https://choo-pwa.nearform.com/

Features:

  • Dynamic code splitting
  • Server side renderering
  • HTTP/2 push
  • App shell model
  • Service worker with asset pre-caching

Libraries used:

  • choo - 4kb frontend framework
  • choo-async - Asynchronous rendering with Choo
  • choo-ssr - Server side renderering with Choo and Fastify
  • choo-bundles - Dynamic code splitting with SSR and HTTP/2 push support
  • choo-data - Data fetching with SSR support
  • fastify - Fast and low overhead web framework
  • fastify-static - Fastify plugin for serving static files
  • fastify-compress - Fastify plugin for compression utils
  • Workbox - Library for best practices when working with service workers

Quick start

Run in developemnt mode

npm run watch

Open https://localhost:3000

Run in production mode (requires build first)

npm start

Make a build

npm run build

Infra

CI / CD

This repo has its own CircleCI project attached to it: https://circleci.com/gh/nearform/react-pwa

Whenever a new commit is pushed into master, a new CircleCI build will be triggered and that build will follow the steps defined in .circleci/config.yml:

  • it will set up its own environment, including the Docker daemon and required containers
  • install the npm modules required by the app to make sure there aren't any dependency issues
  • run tests (there are none written now unfortunately)
  • build a Docker container based on the included Dockerfile
  • push that container to the container registry hosted by AWS (ECR)
  • trigger a deploy. This means forcing an update on the ECS service and cluster hosting the application (see below). This will force the service and cluster to re-download the Docker container defined in the ECS task (the one tagged with latest and that has been pushed to the registry by the above step)

Hosting

This app is hosted on a AWS ECS Fargate cluster. This basically let's you define a task (what container to run) and a cluster to run it on, just like the clasic ECS cluster. The difference is that you do not need to define and manage EC2 instances in the cluster, it is all abstracted for you. You just need to define the resources (CPU, memory) you need and that's it.

On top of that, there is a ECS service defined, that puts together what load balancer, what cluster and task to use.

The loadbalancer in this case is a purely TCP loadbalancer. That's because we wanted to make sure we use HTTP2 for this application, and the node app is configured to serve that. That also means that node serves the SSL certificate, which can be found in the https dir and needs to be renewed every 3 months as it is generated by letsencrypt. Upon renewal, it will need to be built in the docker container and redeployed.

TODO

  • Automate the SSL certificate renewal somehow

License

Copyright 2018 nearForm

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

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].