<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Brittany Walker</title>
    <description>The latest articles on Forem by Brittany Walker (@musicalwebdev).</description>
    <link>https://forem.com/musicalwebdev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F6957%2F73043f95-37ab-4135-ad9c-8e6b658ff14c.jpg</url>
      <title>Forem: Brittany Walker</title>
      <link>https://forem.com/musicalwebdev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/musicalwebdev"/>
    <language>en</language>
    <item>
      <title>Forma 36 v4 released, GraphQL cheat sheet and Jamstack events</title>
      <dc:creator>Brittany Walker</dc:creator>
      <pubDate>Wed, 09 Feb 2022 19:47:04 +0000</pubDate>
      <link>https://forem.com/contentful/forma-36-v4-released-graphql-cheat-sheet-and-jamstack-events-1b8l</link>
      <guid>https://forem.com/contentful/forma-36-v4-released-graphql-cheat-sheet-and-jamstack-events-1b8l</guid>
      <description>&lt;p&gt;Happy February!&lt;/p&gt;

&lt;p&gt;I hope your start to 2022 was great. We're very excited to share what we've been working on! Our biggest news is that we released v4 of our design system, Forma 36. Additionally, the developer relations team participated in many fun events and we've published some new content to help you build faster and better with Contentful.&lt;/p&gt;

&lt;p&gt;Let's take a look!&lt;/p&gt;

&lt;h2&gt;
  
  
  Contentful corner
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.contentful.com/blog/2022/01/11/forma36-v4/" rel="noopener noreferrer"&gt;Forma 36 v4 has been released&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;We are very happy to announce the full release of Forma 36 v4, our open-source design system created to help developers easily customize Contentful's UI. &lt;/p&gt;

&lt;p&gt;This release includes highly anticipated updates that improve the user and developer experience. Our React components are now WCAG level AAA compliant, you can now pull in just the components that you need, which decreases bundle size, and all styling is encapsulated within components, meaning additional CSS imports are not required. These updates make it easier and faster for developers like you to use Forma 36 with your Contentful projects. &lt;/p&gt;

&lt;p&gt;Want a behind-the-scenes look at the development of this release? &lt;a href="https://www.contentful.com/blog/2022/01/18/developing-forma36-v4/" rel="noopener noreferrer"&gt;Head over to our blog&lt;/a&gt;. For instructions on how to use the latest version of Forma 36, &lt;a href="https://github.com/contentful/forma-36/blob/master/MIGRATION.md" rel="noopener noreferrer"&gt;explore our in-depth guide&lt;/a&gt; or &lt;a href="https://f36.contentful.com/v3-faq" rel="noopener noreferrer"&gt;migration FAQs&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.contentful.com/resources/graphql-api-cheat-sheet/" rel="noopener noreferrer"&gt;GraphQL API cheat sheet&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;As a developer, there's a lot to remember and Contentful has your back. I've put together a &lt;a href="https://www.contentful.com/resources/graphql-api-cheat-sheet/" rel="noopener noreferrer"&gt;cheat sheet &lt;/a&gt;of commonly used GraphQL features, queries and tips for you to reference as you're building.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.contentful.com/gatsby-starter-guide/" rel="noopener noreferrer"&gt;Get started with Contentful and Gatsby&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Did you know it takes less than 10 minutes to spin up a blog using Gatsby and Contentful? If you're curious about how to do it, &lt;a href="https://www.contentful.com/gatsby-starter-guide/" rel="noopener noreferrer"&gt;check out our Gatsby and Contentful starter walkthrough&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.contentful.com/careers/#openings" rel="noopener noreferrer"&gt;Work with us!&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Our Developer Relations team is growing! We're looking for a U.S.-based &lt;a href="https://www.contentful.com/careers/job/3539137/" rel="noopener noreferrer"&gt;director of developer experience&lt;/a&gt; and an EMEA-based &lt;a href="https://www.contentful.com/careers/job/3698465/" rel="noopener noreferrer"&gt;developer advocate&lt;/a&gt;. You could be just the fit for these roles if you have experience with front-end technologies and developer communities (bonus points if you enjoy building fun projects). Please don't hesitate to apply or make referrals --- we'd love to have you on our team.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F4oj3v7DlUGPycIq1ln4J6F%2Fcedc9745cf98122b7f19c8e83b3b97f2%2FContentful_community_.png%3Ffm%3Davif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F4oj3v7DlUGPycIq1ln4J6F%2Fcedc9745cf98122b7f19c8e83b3b97f2%2FContentful_community_.png%3Ffm%3Davif" alt="Contentful community"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Events with partners
&lt;/h2&gt;

&lt;p&gt;We've partnered with a few friends to bring you some fun events the past couple of months. &lt;/p&gt;

&lt;p&gt;In December Stefan partnered with Gatsby to &lt;a href="https://www.gatsbyjs.com/resources/webinars/gatsby-contentful-optimization/" rel="noopener noreferrer"&gt;show you how you can quickly create a Jamstack project&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Then, in January, he and Netlify's Jason Lengstorf donned their bunny and hippo house slippers to host a webinar on &lt;a href="https://www.contentful.com/resources/render-content-on-the-fly-with-jamstack/" rel="noopener noreferrer"&gt;how to serve and cache content&lt;/a&gt; on demand for faster build times and improved site performance.&lt;/p&gt;

&lt;p&gt;Get informed on future events --- visit our &lt;a href="https://www.contentful.com/developers/#news" rel="noopener noreferrer"&gt;developer events page&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links we like
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://messwithdns.net/" rel="noopener noreferrer"&gt;Mess with DNS&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Changing DNS settings can be a nerve-wracking experience. Lucky for us, &lt;a href="https://jvns.ca/" rel="noopener noreferrer"&gt;Julia Evans&lt;/a&gt; built a fun tool where you can experiment with DNS without the consequences.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://lynnandtonic.com/" rel="noopener noreferrer"&gt;Lynn Fisher's annual portfolio refresh&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Since 2007, designer &lt;a href="https://lynnandtonic.com/" rel="noopener noreferrer"&gt;Lynn Fisher&lt;/a&gt; has released an annual portfolio refresh. This year's version is a delight, pushing the limits of what can be done with SVGs and CSS web animation. &lt;a href="https://lynnandtonic.com/thoughts/entries/case-study-2021-refresh/" rel="noopener noreferrer"&gt;See what she achieved&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.learnwithjason.dev/better-screenreader-experiences-with-css" rel="noopener noreferrer"&gt;Better screen reader experiences with CSS&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;In one of my favorite livestreams, &lt;a href="https://benmyers.dev/" rel="noopener noreferrer"&gt;Ben Myers&lt;/a&gt; demonstrates how to navigate with screen readers and how your CSS can impact them in ways you might not realize or have even considered. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F4LD3W4NxLwjyUTqaNX1Svb%2Fd089ff2e45201c2cc3b48d6832a8a6b6%2FWriting_content_-_paper.png%3Ffm%3Davif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F4LD3W4NxLwjyUTqaNX1Svb%2Fd089ff2e45201c2cc3b48d6832a8a6b6%2FWriting_content_-_paper.png%3Ffm%3Davif" alt="changelog"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Changelog
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Easily disable and enable webhooks
&lt;/h3&gt;

&lt;p&gt;You can now disable and enable webhooks in one click, giving you more flexibility to manage integrations with Contentful.&lt;/p&gt;

&lt;h3&gt;
  
  
  Retrieve asset fields in multiple locales
&lt;/h3&gt;

&lt;p&gt;We modified the GraphQL API so users can request fields on an asset in multiple locales.&lt;/p&gt;

&lt;h3&gt;
  
  
  Environments governance
&lt;/h3&gt;

&lt;p&gt;With environment governance, admins can ensure that users only see the environments they need, letting them be much more confident in making changes, and avoid mistakes that could affect your end users.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.contentful.com/developers/changelog/#new-extensibility-locations-for-apps-in-compose-+-launch" rel="noopener noreferrer"&gt;Read the changelog here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Have a great month!
&lt;/h2&gt;

