├── .gitignore ├── .travis.yml ├── CONTRIBUTING.md ├── README.md ├── api ├── .firebaserc ├── README.md ├── app.yaml ├── firebase.json ├── functions │ ├── index.js │ └── package.json ├── package-lock.json ├── package.json ├── src │ ├── deploy.ts │ └── index.ts ├── tsconfig.json └── yarn.lock ├── docs └── api.md ├── media └── logo.png └── site ├── .firebaserc ├── .gitignore ├── Gemfile ├── Gemfile.lock ├── _apps ├── angular-dart-hnpwa.txt ├── angular-hacker-news.txt ├── angular-hn.txt ├── angular-hnpwa.txt ├── apprun-hn.txt ├── compost-hn.txt ├── cxjs-hackernews.txt ├── cycle-hn.txt ├── dojo-2.txt ├── elm-hnpwa.txt ├── ember-hn.txt ├── firebase-hnpwa.txt ├── glimmer-hn-pwa.txt ├── hnpwa-ember.txt ├── hnpwa-react.txt ├── hnpwa-vue.txt ├── inferno-hn.txt ├── mithril-hn.txt ├── mobx-ts-hn.txt ├── next-hnpwa.txt ├── nextjs-firebase-hnpwa.txt ├── nextjs-hn.txt ├── ng-hnpwa.txt ├── nuxt-hn.txt ├── polymer-hn.txt ├── preact-hacker-news.txt ├── preact-hn.txt ├── quasar-hackernews.txt ├── react-hn-kristofer.txt ├── react-hn-stephen.txt ├── react-hn-suriel.txt ├── react-hn.txt ├── react-native-web.txt ├── stencil-ionic-hn.txt ├── svelte-hacker-news.txt ├── vanilla-hn.txt ├── vanilla-wc-hn.txt ├── viper-news.txt ├── vue-hacker-news.txt ├── vue-hn-pwa.txt ├── webcomponents-hn.txt └── zuix-hn.txt ├── _config.yml ├── _contributors ├── addy.txt ├── alexchopin.txt ├── alexnoz.txt ├── alfredo.txt ├── andrea.txt ├── anthony.txt ├── anubhav.txt ├── ashish.txt ├── atinux.txt ├── chris-h.txt ├── chris.txt ├── cristian.txt ├── damien.txt ├── dan.txt ├── david.txt ├── eugen.txt ├── evan.txt ├── gene.txt ├── houssein.txt ├── ivan.txt ├── jimmy.txt ├── johan.txt ├── jonny.txt ├── justin.txt ├── kevin.txt ├── kevmoo.txt ├── kristofer.txt ├── kulshekhar.txt ├── leon.txt ├── majid.txt ├── malbernaz.txt ├── marko.txt ├── matan.txt ├── michael.txt ├── naythan.txt ├── pi0.txt ├── rich.txt ├── rstoenescu.txt ├── rubenlie.txt ├── ryan.txt ├── sebastian.txt ├── stephen.txt ├── steve.txt ├── suriel.txt ├── taehwanno.txt ├── usman.txt └── yysun.txt ├── _includes ├── footer.html ├── github-corner.svg ├── google-analytics.html ├── head.html ├── header.html ├── implementation.html ├── script-lazysizes.html └── service-worker-register.html ├── _layouts ├── default.html └── home.html ├── _sass └── extra.scss ├── assets ├── favicon.ico ├── images │ ├── angular-dart-hnpwa.png │ ├── angular-hacker-news-mobile.png │ ├── angular-hn-pwa.png │ ├── angular2hn-mobile.png │ ├── apprun-hn.png │ ├── compost-hn.png │ ├── cxjs-hackernews.png │ ├── cycle-hn.png │ ├── dojo-2-hnpwa.png │ ├── elm-mobile.png │ ├── ember-hn-mobile.png │ ├── ember-mobile.png │ ├── favicon.png │ ├── glimmer-hn-pwa.png │ ├── hn-vanilla-wc.png │ ├── hnpwa-angular.png │ ├── hnpwa-firebase.png │ ├── hnpwa-logo.png │ ├── hnpwa-react.png │ ├── hnpwa-showcase.png │ ├── hnpwa-vue.png │ ├── inferno-hn.png │ ├── mithril-hn-pwa.png │ ├── mobx-ts-hn.png │ ├── next-fb-hnpwa.png │ ├── next-hnpwa.png │ ├── nextjs-hn.png │ ├── nuxt-hn.png │ ├── polymer-mobile.png │ ├── preact-hnpwa.png │ ├── preacthn-mobile.png │ ├── quasar-hn.png │ ├── react-hn-stephen.png │ ├── react-hn-suriel.png │ ├── reacthn-kristofer-mobile.png │ ├── reacthn-mobile.png │ ├── rnw-hn.png │ ├── stencil-ionic.png │ ├── sveltehn-mobile.png │ ├── vanilla-wc-hn.png │ ├── vanillahn-mobile.png │ ├── viperhtml-mobile.png │ ├── vue-hn-pwa.png │ ├── vuehn-mobile.png │ └── zuixhn-mobile.png ├── manifest.json └── styles │ ├── main.scss │ └── tachyons.min.css ├── firebase.json ├── functions ├── index.js └── package.json ├── index.md ├── package-lock.json ├── package.json └── sw-precache-config.js /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | api/dist 4 | api/env.json 5 | api/.firebase 6 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: ruby 2 | rvm: 3 | - 2.3.3 4 | before_install: 5 | - cd site 6 | - nvm install 7 7 | - npm install 8 | # Cloud Functions has its own package.json 9 | - cd functions && npm i && cd .. 10 | script: 11 | - npm run build 12 | - npm run precache 13 | deploy: 14 | provider: firebase 15 | skip_cleanup: true 16 | token: 17 | secure: "$FIREBASE_TOKEN" 18 | env: 19 | global: 20 | secure: k1fUHvLf3YawrS9M3rCzaS8xlt9F7s33UtuDFcFCpEQP02FYRos/shmlAgJ6MCzdRfVxNAeJ4f8skmygaKZoNdvqi6l8zZGQhSRc5SeWDLtZe3u5gUS9l7uUUgPLpHz7KXhPTie0FU2sbRRvqpOno8zXsR5ysggwHPShhx6aaVES8aOSsyWduPClewTNHnUEV5O8lMoyUPFJWe4zPF2IlKci5lE8tUddZyi+ue3pwuoBs+0ITKVRxxX9LIS3Ktu5MKAIWB2DC/zZ3TisL9eaGrHutkvYdF7CrndbQ7Vp/5QXfrvq+7e1A7ui39jvd0QdPu8W7xuxmOIJ/8rApmVJ/8jZW//g4YJTj4D1AIbbcocCLHZXO8Lg9OCLgOmyUJP0qH1z0JwHvBQCaDrJWIJxybPGZueDfmee2Sz1ZtpgyYfv4MfQthYOaOc7VKqK9NgJs2U+mjBQWr4p3aS57FAmsTBU/VbpdaXqHK+lH398rAopGWOjT+wt5bJzPpO1hiFObrJSIthnxH4WNRyrLxs3JZ8iCrMDOiF1Kv+/DyeoevaHLcNpsTqodJ+UpxAPPpoWxbKE7J95ntFul+KuMbZYNoG/4HUTDlCjvpJbOqJKCrX2PmKMABA4/mfBoLEjVoCu25gNmAve3auqvJnuZ3w1AFbewPx8fNdVbBAX7vQ6zxo= 21 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | Thank you for your interest in contributing! 4 | 5 | If your Hacker News implementation meets the [specifications](https://github.com/tastejs/hacker-news-pwas#specification), don't hesitate to put up a PR to add its summary to HNPWA! 6 | 7 | If you would like to file a PR to update the site's design, please file an [issue](https://github.com/tastejs/hacker-news-pwas/issues/new) for it first. 8 | 9 | ## Setup 10 | 11 | 1. Fork the repo 12 | 2. Clone your fork 13 | 3. Make a branch for your changes 14 | 4. Install `Ruby` version 2.1+. To install the latest - execute following commands: 15 | * `curl -L https://get.rvm.io | bash -s stable` 16 | * `rvm install ruby-[version]` 17 | 5. Install `jekyll` and `bundler` gems. 18 | * `gem install jekyll bundler` 19 | 6. Go into the `site` directory and execute: 20 | * `bundle install` 21 | 7. `npm install` 22 | 8. `npm run dev` to kick off a development server 23 | 9. To test the Service Worker locally you can run `npm run dev-sw` instead. 24 | 10. If you're adding a summary of your Hacker News implementation: 25 | * Create a new entry under `_apps` with your application name 26 | * Fill out the list of attributes following the format of any of the other apps in the same directory. You'll need to include an image of your application as well. To fit the phone outline appropriately, please take a screenshot of your application emulated within a Nexus 5X using Chrome DevTools. This [tutorial](https://developers.google.com/web/tools/chrome-devtools/device-mode/) shows how to toggle Device Mode for the browser. 27 | * Add yourself to the `_contributors` directory and similarly fill out all the attributes there (make sure the `authors` attribute underneath your app in `_apps` has the same exact name attribute as here) 28 | 11. Create a pull request from your branch on your fork to `master` on this repo 29 | 12. Have your branch get merged in! :star2: 30 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
8 | Hacker News readers as Progressive Web Apps. A spiritual successor to TodoMVC. 9 |
10 | 11 | 14 | 15 | --- 16 | 17 | ## Implementations 18 | 19 | See our [site](https://hnpwa.com/) or the `site/apps` directory for the current 20 | list of implementations. 21 | 22 | ## Specification 23 | 24 | Each implementation must include: 25 | 26 | * Views: Hacker News Top Stories, New, Show, Ask, Jobs & threaded Comments 27 | * Each of these should use routing to enable sharability. For reference, see the [PreactHN](https://hn.kristoferbaxter.com/) implementation. 28 | * App must display 30 items per-page for story list views 29 | * App must be a [Progressive Web App](https://g.co/ProgressiveWebApps) 30 | * App must score over a 90/100 using [Lighthouse](https://github.com/GoogleChrome/lighthouse) 31 | * App must aim to be interactive in under 5 seconds on a Moto G4 over 3G. Use [WebPageTest](https://www.webpagetest.org/easy) using the auto-selected Moto G4 + Faster 3G setting to validate "Time to interactive" 32 | * We look at numeric Lighthouse scores for TTI as well as a manual inspection of the application's Timeline "trace" and [Filmstrip](https://www.webpagetest.org/video/compare.php?tests=170514_00_bb389f33405b558ea644b37f565c8a56-r:1-c:0) as a sanity check. 33 | * App must use the [Application Shell](https://developers.google.com/web/fundamentals/architecture/app-shell) pattern to instantly load the skeleton of the UI on repeat visits 34 | * App is responsive on desktop and mobile, making best use of available screen real-estate. See [Vue HN](https://vue-hn.now.sh/top) as an example. 35 | * App must do its best to work cross-browser 36 | 37 | Optionally: 38 | 39 | * App supports offline caching of HN data (e.g similar to the 'Offline Mode' in ReactHN) 40 | * App may use server-side rendering so displaying content is resilient to JS not loading on the network 41 | 42 | User interface: 43 | 44 | * At this time, HNPWA does not prescribe a specific stylesheet or theme for implementations. We will be aiming to provide this in the near future similar to how we do with TodoMVC. 45 | 46 | ### Data sources 47 | 48 | * [Official real-time Hacker News API powered by Firebase](https://github.com/HackerNews/API) 49 | * [Unofficial Hacker News API](https://github.com/cheeaun/node-hnapi) by cheeaun 50 | 51 | If using the Firebase powered API please use 30 stories per-page to ensure consistency between implementations using the Unofficial API as well as the actual [Hacker News website](https://news.ycombinator.com/) 52 | 53 | ## Network settings 54 | 55 | * Emerging Markets: Chrome Beta on a Motorola G (gen 4) tested from Dulles, Virginia on a 400 Kbps 3G connection with 400ms of latency. Tested with [WebPageTest](https://www.webpagetest.org/easy) using the auto-selected Moto G4 + Emerging Markets setting. 56 | * Faster 3G: Chrome Beta on a Motorola G (gen 4) tested from Dulles, Virginia on a 1.6 Mbps 3G connection with 300ms of latency. Tested with [WebPageTest](https://www.webpagetest.org/easy) using the auto-selected Moto G4 + Faster 3G setting. 57 | * `Time to Interactive` readings taken from linked Lighthouse results in WebPageTest. 58 | 59 | ## License 60 | 61 | Each implementation preserves the license noted in the linked to applications. 62 | -------------------------------------------------------------------------------- /api/.firebaserc: -------------------------------------------------------------------------------- 1 | { 2 | "projects": { 3 | "prod": "hnpwa-coffee", 4 | "staging": "hnpwa-api" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /api/README.md: -------------------------------------------------------------------------------- 1 | # HNPWA API Publish Server 2 | 3 | The HNPWA API is served statically by Firebase Hosting. However, the files are generated and published every 20 minutes on AppEngine. 4 | 5 | ## Prioritizing new content 6 | The Official Hacker News API uses categories of new content: Top Stories, Ask, Jobs, Show, Newest, and such. Each category has a max number of pages. The stories on these pages are considered "fresh content". Every 20 minutes the HNPWA API generates static files for these categories and their pages as static files. Since these files are static and prepublished, they will load much more quickly than dynamically generated files. However, the API still provides older individual items. These items are generated with Cloud Functions and served over Firebase Hosting's CDN. These items are likely to take longer to load. 7 | 8 | ## Publishing instructions 9 | 1. Ask davideast for deploy permissions. 10 | 1. Install dependencies inside the `api` folder. 11 | 1. Install the [Google Cloud SDK](https://cloud.google.com/sdk/). 12 | 1. Initialize Google Cloud SDK to HNPWA project. 13 | 1. Run `yarn build` (or `npm run build`). 14 | 1. Run `yarn deploy`. 15 | 1. Check the [GCP dashboard for errors](console.cloud.google.com/errors). 16 | -------------------------------------------------------------------------------- /api/app.yaml: -------------------------------------------------------------------------------- 1 | runtime: nodejs 2 | env: flex 3 | manual_scaling: 4 | instances: 1 5 | resources: 6 | cpu: 1 7 | memory_gb: 0.5 8 | disk_size_gb: 10 9 | -------------------------------------------------------------------------------- /api/firebase.json: -------------------------------------------------------------------------------- 1 | { 2 | "hosting": { 3 | "public": "dist/public", 4 | "rewrites": [ 5 | { 6 | "source": "/v0**", 7 | "function": "api0" 8 | }, 9 | { 10 | "source": "/v0/**", 11 | "function": "api0" 12 | } 13 | ], 14 | "headers": [ 15 | { 16 | "source": "**", 17 | "headers": [ 18 | { 19 | "key": "Access-Control-Allow-Origin", 20 | "value": "*" 21 | } 22 | ] 23 | } 24 | ] 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /api/functions/index.js: -------------------------------------------------------------------------------- 1 | const hnapi = require('hnpwa-api'); 2 | 3 | exports.api0 = hnapi.trigger({ 4 | useCors: true, 5 | routerPath: '/v0', 6 | cdnCacheExpiry: 1200, 7 | browserCacheExpiry: 300, 8 | staleWhileRevalidate: 86400 9 | }); 10 | -------------------------------------------------------------------------------- /api/functions/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "functions", 3 | "description": "Cloud Functions for Firebase", 4 | "scripts": { 5 | "serve": "firebase serve --only functions", 6 | "shell": "firebase experimental:functions:shell", 7 | "start": "npm run shell", 8 | "deploy": "firebase deploy --only functions", 9 | "logs": "firebase functions:log" 10 | }, 11 | "dependencies": { 12 | "firebase-admin": "^5.8.1", 13 | "firebase-functions": "^0.8.1", 14 | "hnpwa-api": "^0.2.0" 15 | }, 16 | "private": true 17 | } 18 | -------------------------------------------------------------------------------- /api/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "api.hnpwa.com", 3 | "version": "0.0.1", 4 | "private": true, 5 | "description": "The publish server for api.hnpwa.com", 6 | "main": "dist/index.js", 7 | "scripts": { 8 | "build": "rm -rf dist && tsc && cp env.json dist/env.json", 9 | "start": "node dist/index", 10 | "deploy": "gcloud app deploy --version yolo", 11 | "deploy:firebase": "firebase deploy --only functions,hosting", 12 | "copy:firebase": "cp firebase-config.json dist/firebase.json && cp .firebaserc dist/.firebaserc" 13 | }, 14 | "keywords": [], 15 | "author": "", 16 | "license": "MIT", 17 | "dependencies": { 18 | "@google-cloud/error-reporting": "^0.2.2", 19 | "@google-cloud/trace-agent": "^2.4.1", 20 | "@types/fs-extra": "^5.0.0", 21 | "firebase-tools": "^7.0.0", 22 | "fs-extra": "^5.0.0", 23 | "hnpwa-api": "^0.2.0", 24 | "typescript": "^2.7.2" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /api/src/deploy.ts: -------------------------------------------------------------------------------- 1 | const client = require('firebase-tools'); 2 | 3 | export async function deploy(token: string) { 4 | try { 5 | return await client.deploy({ 6 | project: 'hnpwa-coffee', 7 | only: 'hosting', 8 | token, 9 | cwd: process.cwd() 10 | }); 11 | } catch (e) { 12 | throw e; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /api/src/index.ts: -------------------------------------------------------------------------------- 1 | require('@google-cloud/trace-agent').start(); 2 | 3 | import { deploy } from './deploy'; 4 | import { publisher } from 'hnpwa-api'; 5 | const ErrorReporting = require('@google-cloud/error-reporting'); 6 | const errors = ErrorReporting(); 7 | 8 | const env = require('../env.json'); 9 | 10 | const runner = publisher({ 11 | interval: '*/20 * * * *', 12 | dest: 'dist/public/v0', 13 | cwd: process.cwd(), 14 | log: console.log 15 | }, async function afterWrite() { 16 | try { 17 | const token = env.TOKEN; 18 | if(typeof token === undefined || typeof token === null) { 19 | throw new Error('No token provided for Firebase Hosting deployment'); 20 | } 21 | await deploy(token); 22 | console.log('Deployed to Firebase Hosting!'); 23 | } catch (e) { 24 | errors.report(e); 25 | } 26 | }); 27 | 28 | runner.start(); 29 | -------------------------------------------------------------------------------- /api/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es2015", 5 | "noImplicitAny": true, 6 | "sourceMap": false, 7 | "outDir": "dist", 8 | "strictNullChecks": true, 9 | "moduleResolution": "node", 10 | "declaration": true 11 | }, 12 | "files": [ 13 | "src/index.ts" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /docs/api.md: -------------------------------------------------------------------------------- 1 | # HNPWA API 2 | 3 | **A fast, CDN delivered, aggregated Hacker News API** 4 | 5 | https://api.hnpwa.com/v0/news/1.json 6 | 7 | ## Why? 8 | 9 | Everything in the official Hacker News API is either 10 | [an item](https://hacker-news.firebaseio.com/v0/item/8863.json?print=pretty) or 11 | [a list of items](https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty). 12 | 13 | This structure is not ideal for building fast loading Progressive Web Apps since it will require multiple network requests 14 | to get the needed payload for page render. 15 | 16 | The HNPWA solves this problem by aggregating each item in the id list into item feeds. 17 | 18 | ## Item feeds 19 | 20 | There are five item feeds. 21 | 22 | | Name | URL | 23 | | --- | --- | 24 | | News| https://api.hnpwa.com/v0/news/1.json | 25 | | Newest | https://api.hnpwa.com/v0/newest/1.json | 26 | | Ask | https://api.hnpwa.com/v0/ask/1.json | 27 | | Show | https://api.hnpwa.com/v0/show/1.json | 28 | | Jobs | https://api.hnpwa.com/v0/jobs/1.json | 29 | 30 | ### Schema 31 | 32 | Each item feed returns an array of `FeedItem`. 33 | 34 | ```ts 35 | export interface FeedItem { 36 | id: number; 37 | title: string; 38 | points?: number | null; 39 | user?: string | null; 40 | time: number; 41 | time_ago: string; 42 | comments_count: number; 43 | type: string; 44 | url?: string; 45 | domain?: string; 46 | } 47 | ``` 48 | 49 | ### Paging 50 | 51 | Item feeds can be paged by accessing the next index in the page. Each page starts at 1 and each feed has a different ending page. 52 | 53 | [https://api.hnpwa.com/v0/news.json/2.json](https://api.hnpwa.com/v0/news.json/2.json) 54 | 55 | | Name | Max Pages | 56 | | --- | --- | 57 | | News| 10 | 58 | | Newest | 12 | 59 | | Ask | 2 | 60 | | Show | 2 | 61 | | Jobs | 1 | 62 | 63 | ## Individual items 64 | 65 | Feeds provide the top level view of an item, but other details like comment threads are available at the individual item level. 66 | 67 | [https://api.hnpwa.com/v0/item/13831370.json](https://api.hnpwa.com/v0/item/13831370.json) 68 | 69 | ### Schema 70 | 71 | ```ts 72 | export interface Item { 73 | id: number; 74 | title: string; 75 | points: number | null; 76 | user: string | null; 77 | time: number; 78 | time_ago: string; 79 | content: string; 80 | deleted?: boolean; 81 | dead?: boolean; 82 | type: string; 83 | url?: string; 84 | domain?: string; 85 | comments: Item[]; // Comments are items too 86 | level: number; 87 | comments_count: number; 88 | } 89 | ``` 90 | 91 | ## Users 92 | 93 | Users are retrieved by username. 94 | 95 | [https://api.hnpwa.com/v0/user/davideast.json](https://api.hnpwa.com/v0/user/davideast.json) 96 | 97 | ### Schema 98 | 99 | ```ts 100 | export interface User { 101 | about?: string; 102 | created_time: number; 103 | created: string; 104 | id: string; 105 | karma: number; 106 | } 107 | ``` 108 | 109 | ## Local Development 110 | 111 | The HNPWA API uses the [hnpwa-api](https://github.com/davideast/hnpwa-api/) module and runs on [Cloud Functions](https://firebase.google.com/docs/functions/) and [Firebase Hosting](https://firebase.google.com/docs/hosting/functions). 112 | If you want to run the API while offline you can globally install the module to serve offline. 113 | 114 | ```bash 115 | npm i -g hnpwa-api 116 | hnpwa-api --save # saves current HN API data set offline 117 | hnpwa-api --serve --offline --port=4000 118 | ``` 119 | -------------------------------------------------------------------------------- /media/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/samccone/hacker-news-pwas/f2fa5d3f32a38081abf02930e91ab978f55e3ab7/media/logo.png -------------------------------------------------------------------------------- /site/.firebaserc: -------------------------------------------------------------------------------- 1 | { 2 | "projects": { 3 | "default": "hnpwa-site" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /site/.gitignore: -------------------------------------------------------------------------------- 1 | _site 2 | .sass-cache 3 | .jekyll-metadata 4 | service-acc.json 5 | service-worker.js 6 | node_modules 7 | -------------------------------------------------------------------------------- /site/Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | ruby RUBY_VERSION 3 | 4 | # Hello! This is where you manage which Jekyll version is used to run. 5 | # When you want to use a different version, change it below, save the 6 | # file and run `bundle install`. Run Jekyll with `bundle exec`, like so: 7 | # 8 | # bundle exec jekyll serve 9 | # 10 | # This will help ensure the proper Jekyll version is running. 11 | # Happy Jekylling! 12 | gem "jekyll", "3.3.1" 13 | 14 | # This is the default theme for new Jekyll sites. You may change this to anything you like. 15 | gem "minima", "~> 2.0" 16 | 17 | # If you want to use GitHub Pages, remove the "gem "jekyll"" above and 18 | # uncomment the line below. To upgrade, run `bundle update github-pages`. 19 | # gem "github-pages", group: :jekyll_plugins 20 | 21 | # If you have any plugins, put them here! 22 | group :jekyll_plugins do 23 | gem "jekyll-feed", "~> 0.6" 24 | end 25 | -------------------------------------------------------------------------------- /site/Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | addressable (2.5.1) 5 | public_suffix (~> 2.0, >= 2.0.2) 6 | colorator (1.1.0) 7 | ffi (1.9.18) 8 | forwardable-extended (2.6.0) 9 | jekyll (3.3.1) 10 | addressable (~> 2.4) 11 | colorator (~> 1.0) 12 | jekyll-sass-converter (~> 1.0) 13 | jekyll-watch (~> 1.1) 14 | kramdown (~> 1.3) 15 | liquid (~> 3.0) 16 | mercenary (~> 0.3.3) 17 | pathutil (~> 0.9) 18 | rouge (~> 1.7) 19 | safe_yaml (~> 1.0) 20 | jekyll-feed (0.9.2) 21 | jekyll (~> 3.3) 22 | jekyll-sass-converter (1.5.0) 23 | sass (~> 3.4) 24 | jekyll-watch (1.5.0) 25 | listen (~> 3.0, < 3.1) 26 | kramdown (1.13.2) 27 | liquid (3.0.6) 28 | listen (3.0.8) 29 | rb-fsevent (~> 0.9, >= 0.9.4) 30 | rb-inotify (~> 0.9, >= 0.9.7) 31 | mercenary (0.3.6) 32 | minima (2.1.1) 33 | jekyll (~> 3.3) 34 | pathutil (0.14.0) 35 | forwardable-extended (~> 2.6) 36 | public_suffix (2.0.5) 37 | rb-fsevent (0.9.8) 38 | rb-inotify (0.9.8) 39 | ffi (>= 0.5.0) 40 | rouge (1.11.1) 41 | safe_yaml (1.0.4) 42 | sass (3.4.23) 43 | 44 | PLATFORMS 45 | ruby 46 | 47 | DEPENDENCIES 48 | jekyll (= 3.3.1) 49 | jekyll-feed (~> 0.6) 50 | minima (~> 2.0) 51 | 52 | RUBY VERSION 53 | ruby 2.5.0p0 54 | 55 | BUNDLED WITH 56 | 1.16.0 57 | -------------------------------------------------------------------------------- /site/_apps/angular-dart-hnpwa.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 31 3 | title: 'AngularDart HNPWA' 4 | github-title: 'dart-lang/angular' 5 | libraries: 6 | - name: 'AngularDart' 7 | - name: 'AngularDart Router' 8 | module-bundling: 'Dart2JS' 9 | service-worker: 'Worker generated from package:pwa' 10 | perfomance-patterns: 'Lazy loaded modules' 11 | server-side-rendering: 'None' 12 | api: 'api.hnpwa.com/v0' 13 | hosting: 'Firebase' 14 | authors: 15 | - name: 'Matan' 16 | - name: 'Leon' 17 | - name: 'kevmoo' 18 | lighthouse: '100/100' 19 | interactive-em: '4.1s' 20 | interactive-faster-3g: '2.1s' 21 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=180413_E9_539052ab0cb071da2e0363156ac9bc7e&run=1 22 | wpt-em-link: https://www.webpagetest.org/result/180413_PM_8219e620f184dc9a94441274d8dead71/ 23 | wpt-faster-3g-link: https://www.webpagetest.org/result/180413_E9_539052ab0cb071da2e0363156ac9bc7e/ 24 | image: /assets/images/angular-dart-hnpwa.png 25 | app-link: https://hnpwa.dartlang.org/ 26 | github-link: https://github.com/dart-lang/angular/tree/master/examples/hacker_news_pwa 27 | framework-link: https://webdev.dartlang.org/angular 28 | --- 29 | -------------------------------------------------------------------------------- /site/_apps/angular-hacker-news.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 18 3 | title: 'Angular Hacker News' 4 | github-title: 'sebastianm/angular-hacker-news' 5 | libraries: 6 | - name: 'Angular' 7 | - name: 'Angular Router' 8 | - name: 'Angular HTTP' 9 | module-bundling: 'Webpack' 10 | service-worker: 'Application Shell + sw-precache' 11 | perfomance-patterns: 'Lazy loaded modules' 12 | server-side-rendering: 'Angular Universal' 13 | api: 'Firebase Hacker News API + Node-hnapi (unofficial)' 14 | hosting: 'Digitalocean' 15 | authors: 16 | - name: 'Sebastian' 17 | lighthouse: '91/100' 18 | interactive-em: '4.3s' 19 | interactive-faster-3g: '3.2s' 20 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=170711_54_532be7068a1836a1647889ad4ac5c1f2&run=3 21 | wpt-em-link: https://www.webpagetest.org/result/170711_91_727a71056a80d4dd71e3a2cbd904a6b9/ 22 | wpt-faster-3g-link: https://www.webpagetest.org/result/170711_54_532be7068a1836a1647889ad4ac5c1f2/ 23 | image: /assets/images/angular-hacker-news-mobile.png 24 | app-link: https://angularhn.sebastian-mueller.net/ 25 | github-link: https://github.com/SebastianM/angular-hacker-news 26 | framework-link: https://angular.io/ 27 | --- 28 | -------------------------------------------------------------------------------- /site/_apps/angular-hn.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 6 3 | title: 'Angular HN' 4 | github-title: 'housseindjirdeh/angular2-hn' 5 | libraries: 6 | - name: 'Angular' 7 | scaffolding: 'Angular CLI' 8 | module-bundling: 'Webpack' 9 | service-worker: 'Application Shell + data caching with sw-precache' 10 | perfomance-patterns: 'Lazy loaded modules' 11 | server-side-rendering: 'None' 12 | api: 'Node-hnapi (unofficial)' 13 | hosting: 'Firebase' 14 | authors: 15 | - name: 'Houssein' 16 | lighthouse: '91/100' 17 | interactive-em: '6.0s' 18 | interactive-faster-3g: '4.4s' 19 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=170612_BV_5cd2c04584152647e2e556f5af8f5eba&run=3 20 | wpt-em-link: https://www.webpagetest.org/result/170612_N2_7f979f17312d8feaa1709697d388c1ab/ 21 | wpt-faster-3g-link: https://www.webpagetest.org/result/170612_BV_5cd2c04584152647e2e556f5af8f5eba/ 22 | image: /assets/images/angular2hn-mobile.png 23 | app-link: https://angular2-hn.firebaseapp.com/ 24 | github-link: https://github.com/housseindjirdeh/angular2-hn 25 | framework-link: https://angular.io/ 26 | --- 27 | -------------------------------------------------------------------------------- /site/_apps/angular-hnpwa.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 22 3 | title: 'Angular Hacker News' 4 | github-title: 'alfredoperez/ngx-hn' 5 | libraries: 6 | - name: 'Angular' 7 | - name: 'ngu-pwa-tools' 8 | scaffolding: 'Angular CLI' 9 | module-bundling: 'Angular CLI' 10 | service-worker: 'Application shell generated with ng-pwa-tools and service worker from @angular/service-worker' 11 | perfomance-patterns: 'Lazy loaded modules' 12 | server-side-rendering: 'None' 13 | api: 'Node-hnapi (unofficial)' 14 | hosting: 'Firebase with HTTP/2 Server Push' 15 | authors: 16 | - name: 'Alfredo' 17 | lighthouse: '91/100' 18 | interactive-em: '5.5s' 19 | interactive-faster-3g: '4.5s' 20 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=170726_49_9abc8ecb776d6d5081136f0867638dec&run=2 21 | wpt-em-link: https://www.webpagetest.org/result/170726_49_9abc8ecb776d6d5081136f0867638dec/ 22 | wpt-faster-3g-link: https://www.webpagetest.org/result/170726_7R_1c883338d59f1d6065984619829f3f3f/ 23 | image: /assets/images/angular-hn-pwa.png 24 | app-link: https://ngx-hn.firebaseapp.com 25 | github-link: https://github.com/alfredoperez/ngx-hn 26 | framework-link: https://angular.io/ 27 | --- 28 | -------------------------------------------------------------------------------- /site/_apps/apprun-hn.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 99 3 | title: 'AppRun HN' 4 | github-title: 'yysun/apprun-hn' 5 | libraries: 6 | - name: 'AppRun' 7 | scaffolding: 'AppRun CLI' 8 | module-bundling: 'Webpack' 9 | service-worker: 'Workboxjs' 10 | perfomance-patterns: 'Application Shell + data caching with sw-precache' 11 | server-side-rendering: 'No' 12 | api: 'Official API (Firebase)' 13 | hosting: 'GitHub' 14 | authors: 15 | - name: 'yysun' 16 | lighthouse: '92/100' 17 | interactive-em: '4.7s' 18 | interactive-faster-3g: '4.0s' 19 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=180705_M2_18125a251cfe19a1b9d4aa173d32d2e0&run=2 20 | wpt-em-link: https://www.webpagetest.org/result/180705_FR_cf50ec3bd4c0e17802a9bae0cae6ff2e/ 21 | wpt-faster-3g-link: https://www.webpagetest.org/result/180705_M2_18125a251cfe19a1b9d4aa173d32d2e0/ 22 | image: /assets/images/apprun-hn.png 23 | app-link: https://yysun.github.io/apprun-hn 24 | github-link: https://github.com/yysun/apprun-hn 25 | framework-link: https://github.com/yysun/apprun 26 | --- 27 | -------------------------------------------------------------------------------- /site/_apps/compost-hn.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 31 3 | title: 'Vanilla Web Components with Compost mixins' 4 | github-title: 'lamplightdev/compost-hn' 5 | library: 'Compost mixins' 6 | module-bundling: 'Rollup' 7 | service-worker: 'Shell + data caching with Workbox' 8 | perfomance-patterns: 'Local caching of API results, CDN cache' 9 | server-side-rendering: 'no' 10 | api: 'HNPWA API' 11 | hosting: 'Firebase' 12 | authors: 13 | - name: 'Chris H' 14 | lighthouse: '100/100' 15 | interactive-em: '2.9s' 16 | interactive-faster-3g: '2.1s' 17 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=180702_W9_bafc7423cffbbc3d44109b729e18d079&run=2 18 | wpt-em-link: https://www.webpagetest.org/result/180702_DA_56e0a6c671fefa00a43b1ad36d9591a2/ 19 | wpt-faster-3g-link: https://www.webpagetest.org/result/180702_W9_bafc7423cffbbc3d44109b729e18d079/ 20 | image: /assets/images/compost-hn.png 21 | app-link: https://compost-35844.firebaseapp.com 22 | github-link: https://github.com/lamplightdev/compost-hn 23 | --- 24 | -------------------------------------------------------------------------------- /site/_apps/cxjs-hackernews.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 34 3 | title: 'CxJS Hacker News' 4 | github-title: 'codaxy/cxjs-hackernews' 5 | libraries: 6 | - name: 'CxJS' 7 | - name: 'Preact' 8 | scaffolding: 'Cx CLI' 9 | module-bundling: 'Webpack' 10 | service-worker: 'Application Shell + runtime data caching with sw-precache (sw-precache-webpack-plugin)' 11 | perfomance-patterns: 'Code-splitting, CSS and JS inlining' 12 | server-side-rendering: 'None' 13 | api: 'Node-hnapi (unoffical)' 14 | hosting: 'Netlify' 15 | authors: 16 | - name: 'Marko' 17 | lighthouse: '91/100' 18 | interactive-em: '4.5s' 19 | interactive-faster-3g: '3.7s' 20 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=170724_9N_d79b5c0abdf81a731b9d8d767508c2a1&run=2 21 | wpt-em-link: https://www.webpagetest.org/result/170724_X7_4839a02a6189db13446f21200993008e/ 22 | wpt-faster-3g-link: https://www.webpagetest.org/result/170724_9N_d79b5c0abdf81a731b9d8d767508c2a1/ 23 | image: /assets/images/cxjs-hackernews.png 24 | app-link: https://hn.cxjs.io/ 25 | github-link: https://github.com/codaxy/cxjs-hackernews 26 | framework-link: https://cxjs.io/ 27 | --- 28 | -------------------------------------------------------------------------------- /site/_apps/cycle-hn.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 35 3 | title: 'Cycle HN' 4 | github-title: 'usm4n/cycle-hn' 5 | libraries: 6 | - name: 'CycleJS' 7 | - name: 'cycle-onionify' 8 | - name: 'switch-path' 9 | - name: 'cyclejs-utils' 10 | service-worker: 'Application Shell + SWPrecache Webpack Plugin' 11 | server-side-rendering: 'No' 12 | api: 'HNPWA api' 13 | hosting: 'Firebase' 14 | authors: 15 | - name: 'Usman' 16 | lighthouse: '91/100' 17 | interactive-em: '5.29s' 18 | interactive-faster-3g: '2.46s' 19 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=171022_D4_0a8774786db703b384b9254e6fba3b5e&run=1 20 | wpt-em-link: https://www.webpagetest.org/result/171022_D4_0a8774786db703b384b9254e6fba3b5e/ 21 | wpt-faster-3g-link: https://www.webpagetest.org/result/171022_KC_9b0cc70f94cbffc933d4dc2a3af8ac40/ 22 | image: /assets/images/cycle-hn.png 23 | app-link: https://cyclejs-hn.firebaseapp.com 24 | github-link: https://github.com/usm4n/cycle-hn 25 | --- 26 | -------------------------------------------------------------------------------- /site/_apps/dojo-2.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 28 3 | title: 'Dojo 2' 4 | github-title: 'agubler/dojo-2-hn' 5 | library: 'Dojo 2' 6 | module-bundling: 'Webpack' 7 | service-worker: 'Application Shell + Service Worker support via Dojo CLI build' 8 | perfomance-patterns: 'HTTP/2 and Build time rendering' 9 | server-side-rendering: 'None' 10 | api: 'Node-hnapi (unofficial)' 11 | hosting: 'Firebase' 12 | authors: 13 | - name: 'Anthony' 14 | lighthouse: '100/100' 15 | interactive-em: '2.8s' 16 | interactive-faster-3g: '2.0s' 17 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=180710_AR_0594d9615756dfb535efb6cf84eb55c8&run=1 18 | wpt-em-link: https://www.webpagetest.org/result/180710_AR_0594d9615756dfb535efb6cf84eb55c8/ 19 | wpt-faster-3g-link: https://www.webpagetest.org/result/180710_TX_b9c7df57f02b8587f64480b60771911a/ 20 | image: /assets/images/dojo-2-hnpwa.png 21 | app-link: https://dojo-2-hnpwa-d668d.firebaseapp.com/ 22 | github-link: https://github.com/agubler/dojo-2-hn 23 | framework-link: https://dojo.io 24 | --- 25 | -------------------------------------------------------------------------------- /site/_apps/elm-hnpwa.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 26 3 | title: 'Elm HN' 4 | github-title: 'rl-king/elm-hnpwa' 5 | libraries: 6 | - name: 'Elm 0.19' 7 | module-bundling: 'Elm' 8 | service-worker: 'Data caching with SWPrecachePlugin' 9 | perfomance-patterns: 'Cache requested resources in session' 10 | server-side-rendering: 'None' 11 | api: 'api.hnpwa.com/v0' 12 | hosting: 'Firebase' 13 | authors: 14 | - name: 'Ruben Lie' 15 | lighthouse: 100/100 16 | interactive-em: 3.5s 17 | interactive-faster-3g: 3s 18 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=180822_RX_4aed4242befc099f493683b7b2294514&run=3 19 | wpt-em-link: https://www.webpagetest.org/result/180822_E6_9d2e28de77d9a5ae9f437f718059a7d4/ 20 | wpt-faster-3g-link: https://www.webpagetest.org/result/180822_RX_4aed4242befc099f493683b7b2294514/ 21 | image: /assets/images/elm-mobile.png 22 | app-link: https://elm-hnpwa.firebaseapp.com 23 | github-link: https://github.com/rl-king/elm-hnpwa 24 | framework-link: http://elm-lang.org 25 | --- 26 | -------------------------------------------------------------------------------- /site/_apps/ember-hn.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 10 3 | title: 'HackerNews.io' 4 | github-title: 'ivanvanderbyl/ember-hackernews-pwa' 5 | libraries: 6 | - name: 'Ember.js' 7 | - name: 'Ember Server Worker' 8 | - name: 'Ember Web App' 9 | - name: 'Ember Fetch' 10 | module-bundling: 'Broccoli + Critical + HTMLMin + Imagemin + gzip' 11 | service-worker: 'Application Shell + data caching' 12 | perfomance-patterns: 'Prefetch/Preload JS + DNS, Critical CSS, HTTP/2 Server Push' 13 | server-side-rendering: 'None' 14 | api: 'Node-hnapi (unofficial) + CloudFront' 15 | hosting: 'Cloudfront' 16 | authors: 17 | - name: 'Ivan Vanderbyl' 18 | lighthouse: '100/100' 19 | interactive-em: '4.727s' 20 | interactive-faster-3g: '4.254s' 21 | lighthouse-link: https://googlechrome.github.io/lighthouse/viewer/?gist=c358a609038f463cb06741b2847f5315 22 | wpt-em-link: https://www.webpagetest.org/result/171007_GJ_52584ab4b5e5cf2978d2a20cb28a74e8/ 23 | wpt-faster-3g-link: https://www.webpagetest.org/result/171007_3Q_d90b70ffa917bf4ff7300d71575c4262/ 24 | image: /assets/images/ember-hn-mobile.png 25 | app-link: https://hackernews.io/ 26 | github-link: https://github.com/ivanvanderbyl/ember-hackernews-pwa 27 | framework-link: https://emberjs.com 28 | --- 29 | -------------------------------------------------------------------------------- /site/_apps/firebase-hnpwa.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 17 3 | title: 'HNPWA Firebase' 4 | github-title: 'davideast/hnpwa-firebase' 5 | libraries: 6 | - name: 'HTML/CSS' 7 | scaffolding: 'Firebase CLI' 8 | module-bundling: 'N/A' 9 | service-worker: 'Workboxjs' 10 | perfomance-patterns: 'CDN Cache' 11 | server-side-rendering: 'Yes' 12 | api: 'hnpwa.com/api/v0' 13 | hosting: 'Firebase' 14 | authors: 15 | - name: 'David' 16 | lighthouse: '98/100' 17 | interactive-em: '1.3s' 18 | interactive-faster-3g: '0.7s' 19 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=170712_FR_5ea158fd9c684d6d8dee49f833093289&run=2 20 | wpt-em-link: https://www.webpagetest.org/result/170712_FR_5ea158fd9c684d6d8dee49f833093289/ 21 | wpt-faster-3g-link: https://www.webpagetest.org/result/170712_88_101P/ 22 | image: /assets/images/hnpwa-firebase.png 23 | app-link: https://hnpwa-firebase.firebaseapp.com/ 24 | github-link: https://github.com/davideast/hnpwa-firebase 25 | framework-link: https://firebase.google.com/ 26 | --- 27 | -------------------------------------------------------------------------------- /site/_apps/glimmer-hn-pwa.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 21 3 | title: 'Glimmer HN' 4 | github-title: 'mhadaily/glimmer-hn-pwa' 5 | libraries: 6 | - name: 'Glimmer.js' 7 | scaffolding: 'Ember CLI' 8 | module-bundling: 'Broccoli' 9 | service-worker: 'Application Shell + data caching with ESW' 10 | perfomance-patterns: 'Prefetch/Preload JS + DNS, Critical CSS, HTTP/2 Server Push' 11 | server-side-rendering: 'None' 12 | api: 'Node-hnapi (unofficial)' 13 | hosting: 'Firebase' 14 | authors: 15 | - name: 'Majid' 16 | lighthouse: '91/100' 17 | interactive-em: '4.12s' 18 | interactive-faster-3g: '2.81s' 19 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=170920_JG_f68db76d6ecdfc19c30be596eab755a2&run=2 20 | wpt-em-link: https://www.webpagetest.org/result/170920_TT_f75f4bf5930c888202f1c40443a9f4ec/ 21 | wpt-faster-3g-link: https://www.webpagetest.org/result/170920_JG_f68db76d6ecdfc19c30be596eab755a2/ 22 | image: /assets/images/glimmer-hn-pwa.png 23 | app-link: https://glimmer-hn-pwa.firebaseapp.com/ 24 | github-link: https://github.com/mhadaily/glimmer-hn-pwa 25 | framework-link: https://glimmerjs.org/ 26 | --- 27 | -------------------------------------------------------------------------------- /site/_apps/hnpwa-ember.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 24 3 | title: 'Ember HNPWA' 4 | github-title: 'mstewart6/hnpwa-ember' 5 | libraries: 6 | - name: 'Ember' 7 | scaffolding: 'Ember CLI' 8 | module-bundling: 'Broccoli' 9 | service-worker: 'Application Shell + data caching with sw-precache' 10 | server-side-rendering: 'Ember Fastboot' 11 | api: 'Node-hnapi (unofficial)' 12 | hosting: 'Heroku + Amazon S3' 13 | authors: 14 | - name: 'Michael' 15 | lighthouse: '91/100' 16 | interactive-em: '7.7s' 17 | interactive-faster-3g: '5.3s' 18 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=171116_1A_bd400cf488e5f2c4fd82f5a0d5cc552c&run=3 19 | wpt-em-link: https://www.webpagetest.org/result/171116_96_40f517b86363de55c010798883cb8866/ 20 | wpt-faster-3g-link: https://www.webpagetest.org/result/171116_1A_bd400cf488e5f2c4fd82f5a0d5cc552c/ 21 | image: /assets/images/ember-mobile.png 22 | app-link: https://hnpwa-ember.herokuapp.com/ 23 | github-link: https://github.com/mstewart6/hnpwa-ember 24 | framework-link: https://emberjs.com/ 25 | --- 26 | -------------------------------------------------------------------------------- /site/_apps/hnpwa-react.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 21 3 | title: 'HNPWA with React' 4 | github-title: 'taehwanno/hnpwa-react' 5 | library: 'React' 6 | libraries: 7 | - name: 'React' 8 | - name: 'React Router' 9 | - name: 'Redux' 10 | - name: 'Immutable.js' 11 | module-bundling: 'Webpack' 12 | service-worker: 'Application Shell + data caching and offline google analytics with Workbox' 13 | perfomance-patterns: 'Server-side data pre-fetching, preload/prefetch resources' 14 | server-side-rendering: 'Yes' 15 | api: 'Node-hnapi (unofficial)' 16 | hosting: 'Firebase' 17 | authors: 18 | - name: 'Taehwan, No' 19 | lighthouse: '91/100' 20 | interactive-em: '5.2s' 21 | interactive-faster-3g: '4.3s' 22 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=171029_69_655c5b28865ee880316d1af49358b1a0&run=1 23 | wpt-em-link: https://www.webpagetest.org/result/171029_6Y_04df9e72abb38731d412b0eeb7be1317/ 24 | wpt-faster-3g-link: https://www.webpagetest.org/result/171029_69_655c5b28865ee880316d1af49358b1a0/ 25 | image: /assets/images/hnpwa-react.png 26 | app-link: https://hnpwa-react.firebaseapp.com/ 27 | github-link: https://github.com/taehwanno/hnpwa-react 28 | framework-link: https://reactjs.org/ 29 | --- 30 | -------------------------------------------------------------------------------- /site/_apps/hnpwa-vue.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 16 3 | title: 'HNPWA Vue' 4 | github-title: 'anubhav7495/hnpwa-vue' 5 | libraries: 6 | - name: 'Vue' 7 | - name: 'vue-router' 8 | - name: 'vue-pwa-boilerplate' 9 | module-bundling: 'Webpack' 10 | service-worker: 'Application Shell with SWPrecachePlugin' 11 | perfomance-patterns: 'preload/prefetch resources, client-side data preload, lazy loaded routes, dns-prefetch' 12 | server-side-rendering: 'None' 13 | api: 'Node-hnapi (unofficial)' 14 | hosting: 'Github Pages' 15 | authors: 16 | - name: 'Anubhav' 17 | lighthouse: '91/100' 18 | interactive-em: '4.3s' 19 | interactive-faster-3g: '3.4s' 20 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=170717_C8_230384878d6c07f66bb59cf11f15ad24&run=3 21 | wpt-em-link: https://www.webpagetest.org/result/170717_TC_8b6a7c9d33d6687172ff9104a78cbae3/ 22 | wpt-faster-3g-link: https://www.webpagetest.org/result/170717_C8_230384878d6c07f66bb59cf11f15ad24/ 23 | image: /assets/images/hnpwa-vue.png 24 | app-link: https://anubhav7495.github.io/hnpwa-vue/ 25 | github-link: https://github.com/anubhav7495/hnpwa-vue 26 | framework-link: https://vuejs.org/ 27 | --- 28 | -------------------------------------------------------------------------------- /site/_apps/inferno-hn.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 33 3 | title: 'Inferno HN' 4 | github-title: 'aretheregods/hackerinferno' 5 | libraries: 6 | - name: 'Inferno' 7 | scaffolding: 'create-inferno-app' 8 | module-bundling: 'Webpack' 9 | service-worker: 'Application Shell + data caching with sw-precache' 10 | perfomance-patterns: 'PRPL, code-splitting for granular loading' 11 | server-side-rendering: 'None' 12 | api: 'node_hnapi' 13 | hosting: 'Firebase' 14 | other-details: 'Route-specific pushing' 15 | authors: 16 | - name: 'Naythan' 17 | lighthouse: '91/100' 18 | interactive-em: '2.7s' 19 | interactive-faster-3g: '2.17s' 20 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=180119_PQ_af0a8e774030765c339c4eae3b1296a9&run=3 21 | wpt-em-link: https://www.webpagetest.org/result/180116_GM_c366e069195609ce4bbf6f58dd77f1cd/ 22 | wpt-faster-3g-link: https://www.webpagetest.org/result/180119_PQ_af0a8e774030765c339c4eae3b1296a9/ 23 | image: /assets/images/inferno-hn.png 24 | app-link: https://infernohackernews.firebaseapp.com/ 25 | github-link: https://github.com/aretheregods/hackerinferno 26 | framework-link: https://infernojs.org/ 27 | --- 28 | -------------------------------------------------------------------------------- /site/_apps/mithril-hn.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 12 3 | title: 'Mithril HN' 4 | github-title: 'chimon2000/mithril-hn' 5 | libraries: 6 | - name: 'Mithril' 7 | - name: 'typestyle' 8 | module-bundling: 'fuse-box' 9 | service-worker: 'Application Shell' 10 | perfomance-patterns: 'HTTP/2 with Server Push' 11 | server-side-rendering: 'None' 12 | api: 'Node-hnapi (unofficial)' 13 | hosting: 'Firebase functions over HTTP/2 with Server Push + edge-caching' 14 | authors: 15 | - name: 'Ryan' 16 | lighthouse: 91/100 17 | interactive-em: 4.9s 18 | interactive-faster-3g: 4.2s 19 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=170615_KW_cc7ce98d7be5f17a1381b42aebc6b69d&run=2 20 | wpt-em-link: https://www.webpagetest.org/result/170615_51_48fa6a90be213da908a150776c040326/ 21 | wpt-faster-3g-link: https://www.webpagetest.org/result/170615_9W_b966e04a3cdec211f0c723bf8a453779/ 22 | image: /assets/images/mithril-hn-pwa.png 23 | app-link: https://mithril-hn.firebaseapp.com 24 | github-link: https://github.com/chimon2000/mithril-hn 25 | framework-link: https://mithril.js.org 26 | --- 27 | -------------------------------------------------------------------------------- /site/_apps/mobx-ts-hn.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 31 3 | title: 'MobX TS HN' 4 | github-title: 'eugenkiss/hnclient' 5 | library: 'React' 6 | libraries: 7 | - name: 'React/Inferno' 8 | - name: 'MobX' 9 | - name: 'TypeScript' 10 | - name: 'Router5' 11 | - name: 'emotion' 12 | module-bundling: 'Webpack' 13 | service-worker: 'SWPrecache' 14 | perfomance-patterns: 'Critical CSS, request caching' 15 | server-side-rendering: 'None' 16 | api: 'hnpwa.com/api/v0' 17 | hosting: 'Firebase' 18 | authors: 19 | - name: 'Eugen' 20 | lighthouse: '90/100' 21 | interactive-em: '7.3s' 22 | interactive-faster-3g: '3.9s' 23 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=180208_JJ_01f07a06adb2f1d7b7b68adc8902fe4f&run=3 24 | wpt-em-link: https://www.webpagetest.org/result/180208_MC_589f0257c719d7a20c39d19818d6b42f/ 25 | wpt-faster-3g-link: https://www.webpagetest.org/result/180208_JJ_01f07a06adb2f1d7b7b68adc8902fe4f/ 26 | image: /assets/images/mobx-ts-hn.png 27 | app-link: https://hn.eugenkiss.com 28 | github-link: https://github.com/eugenkiss/hnclient 29 | framework-link: https://mobx.js.org 30 | --- 31 | -------------------------------------------------------------------------------- /site/_apps/next-hnpwa.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 14 3 | title: 'HNPWA with Next.js' 4 | github-title: 'codebusking/next-hnpwa-guide-kit' 5 | libraries: 6 | - name: 'Next.js' 7 | - name: 'firebase-hackernews' 8 | module-bundling: 'Webpack' 9 | service-worker: 'Application Shell + data caching with Workbox' 10 | perfomance-patterns: 'Server-side data pre-fetching, preload/prefetch' 11 | server-side-rendering: 'Yes' 12 | api: 'Hacker News Firebase API via firebase-hackernews running on service worker' 13 | hosting: 'Now' 14 | authors: 15 | - name: 'Jimmy' 16 | lighthouse: '91/100' 17 | interactive-em: '3.3s' 18 | interactive-faster-3g: '3.0s' 19 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=170615_8A_f6ee37ba2caadbb9139e35cf97129673 20 | wpt-em-link: https://www.webpagetest.org/result/170615_8A_f6ee37ba2caadbb9139e35cf97129673/ 21 | wpt-faster-3g-link: https://www.webpagetest.org/result/170615_TK_5f9791787bb3bf5916205d05a150cb94/ 22 | image: /assets/images/next-hnpwa.png 23 | app-link: https://next-hnpwa.now.sh/ 24 | github-link: https://github.com/codebusking/next-hnpwa-guide-kit 25 | framework-link: https://github.com/zeit/next.js/ 26 | --- 27 | -------------------------------------------------------------------------------- /site/_apps/nextjs-firebase-hnpwa.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 24 3 | title: 'Next.js HN' 4 | github-title: 'kulshekhar/next-hnpwa' 5 | libraries: 6 | - name: 'Next.js' 7 | - name: 'Preact' 8 | module-bundling: 'Next.js with additional Webpack config' 9 | service-worker: 'Application & data caching with sw-precache' 10 | perfomance-patterns: 'In memory LRU cache, preact-compat alias in production, CDN cache' 11 | server-side-rendering: 'Yes' 12 | api: 'Official API (Firebase)' 13 | hosting: 'Firebase' 14 | authors: 15 | - name: 'Kulshekhar' 16 | lighthouse: '91/100' 17 | interactive-em: '2.7s' 18 | interactive-faster-3g: '2.2s' 19 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=170924_SG_e20c408039688ecdcc07205ff6a91299&run=2 20 | wpt-em-link: https://www.webpagetest.org/result/170924_BQ_08b80e1854f5bfa0c5b36d10a5373b1e/ 21 | wpt-faster-3g-link: https://www.webpagetest.org/result/170924_SG_e20c408039688ecdcc07205ff6a91299/ 22 | image: /assets/images/next-fb-hnpwa.png 23 | app-link: https://next-fb-hnpwa.firebaseapp.com/ 24 | github-link: https://github.com/kulshekhar/next-hnpwa 25 | framework-link: https://github.com/zeit/next.js 26 | --- 27 | -------------------------------------------------------------------------------- /site/_apps/nextjs-hn.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 18 3 | title: 'Next.js HN' 4 | github-title: 'chrisdwheatley/nextjs-hn' 5 | libraries: 6 | - name: 'Next.js' 7 | - name: 'Preact' 8 | module-bundling: 'Next.js with additional Webpack config' 9 | service-worker: 'Application & data caching with sw-precache' 10 | perfomance-patterns: 'In memory LRU cache, DNS prefetch, preact-compat alias in production' 11 | server-side-rendering: 'Yes' 12 | api: 'Node-hnapi (unofficial)' 13 | hosting: 'Digital Ocean & Cloudflare' 14 | authors: 15 | - name: 'Chris' 16 | lighthouse: '91/100' 17 | interactive-em: '5.75s' 18 | interactive-faster-3g: '4.83s' 19 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=170715_KJ_1f08f67beb3451497c196a02e67dd71d&run=3 20 | wpt-em-link: https://www.webpagetest.org/result/170715_6V_90471cfb419635b88ed2da5d77fa5f75/ 21 | wpt-faster-3g-link: https://www.webpagetest.org/result/170715_KJ_1f08f67beb3451497c196a02e67dd71d/ 22 | image: /assets/images/nextjs-hn.png 23 | app-link: https://nextjs-hn.chrisdwheatley.com 24 | github-link: https://github.com/chrisdwheatley/nextjs-hn 25 | framework-link: https://github.com/zeit/next.js 26 | --- 27 | -------------------------------------------------------------------------------- /site/_apps/ng-hnpwa.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 35 3 | title: 'Angular-HN' 4 | github-title: 'ashishdce/hn-pwa-angular' 5 | libraries: 6 | - name: 'Angular' 7 | - name: 'Service-Worker' 8 | - name: 'firebase' 9 | scaffolding: 'Angular CLI' 10 | module-bundling: 'Angular CLI' 11 | service-worker: 'Application shell generated with ng-pwa-tools and service worker from @angular/service-worker' 12 | perfomance-patterns: 'Lazy loaded modules' 13 | server-side-rendering: 'Yes' 14 | api: 'Node-hnapi (unofficial)' 15 | hosting: 'Firebase with HTTP/2 server push' 16 | authors: 17 | - name: 'Ashish' 18 | - name: 'Vinci' 19 | - name: 'Nisheed' 20 | lighthouse: '91/100' 21 | interactive-em: '4.413s' 22 | interactive-faster-3g: '3.7s' 23 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=171126_XB_ca26982d1a4b381aef10674c5be699ad&run=2 24 | wpt-em-link: https://www.webpagetest.org/result/171126_XB_ca26982d1a4b381aef10674c5be699ad/ 25 | wpt-faster-3g-link: https://www.webpagetest.org/result/171126_BM_f10b4802bba680c9d7385f6a6ce9843c/ 26 | image: /assets/images/hnpwa-angular.png 27 | app-link: https://angular-hnpwa.firebaseapp.com 28 | github-link: https://github.com/Ashishdce/hn-pwa-angular 29 | framework-link: https://angular.io/ 30 | --- 31 | -------------------------------------------------------------------------------- /site/_apps/nuxt-hn.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 15 3 | title: 'HNPWA with Nuxt.js' 4 | github-title: 'nuxt/hackernews' 5 | libraries: 6 | - name: 'Vue' 7 | - name: 'Nuxt' 8 | - name: 'PWA Module' 9 | module-bundling: 'Webpack' 10 | service-worker: 'Workbox' 11 | perfomance-patterns: 'PRPL, Prefetch/Preload JS + DNS + Data, Critical Path CSS, Server Side Caching' 12 | server-side-rendering: 'Yes' 13 | api: 'Hacker News Firebase API' 14 | hosting: 'Now + CloudFlare CDN' 15 | authors: 16 | - name: 'Pooya' 17 | - name: 'Sebastien' 18 | - name: 'Alexandre' 19 | lighthouse: '91/100' 20 | interactive-em: '3.8s' 21 | interactive-faster-3g: '3.5s' 22 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=170620_PG_a2a9feaf4ace07a61b2c6c2a171b1c79&run=1 23 | wpt-em-link: https://www.webpagetest.org/result/170620_B1_0b83d61272c77c16c3f3f1f16fb72d2e/ 24 | wpt-faster-3g-link: https://www.webpagetest.org/result/170620_PG_a2a9feaf4ace07a61b2c6c2a171b1c79/ 25 | image: /assets/images/nuxt-hn.png 26 | app-link: https://hn.nuxtjs.org 27 | github-link: https://github.com/nuxt/hackernews 28 | framework-link: https://nuxtjs.org 29 | --- 30 | -------------------------------------------------------------------------------- /site/_apps/polymer-hn.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 8 3 | title: 'Polymer HN' 4 | github-title: 'Polymer/hn-polymer-2' 5 | libraries: 6 | - name: 'Polymer' 7 | scaffolding: 'Polymer CLI & Polymer Starter Kit' 8 | module-bundling: 'Polymer-build with HTML Imports' 9 | service-worker: 'Application Shell + data caching with sw-precache' 10 | perfomance-patterns: 'PRPL, code-splitting for granular loading' 11 | server-side-rendering: 'None' 12 | api: 'Node-hnapi (unofficial)' 13 | hosting: 'Firebase functions over HTTP/2 with Server Push + edge-caching' 14 | other-details: 'Route-specific pushing' 15 | authors: 16 | - name: 'Dan' 17 | - name: 'Kevin' 18 | - name: 'Steve' 19 | lighthouse: 92/100 20 | interactive-em: 2.34s 21 | interactive-faster-3g: 1.8s 22 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=170919_XJ_de74b35584767efef8fa98087562e749&run=1 23 | wpt-em-link: https://www.webpagetest.org/result/170919_0Q_d6fdc6e80104db2e359f6c1e74da1ac7/ 24 | wpt-faster-3g-link: https://www.webpagetest.org/result/170919_XJ_de74b35584767efef8fa98087562e749/ 25 | image: /assets/images/polymer-mobile.png 26 | app-link: https://hn-polymer-2.firebaseapp.com 27 | github-link: https://github.com/polymer/hn-polymer-2 28 | framework-link: https://www.polymer-project.org 29 | --- 30 | -------------------------------------------------------------------------------- /site/_apps/preact-hacker-news.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 30 3 | title: 'Preact Hacker News' 4 | github-title: 'malbernaz/preact-hn' 5 | library: 'Preact' 6 | libraries: 7 | - name: 'Preact' 8 | module-bundling: 'Webpack' 9 | service-worker: 'Application Shell with custom worker-loader' 10 | perfomance-patterns: 'HTTP/2, route based code splitting, resources preload, server-side data pre-fetch' 11 | server-side-rendering: 'Yes' 12 | api: 'Hacker News Firebase API on the server communicating with the client via socket' 13 | hosting: 'now.sh' 14 | authors: 15 | - name: 'malbernaz' 16 | lighthouse: '91/100' 17 | interactive-em: '4.8s' 18 | interactive-faster-3g: '3.4s' 19 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=170818_9W_cd328ee0370e86c069c7bd0a70db5e34&run=2 20 | wpt-em-link: https://www.webpagetest.org/result/170818_R4_717b39b3ee0d52ba738f0830742c82b4/ 21 | wpt-faster-3g-link: https://www.webpagetest.org/result/170818_9W_cd328ee0370e86c069c7bd0a70db5e34/ 22 | image: /assets/images/preact-hnpwa.png 23 | app-link: https://preact-hn.now.sh 24 | github-link: https://github.com/malbernaz/preact-hn 25 | framework-link: https://preactjs.com 26 | --- 27 | -------------------------------------------------------------------------------- /site/_apps/preact-hn.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 3 3 | title: 'Preact HN' 4 | github-title: 'kristoferbaxter/preact-hn' 5 | library: 'Preact' 6 | libraries: 7 | - name: 'Preact' 8 | module-bundling: 'Webpack' 9 | service-worker: 'Application Shell with SW Precache' 10 | perfomance-patterns: 'HTTP/2 with Server Push, Brotli and Zopfli static assets' 11 | server-side-rendering: 'Yes' 12 | api: 'In-memory cached Hacker News Firebase API' 13 | hosting: 'Webfaction + Cloudflare' 14 | authors: 15 | - name: 'Kristofer' 16 | lighthouse: '93/100' 17 | interactive-em: '1.9s' 18 | interactive-faster-3g: '1.5s' 19 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=171009_R6_14208c102da44d9b2c10d78825ea128a&run=1 20 | wpt-em-link: https://www.webpagetest.org/result/171009_R6_14208c102da44d9b2c10d78825ea128a/ 21 | wpt-faster-3g-link: https://www.webpagetest.org/result/171009_KZ_4637d4705732307a8d01e2fc0869bde3/ 22 | image: /assets/images/preacthn-mobile.png 23 | app-link: https://hn.kristoferbaxter.com/ 24 | github-link: https://github.com/kristoferbaxter/preact-hn 25 | framework-link: https://preactjs.com/ 26 | --- 27 | -------------------------------------------------------------------------------- /site/_apps/quasar-hackernews.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 32 3 | title: 'HNPWA with Quasar Framework' 4 | github-title: 'quasarframework/quasar-hackernews' 5 | libraries: 6 | - name: 'Quasar Framework' 7 | - name: 'Vue' 8 | - name: 'vue-router' 9 | - name: 'Vuex' 10 | module-bundling: 'Webpack' 11 | service-worker: 'Application Shell + data caching with SWPrecachePlugin' 12 | perfomance-patterns: 'Server-side data pre-fetching, preload/prefetch resources' 13 | server-side-rendering: 'Yes' 14 | api: 'Hacker News Firebase API' 15 | hosting: 'Now' 16 | other-details: 'Inlined CSS used by rendered components' 17 | authors: 18 | - name: 'Razvan Stoenescu' 19 | lighthouse: '100/100' 20 | interactive-em: '6.84s' 21 | interactive-faster-3g: '5.07s' 22 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=180627_47_1be589c537caa5cdf9debfe7476b9b6c&run=1 23 | wpt-em-link: https://www.webpagetest.org/result/180627_FH_e52159d46786140db0507950e04e7160/ 24 | wpt-faster-3g-link: https://www.webpagetest.org/result/180627_47_1be589c537caa5cdf9debfe7476b9b6c/ 25 | image: /assets/images/quasar-hn.png 26 | app-link: https://quasar-hackernews.now.sh/ 27 | github-link: https://github.com/quasarframework/quasar-hackernews 28 | framework-link: https://quasar-framework.org/ 29 | --- 30 | -------------------------------------------------------------------------------- /site/_apps/react-hn-kristofer.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 1 3 | title: 'React HN' 4 | github-title: 'kristoferbaxter/react-hn' 5 | library: 'React' 6 | libraries: 7 | - name: 'React' 8 | - name: 'React Router' 9 | module-bundling: 'Webpack' 10 | service-worker: 'Application Shell with OfflinePlugin' 11 | perfomance-patterns: 'HTTP/2 with Server Push, Brotli and Zopfli static assets' 12 | server-side-rendering: 'Yes' 13 | api: 'In-memory cached Hacker News Firebase API' 14 | hosting: 'Webfaction + Cloudflare' 15 | authors: 16 | - name: 'Kristofer' 17 | lighthouse: '91/100' 18 | interactive-em: '2.57s' 19 | interactive-faster-3g: '2.09s' 20 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=170926_C4_2e99e0bda1db48cfd3b8139722cbc108&run=1 21 | wpt-em-link: https://www.webpagetest.org/result/170926_C4_2e99e0bda1db48cfd3b8139722cbc108/ 22 | wpt-faster-3g-link: https://www.webpagetest.org/result/170926_MZ_61d634db2106167b89704d43d49d1ee2/ 23 | image: /assets/images/reacthn-kristofer-mobile.png 24 | app-link: https://react-hn.kristoferbaxter.com/ 25 | github-link: https://github.com/kristoferbaxter/react-hn 26 | framework-link: https://facebook.github.io/react/ 27 | --- 28 | -------------------------------------------------------------------------------- /site/_apps/react-hn-stephen.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 23 3 | title: 'React HN' 4 | github-title: 'stephenkingsley/hackerNews-pwa' 5 | library: 'React' 6 | libraries: 7 | - name: 'React' 8 | - name: 'React Router' 9 | module-bundling: 'Webpack' 10 | service-worker: 'Application Shell' 11 | server-side-rendering: 'No' 12 | api: 'Node-hnapi (unoffical)' 13 | hosting: 'Firebase' 14 | other-details: 'create-react-app' 15 | authors: 16 | - name: 'Stephen' 17 | lighthouse: '91/100' 18 | interactive-em: '3.1s' 19 | interactive-faster-3g: '2.41s' 20 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=170826_0V_8516618e5aaa2650da5aabbc773c8929&run=3 21 | wpt-em-link: https://www.webpagetest.org/result/170826_1T_9823f5188c7a02b16c87c1bb00826991/ 22 | wpt-faster-3g-link: https://www.webpagetest.org/result/170826_8P_f18463655253ad388a2f129f75095afe/ 23 | image: /assets/images/react-hn-stephen.png 24 | app-link: https://hn-pwa-d8b2e.firebaseapp.com/ 25 | github-link: https://github.com/stephenkingsley/hackerNews-pwa 26 | framework-link: https://facebook.github.io/react/ 27 | --- 28 | -------------------------------------------------------------------------------- /site/_apps/react-hn-suriel.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 33 3 | title: 'React HN' 4 | github-title: 'surielmx/reacthnpwa' 5 | library: 'React' 6 | libraries: 7 | - name: 'React' 8 | - name: 'React Router' 9 | module-bundling: 'Webpack' 10 | service-worker: 'Application Shell' 11 | perfomance-patterns: 'HTTP/2, route based code splitting' 12 | server-side-rendering: 'No' 13 | api: 'api.hnpwa.com/v0' 14 | hosting: 'Firebase' 15 | other-details: 'Asynchronously loaded routes' 16 | authors: 17 | - name: 'Suriel' 18 | lighthouse: '91/100' 19 | interactive-em: '4.6s' 20 | interactive-faster-3g: '3.2s' 21 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=180502_3Z_98e8d3054059210ddaa78f835bcac68a&run=3 22 | wpt-em-link: https://www.webpagetest.org/result/180502_PF_e804f8fd48e450f54a7ffad0d4e15b0a/ 23 | wpt-faster-3g-link: https://www.webpagetest.org/result/180502_W2_3d8192b37f093d8b5056de24f768cc6b/ 24 | image: /assets/images/react-hn-suriel.png 25 | app-link: https://reacthnsuriel.firebaseapp.com/ 26 | github-link: https://github.com/surielmx/reacthnpwa 27 | framework-link: https://facebook.github.io/react/ 28 | --- 29 | -------------------------------------------------------------------------------- /site/_apps/react-hn.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 2 3 | title: 'React HN' 4 | github-title: 'insin/react-hn' 5 | library: 'React' 6 | libraries: 7 | - name: 'React' 8 | - name: 'React Router' 9 | module-bundling: 'Webpack' 10 | service-worker: 'Application Shell + data caching with Workbox' 11 | perfomance-patterns: 'PRPL, route-based chunking' 12 | server-side-rendering: 'Yes' 13 | api: 'Hacker News Firebase API + Node-hnapi (unoffical)' 14 | hosting: 'Google App Engine' 15 | other-details: 'Asynchronously loaded routes' 16 | authors: 17 | - name: 'Jonny' 18 | - name: 'Addy' 19 | lighthouse: '91/100' 20 | interactive-em: '6.2s' 21 | interactive-faster-3g: '4.0s' 22 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=170511_QV_f71a12eb44f1f058b0741db2eac3d85a&run=3 23 | wpt-em-link: https://www.webpagetest.org/result/170511_Y7_3a354dfc36f824229a1ae2b1ac93fdbf/ 24 | wpt-faster-3g-link: https://www.webpagetest.org/result/170511_QV_f71a12eb44f1f058b0741db2eac3d85a/ 25 | image: /assets/images/reacthn-mobile.png 26 | app-link: https://react-hn.appspot.com/ 27 | github-link: https://github.com/insin/react-hn 28 | framework-link: https://facebook.github.io/react/ 29 | --- 30 | -------------------------------------------------------------------------------- /site/_apps/react-native-web.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 31 3 | title: 'React Native Web' 4 | github-title: 'johanholmerin/rnw-hn' 5 | library: 'React Native' 6 | libraries: 7 | - name: 'React Native' 8 | module-bundling: 'Webpack' 9 | service-worker: 'Application Shell with SW Precache' 10 | perfomance-patterns: 'HTTP/2, preconnect' 11 | server-side-rendering: 'No' 12 | api: 'hnpwa.com/api' 13 | hosting: 'Firebase' 14 | authors: 15 | - name: 'Johan' 16 | lighthouse: '100/100' 17 | interactive-em: '5.36s' 18 | interactive-faster-3g: '4.18s' 19 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=180403_ZP_9c22071ae912336f1338347e27a70d42&run=2 20 | wpt-em-link: https://www.webpagetest.org/result/180403_EX_feab3a99055d6404191add00e77f4a96/ 21 | wpt-faster-3g-link: https://www.webpagetest.org/result/180403_ZP_9c22071ae912336f1338347e27a70d42/ 22 | image: /assets/images/rnw-hn.png 23 | app-link: https://rnw-hn.firebaseapp.com/ 24 | github-link: https://github.com/johanholmerin/rnw-hn 25 | framework-link: https://facebook.github.io/react-native/ 26 | --- 27 | -------------------------------------------------------------------------------- /site/_apps/stencil-ionic-hn.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 23 3 | title: 'Stencil HN' 4 | github-title: 'ionic-team/ionic-stencil-hn-app' 5 | libraries: 6 | - Stencil 7 | - Ionic/Core 8 | service-worker: 'Application Shell' 9 | server-side-rendering: 'No' 10 | api: 'HNPWA api' 11 | hosting: 'Firebase' 12 | authors: 13 | - name: 'Justin' 14 | lighthouse: '91/100' 15 | interactive-em: '2.97s' 16 | interactive-faster-3g: '1.92s' 17 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=170913_V3_44c6e4792285dd5509e6c95fdc3188f3&run=3 18 | wpt-em-link: https://www.webpagetest.org/result/170824_31_d8b43867baae06562c35baf8ea575c77/ 19 | wpt-faster-3g-link: https://www.webpagetest.org/result/170913_V3_44c6e4792285dd5509e6c95fdc3188f3/ 20 | image: /assets/images/stencil-ionic.png 21 | app-link: https://corehacker-10883.firebaseapp.com/ 22 | github-link: https://github.com/ionic-team/ionic-stencil-hn-app 23 | --- 24 | -------------------------------------------------------------------------------- /site/_apps/svelte-hacker-news.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 4 3 | title: 'Svelte Hacker News' 4 | github-title: 'sveltejs/svelte-hackernews' 5 | libraries: 6 | - name: 'Svelte' 7 | module-bundling: 'Rollup' 8 | service-worker: 'Application Shell + data caching' 9 | server-side-rendering: 'Yes' 10 | api: 'Hacker News Firebase API' 11 | hosting: 'Now' 12 | authors: 13 | - name: 'Rich' 14 | lighthouse: '73/100' 15 | interactive-em: '2.5s' 16 | interactive-faster-3g: '2.2s' 17 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=170611_K5_aaca06336e5608c4a825246b383dc663&run=2 18 | wpt-em-link: https://www.webpagetest.org/result/170611_K5_aaca06336e5608c4a825246b383dc663/ 19 | wpt-faster-3g-link: https://www.webpagetest.org/result/170611_BP_6fc0112b1b7a2862e4aedef7c9277416/ 20 | image: /assets/images/sveltehn-mobile.png 21 | app-link: https://hn.svelte.technology/ 22 | github-link: https://github.com/sveltejs/svelte-hackernews 23 | framework-link: https://svelte.technology/ 24 | --- 25 | -------------------------------------------------------------------------------- /site/_apps/vanilla-hn.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 20 3 | title: 'Vanilla HN' 4 | github-title: 'cristianbote/hnpwa-vanilla' 5 | library: 'Plain javascript' 6 | module-bundling: 'Webpack' 7 | service-worker: 'Application Shell' 8 | server-side-rendering: 'No' 9 | api: 'hnpwa.com/api' 10 | hosting: 'Firebase static files hosting + preload/prefetch link headers' 11 | authors: 12 | - name: 'Cristian' 13 | lighthouse: '91/100' 14 | interactive-em: '3.0s' 15 | interactive-faster-3g: '2.4s' 16 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=170712_QD_1962982caa117830d68f99b8e218bb67&run=3 17 | wpt-em-link: https://www.webpagetest.org/result/170712_MJ_9eda2ffea1034eaf6426dfc6c5dec60f/ 18 | wpt-faster-3g-link: https://www.webpagetest.org/result/170712_QD_1962982caa117830d68f99b8e218bb67/ 19 | image: /assets/images/vanillahn-mobile.png 20 | app-link: https://hnpwa-vanilla.firebaseapp.com/ 21 | github-link: https://github.com/cristianbote/hnpwa-vanilla 22 | --- 23 | -------------------------------------------------------------------------------- /site/_apps/vanilla-wc-hn.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 33 3 | title: 'Vanilla Web Components HN' 4 | github-title: 'alexnoz/vanilla-wc-hnpwa' 5 | module-bundling: 'Webpack' 6 | service-worker: 'Application Shell + runtime caching with SWPrecachePlugin' 7 | perfomance-patterns: '2 bundles (ES2015+ and transpiled), route-level code splitting, preload/prefetch resources, CSS inlining' 8 | server-side-rendering: 'No' 9 | api: 'api.hnpwa.com/v0/' 10 | hosting: 'Firebase' 11 | authors: 12 | - name: 'Alex Nozdriukhin' 13 | lighthouse: '100/100' 14 | interactive-em: '2.6s' 15 | interactive-faster-3g: '1.6s' 16 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=180718_SK_9d0e0e8c4a174ddc770fc210fe809e62&run=2 17 | wpt-em-link: https://www.webpagetest.org/result/180718_G6_d4db68fcd9834b2fc080fe268dbc9717/ 18 | wpt-faster-3g-link: https://www.webpagetest.org/result/180718_SK_9d0e0e8c4a174ddc770fc210fe809e62/ 19 | image: /assets/images/vanilla-wc-hn.png 20 | app-link: https://vanilla-wc-hnpwa.firebaseapp.com 21 | github-link: https://github.com/alexnoz/vanilla-wc-hnpwa 22 | --- -------------------------------------------------------------------------------- /site/_apps/viper-news.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 25 3 | title: 'Viper-news' 4 | github-title: 'WebReflection/viper-news' 5 | libraries: 6 | - name: 'viperHTML' 7 | module-bundling: 'Webpack' 8 | service-worker: 'Application Shell + data caching' 9 | perfomance-patterns: 'Asynchronous Partial Outputs' 10 | server-side-rendering: 'Yes' 11 | api: 'Hacker News Firebase API' 12 | hosting: 'Google App Engine' 13 | authors: 14 | - name: 'Andrea' 15 | lighthouse: '91/100' 16 | interactive-em: '1.78s' 17 | interactive-faster-3g: '1.5s' 18 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=171116_3Q_636bd0fd4f0da9aeeec699d460e63a32&run=1 19 | wpt-em-link: https://www.webpagetest.org/result/171116_8C_00c37105fe46ea1939831f11622ec445/ 20 | wpt-faster-3g-link: https://www.webpagetest.org/result/171116_3Q_636bd0fd4f0da9aeeec699d460e63a32/ 21 | image: /assets/images/viperhtml-mobile.png 22 | app-link: https://viperhtml-164315.appspot.com/ 23 | github-link: https://github.com/WebReflection/viper-news 24 | framework-link: https://github.com/WebReflection/viperHTML 25 | --- 26 | -------------------------------------------------------------------------------- /site/_apps/vue-hacker-news.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 5 3 | title: 'Vue Hacker News 2.0' 4 | github-title: 'vuejs/vue-hackernews-2.0' 5 | libraries: 6 | - name: 'Vue' 7 | - name: 'vue-router' 8 | - name: 'Vuex' 9 | module-bundling: 'Webpack' 10 | service-worker: 'Application Shell + data caching with SWPrecachePlugin' 11 | perfomance-patterns: 'Server-side data pre-fetching, preload/prefetch resources' 12 | server-side-rendering: 'Yes' 13 | api: 'Hacker News Firebase API' 14 | hosting: 'Now' 15 | other-details: 'Inlined CSS used by rendered components' 16 | authors: 17 | - name: 'Evan' 18 | lighthouse: '93/100' 19 | interactive-em: '6.7s' 20 | interactive-faster-3g: '5.85s' 21 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=170919_Q2_655690ac651cba872483ecc93ac6efe9&run=1 22 | wpt-em-link: https://www.webpagetest.org/result/170919_ME_f239125bd17ccfed31eb2f81ef860567/ 23 | wpt-faster-3g-link: https://www.webpagetest.org/result/170919_Q2_655690ac651cba872483ecc93ac6efe9/ 24 | image: /assets/images/vuehn-mobile.png 25 | app-link: https://vue-hn.herokuapp.com/ 26 | github-link: https://github.com/vuejs/vue-hackernews-2.0 27 | framework-link: https://vuejs.org/ 28 | --- 29 | -------------------------------------------------------------------------------- /site/_apps/vue-hn-pwa.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 13 3 | title: 'HNPWA with Vue.js' 4 | github-title: 'codebusking/vue-hn-pwa-guide-kit' 5 | libraries: 6 | - name: 'Vue' 7 | - name: 'vue-router' 8 | - name: 'vue-pwa-boilerplate' 9 | - name: 'firebase-hackernews' 10 | module-bundling: 'Webpack' 11 | service-worker: 'Application Shell + data caching with SWPrecachePlugin' 12 | perfomance-patterns: 'Server-side data pre-fetching, preload/prefetch and lazy loading for rest of routes' 13 | server-side-rendering: 'Yes' 14 | api: 'Hacker News Firebase API via firebase-hackernews' 15 | hosting: 'Now' 16 | authors: 17 | - name: 'Jimmy' 18 | lighthouse: '91/100' 19 | interactive-em: '5.1s' 20 | interactive-faster-3g: '3.9s' 21 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=170606_8F_9a74ddc961724a98e92b71ea0ad1443e&run=2 22 | wpt-em-link: https://www.webpagetest.org/result/170606_AY_901bc2310bcc8fc640315092d0f0de6b/ 23 | wpt-faster-3g-link: https://www.webpagetest.org/result/170606_8F_9a74ddc961724a98e92b71ea0ad1443e/ 24 | image: /assets/images/vue-hn-pwa.png 25 | app-link: https://vue-hn-pwa.now.sh/ 26 | github-link: https://github.com/codebusking/vue-hn-pwa-guide-kit 27 | framework-link: https://vuejs.org/ 28 | --- 29 | -------------------------------------------------------------------------------- /site/_apps/webcomponents-hn.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 29 3 | title: 'Vanillia WebComponents' 4 | github-title: 'dsolimando/hnpwa-mobileelements' 5 | library: 'No Libray' 6 | module-bundling: 'No module bundling' 7 | service-worker: 'Application Shell' 8 | perfomance-patterns: 'HTTP/2, Gzip static assets, CDN' 9 | server-side-rendering: 'yes' 10 | api: 'Node-hnapi (unofficial)' 11 | hosting: 'Google Compute Engine' 12 | authors: 13 | - name: 'Damien' 14 | lighthouse: '91/100' 15 | interactive-em: '2.3s' 16 | interactive-faster-3g: '1.3s' 17 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=171125_1Y_6ce8db5468e664a2ba0362a045ca2e40&run=3 18 | wpt-em-link: https://www.webpagetest.org/result/170816_S5_19V8 19 | wpt-faster-3g-link: https://www.webpagetest.org/result/171125_1Y_6ce8db5468e664a2ba0362a045ca2e40/ 20 | image: /assets/images/hn-vanilla-wc.png 21 | app-link: https://dm3bm9rb0n9kc.cloudfront.net/ 22 | github-link: https://github.com/dsolimando/hnpwa-mobileelements/tree/pagination 23 | --- 24 | -------------------------------------------------------------------------------- /site/_apps/zuix-hn.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 19 3 | title: 'Zuix HN' 4 | github-title: 'genielabs/zuix-hn' 5 | library: 'ZUIX' 6 | libraries: 7 | - name: 'ZUIX' 8 | module-bundling: 'zuix-bundler' 9 | service-worker: 'Application Shell + Workbox data caching' 10 | perfomance-patterns: 'Lazy loaded components with caching' 11 | server-side-rendering: 'None' 12 | api: 'Hacker News Firebase API' 13 | hosting: 'Firebase' 14 | authors: 15 | - name: 'Gene' 16 | lighthouse: '91/100' 17 | interactive-em: '6.2s' 18 | interactive-faster-3g: '4.8s' 19 | lighthouse-link: https://www.webpagetest.org/lighthouse.php?test=170724_JT_fc286336283f4594b5e9a14ee486d437&run=3 20 | wpt-em-link: https://www.webpagetest.org/result/170724_F6_c37ad291bb720b8c203da685d8a704b4/ 21 | wpt-faster-3g-link: https://www.webpagetest.org/result/170724_JT_fc286336283f4594b5e9a14ee486d437/ 22 | image: /assets/images/zuixhn-mobile.png 23 | app-link: https://zuix-hn.firebaseapp.com/ 24 | github-link: https://github.com/g-labs-sw/zuix-hackernews 25 | framework-link: https://genielabs.github.io/zuix/ 26 | --- 27 | -------------------------------------------------------------------------------- /site/_config.yml: -------------------------------------------------------------------------------- 1 | # Welcome to Jekyll! 2 | # 3 | # This config file is meant for settings that affect your whole blog, values 4 | # which you are expected to set up once and rarely edit after that. If you find 5 | # yourself editing this file very often, consider using Jekyll's data files 6 | # feature for the data you need to update frequently. 7 | # 8 | # For technical reasons, this file is *NOT* reloaded automatically when you use 9 | # 'bundle exec jekyll serve'. If you change this file, please restart the server process. 10 | 11 | # Site settings 12 | # These are used to personalize your new site. If you look in the HTML files, 13 | # you will see them accessed via {{ site.title }}, {{ site.email }}, and so on. 14 | # You can create any custom variable you would like, and they will be accessible 15 | # in the templates via {{ site.myvariable }}. 16 | title: HNPWA 17 | description: > # this means to ignore newlines until "baseurl:" 18 | Hacker News readers as Progressive Web Apps 19 | baseurl: "" # the subpath of your site, e.g. /blog 20 | url: "https://hnpwa.com" # the base hostname & protocol for your site, e.g. http://example.com 21 | twitter_username: "@tastejs" 22 | github_username: "tastejs" 23 | google_analytics: UA-99127594-1 24 | collections: 25 | - apps 26 | - contributors 27 | 28 | # Build settings 29 | markdown: kramdown 30 | gems: 31 | - jekyll-feed 32 | exclude: 33 | - Gemfile 34 | - Gemfile.lock 35 | - vendor 36 | - package.json 37 | - sw-precache-config.js 38 | - node_modules 39 | -------------------------------------------------------------------------------- /site/_contributors/addy.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 1 3 | name: 'Addy' 4 | image: https://github.com/addyosmani.png 5 | link: https://github.com/addyosmani 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/alexchopin.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 16 3 | name: 'Alexandre' 4 | image: https://github.com/alexchopin.png 5 | link: https://github.com/alexchopin 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/alexnoz.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 34 3 | name: 'Alex Nozdriukhin' 4 | image: https://github.com/alexnoz.png 5 | link: https://github.com/alexnoz 6 | --- -------------------------------------------------------------------------------- /site/_contributors/alfredo.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 19 3 | name: 'Alfredo' 4 | image: https://github.com/alfredoperez.png 5 | link: https://github.com/alfredoperez 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/andrea.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 7 3 | name: 'Andrea' 4 | image: https://github.com/WebReflection.png 5 | link: https://github.com/WebReflection 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/anthony.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 28 3 | name: 'Anthony' 4 | image: https://github.com/agubler.png 5 | link: https://github.com/agubler 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/anubhav.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 17 3 | name: 'Anubhav' 4 | image: https://github.com/anubhav7495.png 5 | link: https://github.com/anubhav7495 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/ashish.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 35 3 | name: 'Ashish' 4 | image: https://github.com/Ashishdce.png 5 | link: https://github.com/Ashishdce 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/atinux.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 15 3 | name: 'Sebastien' 4 | image: https://github.com/atinux.png 5 | link: https://github.com/atinux 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/chris-h.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 31 3 | name: 'Chris H' 4 | image: https://github.com/lamplightdev.png 5 | link: https://github.com/lamplightdev 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/chris.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 11 3 | name: 'Chris' 4 | image: https://github.com/chrisdwheatley.png 5 | link: https://github.com/chrisdwheatley 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/cristian.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 18 3 | name: 'Cristian' 4 | image: https://github.com/cristianbote.png 5 | link: https://github.com/cristianbote 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/damien.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 29 3 | name: 'Damien' 4 | image: https://github.com/dsolimando.png 5 | link: https://github.com/dsolimando 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/dan.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 8 3 | name: 'Dan' 4 | image: https://github.com/azakus.png 5 | link: https://github.com/azakus 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/david.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 18 3 | name: 'David' 4 | image: https://github.com/davideast.png 5 | link: https://github.com/davideast 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/eugen.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 30 3 | name: 'Eugen' 4 | image: https://github.com/eugenkiss.png 5 | link: https://github.com/eugenkiss 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/evan.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 5 3 | name: 'Evan' 4 | image: https://github.com/yyx990803.png 5 | link: https://github.com/yyx990803 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/gene.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 13 3 | name: 'Gene' 4 | image: https://github.com/genemars.png 5 | link: https://github.com/genemars 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/houssein.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 6 3 | name: 'Houssein' 4 | image: https://github.com/housseindjirdeh.png 5 | link: https://github.com/housseindjirdeh 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/ivan.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 11 3 | name: 'Ivan Vanderbyl' 4 | image: https://github.com/ivanvanderbyl.png 5 | link: https://github.com/ivanvanderbyl 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/jimmy.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 13 3 | name: 'Jimmy' 4 | image: https://github.com/ragingwind.png 5 | link: https://github.com/ragingwind 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/johan.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 31 3 | name: 'Johan' 4 | image: https://github.com/johanholmerin.png 5 | link: https://github.com/johanholmerin 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/jonny.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 2 3 | name: 'Jonny' 4 | image: https://github.com/insin.png 5 | link: https://github.com/insin 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/justin.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 20 3 | name: 'Justin' 4 | image: https://github.com/jgw96.png 5 | link: https://github.com/jgw96 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/kevin.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 9 3 | name: 'Kevin' 4 | image: https://github.com/kevinpschaaf.png 5 | link: https://github.com/kevinpschaaf 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/kevmoo.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 32 3 | name: 'kevmoo' 4 | image: https://github.com/kevmoo.png 5 | link: https://github.com/kevmoo 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/kristofer.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 3 3 | name: 'Kristofer' 4 | image: https://github.com/kristoferbaxter.png 5 | link: https://github.com/kristoferbaxter 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/kulshekhar.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 24 3 | name: 'Kulshekhar' 4 | image: https://github.com/kulshekhar.png 5 | link: https://github.com/kulshekhar 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/leon.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 31 3 | name: 'Leon' 4 | image: https://github.com/leonsenft.png 5 | link: https://github.com/leonsenft 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/majid.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 17 3 | name: 'Majid' 4 | image: https://github.com/mhadaily.png 5 | link: https://github.com/mhadaily 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/malbernaz.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 30 3 | name: 'malbernaz' 4 | image: https://github.com/malbernaz.png 5 | link: https://github.com/malbernaz 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/marko.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 34 3 | name: 'Marko' 4 | image: https://github.com/mstijak.png 5 | link: https://github.com/mstijak 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/matan.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 30 3 | name: 'Matan' 4 | image: https://github.com/matanlurey.png 5 | link: https://github.com/matanlurey 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/michael.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 12 3 | name: 'Michael' 4 | image: https://github.com/mstewart6.png 5 | link: https://github.com/mstewart6 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/naythan.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 33 3 | name: 'Naythan' 4 | image: https://github.com/aretheregods.png 5 | link: https://github.com/aretheregods 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/pi0.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 14 3 | name: 'Pooya' 4 | image: https://github.com/pi0.png 5 | link: https://github.com/pi0 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/rich.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 4 3 | name: 'Rich' 4 | image: https://github.com/Rich-Harris.png 5 | link: https://github.com/Rich-Harris 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/rstoenescu.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 33 3 | name: 'Razvan Stoenescu' 4 | image: https://github.com/rstoenescu.png 5 | link: https://github.com/rstoenescu 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/rubenlie.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 26 3 | name: 'Ruben Lie' 4 | image: https://github.com/rl-king.png 5 | link: https://github.com/rl-king 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/ryan.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 12 3 | name: 'Ryan' 4 | image: https://github.com/chimon2000.png 5 | link: https://github.com/chimon2000 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/sebastian.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 17 3 | name: 'Sebastian' 4 | image: https://github.com/sebastianm.png 5 | link: https://github.com/SebastianM 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/stephen.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 20 3 | name: 'Stephen' 4 | image: https://github.com/stephenkingsley.png 5 | link: https://github.com/stephenkingsley 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/steve.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 10 3 | name: 'Steve' 4 | image: https://github.com/sorvell.png 5 | link: https://github.com/sorvell 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/suriel.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 32 3 | name: 'Suriel' 4 | image: https://github.com/surielmx.png 5 | link: https://github.com/surielmx 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/taehwanno.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 21 3 | name: 'Taehwan, No' 4 | image: https://github.com/taehwanno.png 5 | link: https://github.com/taehwanno 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/usman.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 35 3 | name: 'Usman' 4 | image: https://github.com/usm4n.png 5 | link: https://github.com/usm4n 6 | --- 7 | -------------------------------------------------------------------------------- /site/_contributors/yysun.txt: -------------------------------------------------------------------------------- 1 | --- 2 | weight: 99 3 | name: 'yysun' 4 | image: https://github.com/yysun.png 5 | link: https://github.com/yysun 6 | --- -------------------------------------------------------------------------------- /site/_includes/footer.html: -------------------------------------------------------------------------------- 1 | 33 | -------------------------------------------------------------------------------- /site/_includes/github-corner.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | -------------------------------------------------------------------------------- /site/_includes/google-analytics.html: -------------------------------------------------------------------------------- 1 | 11 | 12 | -------------------------------------------------------------------------------- /site/_includes/head.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |9 | TodoMVC has helped thousands of developers select 10 | an MV* framework for their JavaScript applications. However, the web ecosystem 11 | has evolved in the past few years allowing us to build powerful applications using 12 | modern browser capabilities. 13 |
14 | 15 |16 | To provide developers with examples, we collected a list of unofficial Hacker News clients built with a number of popular JavaScript frameworks and libraries. 17 | Each implementation is a complete Progressive Web App that utilizes 18 | different progressive technologies to provide a fast, reliable and engaging experience. 19 |
20 | 21 |22 | Our implementations aim to follow a loose specification. They are primarily a learning tool and should not be used to compare the performance of one PWA to another. They can differ based on server infrastructure, performance patterns used and other factors. 23 |
24 |39 | If your Hacker News implementation meets the specifications, 40 | feel free to submit a summary of it here! HNPWA serves as a reference for building PWAs with different libraries so the 41 | more examples we have the better. Don't worry if there's already one with the same UI library or framework as yours. 42 |
43 | 44 | SUBMIT 45 |