{"id":22203,"date":"2020-10-26T17:50:33","date_gmt":"2020-10-26T17:50:33","guid":{"rendered":"http:\/\/maya_shavin_how_i_built_my_website"},"modified":"2020-10-26T17:50:33","modified_gmt":"2020-10-26T17:50:33","slug":"maya_shavin_how_i_built_my_website","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/maya_shavin_how_i_built_my_website","title":{"rendered":"Maya Shavin: How I Built My Website"},"content":{"rendered":"<div class=\"wp-block-cloudinary-markdown \"><p>Besides working as a senior front-end developer at Cloudinary, I\u2019m also a content creator, a blogger, and an open-source developer. Follow me at <a href=\"https:\/\/twitter.com\/MayaShavin\">@mayashavin<\/a> and on <a href=\"https:\/\/mayashavin.com\">mayashavin.com<\/a>.<\/p>\n<h2>My Website: Before<\/h2>\n<p>In the beginning, my website, <a href=\"http:\/\/mayashavin.com\/\">mayashavin.com<\/a>, was mainly for showcasing the status of my development projects and keeping me organized with my speaking schedule. Initially, I built it with Vue.js, later on switching to Nuxt.js (aka Nuxt) for a higher SEO score, and deployed it with <a href=\"https:\/\/www.netlify.com\/\">Netlify<\/a>. After some time, I added a blog section with <a href=\"https:\/\/www.netlifycms.org\/\">Netlify CMS<\/a> as the content management system (CMS).\nEverything was fine until I added more content and features, which led to a significant decline in the site\u2019s performance. Also, the site design needed a modern look. So, I gave the site a makeover.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/image\/upload\/w_700,c_fill,f_auto,q_auto,dpr_2.0\/Web_Assets\/blog\/maya_shavin_old.png\" alt=\"old site\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"1400\" height=\"734\"\/><\/p>\n<h2>My Website: After<\/h2>\n<p>While redesigning and rebuilding my site, I decided to also post details of some of my other activities: side projects, interviews, podcasts, training courses. I also wanted to ascertain that, besides sporting a captivating look, the site is rich in content, significantly faster, more accessible, and requiring only a minimal effort for upkeep.\n<img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/image\/upload\/w_700,c_fill,f_auto,q_auto,dpr_2.0\/Web_Assets\/blog\/mayashavin_new.png\" alt=\"new site\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"1400\" height=\"737\"\/>\nGratifyingly, ideal tools abound for my goal, rendering the overhaul a smooth sail. Currently, under optimal conditions, the revamped site lands a perfect score on a Lighthouse audit.<\/p>\n<p>So, what are the tools I used? How do I ensure that my codebase stays simple and straightforward in the long term?\nRead on.<\/p>\n<h2>Architecture Overview<\/h2>\n<p>I built my site with several architectural components.<\/p>\n<h3>The Core<\/h3>\n<p><a href=\"https:\/\/nuxtjs.org\/\">Nuxt.js<\/a>, whose version 2.14+ I installed before embarking on the revamp, continues as my primary framework. That version <a href=\"https:\/\/mayashavin.com\/articles\/power-up-jamstack-nuxt\">builds static apps much faster<\/a> and works well with static site generators.\nWith static configuration as its target and its auto-crawl mechanism, the Nuxt engine automatically prerenders all the dynamic content pages on my site during a build. Also, for content updates, which is the case for my site approximately 90 percent of the time, Nuxt\u2019s new and smart build-caching mechanism redeploys much faster and more smoothly. What a perfect scenario!\nYou probably guessed it already: my site\u2019s core architecture model is <a href=\"https:\/\/jamstack.org\/\">Jamstack<\/a>, which aims to be light and easy to distribute, capable of statically delivering dynamic content. Also, since Jamstack sites are served through a content delivery network (CDN), they are secure.<\/p>\n<h3>Content Management System (CMS)<\/h3>\n<p>Content management was one of my biggest concerns. I wanted a simple tool that supports the Markdown markup language and that affords me full control over my content. Most of the headless CMSs I\u2019d tried before were far too complex for my purpose. Finally, I found the ideal tool: the <a href=\"https:\/\/content.nuxtjs.org\/\">Nuxt Content module<\/a>, which enables me to use Nuxt as a Git-based headless CMS with minimal setup and knowledge.\nThe process can\u2019t be simpler: Nuxt Content fetches content from the local directory\u2019s files (Markdown, CSV, or YAML) and then auto-renders it with a Nuxt Content component. Everything is out of the box with no need for configurations.\nIf you\u2019re looking to build a blog, I strongly recommend checking out Nuxt and <a href=\"https:\/\/content.nuxtjs.org\/\">Nuxt Content<\/a>. Less overhead, more productivity.<\/p>\n<h3>Content Privacy<\/h3>\n<p>Privacy of my content, especially my drafts, is crucial. Though I plan to open-source my codebase, I prefer to keep my content private and separate from the main repository. To accomplish that, I <a href=\"https:\/\/mayashavin.com\/articles\/git-submodule-nuxt\">implemented Nuxt Content with a Git submodule<\/a> so that my content resides in a separate repository. And even though the rest of the codebase is public, my content folder remains private and reusable.<\/p>\n<h3>Design Enhancement and Implementation of Dark Mode<\/h3>\n<p>Whether to build your own CSS or adopt a UI library is no easy decision. For portfolio sites, I highly recommend <strong>not<\/strong> to opt for a massive UI-component library, which would be overkill because it\u2019s slated for advanced use cases, such as complex applications. Developing your own CSS is a great option, but it takes a lot of hard work to maintain, organize, and ensure it\u2019s reusable.\nFor my site, I picked <a href=\"https:\/\/tailwindcss.com\/\">Tailwind CSS<\/a>, which offers not only all the utilities I needed, from CSS to class selectors, but also an innovative way in which to compose class-based styling, customize theme colors, and, most importantly, remove all unused CSS before deployment. Plus, everything is configurable.\nThanks to the flexibility of Tailwind CSS and the <code>@nuxtjs\/color-mode<\/code> module, implementing <a href=\"https:\/\/mayashavin.com\/articles\/dark-theme-tailwind-nuxt\">dark mode<\/a> for my site based on my theme was a cinch. Also, I was able to keep the site\u2019s CSS to a minimum. Making my site look beautiful has never been easier.<\/p>\n<h3>Modules<\/h3>\n<p>The great thing about Nuxt is <a href=\"https:\/\/github.com\/nuxt-community\">its module ecosystem<\/a>, which aims to eliminate all the hassles in web development, such as SEO handling with robots, feeds, and sitemaps, which I automated with <code>@nuxtjs\/feed<\/code>, <code>@nuxtjs\/sitemap<\/code>, and <code>@nuxtjs\/robots<\/code>.\nAlso, to leverage the benefits of progressive web apps (PWAs), I converted my site to a PWA with <code>@nuxtjs\/pwa<\/code>.<\/p>\n<h3>Media Management Platform<\/h3>\n<p>Optimizing images is always a must-do, for which Cloudinary is the obvious choice. The implementation was straightforward with the components from <a href=\"https:\/\/cloudinary.nuxtjs.org\/\">Cloudinary\u2019s Nuxt module<\/a>, involving only two steps. Here\u2019s what I did:<\/p>\n<ol>\n<li>Fetched the content through <code>$content<\/code> of the Nuxt Content module, uploading the local cover-images to Cloudinary, if necessary.<\/li>\n<li>\n<a href=\"https:\/\/mayashavin.com\/articles\/images-optimized-cloudinary-nuxt\">Transformed and displayed the images<\/a> responsively with Cloudinary components.<\/li>\n<\/ol>\n<h3>Hosting Service<\/h3>\n<p>To smoothly and efficiently deliver a Jamstack site like mine through a CDN, I had to pick a reliable hosting provider through which to build and auto-deploy my codebase. Netlify is an excellent choice, with lots of built-in capabilities like Netlify Forms and Analytics.\n<a href=\"https:\/\/vercel.com\/\">Vercel<\/a> also impressed me with its CLI-deployment feature and comprehensive geographic coverage. Nonetheless, Vercel is slightly faster and more reliable in delivery. Hence, I chose Vercel for my site.<\/p>\n<h3>Automated Deployment<\/h3>\n<p>Since I connected the content repository and the main codebase with a Git submodule, Vercel\u2019s standard auto-deployment capability would <strong>not<\/strong> work with content updates. That\u2019s because the main codebase repository is not aware of changes in the content repository, and vice versa.\nTo enable communications between those two repositories, I added a <a href=\"https:\/\/docs.github.com\/en\/free-pro-team@latest\/actions\">Github Actions<\/a> workflow and a GitHub event listener. Afterwards, pushed changes in the content repo would trigger a workflow that sends an event to the main codebase to start a rebuild, followed by a redeployment through the Vercel CLI. Finally, Github Actions triggers a tweet based on the message from the event instance.\nIn summary, with a Git submodule, I was able to resolve the issue of lack of auto-deployment support from Vercel, automating the whole system. <a href=\"https:\/\/vercel.com\/\">Vercel<\/a> is exceptionally reliable, being hiccups free no matter how many times I redeploy.<\/p>\n<h2>Source Code<\/h2>\n<p>Obviously, for best performance, useful tools require exemplary code. The right combination of excellent tools like Nuxt, Tailwind CSS, Cloudinary, and Vercel results in sheer magic, involving only minimal manual effort. Are you curious about how to combine them in code? Check out my <a href=\"https:\/\/github.com\/mayashavin\/portfolio-new\">open-source code<\/a>.<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":41,"featured_media":22204,"comment_status":"","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[175],"class_list":["post-22203","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-jamstack"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.6 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Maya Shavin: How I Built My Website<\/title>\n<meta name=\"description\" content=\"A Cloudinary senior front-end developer recounts how she rebuilt her Jamstack website with Nuxt, Tailwind CSS, Cloudinary, and Vercel.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cloudinary.com\/blog\/maya_shavin_how_i_built_my_website\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Maya Shavin: How I Built My Website\" \/>\n<meta property=\"og:description\" content=\"A Cloudinary senior front-end developer recounts how she rebuilt her Jamstack website with Nuxt, Tailwind CSS, Cloudinary, and Vercel.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/maya_shavin_how_i_built_my_website\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-10-26T17:50:33+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649719775\/Web_Assets\/blog\/Maya-Shavin-How-I-Built-My-Website_22204c83dd\/Maya-Shavin-How-I-Built-My-Website_22204c83dd.jpg?_i=AA\" \/>\n\t<meta property=\"og:image:width\" content=\"1540\" \/>\n\t<meta property=\"og:image:height\" content=\"847\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"NewsArticle\",\"@id\":\"https:\/\/cloudinary.com\/blog\/maya_shavin_how_i_built_my_website#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/maya_shavin_how_i_built_my_website\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"Maya Shavin: How I Built My Website\",\"datePublished\":\"2020-10-26T17:50:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/maya_shavin_how_i_built_my_website\"},\"wordCount\":7,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/maya_shavin_how_i_built_my_website#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649719775\/Web_Assets\/blog\/Maya-Shavin-How-I-Built-My-Website_22204c83dd\/Maya-Shavin-How-I-Built-My-Website_22204c83dd.jpg?_i=AA\",\"keywords\":[\"JAMStack\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2020\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/maya_shavin_how_i_built_my_website\",\"url\":\"https:\/\/cloudinary.com\/blog\/maya_shavin_how_i_built_my_website\",\"name\":\"Maya Shavin: How I Built My Website\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/maya_shavin_how_i_built_my_website#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/maya_shavin_how_i_built_my_website#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649719775\/Web_Assets\/blog\/Maya-Shavin-How-I-Built-My-Website_22204c83dd\/Maya-Shavin-How-I-Built-My-Website_22204c83dd.jpg?_i=AA\",\"datePublished\":\"2020-10-26T17:50:33+00:00\",\"description\":\"A Cloudinary senior front-end developer recounts how she rebuilt her Jamstack website with Nuxt, Tailwind CSS, Cloudinary, and Vercel.\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/maya_shavin_how_i_built_my_website#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/maya_shavin_how_i_built_my_website\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/maya_shavin_how_i_built_my_website#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649719775\/Web_Assets\/blog\/Maya-Shavin-How-I-Built-My-Website_22204c83dd\/Maya-Shavin-How-I-Built-My-Website_22204c83dd.jpg?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649719775\/Web_Assets\/blog\/Maya-Shavin-How-I-Built-My-Website_22204c83dd\/Maya-Shavin-How-I-Built-My-Website_22204c83dd.jpg?_i=AA\",\"width\":1540,\"height\":847},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/maya_shavin_how_i_built_my_website#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Maya Shavin: How I Built My Website\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"name\":\"Cloudinary Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cloudinary.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\",\"name\":\"Cloudinary Blog\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"width\":312,\"height\":60,\"caption\":\"Cloudinary Blog\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Maya Shavin: How I Built My Website","description":"A Cloudinary senior front-end developer recounts how she rebuilt her Jamstack website with Nuxt, Tailwind CSS, Cloudinary, and Vercel.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cloudinary.com\/blog\/maya_shavin_how_i_built_my_website","og_locale":"en_US","og_type":"article","og_title":"Maya Shavin: How I Built My Website","og_description":"A Cloudinary senior front-end developer recounts how she rebuilt her Jamstack website with Nuxt, Tailwind CSS, Cloudinary, and Vercel.","og_url":"https:\/\/cloudinary.com\/blog\/maya_shavin_how_i_built_my_website","og_site_name":"Cloudinary Blog","article_published_time":"2020-10-26T17:50:33+00:00","og_image":[{"width":1540,"height":847,"url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649719775\/Web_Assets\/blog\/Maya-Shavin-How-I-Built-My-Website_22204c83dd\/Maya-Shavin-How-I-Built-My-Website_22204c83dd.jpg?_i=AA","type":"image\/jpeg"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/maya_shavin_how_i_built_my_website#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/maya_shavin_how_i_built_my_website"},"author":{"name":"","@id":""},"headline":"Maya Shavin: How I Built My Website","datePublished":"2020-10-26T17:50:33+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/maya_shavin_how_i_built_my_website"},"wordCount":7,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/maya_shavin_how_i_built_my_website#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649719775\/Web_Assets\/blog\/Maya-Shavin-How-I-Built-My-Website_22204c83dd\/Maya-Shavin-How-I-Built-My-Website_22204c83dd.jpg?_i=AA","keywords":["JAMStack"],"inLanguage":"en-US","copyrightYear":"2020","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/maya_shavin_how_i_built_my_website","url":"https:\/\/cloudinary.com\/blog\/maya_shavin_how_i_built_my_website","name":"Maya Shavin: How I Built My Website","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/maya_shavin_how_i_built_my_website#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/maya_shavin_how_i_built_my_website#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649719775\/Web_Assets\/blog\/Maya-Shavin-How-I-Built-My-Website_22204c83dd\/Maya-Shavin-How-I-Built-My-Website_22204c83dd.jpg?_i=AA","datePublished":"2020-10-26T17:50:33+00:00","description":"A Cloudinary senior front-end developer recounts how she rebuilt her Jamstack website with Nuxt, Tailwind CSS, Cloudinary, and Vercel.","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/maya_shavin_how_i_built_my_website#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/maya_shavin_how_i_built_my_website"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/maya_shavin_how_i_built_my_website#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649719775\/Web_Assets\/blog\/Maya-Shavin-How-I-Built-My-Website_22204c83dd\/Maya-Shavin-How-I-Built-My-Website_22204c83dd.jpg?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649719775\/Web_Assets\/blog\/Maya-Shavin-How-I-Built-My-Website_22204c83dd\/Maya-Shavin-How-I-Built-My-Website_22204c83dd.jpg?_i=AA","width":1540,"height":847},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/maya_shavin_how_i_built_my_website#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Maya Shavin: How I Built My Website"}]},{"@type":"WebSite","@id":"https:\/\/cloudinary.com\/blog\/#website","url":"https:\/\/cloudinary.com\/blog\/","name":"Cloudinary Blog","description":"","publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cloudinary.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cloudinary.com\/blog\/#organization","name":"Cloudinary Blog","url":"https:\/\/cloudinary.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","width":312,"height":60,"caption":"Cloudinary Blog"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":""}]}},"jetpack_featured_media_url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649719775\/Web_Assets\/blog\/Maya-Shavin-How-I-Built-My-Website_22204c83dd\/Maya-Shavin-How-I-Built-My-Website_22204c83dd.jpg?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/22203","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/users\/41"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/comments?post=22203"}],"version-history":[{"count":0,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/22203\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/22204"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=22203"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=22203"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=22203"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}