&lt;p&gt;That's it for February! Visit &lt;a href="https://www.contentful.com/developers/" rel="noopener noreferrer"&gt;our developer portal&lt;/a&gt; for even more news. The portal also houses developer blog posts, videos and tutorials. You can &lt;a href="https://www.contentful.com/resources/dev-newsletter/" rel="noopener noreferrer"&gt;subscribe to our newsletter here&lt;/a&gt;! As always, feel free to contact us on &lt;a href="https://www.contentful.com/slack/" rel="noopener noreferrer"&gt;Slack&lt;/a&gt; or &lt;a href="https://twitter.com/contentful/" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; to let us know how we can better support your awesome builds.&lt;/p&gt;

</description>
      <category>contentful</category>
      <category>webdev</category>
    </item>
    <item>
      <title>2021 Contentful year in review</title>
      <dc:creator>Brittany Walker</dc:creator>
      <pubDate>Fri, 21 Jan 2022 17:37:22 +0000</pubDate>
      <link>https://forem.com/contentful/2021-contentful-year-in-review-bpa</link>
      <guid>https://forem.com/contentful/2021-contentful-year-in-review-bpa</guid>
      <description>&lt;p&gt;Happy New Year!&lt;/p&gt;

&lt;p&gt;We hope you had a successful 2021 and we look forward to seeing what you build in 2022. In this month's newsletter, we're looking back at everything we accomplished over the last 12 months --- which includes creative community projects, fun events and amazing new Contentful features.&lt;/p&gt;

&lt;p&gt;Check out our review below!&lt;/p&gt;

&lt;h2&gt;
  
  
  Contentful's big 2021 numbers
&lt;/h2&gt;

&lt;p&gt;Contentful reached some amazing milestones in 2021 and we can't wait to see where things go this year. &lt;/p&gt;

&lt;p&gt;Here's a quick look at some numbers we're celebrating: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;72&lt;/strong&gt; new features releases and updates for the web app, APIs and more&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;44&lt;/strong&gt; technical blogs posted on topics such as rich text, Next.js and GraphQL&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;5,500+&lt;/strong&gt; custom apps created using the App Framework&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;1,700&lt;/strong&gt; questions asked and answered within the Contentful Slack Community &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;1.3&lt;/strong&gt; billion GraphQL API requests served throughout Black Friday weekend&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;4.2&lt;/strong&gt; billion Content Delivery API requests served throughout Black Friday weekend&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F6ZkStBvBKiffBJvmnfILUO%2Fea903d908ee6565619870576018e636d%2F2022-01_Developer_Newsletter_2021_in_review_NUmbers.png%3Fw%3D2500" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F6ZkStBvBKiffBJvmnfILUO%2Fea903d908ee6565619870576018e636d%2F2022-01_Developer_Newsletter_2021_in_review_NUmbers.png%3Fw%3D2500" alt="Contentful reached some amazing milestones in 2021 and we can't wait to see where things go this year.&amp;lt;br&amp;gt;
"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Community projects powered by Contentful
&lt;/h2&gt;

&lt;p&gt;Let's give a round of applause to all Contentful projects that were built in our community this past year. So many apps, tutorials and videos were created showcasing the things that can be done and the problems that can be solved with Contentful. Here are some community project highlights. &lt;/p&gt;

&lt;h3&gt;
  
  
  Apps
&lt;/h3&gt;

&lt;p&gt;5,500+ apps were created in 2021. Here are three that might inspire or enhance what you work on next!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.contentful.com/marketplace/app/repeater/" rel="noopener noreferrer"&gt;Repeater App&lt;/a&gt;&lt;br&gt;
Contentful's David Fateh created an app that provides a repeatable list of key-value pairs within our web app. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/mgschoen/contentful-reference-matrix-field-app" rel="noopener noreferrer"&gt;Reference Matrix App&lt;/a&gt;&lt;a href="https://twitter.com/mgschoen/status/1341405005518090242?s=20" rel="noopener noreferrer"&gt;Martin Schön&lt;/a&gt; developed an app that's just begging to be used for recipes or on a food blog. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/marcolink/cf-content-types-generator-app" rel="noopener noreferrer"&gt;TypeScript Type Generator App&lt;/a&gt;&lt;a href="https://twitter.com/linkage23" rel="noopener noreferrer"&gt;Marco Link&lt;/a&gt; built an app that generates and retrieves TypeScript types in the Contentful UI.&lt;/p&gt;

&lt;p&gt;Tip: Check out our &lt;a href="https://www.contentful.com/developers/videos/app-framework-course/" rel="noopener noreferrer"&gt;App Framework video course&lt;/a&gt; for a walkthrough on creating custom apps. For apps you can install today, visit our &lt;a href="https://www.contentful.com/marketplace/" rel="noopener noreferrer"&gt;app marketplace&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Projects and resources
&lt;/h3&gt;

&lt;p&gt;The Contentful Community created some amazing projects last year, including tools, blogs and courses using a wide range of technologies. Here are a few:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://contentmodel.io/" rel="noopener noreferrer"&gt;Visual directory of Contentful content models&lt;/a&gt;&lt;br&gt;
Contentful's &lt;a href="https://twitter.com/antesepic" rel="noopener noreferrer"&gt;Ante Šepić&lt;/a&gt; created a useful tool --- which I use when starting new projects --- for viewing, exporting and sharing Contentful content models.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://betterprogramming.pub/build-your-own-blog-app-with-swiftui-3ee8196ecb84" rel="noopener noreferrer"&gt;Build your own blog app with SwiftUI (and Contentful)&lt;/a&gt;&lt;br&gt;
&lt;a href="https://shelkford.medium.com/about" rel="noopener noreferrer"&gt;Roman Luzgin&lt;/a&gt; walks you through building a blog with Contentful and SwiftUI. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://levelup.gitconnected.com/tweet-planner-app-with-azure-functions-and-contentful-5495869520b" rel="noopener noreferrer"&gt;Tweet planner app with Azure Functions and Contentful&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/rauniyrchandan" rel="noopener noreferrer"&gt;Chandan Rauniyar&lt;/a&gt; created a tutorial that teaches you how to create an app that publishes scheduled Tweets. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=m9mNsYJbkNg&amp;amp;list=PL4cUxeGkcC9jClk8wl1yJcN3Zlrr8YSA1&amp;amp;index=2" rel="noopener noreferrer"&gt;Next.js and Contentful course&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/channel/UCW5YeuERMmlnqo4oq8vwUpg" rel="noopener noreferrer"&gt;The Net Ninja&lt;/a&gt; produced a 14-part video course covering everything from setting up a site to deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contentful tutorials and resources
&lt;/h2&gt;

&lt;p&gt;Last year we made it our mission to create fun, useful content to help you make the most of Contentful. Below are some of our favorites!&lt;/p&gt;

&lt;p&gt;While 2021 video content spanned many topics, the community was most interested in React. Our most viewed videos of the year include: &lt;a href="https://www.youtube.com/watch?v=6sXNtgR8nck" rel="noopener noreferrer"&gt;getting started with Gatsby&lt;/a&gt;, &lt;a href="https://www.youtube.com/watch?v=bMRQgguzBLs" rel="noopener noreferrer"&gt;Next.js with Vercel&lt;/a&gt; and &lt;a href="https://www.youtube.com/watch?v=u2emRgzXTzw" rel="noopener noreferrer"&gt;how to render rich text in React apps&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;On &lt;a href="https://www.contentful.com/blog/category/developers/" rel="noopener noreferrer"&gt;the developer blog&lt;/a&gt;, GraphQL was a major hit. Our three most-read posts of the year were: &lt;a href="https://www.contentful.com/blog/2021/01/14/GraphQL-via-HTTP-in-five-ways/" rel="noopener noreferrer"&gt;how to query GraphQL in multiple languages&lt;/a&gt;, &lt;a href="https://www.contentful.com/blog/2021/10/22/how-to-use-graphql-variables/" rel="noopener noreferrer"&gt;how to use GraphQL variables&lt;/a&gt; and &lt;a href="https://www.contentful.com/blog/2021/06/15/filter-entries-by-linked-references-in-graphql-api/" rel="noopener noreferrer"&gt;how to filter linked references in GraphQL&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We're still cooking up some great things for you in 2022. In the meantime, check out &lt;a href="https://www.contentful.com/blog/2021/12/30/our-top-10-blog-posts-2021/" rel="noopener noreferrer"&gt;this recap&lt;/a&gt; of our top 10 developer blog posts of 2021 for even more resources.&lt;/p&gt;

