{"componentChunkName":"component---src-templates-course-page-js","path":"/progressive-web-apps/","webpackCompilationHash":"a16c2e57d401e22678c3","result":{"data":{"currentCourse":{"id":"c4a0b327-b291-5ccc-b2bc-746eb4c862e8","tags":["progressive web apps","pwa"],"body":"function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Progressive Web Apps\",\n  \"lastUpdated\": \"2019-03-06T00:00:00.000Z\",\n  \"tags\": [\"progressive web apps\", \"pwa\"],\n  \"coverImage\": \"./cover.jpg\"\n};\n\nvar makeShortcode = function makeShortcode(name) {\n  return function MDXDefaultShortcode(props) {\n    console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n    return mdx(\"div\", props);\n  };\n};\n\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, [\"components\"]);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"h2\", {\n    \"id\": \"progressive-web-apps-training\"\n  }, \"Progressive Web Apps Training\"), mdx(\"p\", null, mdx(\"em\", {\n    parentName: \"p\"\n  }, \"This course is not created by me. It is just for demo purpose. \", mdx(\"a\", _extends({\n    parentName: \"em\"\n  }, {\n    \"href\": \"https://developers.google.com/web/ilt/pwa/\"\n  }), \"(\", mdx(\"strong\", {\n    parentName: \"a\"\n  }, \"original link\"), \")\"))), mdx(\"p\", null, \"The way we access the internet has changed. With the growth of smartphones and mobile devices, we are seeing millions of people from around the world using the internet for the first time on a mobile device. Google is supporting Progressive Web Apps (PWAs) to help developers provide native-app qualities in web applications that are reliable, fast, and engaging.\"), mdx(\"p\", null, \"This course is aimed at:\"), mdx(\"p\", null, \"Beginning-to-intermediate web developers.\\nWeb developers who are comfortable using HTML, CSS, and have modest facility with JavaScript.\\nDevelopers who want to build web experiences that work for everyone.\\nThis course shows you how to convert web pages to PWAs. A PWA is not an API or a technology, but it is a web development approach that uses a combination of tools and technologies already available to create targeted, ideal user experiences. It shows how to use service workers, APIs, and an application shell architecture for meaningful offline experiences, fast first load, and easy user reengagement upon repeat visits.\"));\n}\n;\nMDXContent.isMDXComponent = true;","title":"Progressive Web Apps","slug":"/progressive-web-apps/","premium":null,"lastUpdated":"March 06, 2019","lessons":[{"id":"a74efa60-6e25-5afe-b0d0-7cc36fa23c88","slug":"/progressive-web-apps/01-intro-and-setup/","title":"Intro & Setup","duration":108},{"id":"cb7345c2-ddd9-5937-accb-9a1d6ef13108","slug":"/progressive-web-apps/02-when-you-should-use-a-pwa/","title":"When should you use a PWA?","duration":344},{"id":"ff10915e-1bb5-5cc9-96f8-5e4cad6e0c0e","slug":"/progressive-web-apps/03-your-development-cycle/","title":"Your development cycle","duration":123},{"id":"a42b1a7e-3de2-5a9b-a024-2663b6673148","slug":"/progressive-web-apps/04-make-a-static-site-work-offline-by-hand/","title":"Make a static site work offline (by hand)","duration":492}],"coverImage":{"childImageSharp":{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAMBAgQF/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAH/2gAMAwEAAhADEAAAAeytNjUQV//EABkQAAIDAQAAAAAAAAAAAAAAAAADARARIf/aAAgBAQABBQI2dH8Uuv/EABURAQEAAAAAAAAAAAAAAAAAABAR/9oACAEDAQE/AYf/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAVEAEBAAAAAAAAAAAAAAAAAAABEP/aAAgBAQAGPwKrf//EABkQAQEBAAMAAAAAAAAAAAAAAAEAERAx0f/aAAgBAQABPyHcvIR1NGcSS5x//9oADAMBAAIAAwAAABA3D//EABYRAAMAAAAAAAAAAAAAAAAAABARMf/aAAgBAwEBPxCGP//EABcRAQADAAAAAAAAAAAAAAAAAAEQESH/2gAIAQIBAT8QXaj/xAAcEAEBAQACAwEAAAAAAAAAAAABEQAhUTFBYcH/2gAIAQEAAT8QSKsMoB4rKePuUAte+8pJAieucIFpfzDv/9k=","aspectRatio":1.7777777777777777,"src":"/static/51dea339d1032737e12b80d3c2f4124b/2f7e7/cover.jpg","srcSet":"/static/51dea339d1032737e12b80d3c2f4124b/4d406/cover.jpg 250w,\n/static/51dea339d1032737e12b80d3c2f4124b/32ee9/cover.jpg 500w,\n/static/51dea339d1032737e12b80d3c2f4124b/2f7e7/cover.jpg 1000w,\n/static/51dea339d1032737e12b80d3c2f4124b/2a5e2/cover.jpg 1500w,\n/static/51dea339d1032737e12b80d3c2f4124b/989b1/cover.jpg 1600w","sizes":"(max-width: 1000px) 100vw, 1000px"}}}}},"pageContext":{"isCreatedByStatefulCreatePages":false,"id":"c4a0b327-b291-5ccc-b2bc-746eb4c862e8","course":{"id":"c4a0b327-b291-5ccc-b2bc-746eb4c862e8","title":"Progressive Web Apps","slug":"/progressive-web-apps/","premium":null,"lessons":[{"id":"a74efa60-6e25-5afe-b0d0-7cc36fa23c88","title":"Intro & Setup","slug":"/progressive-web-apps/01-intro-and-setup/","duration":108},{"id":"cb7345c2-ddd9-5937-accb-9a1d6ef13108","title":"When should you use a PWA?","slug":"/progressive-web-apps/02-when-you-should-use-a-pwa/","duration":344},{"id":"ff10915e-1bb5-5cc9-96f8-5e4cad6e0c0e","title":"Your development cycle","slug":"/progressive-web-apps/03-your-development-cycle/","duration":123},{"id":"a42b1a7e-3de2-5a9b-a024-2663b6673148","title":"Make a static site work offline (by hand)","slug":"/progressive-web-apps/04-make-a-static-site-work-offline-by-hand/","duration":492}]},"previousCourse":{"node":{"id":"0a740fa9-6a20-58fb-b958-8decc3f71afe","title":"Bitcoin and Cryptocurrency","slug":"/bitcoin-and-cryptocurrency/","premium":"member only","lessons":[{"id":"d71b873f-afcf-5aaa-bbb5-5f99d9e13710","title":"Intro to Crypto and Cryptocurrencies","slug":"/bitcoin-and-cryptocurrency/01-intro/","duration":3521},{"id":"e9882e26-e79e-54ac-8636-86159b5cb2d3","title":"How Bitcoin Achieves Decentralization","slug":"/bitcoin-and-cryptocurrency/02-how-bitcoin-achieves-decentralization/","duration":4420},{"id":"1a481b5a-d871-5a60-a508-d6fb104d3bb3","title":"Mechanics of Bitcoin","slug":"/bitcoin-and-cryptocurrency/03-mechanics-of-bitcoin/","duration":4789},{"id":"a2e86635-4605-5103-8ce6-662158782f4e","title":"How to Store and Use Bitcoins","slug":"/bitcoin-and-cryptocurrency/04-how-to-store-and-use-bitcoins/","duration":4871},{"id":"5642fe95-94a1-5110-a87d-d17074c2cb57","title":"Bitcoin Mining","slug":"/bitcoin-and-cryptocurrency/05-bitcoin-mining/","duration":5294},{"id":"c8214f5a-d319-5b83-b7ad-0926315625a1","title":"Bitcoin and Anonymity","slug":"/bitcoin-and-cryptocurrency/06-bitcoin-and-anonymity/","duration":6727},{"id":"00eedf82-0d8d-5e80-ad93-db5a9944210c","title":"Community, Politics, and Regulation","slug":"/bitcoin-and-cryptocurrency/07-community-politics-and-regulation/","duration":4357}]}},"nextCourse":null,"premium":null}}}