{"id":642,"date":"2019-07-10T19:08:54","date_gmt":"2019-07-10T19:08:54","guid":{"rendered":"https:\/\/2019.annarbor.wordcamp.org\/?post_type=wcb_session&#038;p=642"},"modified":"2019-07-10T20:09:46","modified_gmt":"2019-07-10T20:09:46","slug":"how-i-built-wpbingo-com-a-pwa-that-uses-vue-js-tailwind-css-and-the-wp-rest-api","status":"publish","type":"wcb_session","link":"https:\/\/annarbor.wordcamp.org\/2019\/session\/how-i-built-wpbingo-com-a-pwa-that-uses-vue-js-tailwind-css-and-the-wp-rest-api\/","title":{"rendered":"How I built WPBingo.com: a PWA that uses Vue.js, Tailwind CSS, and the WP REST API"},"content":{"rendered":"<div class=\"box box--md\">\n<div class=\"box__content\">\n<div class=\"markdown\">\n<p>Just prior to WCUS 2017 I had the fun idea of creating an interactive bingo board for all of the fun and unique things that we regularly observe within our community. I was able to knock together the original concept after just a couple of hours thanks to utility provided by View and tailwind. Later I connected it to WordPress via the rest API so that I could more easily manage each of the squares available in the data set. Finally, I added a service worker to make the entire experience work offline.<\/p>\n<p>In this presentation I walk you through how I went from idea to prototype to fully functional web app. We\u2019ll cover the purpose served by my chosen frameworks and why I picked those instead of writing plain, vanilla JavaScript and CSS (or competing frameworks, for that matter). While this will not be a deep dive into code, we will review specific code samples and you should get enough detail to build this \u2013 or something like it \u2013 yourself by the time the session has ended.<\/p>\n<p><strong>Here\u2019s a specific list of the things you can expect to learn during this presentation:<\/strong><\/p>\n<ul>\n<li>Why I chose Vue instead of React for this particular project<\/li>\n<li>Some of the neat things that Vue provides to us as developers (Vue.js 101)<\/li>\n<li>The benefits of utility-based CSS classes<\/li>\n<li>How to register custom REST API endpoints<\/li>\n<li>How to make a very simple Progressive Web App (PWA) that uses service workers, local storage, and local caching for resilience against connectivity issues and unintended browser refreshes<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Just prior to WCUS 2017 I had the fun idea of creating an interactive bingo board for all of the fun and unique things that we regularly observe within our community. I was able to knock together the original concept &hellip; <a href=\"https:\/\/annarbor.wordcamp.org\/2019\/session\/how-i-built-wpbingo-com-a-pwa-that-uses-vue-js-tailwind-css-and-the-wp-rest-api\/\">Continue reading <span class=\"assistive-text\">How I built WPBingo.com: a PWA that uses Vue.js, Tailwind CSS, and the WP REST API<\/span>  <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":4434646,"featured_media":0,"template":"","meta":{"jetpack_post_was_ever_published":false,"_wcpt_session_time":1566661500,"_wcpt_session_duration":3000,"_wcpt_session_type":"session","_wcpt_session_slides":"","_wcpt_session_video":"","_wcpt_speaker_id":[640],"footnotes":""},"session_track":[1279543],"session_category":[5041],"class_list":["post-642","wcb_session","type-wcb_session","status-publish","hentry","wcb_track-amphitheater","wcb_session_category-developer"],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/padIPa-am","session_date_time":{"date":"August 24, 2019","time":"3:45 pm"},"session_speakers":[{"id":"640","slug":"brian-richards","name":"Brian Richards","link":"https:\/\/annarbor.wordcamp.org\/2019\/speaker\/brian-richards\/"}],"session_cats_rendered":"Developer","_links":{"self":[{"href":"https:\/\/annarbor.wordcamp.org\/2019\/wp-json\/wp\/v2\/sessions\/642","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/annarbor.wordcamp.org\/2019\/wp-json\/wp\/v2\/sessions"}],"about":[{"href":"https:\/\/annarbor.wordcamp.org\/2019\/wp-json\/wp\/v2\/types\/wcb_session"}],"author":[{"embeddable":true,"href":"https:\/\/annarbor.wordcamp.org\/2019\/wp-json\/wp\/v2\/users\/4434646"}],"version-history":[{"count":1,"href":"https:\/\/annarbor.wordcamp.org\/2019\/wp-json\/wp\/v2\/sessions\/642\/revisions"}],"predecessor-version":[{"id":643,"href":"https:\/\/annarbor.wordcamp.org\/2019\/wp-json\/wp\/v2\/sessions\/642\/revisions\/643"}],"speakers":[{"embeddable":true,"href":"https:\/\/annarbor.wordcamp.org\/2019\/wp-json\/wp\/v2\/speakers\/640"}],"wp:attachment":[{"href":"https:\/\/annarbor.wordcamp.org\/2019\/wp-json\/wp\/v2\/media?parent=642"}],"wp:term":[{"taxonomy":"wcb_track","embeddable":true,"href":"https:\/\/annarbor.wordcamp.org\/2019\/wp-json\/wp\/v2\/session_track?post=642"},{"taxonomy":"wcb_session_category","embeddable":true,"href":"https:\/\/annarbor.wordcamp.org\/2019\/wp-json\/wp\/v2\/session_category?post=642"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}