&lt;h2&gt;
  
  
  Our favorite events
&lt;/h2&gt;

&lt;p&gt;A final shout out to Fast Forward 2021, our annual, digital three-day conference -- it really covered a lot of ground, including new Contentful features, informative workshops and music by Contentful's in-house band, the Content Types.&lt;/p&gt;

&lt;p&gt;Some of my favorite presentations include Ben Brook's talk on &lt;a href="https://www.contentful.com/events/fast-forward-2021-consent-management/watch/" rel="noopener noreferrer"&gt;consent management and all things cookies&lt;/a&gt; (not the ones with chocolate chips). Jayne Mast's &lt;a href="https://www.contentful.com/events/fast-forward-2021-jquery-is-not-dead/watch/" rel="noopener noreferrer"&gt;discussion about jQuery&lt;/a&gt; and gatekeeping in tech. And finally, Dr Kelvin Wong's talk (which had the best opening ever) on migrating publication processes from &lt;a href="https://www.contentful.com/events/fast-forward-2021-from-microsoft-word-to-contentful/watch/" rel="noopener noreferrer"&gt;Microsoft Word to Contentful&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;If you haven't already, check out our &lt;a href="https://www.contentful.com/fast-forward/#:~:text=November%203%E2%80%935%2C%202021&amp;amp;text=Fast%20Forward%20by%20Contentful%20is,editors%20to%20chief%20digital%20officers." rel="noopener noreferrer"&gt;Fast Forward 2021 recordings&lt;/a&gt;. You won't regret it! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F4M5HhTIIxItFL1aJWXJSuJ%2Ff455dc7a1dd86f2893005363b50ea060%2F2022-01_Developer_Newsletter_2021_in_review_Fast_Forward_retro.png%3Fw%3D2500" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F4M5HhTIIxItFL1aJWXJSuJ%2Ff455dc7a1dd86f2893005363b50ea060%2F2022-01_Developer_Newsletter_2021_in_review_Fast_Forward_retro.png%3Fw%3D2500" alt="Fast Forward by Contentful with magnifying glass that has an eye inside"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A year of feature releases
&lt;/h2&gt;

&lt;p&gt;Early in the year, we released &lt;a href="https://www.contentful.com/blog/2021/03/16/launch-compose-release/" rel="noopener noreferrer"&gt;Compose + Launch&lt;/a&gt;, apps that improve content editing for non-technical users and management of content releases. We also released &lt;a href="https://www.contentful.com/developers/changelog/#tags-and-tag-based-permissions" rel="noopener noreferrer"&gt;tags and tag-based permissions&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In the summer, &lt;a href="https://www.contentful.com/developers/changelog/#default-values-for-entry-fields" rel="noopener noreferrer"&gt;default values for entry fields&lt;/a&gt; became available, allowing default values to be assigned to specific fields in content models. The App Framework received some major upgrades, including &lt;a href="https://www.contentful.com/developers/changelog/#app-hosting" rel="noopener noreferrer"&gt;hosting&lt;/a&gt;, &lt;a href="https://www.youtube.com/watch?v=B4ZRouKk-vA" rel="noopener noreferrer"&gt;sharing and customizable icons&lt;/a&gt;. To end the year, we updated our Images API to support &lt;a href="https://www.contentful.com/blog/2021/11/29/load-avif-webp-using-html/" rel="noopener noreferrer"&gt;AVIF images&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Stay tuned for new features and updates. We'll try to make them even more exciting than those unveiled in 2021.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F2hhgmHMklKCjemytltdESL%2Fa0f824faa8b1d0300746d3631bef212c%2F2022-01_Developer_Newsletter_2021_in_review_Feature_releases.png%3Fw%3D2500" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F2hhgmHMklKCjemytltdESL%2Fa0f824faa8b1d0300746d3631bef212c%2F2022-01_Developer_Newsletter_2021_in_review_Feature_releases.png%3Fw%3D2500" alt="A desktop computer with arrows coming from it pointing to the right"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next webinar: How to render content on the fly for faster builds with Jamstack&lt;/p&gt;

&lt;p&gt;No more waiting around for builds to complete! Join Contentful's &lt;a href="https://www.stefanjudis.com/" rel="noopener noreferrer"&gt;Stefan Judis&lt;/a&gt; and Netlify's &lt;a href="https://www.jason.af/" rel="noopener noreferrer"&gt;Jason Lengstorf&lt;/a&gt; on January 20 for a webinar on iterating faster with Jamstack using Netlify's On-demand Builders and Contentful. After this webinar, you'll be able to generate web content for users at the exact moment they need it. &lt;a href="https://www.contentful.com/resources/render-content-on-the-fly-with-Jamstack" rel="noopener noreferrer"&gt;Save your spot now.&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Join our team at Contentful
&lt;/h2&gt;

&lt;p&gt;Our Developer Relations team is still growing! We're looking for a U.S.-based &lt;a href="https://www.contentful.com/careers/job/3539137/" rel="noopener noreferrer"&gt;Director of Developer Relations&lt;/a&gt; and an EMEA-based &lt;a href="https://www.contentful.com/careers/job/3702003/" rel="noopener noreferrer"&gt;Developer Advocate&lt;/a&gt;. These roles could be a great fit if you have experience with front-end technologies, developer communities and building fun projects. Please don't hesitate to apply or make referrals --- we'd love to have you on our team.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enjoy the rest of the month!
&lt;/h2&gt;

&lt;p&gt;That's it for January! Visit the &lt;a href="https://www.contentful.com/developers/" rel="noopener noreferrer"&gt;Contentful Developer Portal&lt;/a&gt; for even more news. The portal also houses developer blog posts, videos and tutorials. You can &lt;a href="https://www.contentful.com/resources/dev-newsletter/" rel="noopener noreferrer"&gt;subscribe to our newsletter here&lt;/a&gt;! As always, feel free to contact us on &lt;a href="https://www.contentful.com/slack/" rel="noopener noreferrer"&gt;Slack&lt;/a&gt; or &lt;a href="https://twitter.com/contentful/" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; to let us know how we can better support your awesome builds.&lt;/p&gt;

</description>
      <category>contentful</category>
    </item>
    <item>
      <title>How to build a project using Vue.js and Contentful</title>
      <dc:creator>Brittany Walker</dc:creator>
      <pubDate>Fri, 03 Sep 2021 16:27:31 +0000</pubDate>
      <link>https://forem.com/musicalwebdev/how-to-build-a-project-using-vue-js-and-contentful-29gg</link>
      <guid>https://forem.com/musicalwebdev/how-to-build-a-project-using-vue-js-and-contentful-29gg</guid>
      <description>&lt;p&gt;Learn how to use Contentful to store and manage data for a Vue.js project. We'll set up data in Contentful, use GraphQL to retrieve the data and Vue.js, one of the most popular front-end frameworks, to render an application. You can find the final code for this project &lt;a href="https://github.com/brittanyrw/theaterlog" rel="noopener noreferrer"&gt;on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Overview
&lt;/h2&gt;

&lt;p&gt;As someone who has seen dozens of musicals and plays over the years, I needed a way to keep track of them. I created TheaterLog --- my first Vue project --- to do just that. In this article, I add Contentful to an existing Vue project called &lt;a href="https://theaterlog.com/" rel="noopener noreferrer"&gt;TheaterLog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F309cbjZ8fTftSGVhVcDEf7%2F4a7861c6c892b5d966bb870cec62b221%2Ftheaterlog-screenshot.png%3Ffm%3Dwebp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F309cbjZ8fTftSGVhVcDEf7%2F4a7861c6c892b5d966bb870cec62b221%2Ftheaterlog-screenshot.png%3Ffm%3Dwebp" alt="Theater log screenshot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before we get started, let's talk a little about Vue. &lt;a href="https://vuejs.org/" rel="noopener noreferrer"&gt;Vue.js&lt;/a&gt; is an open-source, progressive front-end JavaScript framework commonly used to build single-page applications and user interfaces for the web. It's known to have a shallow learning curve with a welcoming and supportive community. You can get up and running with Vue.js even more quickly if you understand HTML, CSS and JavaScript.&lt;/p&gt;

&lt;h3&gt;
  
  
  Benefits of using Contentful
&lt;/h3&gt;

&lt;p&gt;TheaterLog has helped me remember all of the shows I've seen but one aspect of the project could really use an improvement. Previously, I hardcoded all of the data about each show as an array of objects in a JavaScript file. While this worked initially, it became time-consuming to manage all of the information that I wanted to track. I've seen more than 90 shows, after all. It was time to move this data into Contentful. Let's get started!&lt;/p&gt;

&lt;h2&gt;
  
  
  Set up a Vue project
&lt;/h2&gt;

&lt;p&gt;I'm using TheaterLog as an example for this tutorial, but you are welcome to code along by creating a new Vue project or using an existing project.&lt;/p&gt;

&lt;h3&gt;
  
  
  Create a new Vue project
&lt;/h3&gt;

&lt;p&gt;You can create a new Vue project using the &lt;a href="https://cli.vuejs.org/guide/creating-a-project.html#vue-create" rel="noopener noreferrer"&gt;Vue CLI&lt;/a&gt;. Vue CLI is a command-line utility that will build a scaffold of a Vue project and allow you to install and configure various tools such as TypeScript and CSS preprocessors.&lt;/p&gt;

&lt;p&gt;Run the following commands in a terminal window.&lt;/p&gt;

&lt;p&gt;To install Vue CLI:&lt;br&gt;
&lt;code&gt;npm install -g @vue/cli&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now you can use the Vue command to create a new project. &lt;/p&gt;

&lt;p&gt;To create a new project:&lt;br&gt;
&lt;code&gt;vue create log-project&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The last parameter of the command is the name of the project --- in this example, we are using &lt;code&gt;log-project&lt;/code&gt;. You can use a different project name if you prefer. &lt;/p&gt;

&lt;p&gt;A list with three options will be displayed. We will work with the default Vue 2 preset for this tutorial.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F3KWS9Ovtvxo4f580KrsI4j%2F40141604cc1bb4aa39e2ceed036bc0e4%2Fvue-cli-1.png%3Ffm%3Dwebp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F3KWS9Ovtvxo4f580KrsI4j%2F40141604cc1bb4aa39e2ceed036bc0e4%2Fvue-cli-1.png%3Ffm%3Dwebp" alt="vue create log-project"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Press enter to select the Vue 2 default. You will see a success message once the project has been successfully created. Follow the commands in the terminal to run the project. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F3x3LxORT6C3cLQhELr14Pa%2Fc752ce4f4219bd41fddd41731c512ccf%2Fvue-cli-2.png%3Ffm%3Dwebp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F3x3LxORT6C3cLQhELr14Pa%2Fc752ce4f4219bd41fddd41731c512ccf%2Fvue-cli-2.png%3Ffm%3Dwebp" alt="successful creation of log-project in vue"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also use the Vue CLI to create a standard Vue 3 project, or you can manually configure all of the settings. Here is a list of what you can configure:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2FvubL4zUwnR60wwmo0nAqf%2F94c74a94d02d155b32b1cec7f44c75fe%2Fvue-cli-3.png%3Ffm%3Dwebp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2FvubL4zUwnR60wwmo0nAqf%2F94c74a94d02d155b32b1cec7f44c75fe%2Fvue-cli-3.png%3Ffm%3Dwebp" alt="Selecting a preset in vue "&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Use an existing Vue project
&lt;/h3&gt;

&lt;p&gt;If you already have an existing Vue project, all of the code in this tutorial can be added into your &lt;code&gt;App.vue&lt;/code&gt; file or other component of your choice. For TheaterLog, I will add all of the Contentful code into my &lt;code&gt;App.vue&lt;/code&gt; file so that I can share the data fetched from Contentful with other components. &lt;/p&gt;

&lt;p&gt;Now that we have a Vue project to work with, let's head over to Contentful to set up our account and organize the project data.&lt;/p&gt;
&lt;h2&gt;
  
  
  How to set up Contentful
&lt;/h2&gt;

&lt;p&gt;The first step will be to &lt;a href="https://www.contentful.com/sign-up/" rel="noopener noreferrer"&gt;sign up for Contentful&lt;/a&gt; if you do not already have an account. Next, you want to create a space which is where all of your data will be housed within Contentful. &lt;a href="https://www.contentful.com/help/spaces-and-organizations/" rel="noopener noreferrer"&gt;Spaces&lt;/a&gt; are content repositories that store content types and &lt;a href="https://www.contentful.com/help/adding-new-entry/" rel="noopener noreferrer"&gt;entries&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;To create a space click on the Create a Space button within the Contentful dashboard. You can name this space whatever you like. I named my space TheaterLog.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F6qVIyMHx9PjEmi4T4Q4V2i%2F1499b79e30ef26dcd32796c109911888%2Fnaming-space.png%3Ffm%3Dwebp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F6qVIyMHx9PjEmi4T4Q4V2i%2F1499b79e30ef26dcd32796c109911888%2Fnaming-space.png%3Ffm%3Dwebp" alt="Naming a space"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  How to create content types
&lt;/h3&gt;

&lt;p&gt;Now it is time to create &lt;a href="https://www.contentful.com/help/contentful-glossary/#content-type" rel="noopener noreferrer"&gt;content types&lt;/a&gt;. A content type is a grouping of data. For example, in TheaterLog, my data consists of shows. Here is an example of what a JavaScript object for a show looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hamilton: An American Musical&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://hamiltonmusical.com/new-york/&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="nx"&gt;theater&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Richard Rodgers Theatre&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="nx"&gt;date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oct 2016&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;New York, NY&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="nx"&gt;fav&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="nx"&gt;upcoming&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="nx"&gt;multi&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;musical&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="nx"&gt;review&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;love&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;165&lt;/span&gt;
 &lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The goal is to translate this JavaScript object into a content type within Contentful.&lt;/p&gt;

&lt;p&gt;Click on the Content Model tab in Contentful. Then click on the Add content type button. Create a content type called &lt;code&gt;Show&lt;/code&gt;. Now we can use existing data as a blueprint for how the content type in Contentful should be organized. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F2zVQ51DHylDnj8V8SkE9Qt%2F42e1b845324b3e7c8cd31b931bba4cbb%2Fcontent-type.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F2zVQ51DHylDnj8V8SkE9Qt%2F42e1b845324b3e7c8cd31b931bba4cbb%2Fcontent-type.gif" alt="GIF showing the creation of a content type in Contentful"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How to manage content fields
&lt;/h3&gt;

&lt;p&gt;A content type in Contentful comprises different fields to store data. Let's add fields to the &lt;code&gt;Show&lt;/code&gt; content type. Each show object includes key value pairs with data about a particular show such as the show &lt;code&gt;Name&lt;/code&gt;, &lt;code&gt;Date&lt;/code&gt;, and &lt;code&gt;Theater&lt;/code&gt;. Create a field for each piece of data that needs to be included in your content type. Click on the Add field button to add your first field.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F14gyI8XsWJ4y9PlUDXIm7E%2F09227847f4641cdad08dbfdc124eae05%2Fadd-fields-to-show.png%3Ffm%3Dwebp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F14gyI8XsWJ4y9PlUDXIm7E%2F09227847f4641cdad08dbfdc124eae05%2Fadd-fields-to-show.png%3Ffm%3Dwebp" alt="Add fields to a content type in contentful"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here you have the option to choose from a list of different field types that each come with specific built-in features. The date and time field, for example, has a date picker available. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F36F1xrSEnkT0UJQ5bC2BpP%2F5f933e7295ad4cf98d08cd365b0e07d1%2Ffield-types.png%3Ffm%3Dwebp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F36F1xrSEnkT0UJQ5bC2BpP%2F5f933e7295ad4cf98d08cd365b0e07d1%2Ffield-types.png%3Ffm%3Dwebp" alt="Contentful field types"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's create a few different types of fields together. &lt;/p&gt;

&lt;p&gt;First, we will create a field for the &lt;code&gt;Name&lt;/code&gt; of the show. Click the Add Field button and select Text as the field type and then enter the field &lt;code&gt;Name&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F1TUgfepIa1zyw2PPNUMAQv%2F0232b999aca292260bf254664af3e15e%2Fshow-name-settings.png%3Ffm%3Dwebp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F1TUgfepIa1zyw2PPNUMAQv%2F0232b999aca292260bf254664af3e15e%2Fshow-name-settings.png%3Ffm%3Dwebp" alt="Showing name settings in contentful"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Name field is the label for this field that will be shown in the Contentful UI. The Field ID, which is automatically generated from the Name value --- though it can be changed at this point --- will be how the field appears in the response from the API. &lt;/p&gt;

&lt;p&gt;Click on Create and configure to further customize the field. Under field options, select the "this field represents the Entry title" option. This will set the name field as the title of the entry, which is in our case, a show name. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F1AJdOvpoYp1UL8BgX21Lm1%2F3640608e4e39d7c3120e9cd0b0e41331%2Fentry-title.png%3Ffm%3Dwebp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F1AJdOvpoYp1UL8BgX21Lm1%2F3640608e4e39d7c3120e9cd0b0e41331%2Fentry-title.png%3Ffm%3Dwebp" alt="Entry title in Contentful"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on the Validation tab. Here, you can specify what fields are required and set limitations on the values of each field. Let's set this field to be required by selecting that option. This will stop entries from being saved if the name field has no value. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F3AR3B9j5Em5NYp4aNU2vvQ%2Fe4b71c54967461d1fe0fad69e82a3330%2Fname-required-field.png%3Ffm%3Dwebp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F3AR3B9j5Em5NYp4aNU2vvQ%2Fe4b71c54967461d1fe0fad69e82a3330%2Fname-required-field.png%3Ffm%3Dwebp" alt="Naming required fields in contentful"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on the confirm button to save this field. &lt;/p&gt;

&lt;p&gt;Let's create another field and explore more validation options in detail. &lt;/p&gt;

&lt;p&gt;Click on the Add Field button and select Text field. Name this field &lt;code&gt;Rating&lt;/code&gt;. This field will store the rating for each show. In TheaterLog, emoji icons are used to signify the rating for a show. If I loved a show, I want to show the heart eyes emoji and if I thought a show was super sad, I want to show a crying emoji. Each emoji is attached to a specific icon, which is an image saved in an &lt;code&gt;assets&lt;/code&gt; folder in the Vue project. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F1F7ACghwaEMcDDoj7qW7SE%2Fc84ce08a0d983f38ad77c0d704b89055%2Freview-images.png%3Ffm%3Dwebp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F1F7ACghwaEMcDDoj7qW7SE%2Fc84ce08a0d983f38ad77c0d704b89055%2Freview-images.png%3Ffm%3Dwebp" alt="Review images legend"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the code for TheaterLog, the emoji icons are displayed by their file names which match the rating name displayed below them. &lt;/p&gt;

&lt;p&gt;Let's add this information to the field. Click on the Validation tab and click the "accept only specified values" checkbox. You can now add predefined values. Contentful will not allow an entry to be saved if the &lt;code&gt;Rating&lt;/code&gt; field has any other value. Add a few rating values into the text box such as: &lt;code&gt;funny&lt;/code&gt;, &lt;code&gt;sad&lt;/code&gt;, and &lt;code&gt;love&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F5ertXLvYJZQ8TXA5Kax7Fg%2F245e59805f08b06047072aa413e328e5%2Fspecified-values-rating.png%3Ffm%3Dwebp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F5ertXLvYJZQ8TXA5Kax7Fg%2F245e59805f08b06047072aa413e328e5%2Fspecified-values-rating.png%3Ffm%3Dwebp" alt="Specified values rating in contentful"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on the Appearance tab. This section will allow you to change how a field appears within the Contentful entry editor. Let's change the appearance of this field to a dropdown.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F6YiOHOrkecgq8OP4LIRR06%2F79274386391685138ac7c6d2dc212115%2Frating-dropdown.png%3Ffm%3Dwebp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F6YiOHOrkecgq8OP4LIRR06%2F79274386391685138ac7c6d2dc212115%2Frating-dropdown.png%3Ffm%3Dwebp" alt="Screenshot of rating dropwdown "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Since we included predetermined fields, each of the values we entered in the Validation tab will now appear in this dropdown when editing or creating a new entry.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F1oTtCutsWC2qI2X7XEBdz7%2F0e31f35f59113e46ddd210b0c9ba0773%2Freview-dropdown.png%3Ffm%3Dwebp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F1oTtCutsWC2qI2X7XEBdz7%2F0e31f35f59113e46ddd210b0c9ba0773%2Freview-dropdown.png%3Ffm%3Dwebp" alt="review dropdown menu"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's create one more field. Click on the add field button and select Boolean as a field type. This field will create a radio button where the options are yes or no (or true or false). Name this field &lt;code&gt;Upcoming&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;This field will indicate if a show will be seen in the future, however the name &lt;code&gt;Upcoming&lt;/code&gt; is pretty vague. Let's add additional information about this field into the UI.&lt;/p&gt;

&lt;p&gt;Click on the Appearance tab. In the Help text input, add a description of what data the field should contain. Add in "Is this a show that will be seen in the future?"&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F1xApAm2HCWuPvSkMb6an9z%2F6577702108da23a396c5d4033e5ee716%2Fupcoming-help-text.png%3Ffm%3Dwebp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F1xApAm2HCWuPvSkMb6an9z%2F6577702108da23a396c5d4033e5ee716%2Fupcoming-help-text.png%3Ffm%3Dwebp" alt="screenshot of upcoming help text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This text will appear in the entry editor and is a great way to give more context to each of your fields.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to create reference fields
&lt;/h3&gt;

&lt;p&gt;Most of the data for TheaterLog is specific to particular shows. However, there is some data that is shared between shows such as the theater. For example, I have seen nine shows at the John F. Kennedy Center for the Performing Arts in Washington, DC. &lt;/p&gt;

&lt;p&gt;With what we have learned so far, creating a text field to store the theater would seem like the most logical step. But what if we also want to keep track of the location of each theater as well?&lt;/p&gt;

&lt;p&gt;This is where &lt;a href="https://www.contentful.com/help/references/" rel="noopener noreferrer"&gt;reference fields&lt;/a&gt; come in. Reference fields allow you to create links between content and most importantly, reference reusable content between entries. &lt;/p&gt;

&lt;p&gt;Let's make a new content type for theaters to see it in action. Navigate to the Content Model tab and click the Add content type button. Create a new content type called &lt;code&gt;Theater&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F4cDPndG6OqE9qQePmzVK6n%2F3b574a4524c042d04af7d5ec6fa1d60a%2Ftheater-content-type.png%3Ffm%3Dwebp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F4cDPndG6OqE9qQePmzVK6n%2F3b574a4524c042d04af7d5ec6fa1d60a%2Ftheater-content-type.png%3Ffm%3Dwebp" alt="Screenshot of theater content type"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's add two fields to this content type. Create a text field called &lt;code&gt;Name&lt;/code&gt; for the theater name and create a text field called &lt;code&gt;City&lt;/code&gt; for the location of the theater. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F7kvfU13hKMx0nCuePzg4Gj%2Fd9a249a126dbc6b9b28587ae0a750ce9%2Ftheater-fields.png%3Ffm%3Dwebp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F7kvfU13hKMx0nCuePzg4Gj%2Fd9a249a126dbc6b9b28587ae0a750ce9%2Ftheater-fields.png%3Ffm%3Dwebp" alt="theater fields content type"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we need to link reference the &lt;code&gt;Theater&lt;/code&gt; content type within the &lt;code&gt;Show&lt;/code&gt; content type.&lt;/p&gt;

&lt;p&gt;Click on the Content Model tab in the navigation and click on the &lt;code&gt;Show&lt;/code&gt; content type. Add a new field and choose Reference as the field type. Name this field &lt;code&gt;Theater&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Under the Validation tab, make this a required field and check the accept only specified entry type checkbox and choose Theater. This means that when you add a value to this field, it must be a Theater content type. This is helpful later when fetching data from the API.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F1D6FuDWbzopDRftxl9HtJd%2F90c52dac771a19ed774c04a5c73c4242%2Ftheater-specified-entry-type.png%3Ffm%3Dwebp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F1D6FuDWbzopDRftxl9HtJd%2F90c52dac771a19ed774c04a5c73c4242%2Ftheater-specified-entry-type.png%3Ffm%3Dwebp" alt="Theater specified entry type"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now that you know how to create fields and content types, it's time to create the rest of the fields for this content type. Here is an example of the types of fields you can create:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F6nFxOCNlhE9fvi8mOw2MZG%2Fbbb9a7e805920eea09ffc4a29592fef3%2Fshow-fields.png%3Ffm%3Dwebp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F6nFxOCNlhE9fvi8mOw2MZG%2Fbbb9a7e805920eea09ffc4a29592fef3%2Fshow-fields.png%3Ffm%3Dwebp" alt="show field in contentful"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You're probably realizing that manually adding all of the fields could take a while! Contentful provides CLI tools that allow you to import pre-made content types and entries on the command line. Fork the GitHub repository for this project and &lt;a href="https://github.com/brittanyrw/theaterlog#build-your-own-tracker" rel="noopener noreferrer"&gt;follow the instructions&lt;/a&gt; to import completed TheaterLog content types and sample entries into your Contentful space. &lt;/p&gt;

&lt;p&gt;Now that content types and fields have been set up, you can now add a show to your project! To add a show, navigate to the Content tab and click the Add Show button. This will open the entry editor that will list all of the fields we added in the content type.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2FHRetkmyFPh2pZNbBkr1vW%2F9b758889a3989097671627794ab9e815%2Fshow-entry-editor.png%3Ffm%3Dwebp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2FHRetkmyFPh2pZNbBkr1vW%2F9b758889a3989097671627794ab9e815%2Fshow-entry-editor.png%3Ffm%3Dwebp" alt="Show entry editor in contentful"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; Enter in the data for the fields and click on Publish. You have created your first entry!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F3m1ONUR99P0K7MvIjGLBNP%2Fa33be0698ad6fee1954551d789692317%2Fhamilton-entry-published.png%3Ffm%3Dwebp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F3m1ONUR99P0K7MvIjGLBNP%2Fa33be0698ad6fee1954551d789692317%2Fhamilton-entry-published.png%3Ffm%3Dwebp" alt="Hamilton entry publsihed"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We've set up our content types and added our first show entry. Now let's look at how we can retrieve that data in our Vue application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Retrieving your data
&lt;/h2&gt;

&lt;p&gt;Contentful offers two APIs to fetch your content --- the Content Delivery API and the GraphQL API. &lt;a href="https://www.contentful.com/developers/docs/tutorials/general/graphql/" rel="noopener noreferrer"&gt;GraphQL&lt;/a&gt; is a query language that allows you to define what data you request from an API. If you would like to learn more about GraphQL, check out our &lt;a href="https://www.contentful.com/developers/videos/learn-graphql/" rel="noopener noreferrer"&gt;Learn GraphQL&lt;/a&gt; video series.&lt;/p&gt;

&lt;p&gt;Now that we have data in Contentful, we will use the GraphQL API to retrieve the data. GraphQL is a great choice due to its ease of use, ability to specify exactly what data we want to retrieve and because it is self-documenting.&lt;/p&gt;

&lt;p&gt;Before we can retrieve data from Contentful, we need the access token and space ID from your Contentful space.&lt;/p&gt;

&lt;p&gt;To find the space ID, go to Settings and navigate to General Settings. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F2QdC8cezuaVCuU47YJEFzJ%2Ffb2cc51af89c660c5d91022b4822665e%2Fspace-id.png%3Ffm%3Dwebp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F2QdC8cezuaVCuU47YJEFzJ%2Ffb2cc51af89c660c5d91022b4822665e%2Fspace-id.png%3Ffm%3Dwebp" alt="Screenshot of space id"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For the access token, go to Settings and click on API keys. Click on the add API key button and copy the content delivery API token. Click save and let's start with the code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2FjnYyMJ77QKeIWLTO7fkez%2F1c47af75ce29afb5efc5cd6cd53098e0%2Faccess-token.png%3Ffm%3Dwebp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2FjnYyMJ77QKeIWLTO7fkez%2F1c47af75ce29afb5efc5cd6cd53098e0%2Faccess-token.png%3Ffm%3Dwebp" alt="screenshot of access tokens in contentful"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Write your first GraphQL query
&lt;/h3&gt;

&lt;p&gt;Now we need to build a GraphQL query. We can use Contentful's GraphiQL tool in a browser by going to this link: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;https://graphql.contentful.com/content/v1/spaces/{YOUR_SPACE_ID}/explore?access_token={YOUR_ACCESS_TOKEN}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can also install the &lt;a href="https://www.contentful.com/marketplace/app/graphql-playground/" rel="noopener noreferrer"&gt;GraphQL playground app&lt;/a&gt; within your Contentful space to explore and create GraphQL queries from inside the Contentful web app. &lt;/p&gt;

&lt;p&gt;What your query will look like depends on what data you would like to retrieve. Here is an example of a query that I created to get a list of all of the shows and all of the associated data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;showCollection&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;items&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;sys&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;id&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="nx"&gt;name&lt;/span&gt;
      &lt;span class="nx"&gt;link&lt;/span&gt;
      &lt;span class="nx"&gt;date&lt;/span&gt;
      &lt;span class="nx"&gt;price&lt;/span&gt;
      &lt;span class="nx"&gt;favorite&lt;/span&gt;
      &lt;span class="nx"&gt;upcoming&lt;/span&gt;
      &lt;span class="nx"&gt;multi&lt;/span&gt;
      &lt;span class="nx"&gt;type&lt;/span&gt;
      &lt;span class="nx"&gt;rating&lt;/span&gt;
      &lt;span class="nx"&gt;theater&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;name&lt;/span&gt;
        &lt;span class="nx"&gt;city&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="nx"&gt;song&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;name&lt;/span&gt;
        &lt;span class="nx"&gt;videoLink&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is an example of what a query and result will look like in the GraphiQL tool:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F3wTFr2Y62l1fOvenUJ3gWI%2Fb852431a0724dc7d61b5dcb9e8c92df2%2Fgraphqi-query-results.png%3Ffm%3Dwebp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F3wTFr2Y62l1fOvenUJ3gWI%2Fb852431a0724dc7d61b5dcb9e8c92df2%2Fgraphqi-query-results.png%3Ffm%3Dwebp" alt="graphqi query results screenshot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Using GraphQL in Vue
&lt;/h3&gt;

&lt;p&gt;Now we can use our new GraphQL query within Vue to fetch our data. In TheaterLog, I have two components that are utilizing data about the shows --- one displays the list of shows and the other calculates statistics. We can fetch the data in our App.vue file and pass the data down to child components using props.  &lt;/p&gt;

&lt;p&gt;Within the App.vue file, all of the following code must go inside of the &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tags. If you used Vue CLI to create your project, replace everything already within the &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tag with the code below. We will fill in this template below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// App.vue&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;script&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;data&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// will store fetched show data here&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="nf"&gt;created&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="c1"&gt;// will call method to fetch shows here&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;methods&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// will define function to fetch data here&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/script&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first item we will add is a new function within &lt;a href="https://v3.vuejs.org/guide/data-methods.html#methods" rel="noopener noreferrer"&gt;methods&lt;/a&gt; called getShows.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// App.vue&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;script&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;data&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="nf"&gt;created&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;methods&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;getShows&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// logic to fetch data from Contentful goes here&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/script&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Within this method, we will create a new variable and set its value to be our GraphQL query that we built earlier. You may modify the query based on the fields you created in your Contentful space. For the query to return data, make sure you have created fields and published an entry in your Contentful space.&lt;/p&gt;

&lt;p&gt;Let's query for the show name, rating and theater for now.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// App.vue&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;script&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;data&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="nf"&gt;created&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;methods&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;getShows&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`{
       showCollection {
         items {
           sys {
             id
           }
           name
           rating
           theater {
             name
             city
           }
         }
       }
     }`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/script&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set up the code we need to fetch our data from Contentful. Here is where you will insert your space ID and access token that we saved at the beginning of this post. &lt;/p&gt;

&lt;p&gt;We will use &lt;a href="https://cli.vuejs.org/guide/mode-and-env.html#modes-and-environment-variables" rel="noopener noreferrer"&gt;environment variables&lt;/a&gt; to store the space ID and access token. Create a new &lt;code&gt;.env&lt;/code&gt; file in the root of your project. Copy the following variables into the &lt;code&gt;.env&lt;/code&gt; file and replace the value with your space ID and access token.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// .env
VUE_APP_CONTENTFUL_SPACE_ID=SPACE_ID_HERE
VUE_APP_CONTENTFUL_ACCESS_TOKEN=ACCESS_TOKEN_HERE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We will create two new variables here. The fetchURL variable stores the API URL and the fetchOptions variable stores the request options. Note that we are calling the environment variables from the &lt;code&gt;.env&lt;/code&gt; file within these variables.&lt;br&gt;
&lt;br&gt;
 &lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// App.vue&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;script&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;data&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// ...&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="nf"&gt;created&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// ...&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;methods&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;getShows&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`{
           showCollection {
             items {
               sys {
               id
             }
             name
             rating
             theater {
               name
               city
             }
           }
         }
       }`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
       &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fetchUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`https://graphql.contentful.com/content/v1/spaces/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;VUE_APP_CONTENTFUL_SPACE_ID&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
       &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fetchOptions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
         &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
         &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
           &lt;span class="na"&gt;Authorization&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;VUE_APP_CONTENTFUL_ACCESS_TOKEN&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
          &lt;span class="p"&gt;},&lt;/span&gt;
           &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
            &lt;span class="nx"&gt;query&lt;/span&gt;
          &lt;span class="p"&gt;})&lt;/span&gt;
        &lt;span class="p"&gt;};&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/script&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Then we use the &lt;a href="https://developers.google.com/web/updates/2015/03/introduction-to-fetch" rel="noopener noreferrer"&gt;fetch API&lt;/a&gt; to make the request.&lt;br&gt;
&lt;br&gt;
 &lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// App.vue&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;script&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;data&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="nf"&gt;created&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;methods&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;getShows&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`{
           showCollection {
           // query goes here
           }
         }`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fetchUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`https://graphql.contentful.com/content/v1/spaces/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;VUE_APP_CONTENTFUL_SPACE_ID&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fetchOptions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;Authorization&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;VUE_APP_CONTENTFUL_ACCESS_TOKEN&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
          &lt;span class="nx"&gt;query&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt;
      &lt;span class="p"&gt;};&lt;/span&gt;

      &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fetchUrl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;fetchOptions&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
          &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;showCollection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Could not receive the data from Contentful!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/script&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Now we need to add shows to &lt;a href="https://v3.vuejs.org/guide/data-methods.html#data-properties" rel="noopener noreferrer"&gt;data&lt;/a&gt; within the Vue component so that we can access this information in the template.&lt;br&gt;
&lt;br&gt;
 &lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// App.vue&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;script&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;data&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;shows&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="nf"&gt;created&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;methods&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;getShows&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// ...&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/script&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;We want to fetch the shows when the component instance is &lt;a href="https://vuejs.org/v2/guide/instance.html#Instance-Lifecycle-Hooks" rel="noopener noreferrer"&gt;created&lt;/a&gt;, so we assign the value of shows in the created method on the component to the return value of the &lt;code&gt;getShows&lt;/code&gt; method.&lt;br&gt;
&lt;br&gt;
 &lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// App.vue&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;script&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nf"&gt;data&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// ...&lt;/span&gt;
     &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;created&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shows&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getShows&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
     &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;methods&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;getShows&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/script&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Now we have access to our data within our template! Here is the complete code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// App.vue&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;script&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="nf"&gt;data&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="na"&gt;shows&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
   &lt;span class="p"&gt;};&lt;/span&gt;
 &lt;span class="p"&gt;},&lt;/span&gt;
 &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;created&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shows&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getShows&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
 &lt;span class="p"&gt;},&lt;/span&gt;
 &lt;span class="na"&gt;methods&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="na"&gt;getShows&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`{
       showCollection {
         items {
           sys {
             id
           }
           name
               rating
           theater {
             name
             city
           }
         }
       }
     }`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fetchUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`https://graphql.contentful.com/content/v1/spaces/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;VUE_APP_CONTENTFUL_SPACE_ID&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
     &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fetchOptions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
       &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
         &lt;span class="na"&gt;Authorization&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;VUE_APP_CONTENTFUL_ACCESS_TOKEN&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
         &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
       &lt;span class="p"&gt;},&lt;/span&gt;
       &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
     &lt;span class="p"&gt;};&lt;/span&gt;

     &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fetchUrl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;fetchOptions&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
         &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
       &lt;span class="p"&gt;);&lt;/span&gt;
       &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;showCollection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
     &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Could not receive the data from Contentful!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
     &lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt;
 &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/script&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To test it out, you can console.log the response within the &lt;code&gt;getShows&lt;/code&gt; method or you can view the data via the &lt;a href="https://chrome.google.com/webstore/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajbpd?hl=en" rel="noopener noreferrer"&gt;Vue developer tools&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Now we need to loop through the list of items within our template. For each show, I am creating a list element that contains all of the information for that show. Each list item will be a card that looks like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F6VXBNW021xJAnCnXkyEvXk%2Fa0a1a90dae938eb79635fceb88dd9f0a%2Ftheater-log-cards__1_.png%3Ffm%3Dwebp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F6VXBNW021xJAnCnXkyEvXk%2Fa0a1a90dae938eb79635fceb88dd9f0a%2Ftheater-log-cards__1_.png%3Ffm%3Dwebp" alt="theater log cards "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The code for the template should go within &lt;code&gt;&amp;lt;template&amp;gt;&lt;/code&gt; tags. If you created your project with the Vue CLI, replace everything existing in the template with the code below.&lt;/p&gt;

&lt;p&gt;Here is the code for the wrapping list element. To loop through the items, we can use &lt;code&gt;v-for&lt;/code&gt; and iterate through the shows array which we defined in our data earlier. Because it is a loop, you need to include a key. In the below example, we are using the entry ID from Contentful as the key.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;// App.vue
&lt;span class="nt"&gt;&amp;lt;template&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;ul&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"shows"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt;
      &lt;span class="na"&gt;v-for=&lt;/span&gt;&lt;span class="s"&gt;"show in shows"&lt;/span&gt;
      &lt;span class="na"&gt;v-bind:key=&lt;/span&gt;&lt;span class="s"&gt;"show.sys.id"&lt;/span&gt;
      &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"show"&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
     ...additional info about the show here
    &lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/template&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Within the list item, let's add some information about the show:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;// App.vue
&lt;span class="nt"&gt;&amp;lt;template&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;ul&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"shows"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
     &lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt;
       &lt;span class="na"&gt;v-for=&lt;/span&gt;&lt;span class="s"&gt;"show in shows"&lt;/span&gt;
       &lt;span class="na"&gt;v-bind:key=&lt;/span&gt;&lt;span class="s"&gt;"show.sys.id"&lt;/span&gt;
       &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"show"&lt;/span&gt;
     &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
       &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"show-info"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"rating"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Rating: {{ show.rating }}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"show-name"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
           &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{ show.name }}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"show-content"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
           &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"show-theater"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;{{ show.theater.name }}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
           &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"show-location"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;{{ show.theater.city }}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
       &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
     &lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/template&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the browser you should now see an unstyled list with the type, name and theater of the shows that have been added to your Contentful space:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F6j0xQBRbC9uXptJYsbBjnb%2Fd581d51d5376afba854b4fb56eb49d4b%2Funstyled-template.png%3Ffm%3Dwebp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F6j0xQBRbC9uXptJYsbBjnb%2Fd581d51d5376afba854b4fb56eb49d4b%2Funstyled-template.png%3Ffm%3Dwebp" alt="unstyled template"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To complete the project, update the GraphQL query to fetch all of the fields that you require and render that data within the Vue template.&lt;/p&gt;

&lt;p&gt;And that is it! &lt;a href="https://theaterlog.com/" rel="noopener noreferrer"&gt;TheaterLog&lt;/a&gt; is now fetching data from Contentful instead of pulling it in from a JavaScript file. Now it will be much easier to manage all the information I want to track for each show I have seen. &lt;/p&gt;

&lt;h2&gt;
  
  
  The finished project
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F7FyeKRnMuxV214zPjP7TPe%2F25b3ae722fb0891deb88042b9bb0ec5b%2Ftheater-log-final.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.ctfassets.net%2Ffo9twyrwpveg%2F7FyeKRnMuxV214zPjP7TPe%2F25b3ae722fb0891deb88042b9bb0ec5b%2Ftheater-log-final.gif" alt="Gif of the final result of the theater log project"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this post, we successfully integrated Contentful into an existing Vue.js application. We learned how to set up Contentful by creating content types and fields. And to fetch our data, we utilized GraphQL. You can view the live version of the final project &lt;a href="https://theaterlog.com/" rel="noopener noreferrer"&gt;here&lt;/a&gt;. The code, including CSS styles, can also be found &lt;a href="https://github.com/brittanyrw/theaterlog" rel="noopener noreferrer"&gt;on GitHub&lt;/a&gt; with detailed setup instructions.This project most definitely can be remixed to track movies, concerts, TV shows or even books so have fun with it!&lt;/p&gt;

&lt;p&gt;If you've followed this tutorial and have built something you're proud of, let us know on Twitter using the hashtag &lt;a href="https://twitter.com/search?q=%23BuiltWithContentful&amp;amp;src=typed_query&amp;amp;f=live" rel="noopener noreferrer"&gt;#BuildWithContentful&lt;/a&gt; or post in the &lt;a href="https://www.contentful.com/slack/" rel="noopener noreferrer"&gt;Contentful Community Slack&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>tutorial</category>
      <category>contentful</category>
    </item>
    <item>
      <title>I Joined the Contentful Developer Relations Team</title>
      <dc:creator>Brittany Walker</dc:creator>
      <pubDate>Fri, 13 Aug 2021 16:28:30 +0000</pubDate>
      <link>https://forem.com/contentful/i-joined-the-contentful-developer-relations-team-3ne6</link>
      <guid>https://forem.com/contentful/i-joined-the-contentful-developer-relations-team-3ne6</guid>
      <description>&lt;p&gt;We have welcomed Brittany, also known as &lt;a href="https://twitter.com/musicalwebdev"&gt;@musicalwebdev&lt;/a&gt;, to the Developer Relations team at Contentful! From event planning to legal administration to software development, Brittany’s path to developer relations has been an interesting one. Read on to learn more about her career journey, involvement in the tech community and love of musicals.&lt;/p&gt;

&lt;h2&gt;
  
  
  What were some of your first experiences with web development?
&lt;/h2&gt;

&lt;p&gt;I started learning how to code around the age of 11 through &lt;a href="https://www.neopets.com/"&gt;Neopets&lt;/a&gt;! Neopets is an online, virtual world where you take care of virtual animals. Within the world, you can participate in a variety of activities such as running a shop, playing games and chatting in discussion forums. One major feature of Neopets is guilds, which are private clubs where leaders create games and manage a private discussion board. &lt;/p&gt;

&lt;p&gt;Guild pages, along with user profiles and shops, are customizable using HTML and CSS. I started designing guild pages and, in exchange, I was paid in virtual paint brushes — a very expensive and sought-after item in the Neopets world. Through Neopets, I learned HTML, CSS, Paint and eventually Photoshop. I had a ton of fun running my own Neopets guild design business. At the time, I had no idea that web development was an actual career! &lt;/p&gt;

&lt;h2&gt;
  
  
  What made you want to change your career to tech?
&lt;/h2&gt;

&lt;p&gt;I worked at a law firm in a legal practice management in 2016. My department at the firm was assigned specific practice areas (such as corporate, energy, etc.), and we helped lawyers manage those groups. Our tasks included writing marketing materials, creating financial reports and running meetings. Due to the nature of our jobs, we used a lot of different software programs and needed to combine data from many places to come up with one report. &lt;/p&gt;

&lt;p&gt;I started thinking that it would be nice if there were one program that could pull data from all of our different tools into one place. I wondered if I could build something like that. At the same time, I wanted to build a website where I could write reviews for musicals that I had seen, since I was regularly going to New York City to see shows a few times a year. I attempted to start a website but got confused with all of the unusual characters I saw everywhere (it was jQuery!). So with two goals in mind, I started learning how to code.&lt;/p&gt;

&lt;h2&gt;
  
  
  How did you start learning how to code?
&lt;/h2&gt;

&lt;p&gt;After trying to learn how to code on my own for a few months through FreeCodeCamp, Udemy and other platforms, I decided to attend a meetup. In January 2017, I went to my first Meetup to learn about JavaScript and jQuery. I didn’t know at the time, but the Meetup was actually hosted by a coding bootcamp named &lt;a href="https://www.thinkful.com/"&gt;Thinkful&lt;/a&gt;. After the Meetup — which I thought was awesome — I signed up for a free trial for Thinkful and eventually signed up for the bootcamp.&lt;/p&gt;

&lt;p&gt;Sometime after starting the bootcamp, I created my Twitter account, and thus &lt;a href="https://twitter.com/musicalwebdev"&gt;musicalwebdev&lt;/a&gt; was born. The only downside to being known as the “Musical Web Dev″ is that many assume that I have some sort of musical ability. Unfortunately, my musical abilities when it comes to singing and dancing are pretty non-existent.However, I’m extremely good at rapping songs from Hamilton. 😎 So of course, one of my first projects was a &lt;a href="https://brittanyrw.github.io/hamilton-quiz-app/"&gt;Hamilton Quiz&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;I worked as a web developer at a digital agency and as a software engineer at a retail company after the bootcamp. I never ended up making anything related to legal tech, but I have made a lot of musical-related projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  How did you get involved in your local tech community?
&lt;/h2&gt;

&lt;p&gt;I started getting involved in the Washington, DC, tech community during my coding bootcamp. We had a requirement to go to two or three meetups per month; however, I misread the requirement and thought it was two per week (oops!). I ended up going to a ton of awesome DC meetups and meeting a lot of really cool people. &lt;/p&gt;

&lt;p&gt;Everyone had a mentor at the coding bootcamp. Although Thinkful operates online, it wants to establish an in-person presence in various cities. It hosts free beginner-level coding Meetups in the DC area. My mentor for Thinkful just so happened to be in charge of the DC meetups, so I went to many of his events over time. Eventually, I started teaching at the Meetups as well, and in 2018, became the main instructor for the Thinkful DC meetups and taught beginner coding Meetups almost every week. &lt;/p&gt;

&lt;p&gt;Around the same time, I started as a front-end lead for &lt;a href="https://www.womenwhocode.com/dc"&gt;Women Who Code DC&lt;/a&gt;. The front-end team plans two to three front-end related meetups per month for women in the DC area. Through both opportunities, I’ve mentored many people from underrepresented groups that are learning to code or are still early in their tech careers. In addition to Women Who Code DC, I help plan events for &lt;a href="https://www.meetup.com/Black-Code-Collective/"&gt;Black Code Collective DC&lt;/a&gt; and have been an instructor and mentor for &lt;a href="https://www.thegcodehouse.com/"&gt;G{Code} House&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Musicals have been playing a big part in your tech journey, how did you get into them?
&lt;/h2&gt;

&lt;p&gt;In fifth grade, my mom bought a VHS tape of Grease that — apparently — I absolutely loved. I would carry the tape in my backpack and, when I went to friends’ houses after school, I would make them watch it with me. Over the next few years, I watched as many movie musicals as possible and saw my first live musical, Lion King on Broadway, in my senior year of high school.&lt;/p&gt;

&lt;p&gt;In college, I studied government and was lucky to volunteer as an usher at theaters where Broadway touring shows were performed. Through volunteering, I saw Wicked 11 times. 😅 Once I learned how to code, I wanted to make projects about my favorite hobby. My most recent musical-related project is &lt;a href="https://theaterlog.com/"&gt;TheaterLog&lt;/a&gt;, which I made to keep track of the musicals and plays I have seen since 2010.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wow, what an interesting story! Any additional words?
&lt;/h2&gt;

&lt;p&gt;I feel lucky to join the awesome Developer Relations team at Contentful! If you want to keep up to date with what I am doing, you can find me on &lt;a href="https://twitter.com/musicalwebdev"&gt;Twitter&lt;/a&gt;, at a local Washington DC tech event or follow what shows I am seeing at &lt;a href="https://theaterlog.com/"&gt;TheaterLog&lt;/a&gt;. 🎵&lt;/p&gt;

</description>
      <category>career</category>
      <category>womenintech</category>
      <category>devrel</category>
    </item>
  </channel>
</rss>
